Hallo,
auf einer Seit habe ich zwei Plugins unterschiedlicher Extensions.
Die erste Extension stellt dabei Datensätze dar und die zweite zeigt passende Kommentare.
Nun muss ich im zweiten Plugin eine Link erzeugen um einen weiteren Parameter zu übergeben, dabei müssen die PIvars des ersten Plugins aber erhalten bleiben.
Angenommen ich habe folgende URL:
http://127.0.0.1/cms/index.php?id=79&tx_jgbookshelf_pi2[bookid]=1
und nutze folgenden PHP-Code:
$this->pi_linkTP_keepPIvars ('some Link', array ('newParam' => 'test'));
bekommen ich folgenden Link:
http://127.0.0.1/cms/index.php?id=79&no_cache=1&tx_jgratedcomments_pi1[newParam]=test
Das heißt die PIvar des anderen Plugins ist weg...
Das klingt für mich irgendwie nicht richtig. Sollten nicht ALLE PIvars erhalten bleiben? Ich kann doch nicht ahnen welche weiteren Parameter noch von anderen Plugins übergeben werden...
Wie kann ich das sicher programmieren, so dass immer alle PIvars erhalten bleiben?
Vielen Dank für Eure Hilfe,
Jan
Hallo,
also für meine Extension habe ich das gelöst... Allerdings ist es wieder eine "Handmade"-Lösung und ich frage mich ob es nicht eine "Typo3-konforme" Lösung gibt...
Hier jedenfalls meine Lösung, evtl. hilft es jemanden. Kritik ist auch erwünscht...
function pi_linkTP_keepAllPIvars ($str,$overrulePIvars=array(),$cache=0,$altPageId=0) {
$params = t3lib_div::_GET();
$new_para = array();
foreach ($params as $pi => $piVars) {
if (is_array ($piVars)) {
foreach ($piVars as $key => $value) {
$new_para[trim($pi,'][').'['.$key.']'] = $value;
}
}
}
debugster ($this->prefixId,'PREFIX');
foreach ($overrulePIvars as $key => $value ) {
$new_para[$this->prefixId.'['.$key.']'] = $value;
}
debugster ($new_para,'Parameter');
$res = $this->pi_linkTP($str,$new_para,$cache,$altPageId);
return $res;
}
Grüße,
Jan
Das klingt für mich irgendwie nicht richtig. Sollten nicht ALLE PIvars erhalten bleiben? Ich kann doch nicht ahnen welche weiteren Parameter noch von anderen Plugins übergeben werden...
Das hat wohl etwas mit dem Namespace zu tun. Jede Extension hat ihren eigenen Namespace. So auch die PiVars. Andere PiVars haben darin nix zu suchen.
Hallo,
schon klar, dass ich im Plugin nicht ohne weiteres auf die anderen PIvars zugreifen kann. Aber wenn ich in einem Plugin einen Link auf die eigene Seite erstelle um einen zusätzliche Parameter anzuhängen, kappe ich mit der jetzigen (mir bekannten) Methode alle anderen Plugins.
In meinem Fall bliebe dann die Seite einfach leer... da das erste Plugin keinen Eingabewert mehr bekommt...
Gerade wegen der Namespaces und der Unabhängigkeit der Plugins voneinandern sollten doch die anderen PIVars autmatisch durchgeschleift werden, oder?
Grüße,
Jan
In meinem Fall bliebe dann die Seite einfach leer... da das erste Plugin keinen Eingabewert mehr bekommt...
Gerade wegen der Namespaces und der Unabhängigkeit der Plugins voneinandern sollten doch die anderen PIVars
Tja, hättest Du mal mit POST-Variablen gearbeitet, wie das auch alle anderen Profis tun, dann hättest Du auch solche Probleme nicht.
[1] http://www.diffen.com/difference/Get_vs_Post
Tja, hättest Du mal mit POST-Variablen gearbeitet, wie das auch alle anderen Profis tun, dann hättest Du auch solche Probleme nicht.
Nunja, vielen Dank für diesen konstruktiven Beitrag.
Der Unterschied zwischen POST und GET ist mir durchaus bekannt. Wieso das das Problem lösen würde allerdings nicht.
Interessanterweise verwenden auch "professionelle" Plugins wir tt_news und (ja sogar!) diese Forum (mm_forum) GET-Übergaben.
Mit freundlichen Grüßen,
Jan Gebauer
Interessanterweise verwenden auch "professionelle" Plugins wir tt_news und (ja sogar!) diese Forum (mm_forum) GET-Übergaben.
naja, tt_news als "profesionelle" Extensions zu bezeichnen halte ich für etwas gewagt. :p