Joomla! Forum Schweiz wird Teil der D-A-CH Community

Nach vielen Jahren als zentrale Anlaufstelle für Fragen rund um Joomla! in der Schweiz wird das Joomla! Forum Schweiz künftig als Archiv weitergeführt.

Die Joomla!-Communities aus Deutschland, Österreich und der Schweiz arbeiten heute enger denn je zusammen. Deshalb bündeln wir künftig auch den deutschsprachigen Support und Austausch an einem gemeinsamen Ort im Joomla! D-A-CH Forum.

Für neue Fragen, Diskussionen und den Austausch mit der Community nutzt bitte ab sofort:

forum.joomla.de

Das Joomla! Forum Schweiz bleibt weiterhin bestehen und wird als Archiv im Lesemodus erhalten. Die vielen Beiträge, Lösungen und Erfahrungen aus den vergangenen Jahren bleiben damit weiterhin zugänglich und über die Suche auffindbar.

Wir bedanken uns herzlich bei allen Mitgliedern, Moderatoren und Helfern, die das Schweizer Joomla! Forum über viele Jahre mit ihrem Wissen und ihrem Engagement geprägt haben.

Wir sehen uns im Joomla! D-A-CH Forum!

Brauche Hilfe bei setUserState in J1.5

  • nowasabi
  • Autor
  • Neues Mitglied
  • Neues Mitglied
Mehr
10 Juli 2008 13:24 #15070 von nowasabi
Brauche Hilfe bei setUserState in J1.5 wurde erstellt von nowasabi
Hi ich bin so langsam echt frustriert. Ich versuch eine (Fehler)meldung von einer Seite auf die andere zu bringen und irgendwie gehts nicht, aber ich hatte es auch schon, dachte ich... der reihe nach.

Ich programmiere im MVC Schema (ich versuchs ;-) ...

view registration: registerForm: benutzer registriert sich mit Name, submit geht mit task=register ab..
controller: function register() macht was zu tun ist und setzt Meldung (Fehler oder auch Erfolg) und
leitet weiter an einen anderen View. mit $mainframe->redirect(JRoute::_('index....view=activation);
view activation nimmt die Meldung (tja, woher) und zeigt sie an (übergibt sie an das Layout mit assignRef('message', $message); Layout zeigt dann echo $this->message; an.

Ich möchte die übergabe nicht über die URL machen,
weils zu viel ist, weils ein object werden soll, weils den benutzer nichts angeht,weil ..

aber wie mach ichs?
ich habs mit setUserState('componente.message', $message) probiert, aber es kommt nix an.
(geht das mit redirect denn?)

wie kann ich vom Controller an eine View Daten übergeben ?
hilfe !
Wolfgang
Mehr
10 Juli 2008 20:05 #15079 von Tribal6
Hi Wolfgang

"Früher", zu Zeiten der unsicheren Erweiterungen, machte man das direkt mit dem $_POST oder dem $_REQUEST-Array, das mit entsprechenden Daten bestückt war (ist), und genau da können Variablenwerte manipuliert werden, sollten sie nicht geprüft werden.

Nun, mit der neuen Joomla-API ist das alles schon eingebaut, um an Request-Variablen ranzukommen, und auch noch zusätzliche zu setzen, benutzt man das JRequest-Objekt: JRequest::setVar() und JRequest::getVar(), wobei man den Inhalt beim "holen" auch gleich noch "filtern" kann: mit den Methoden getVar(), getBool(), getWord(), getInt().....
Die entsprechenden Methoden siehst du hier:
--ALTER LINK WURDE ENTFERNT--

...und hier hätt ich dir noch ein Beispiel einer Controller-Funktion, die solche Varibalen liest und setzt:

function update() {
$cid = JRequest::getVar('cid', 0);
$id = $cid[0];
JRequest::setVar('id', $id);
JRequest::setVar('update', true);
JRequest::setVar('view', 'file');
parent::display();
}


...und die kannst du dann in der View mit eben den obigen "get...." Methoden wieder auslesen, und entsprechend verwenden.

Cheers
Roger

Tue das, was du kannst, mit dem was du hast, da wo du bist.
  • nowasabi
  • Autor
  • Neues Mitglied
  • Neues Mitglied
Mehr
10 Juli 2008 20:55 #15080 von nowasabi
Hi Roger,

was macht denn :

parent::display();

genau?
was ist denn der Unterschied zu

$this->redirect('index.php?....&view=file'); /* innerhalb des controllers */

und ist das dann das gleiche wie

$mainframe->redirect('index.php?....&view=file');

?

Thanks erstmal, ich werds gleich mal ausprobieren ....
Wolfgang
Mehr
10 Juli 2008 21:16 #15081 von Tribal6
Hi

Also:

parent::display();

Ruft die display()-Methode der geerbten Klasse auf, JView ;)
(guckst du: --ALTER LINK WURDE ENTFERNT-- ):
"Execute and display a template script."



$mainframe->redirect();
und
$this->setRedirect();
rsp.
$this->redirect();

machen im Prinzip dasselbe, nur das die letzteren zwei nur innerhalb des Controllers aufgerufen werden können, da sich das $this ja auf das eigene Objekt bezieht, und das Methoden der geerbten JController-Klasse sind. $mainframe->redirect kannst du überall einsetzen, wo auch das $mainframe-Objekt "sichtbar" ist (z.B. in einem Login-Modul...)

Cheers
Roger

Tue das, was du kannst, mit dem was du hast, da wo du bist.
  • nowasabi
  • Autor
  • Neues Mitglied
  • Neues Mitglied
Mehr
10 Juli 2008 22:09 #15082 von nowasabi
Hi Roger,
es geht jetzt:

JRequest::setVar('message', $message);
JRequest::setVar('view', 'registration');
parent::display();

führt zum ergebnis, die view kann die message lesen..
dass das redirect im prinzip das gleiche ist, kann ich noch nicht so ganz glauben, denn mit


JRequest::setVar('message', $message);

//JRequest::setVar('view', 'registration');
//parent::display();

$return = JRoute::_('index.php?option=com_checkit&view=registration');
$mainframe->redirect( $return );

gehts nicht !!!
tja, is wohl doch ein kleiner Unterschied

Ciao Wolfgang
Mehr
10 Juli 2008 22:29 #15085 von Tribal6
Hi

Ich sagte

$mainframe->redirect kannst du überall einsetzen, wo auch das $mainframe-Objekt "sichtbar" ist


...und wenn du das im controller einsetzen willst, musst du es nur mit

"global $mainframe;"

..auch "sichtbar" machen, da ja bekannterweise Methoden/Funktionen einen anderen Namensraum haben ;)

Cheers
Roger

Tue das, was du kannst, mit dem was du hast, da wo du bist.
  • nowasabi
  • Autor
  • Neues Mitglied
  • Neues Mitglied
Mehr
10 Juli 2008 22:37 #15086 von nowasabi
:o
OOPs missverständnis !
mit : geht nicht meine ich NICHT, dass der redirect nicht ausgeführt wird!
ich habe global $mainframe weiter oben im code, nur hier nicht gelistet.

was ich MEINTE ist: Die View (registration) wird korrekt angezeigt, nur die variable message ist leer !!

sorry, hab mich echt schlecht ausgedrückt.

hast du eine idee, was da falsch ist? sonst ist der code identisch.
Wolfgang
  • nowasabi
  • Autor
  • Neues Mitglied
  • Neues Mitglied
Mehr
11 Juli 2008 17:44 #15108 von nowasabi
Nachdem die Funktionionalität mit

JRequest::setVar('message', $message);
JRequest::setVar('view', 'registration');
parent::display();

ging, musste ich feststellen, dass die URL ziemlich verstümmelt war (das stand: &view=..)
hab ich kurzerhand von 1.5.2 auf 1.5.4 neu installiert und nochmal von vorne angefangen. Dabei hab ich in der
com_user eigentlich gefunden, was ich suchte:

function remindusername()
{
// Check for request forgeries
JRequest::checkToken() or jexit( 'Invalid Token' );

// Get the input
$email = JRequest::getVar('email', null, 'post', 'string');

// Get the model
$model = &$this->getModel('Remind');

// Send the reminder
if ($model->remindUsername($email) === false)
{
$message = JText::sprintf('USERNAME_REMINDER_FAILED', $model->getError());
$this->setRedirect('index.php?option=com_user&view=remind', $message);
return false;
}

$message = JText::sprintf('USERNAME_REMINDER_SUCCESS', $email);
$this->setRedirect('index.php?option=com_user&view=login', $message);
}


War mir neu, daß man mit setRedirect (....,$message) die Nachricht übergeben kann.
Allerdings hat sich da meines Erachtens ein Fehler eingeschlichen:

Es sollte wohl
setRedirect(JRoute::_('index.php?option=com_user&view=...'), $message) heissen !

Wo finde ich denn die offizielle Buglist ?
Mehr
11 Juli 2008 18:47 #15113 von Tribal6
Natürlich auf joomla.org ;)
In der Navi links bei 1.5 auf "Report a Bug" führt dich dahin:

--ALTER LINK WURDE ENTFERNT--

Cheers
Roger

Tue das, was du kannst, mit dem was du hast, da wo du bist.
Moderatoren: Tribal6RePaoDragonlordChris Hoefligerpascaleadiheutschi.ch
Powered by Kunena Forum

Joomla! Verband Schweiz - Mitglied werden