Nach einigen Tests konnte ich das Problem replizieren:
** Ein Formular leitet zu einer Ansicht ohne Menüelement oder zu sich selbst relativ zu einer URL wie dieser um:
Komponente / meine Komponente / meine Ansicht
(Es spielt keine Rolle, ob die Ansicht einen Menüpunkt enthält oder nicht, dies ist nur dummes Joomla-Routing.) **
Daher muss Folgendes getan werden, um den Fehler zu vermeiden:
1) Die Ansicht muss mit einem Menüpunkt im Joomla-Backend verknüpft sein
2) Die URL zum Formular im Frontend sollte / menu-alias sein
3) Die Formularaktion sollte nicht zu einer anderen Ansicht umleiten, sondern leer sein
4) Das Formular sollte versteckte Eingaben für die Aufgabe enthalten
Dann funktioniert Ihre Post- und Speicherumleitung im Controller wie ein Zauber, da Sie im Kontext des Menüelements (URL) arbeiten.
Wenn Sie jedoch zu einer anderen Ansicht oder über JRoute zu derselben Ansicht umleiten, ohne die aktuelle Element-ID zu speichern, verlassen Sie den Kontext des Menüelements ("component / mycomponent / myview").
Dies passiert häufig in Joomla, da das aktuelle Routersystem die angegebene URL nicht mit den Menüelementen in der Datenbank vergleicht. Um dies zu verhindern, können Sie die folgenden Aktionen ausführen:
1) Erweitern Sie den Router Ihrer Komponente um eine Funktion, die die Menüelementtabelle nach der aktuellen URL durchsucht und die Element-ID / das Menüelement zurückgibt. (Ich habe das schon in der Vergangenheit gemacht und es funktioniert.)
2) Fügen Sie Ihrem Formular ausgeblendete Felder hinzu, die die Element-ID, die Aufgaben- und die Zielansicht enthalten (der richtige Weg in Joomla zur Route).
3) Leiten Sie URLs wie "component / mycomponent / myview" auf den richtigen URL-Pfad um.
4) Sie können Fallbacks in den Komponentenparametern für jede Ansicht festlegen. Dadurch wird die Element-ID mit den Komponentenparametern und nicht die Ansichten mit einem URL-Pfad verknüpft. Ansicht1 -> Dropdown -> Verkettetes Menüelement auswählen
In der Steuerung:
$ itemId = $ params-> get ($ mycurrentviewname);
Verwenden Sie nicht das $ menu-> getActive (), wenn dies aufgrund des dummen Joomla-Routingsystems nicht unbedingt erforderlich ist. Ich empfehle, den Menüpunkt irgendwie manuell einzustellen.
Zurück zur Frage:
Wie gesagt, Ihr Fehler steht irgendwo am Anfang des Routings. Dies kann einfach Ihre URL sein, die zu Ihrem Formular oder einer Weiterleitung führt, nachdem Sie das Formular an eine Ansicht ohne Menüelement oder an eine URL gesendet haben, die keine itemId enthält.
Beweis:
Fügen Sie dies Ihrer Speicherfunktion zwischen $ itemid und $ message hinzu:
if(empty($itemId)){
$itemId = $app->input->get('Itemid', $itemId,'int');
$active = $menu->getItem($itemId);
}
Fügen Sie dann "& task = save & Itemid = 101" zur URL hinzu, die Ihre Fehlermeldung zurückgibt. (Ändern Sie 101 in Ihre Artikel-ID!)
Sie sollten jetzt korrekt umgeleitet werden.