Was ist der Unterschied zwischen diesen beiden Einstellungen?
plugin.tt_products {
pid_list = 47
PIDstoreRoot = 47
}
Laut Doku ist pid_list das der SysFolder für Kategorien und Produkte (also auch "Stock" = Lager, oder?):
tt_products Manual schriebThe pids from where to fetch categories, products and so on. Default is the current page. Accepts multiple pid's separated by comma.
PIDstoreRoot ist hingegen nur für das Lager.
tt_products Manual schriebPID for store root. This is the PID of the rootPage of the store. If not set the store will operate over all pages from the root of the site. But if the site has many pages, performance may improve.
Ich hab beide auf denselben Wert gestellt, weil ich einen SysFolder für meine Kategorien und Produkte benutze. Aber ist das denn richtig? Verstehe den Unterschied nicht ganz.
PIDstoreRoot
ist die Einstiegseite deines Shopfolders.
root sollte doch eigentlich aussagekräftig sein 😉
Hille
Danke, Hille… so würde ich das auch sehen.
Aber ich erkenne dann den Sinn von "pid_list" nicht. Diesen Parameter kenne ich aus anderen Extensions (z.B. tt_news) als Angabe für den "Ausgangspunkt" der Datensätze (wie Produkte, Artikel, Kategorien etc.). Den kann man über TS setzen, damit man nicht in jedem Plugin-Seiteninhalt den Ausgangspunkt nochmal setzen muss.
Für mich ist beides irgendwie dasselbe. Ich habe auch beide Variablen auf denselben Wert gestellt… aber eigentlich ohne zu wissen wieso 😉
Empfehlung: Wer ein bisschen PHP kann, einfach den Quellcode nach den entsprechenden Werten durchsuchen und mit debug() mal ein paar Werte ausgeben. Dann wirds klar #giggle#
Hmmm, wie sage ich, dass das Debuggen losgehen soll? Hab im Install-Tool folgende Einstellungen vorgenommen:
$TYPO3_CONF_VARS['SYS']['devIPmask'] = '*';
$TYPO3_CONF_VARS['FE']['debug'] = '1';
Kommt leider keine Debugging-Info… Kann man Debugging für Extensions nicht auch im TS einstellen?
Nachtrag: In der .php Klasse zu tt_products wird nur ein einziges Mal die debug() Funktion aufgerufen. Du meinst, ich kann an beliebigen Stellen eigene debug() Aufrufe starten und bei aktiviertem Debugging werden mir dann meine Meldungen ausgegeben?
Falls du mir allerdings einfach die Lösung nennen könntest, wäre ich dir sehr verbunden. Weil: ich versteh's halt einfach nicht.
Auch TYPO3 ist ein ganz normales "PHP-Skript", du kannst jederzeit alles tun.
Wenn du Schwierigkeiten mit debug() hast (funktioniert in der Standardeinstellung nur auf localhost/127.0.0.1), kannst du die PHP-Funktion var_dump() verwenden.
Is mir schon klar dass TYPO3 auch nur ein PHP-Skript ist…
Weißt du nun was der Unterschied zwischen PIDstoreRoot und pid_list ist oder nicht?
Ohne unhöflich sein zu wollen… aber auch du bringst mich hier grad kein Stück weiter. Hab das Gefühl, dass alle nur klug labern, aber keiner es genau weiß… sonst könnte man das ja auch einfach hinschreiben und nicht in Rätseln sprechen, oder?
Selbst wenn ich mir ein paar Sachen mit debug() ausgeben lasse, verrät mir debug() noch lange nicht die Antwort auf meine Frage. Sorry, wenn ich nochmal nachhaken muss, aber wer weiß es?
Also labern tun hier im Forum mit Sicherheit viele. Nur musst du auch sehen, dass das alle hier freiwillig tun. Wenn also niemand eine präzise Antwort hat, dann musst du dich eben mit den Hinweisen selbst auf den Weg machen und schauen, wo die fraglichen Parameter im Quellcode verwendet werden und was eine Änderung der Werte jeweils bewirkt. Dass ein einfaches debug() dir nicht immer gleich das Geheimnis erschließt, sollte ja klar sein. Aber ein bisschen mehr Eigenengagement solltest du schon bringen, schließlich hast DU ein Problem, nicht wir ...
Der Quellcode von tt_products ist verwuschtelt, keine Frage. Aber mit ein bisschen PHP-Wissen und OOP-Erfahrung entlockt man auch diesem Skript seine Geheimnisse.
PHP und das Skript sind nicht mein Problem. Ich kann erkennen dass PIDstoreRoot optional ist. Wenn diese PID nicht angegeben wird, durchsucht tt_products von der "rootLine" aus begonnen alle Seiten. Es hört erst auf, wenn die Bedingung $row['doktype'] == 1 stimmt (ich weiß nicht was 'doktype' aussagt, vielleicht ob's ein SysFolder ist).
Wenn man diese Angabe also macht, werden nicht erst alle Seiten durchsucht und tt_products ist schneller fertig.
Und dann kommt diese Zeile hier:
$this->pid_list = ($pid_list ? $pid_list : $config['storeRootPid']);
Wenn also pid_list gesetzt wurde, wird dieser Wert genommen, ansonsten eben PIDstoreRoot (wird weiter oben nur in den Begriff 'storeRootPid' umgewandelt).
$config['storeRootPid'] taucht anschließend nie wieder auf. Es wird meiner Meinung nach in $this->pid_list umgewandelt, wenn es denn da ist. Falls man aber pid_list im TS Setup angegeben hat, wird stattdessen gleich der Wert von pid_list verwendet.
Es scheint sich also eine rudimentäre Variable zu handeln, die vielleicht aus Kompatibilitätsgründen nochmal übernommen wurde. Sie scheint ebenso wie pid_list einfach nur den Ausgangspunkt zu beschreiben, der festlegt wo sich die Produkte, Artikel etc. befinden.
Mit meiner Frage wollte ich einfach nochmal auf Nummer sicher gehen.
Prima, tolle Antwort! So genau hätte es wahrscheinlich nicht einmal Flink gewusst #giggle#
Mich würde aber noch interessieren, was $row['doktype'] == 1 aussagt. Ich kann daraus nicht schließen, wo tt_products mit dem Suchen aufhören würde.
Es ist etwas verwirrend, aber vielleicht könnte Flink hierzu mal ein Wort verlieren:
Wenn man PIDstoreRoot nicht angibt, aber dafür pid_list, dann zählt der Wert von PIDstoreRoot nicht mehr (meine Auffassung). Weshalb wird dann trotzdem beim Fehlen von PIDstoreRoot erstmal der gesamte Seitenbaum durchsucht, um eine PID festzustellen, die im Anschluss sowieso verworfen wird, weil pid_list eine höhere Priorität hat?
Das ist doch irgendwie Blödsinn. Oder einfach nur (m)ein Denkfehler. Also bin ich ja gezwungen, PIDstoreRoot anzugeben (sonst leidet die Performance). Intern wird mit $this->pid_list weiter gearbeitet, was ja auch üblich ist.
Demnach könnte ich also pid_list weg lassen, müsste dafür aber der Performance halber PIDstoreRoot angeben. Allerdings ist der Name pid_list gebräuchlicher. Es besteht die Frage, welches quasi veraltet und welches für die Zukunft gedacht ist.