Ich habe eine kleine Extension, die im FE einen Link anzeigt. Der Link soll auf die momentane Seite zeigen und die Variable 'style' setzen. Der Link wird so erzeugt:
$this->piVars['style'] = 'standard';
$content.= $this->pi_linkTP_keepPIvars(htmlspecialchars($this->pi_getLL("pi_standard")),$this->piVars,true);
Damit der Inhalt der gleiche bleibt müssen natürlich alle Parameter mit übergeben werden. Leider funktioniert das nur mit der Sprache.
Wenn ich aber eine News aufrufe geht das nicht und das ist sehr schlecht, weil er dann einen Fehler bringt ("Keine news_id übergeben.").
Um den Unterschied zu verdeutlichen. Wenn ich eine News aufrufe sieht der Link so aus:
.../index.php?id=86&L=0&tx_ttnews[tt_news]=18&tx_ttnews[backPid]=2&cHash=f3c9582184
Den Link, den meine Extension produziert, sieht so aus:
.../index.php?id=86&L=0&tx_styleswitcher_pi1[style]=standard&cHash=9bd939c427
er müßte aber natürlich so aussehen:
/index.php?id=86&L=0&tx_ttnews[tt_news]=18&tx_ttnews[backPid]=2&tx_styleswitcher_pi1[style]=standard&cHash=9bd939c427
Was muss ich machen, damit dies geschieht? Ich dachte mit pi_linkTP_keepPIvars erreicht man das?
mit $this->pi_linkTP_keepPIvars kannst du nur auf die piVars deiner Extension zugreifen, nicht aber auf die von tt_news.
$this bezieht sich ja immer nur auf deine Klasse.
Du könntest z.B. aus $_GET die übergebenen tt_news-piVars auslesen und mit $this->piVars mergen.
danke. Wieder was gelernt.
aus $_GET die übergebenen tt_news-piVars auslesen und mit $this->piVars mergen
puh, wie mach ich das? Kannst du mir ein Beispiel geben?
Grüße
vom Prinzip:
$urlvars=array_merge(t3lib_div::_GP('tt_news'),$this->piVars);
t3lib_div::_GP('tt_news') muss ja ein array sein. Ich habe versucht dieses auszugeben, um zu sehen, was drin steht, aber es scheint immer leer zu sein.
Wie lese ich die Sachen aus?
$a = t3lib_div::_GET('tt_news');
//oder
$a = t3lib_div::_GP('tt_news');
Müßte dann in $a nicht "18" stehen, wenn der Link auf die Seite
..&tx_ttnews[tt_news]=18...
ist? Oder verstehe ich da was falsch?
Ein weiteres Problem ist, dass ich auch andere Extensions benutze, die Werte wie "&tx_meineextension_pi1[showUid]=3", die ebenfalls verloren gehen, wenn ich meinen Link benutze. Deswegen müsste ich es irgendwie allgemein halten.
steffenk schrieb
vom Prinzip:
$urlvars=array_merge(t3lib_div::_GP('tt_news'),$this->piVars);
fast richtig,
richtig richtig wäre es so:
$urlvars=array_merge(t3lib_div::_GET('tx_ttnews'),$this->piVars);
t3lib_div::_GET liest nur GET-Parameter aus, t3lib_div::_GP mischt diese mit eventuell vorhandenen gleichnamigen POST-Vars.
Mopps schrieb
vom Prinzip:Müßte dann in $a nicht "18" stehen
Nö, du liest ja ein verschachteltes Array ein,
das enthält key => val --> tt_news =>18
Mopps schrieb
Deswegen müsste ich es irgendwie allgemein halten
Daher mein Hinweis auf $_GET (und NICHT auf t3lib_div::_GET()!) ,
$_GET enthält sämtliche GET-Vars 😉
also irgendwie komm ich da auf keinen grünen Zweig. Wenn ich in meiner Extension mit "print_r($_GET)" die Sachen in $_GET ausgeben lasse, dann steht da alles drin was ich brauche um den Link zu erzeugen.
Wenn ich jetzt mit
$vars = array_merge($_GET,$this->piVars)
die Arrays zusammenfüge und mit
$this->pi_linkTP_keepPIvars(htmlspecialchars($this->pi_getLL("pi_kontrast")),$vars,true);
den Link erzeuge, dann kommt da leider Mist bei raus. Ist z.Bsp. in $_GET nur die id, dann mischt er alles und es kommt als Link:
.../id=5&tx_extension_pi1[style]=standard&tx_extension_pi1[id]=5&cHash=8e904c742e
Das "&tx_extension_pi1[id]=5" ist natürlich Blödsinn. Wenn viele Sachen in $_GET stehen, dann mischt er alles miteinander durch.
Was läuft falsch? Wie bekomme ich die überflüssigen Sachen weg?
Dann bau eine Logik ein.
Nimm die GET-Vars, durchlaufe Array und schmeiss die überflüssigen Sachen raus, dann kannst Du mergen.
Ich hab nur das Gefühl, dass in $_GET das richtige steht und das der ganze "Mix" durch das array_merge kommt. Gebe ich $_GET aus, wenn nur eine id und sonst nichts übergeben wurde, dann sieht das so aus:
Array ( [id] => 6 )
dann setze ich
$this->piVars['style'] = 'standard';
$linkvars = array_merge($_GET,$this->piVars);
Erst nach dem merge steht Unsinn drin und ich verstehe nicht warum, da merge doch einfach zwei arrays miteinander verbinden soll.