Eigene Komponente + Parameterübergabe
- Biomehaniker
-
Autor
- Neues Mitglied
-
Weniger
Mehr
01 Mai 2008 10:12 #13938
von Biomehaniker
Eigene Komponente + Parameterübergabe wurde erstellt von Biomehaniker
Hallo zusammen,
ich möchte meinem User erlauben in einer Komponente einen eigenen Filter zu nutzen.
Dafür übergebe ich an die URL einen Parameter z.B. ...&selfoptions=1 (und lasse die Seite komplett neu laden). Nur wie komme ich an diese variable wieder drann? Ich kann sie in der
.. com_test\site\views\test\tmpl\default.php
abfragen. Doch dort hilft sie mir ja nix. Ich bräuchte sie in
com_xxx\site\models\test.php
wie bekomme ich das hin?
Mir wurde gesagt ich kann sie via:
$option = JRequest::getVar('selfoptions', 1, GET); // oder POST,
im controller abgreifen. Da das MVC-Pattern noch komplett neu für mich ist beiße ich mir schon seit Stunden an dem Problem die Zähne aus
.
Ein kleines Beispiel würde mich da wesentlich weiter bringen, doch auch wenn wir einer erklären kann wie der Controller seine Daten an das Modul übermittelt. Momentan komme ich leider überhaupt nicht weiter
ich möchte meinem User erlauben in einer Komponente einen eigenen Filter zu nutzen.
Dafür übergebe ich an die URL einen Parameter z.B. ...&selfoptions=1 (und lasse die Seite komplett neu laden). Nur wie komme ich an diese variable wieder drann? Ich kann sie in der
.. com_test\site\views\test\tmpl\default.php
abfragen. Doch dort hilft sie mir ja nix. Ich bräuchte sie in
com_xxx\site\models\test.php
wie bekomme ich das hin?
Mir wurde gesagt ich kann sie via:
$option = JRequest::getVar('selfoptions', 1, GET); // oder POST,
im controller abgreifen. Da das MVC-Pattern noch komplett neu für mich ist beiße ich mir schon seit Stunden an dem Problem die Zähne aus
Ein kleines Beispiel würde mich da wesentlich weiter bringen, doch auch wenn wir einer erklären kann wie der Controller seine Daten an das Modul übermittelt. Momentan komme ich leider überhaupt nicht weiter
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Tribal6
-
- Offline
-
01 Mai 2008 11:19 #13940
von Tribal6
Tue das, was du kannst, mit dem was du hast, da wo du bist.
Tribal6 antwortete auf Re: Eigene Komponente + Parameterübergabe
Hi Du 
Idealerweise machst du das in der entsprechenden View, nicht im Controller (war schon spät, sorry).
Sagen wir mal, du willst von irgendwas Kategorien anzeigen, ev. mit einem Filter, vom User bestimmt:
Also, mit einem Link wird ein Controller "aktiviert", plus einem Userfilter (....index.php?option=com_deineKompo&c=cats&selfoptions=2)
Nehmen wir an, du hast einen controller der "cats.php" heisst. Dort machst du, nebst dem Constructor, eine Funktion rein die "display" heisst:
Dieser Code ruft die entsprechende View auf.
(.../components/com_deineKompo/views/cats/view.html.php)
Und dort initiirst du dann das dazugehörige Model, mit einem ev. User-Filter:
...und in ...view/cats/tmpl/default.php hast du dann die Daten deines Models mit $this->items zur Verfügung
Das MVC-Pattern in einem Satz wäre etwa so:
Link aktiviert Controller, Controller aktiviert View, View holt sich Daten aus Model und zeigt sie an.
Ich hoffe, das hilft dir einbisschen weiter, ansonsten einfach nachhaken.
Cheers
Roger
Idealerweise machst du das in der entsprechenden View, nicht im Controller (war schon spät, sorry).
Sagen wir mal, du willst von irgendwas Kategorien anzeigen, ev. mit einem Filter, vom User bestimmt:
Also, mit einem Link wird ein Controller "aktiviert", plus einem Userfilter (....index.php?option=com_deineKompo&c=cats&selfoptions=2)
Nehmen wir an, du hast einen controller der "cats.php" heisst. Dort machst du, nebst dem Constructor, eine Funktion rein die "display" heisst:
Code:
function display()
{
JRequest::setVar('view', 'cats');
parent::display();
}
(.../components/com_deineKompo/views/cats/view.html.php)
Und dort initiirst du dann das dazugehörige Model, mit einem ev. User-Filter:
Code:
function display($tpl = null)
{
$model = &$this->getModel(); //falls keine Argumente, wird ...models/cats.php referenziert
$filter = JRequest::getVar('selfoptions', 1, 'GET'); // Userfilter per GET oder POST
$items = $model->getDataList($filter); //deine Daten holen mit Filter für die DB-Query
$this->assignRef( 'items', $items ); //die Daten der View übergeben
parent::display($tpl); //falls $tpl null, anzeigen mit ...view/cats/tpl/default.php
}
Das MVC-Pattern in einem Satz wäre etwa so:
Link aktiviert Controller, Controller aktiviert View, View holt sich Daten aus Model und zeigt sie an.
Ich hoffe, das hilft dir einbisschen weiter, ansonsten einfach nachhaken.
Cheers
Roger
Tue das, was du kannst, mit dem was du hast, da wo du bist.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Biomehaniker
-
Autor
- Neues Mitglied
-
Weniger
Mehr
01 Mai 2008 16:46 #13947
von Biomehaniker
Biomehaniker antwortete auf Re: Eigene Komponente + Parameterübergabe
Aha... nun verstehe ich MVC auch endlich
. Vielen Dank. Bis jetzt habe ich immer alles in eine Datei gepackt und mittels switch zu den punkten gesprungen die für mein Programm notwendig waren...
Leider habe ich noch ein Problem mit der Umsetzung. Für den Anfang dachte ich das es am einfachsten ist eine bestehende Komponente umzubauen.Und zwar habe ich die Original Joomla 1.5 WebLinks Componente genommen.
Hier die von mir angepasste view:
Leider habe ich noch ein Problem mit der Umsetzung. Für den Anfang dachte ich das es am einfachsten ist eine bestehende Komponente umzubauen.Und zwar habe ich die Original Joomla 1.5 WebLinks Componente genommen.
Hier die von mir angepasste view:
Code:
// class WeblinksViewCategory extends JView (view.html.php)
class TestViewAlphabet extends JView
[code] {
function display( $tpl = null )
{
global $mainframe;
// Initialize some variables
$document = &JFactory::getDocument();
$uri = &JFactory::getURI();
$pathway = &$mainframe->getPathway();
// Get the parameters of the active menu item
$menus = &JSite::getMenu();
$menu = $menus->getActive();
// Get some data from the model
$items = &$this->get('data' );
$total = &$this->get('total');
$pagination = &$this->get('pagination');
$category = &$this->get('category' );
$state = &$this->get('state');
[/code]
Dort hole mir ja schon mittels
[code] $items = &$this->get('data' );[/code]
meine Ergebnisse aus der MySQL DB. Mit einer FOR Schleife zerlege ich dann das Ergebnis bzw. $item. Ich müßte diese view dann umbauen. Was ich nicht so ganz verstehe ist wieso sie
[code] $items = &$this->get('data' );[/code]
anstelle
[code] $items = $model->getDataList();[/code]
verwendet. Das müßte von mir nun ja angepasst werden. Doch irgendwie stehe ich auf dem Schlauch.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Tribal6
-
- Offline
-
01 Mai 2008 17:37 #13948
von Tribal6
Tue das, was du kannst, mit dem was du hast, da wo du bist.
Tribal6 antwortete auf Re: Eigene Komponente + Parameterübergabe
Du musst keineswegs das MVC-Pattern "durchziehen", es ist aber halt viel einfacher, bei einer bestehenden Erweiterung später Aenderungen vorzunehmen oder zusätzliche Funktionalität (View's) hinzuzufügen, dann ist alles schön in eigenen Ordnern. Die benötigte Ordnerstruktur ist schon gross, lohnt sich aber, wenn deine Erweiterung wächst und umfangreicher wird....
Das ist eigentlich dasselbe. Nur, das sämtliche Funktionen, die mit "get" Anfangen, automatisch in der entsprechenden View registriert werden, und über das Konstrukt &$this->get('DataList') "ansprechbar" sind. Das heisst, im selben Model muss eine Funktion existieren, die "getDataList()" heisst, und die eben auch über $model->getDataList() aufgerufen werden kann. Hat man mehrere solcher Funktionen im Model, könnte man die z.B. in der View dynamisch ansprechen (über Parameter oder switch-Statement, o.ä.), was vermutlich auch der Sinn der Sache wäre:
So gesehen geht also beides, und einmal mehr liegt die Entscheidung bei dir
Cheers
Roger
Code:
$items = &$this->get('data' );
$items = $model->getDataList();
Das ist eigentlich dasselbe. Nur, das sämtliche Funktionen, die mit "get" Anfangen, automatisch in der entsprechenden View registriert werden, und über das Konstrukt &$this->get('DataList') "ansprechbar" sind. Das heisst, im selben Model muss eine Funktion existieren, die "getDataList()" heisst, und die eben auch über $model->getDataList() aufgerufen werden kann. Hat man mehrere solcher Funktionen im Model, könnte man die z.B. in der View dynamisch ansprechen (über Parameter oder switch-Statement, o.ä.), was vermutlich auch der Sinn der Sache wäre:
Code:
$daten = JRequest::getVar('userOption', 'DataList');
$db_result = &$this->get($daten);
So gesehen geht also beides, und einmal mehr liegt die Entscheidung bei dir
Cheers
Roger
Tue das, was du kannst, mit dem was du hast, da wo du bist.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Biomehaniker
-
Autor
- Neues Mitglied
-
Weniger
Mehr
01 Mai 2008 20:50 #13951
von Biomehaniker
Biomehaniker antwortete auf Re: Eigene Komponente + Parameterübergabe
hey schon wieder vielen Dank
... das war sehr hilfreich. Habe gerade eine Funktion die in der view war erfolgreich in das Model verlagert...
nur hänge ich hier:
die Referenz:
--ALTER LINK WURDE ENTFERNT--
besagt das eigentlich $userkey den wert test hätte bekommen müssen, wenn userinput leer ist. Hat sie aber nicht.
... das war sehr hilfreich. Habe gerade eine Funktion die in der view war erfolgreich in das Model verlagert...nur hänge ich hier:
Code:
$userkey = JRequest::getVar('userinput', 'test', 'GET', 'STRING', JREQUEST_ALLOWHTML);
die Referenz:
--ALTER LINK WURDE ENTFERNT--
besagt das eigentlich $userkey den wert test hätte bekommen müssen, wenn userinput leer ist. Hat sie aber nicht.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Tribal6
-
- Offline
-
01 Mai 2008 20:59 #13952
von Tribal6
Tue das, was du kannst, mit dem was du hast, da wo du bist.
Tribal6 antwortete auf Re: Eigene Komponente + Parameterübergabe
Hi
So auf die Schnelle ?
$userkey = JRequest::getVar(userinput', 'test', 'GET', 'STRING', JREQUEST_ALLOWHTML);
Da fehlt ein einfaches Anführungszeichen, bei "userinput"....

Je nachdem was du da für eine Eingabe erwartest:
Wie wäre es denn mit JRequest::getWord() ?
Findest du hier:
--ALTER LINK WURDE ENTFERNT--
So auf die Schnelle ?
$userkey = JRequest::getVar(userinput', 'test', 'GET', 'STRING', JREQUEST_ALLOWHTML);
Da fehlt ein einfaches Anführungszeichen, bei "userinput"....
Je nachdem was du da für eine Eingabe erwartest:
Wie wäre es denn mit JRequest::getWord() ?
Findest du hier:
--ALTER LINK WURDE ENTFERNT--
Tue das, was du kannst, mit dem was du hast, da wo du bist.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Biomehaniker
-
Autor
- Neues Mitglied
-
Weniger
Mehr
01 Mai 2008 21:32 #13953
von Biomehaniker
Biomehaniker antwortete auf Re: Eigene Komponente + Parameterübergabe
ups... war ein copy und past fehler hier... im code sieht das wie mein geändertes Posting oben aus. Deckt sich mit dem Beispiel in der Joomla Referenz. Aber wie gesagt... verhält es sich leider nicht so wie gewünscht.
Ich erwarte da einen Buchstaben A... Z oder halt other (für zahlen). Da ist var schon ok.
Ich erwarte da einen Buchstaben A... Z oder halt other (für zahlen). Da ist var schon ok.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Tribal6
-
- Offline
-
02 Mai 2008 16:26 #13970
von Tribal6
Tue das, was du kannst, mit dem was du hast, da wo du bist.
Tribal6 antwortete auf Re: Eigene Komponente + Parameterübergabe
...das müsste eigentlich schon so funktionieren....
Tut es das immer noch nicht?
Tut es das immer noch nicht?
Tue das, was du kannst, mit dem was du hast, da wo du bist.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
Moderatoren: Tribal6, RePao, Dragonlord, Chris Hoefliger, pascale, adiheutschi.ch