Franz Holzinger

Verse of the day

Denn es ist ein Gott und ein Mittler zwischen Gott und den Menschen, nämlich der Mensch Christus Jesus, der sich selbst gegeben hat für alle zur Erlösung, daß solches zu seiner Zeit gepredigt würde;
1 Timotheus 2:5-6

© Bible Gateway's Verse of the Day


autor  
14-08-09 13:59:45 Mehrere Einzelansichten
max **********
Guten Tag Zusammen,
ich versuche gerade in meinem Shop eine zweite SINGLE_VIEW einzurichten auf der nur Produkte einer bestimmten Kategorie angezeigt werden. Der Hintergrund ist, dass es Produkte gibt, die keinen Warenkorb erhalten dürfen, sondern nur per Anfrage bestellt werden.
Um dies zu realisieren, wollte ich diesen TS-Code in den Constants einsetzen:
plugin.tt_products.PIDItemDisplay {
10.type = sql
10.where = category = 56
10.pid = 71
}
Allerdings passiert dabei nichts. Liegt dieses Verhalten an einer bestimmten Version von tt_products. Ich benutze TYPO3 4.2.6 und tt_products 2.6.0. Bei der Suche im Netz haben sich zu dieser Problematik verschiedene Meinungen ergeben. Manche sagen es geht, manche nicht.
Oder gibt es noch einen anderen Weg zwei Single-Ansichten zu realisieren? Wenn ich den Weg der Umprogrammierung des Quellcodes gehen würde, welche Klasse müsste ich anfassen.

Falls sich jemand für diese Frage Zeit nimmt, tausend Dank im Voraus!
beste grüße
*max
15-08-09 19:33:18 Die Lösung
max **********
Ok, für alle die es interessiert, es gibt eine Lösung für mehrere Singleansichten nach Kategorie. Hier die Kurzform. Falls jemand mehr Unterstützung braucht der kann mir gerne eine Mail schreiben.
Erstmal: Es ist wichtig, dass ihr das TypoScript ins SETUP schreibt und nicht, wie in der Doku beschrieben, in die Constants! Das hat den Hintergrund, dass die PHP-Funktion, die für die Auswahl der PID zuständig, den WHERE Teil der SQL-Abfrage anscheinend nur aus dem Setup bekommt (hier kann mich Herr Holzinger natürlich gern berichtigen). Ich beziehe mich übrigens auf tt_products 2.6.0.

In der Klasse model/class.tx_ttproducts_page.php gibt es die Funktion getPID. Sie sieht so aus:

function getPID($conf, $confExt, $row, $rootRow=array()) {
$rc = 0;

if ($confExt) {
print_r($confExt); foreach ($confExt as $k1 => $param) {
$type = $param['type'];
$where = $param['where'];

$isValid = false;
if ($where) {
$wherelist = t3lib_div::trimExplode ('AND', $where);
$isValid = true;
foreach ($wherelist as $k2 => $condition) {
$args = t3lib_div::trimExplode ('=', $condition);
if ($row[$args[0]] != $args[1]) { $isValid = false;
}
}
} else {
$isValid = true;
}
if ($isValid == true) {
switch ($type) {
case 'sql':
$rc = $param['pid'];
break;
case 'pid':
$rc = intval($row['pid']);
break;
}
break; //ready with the foreach loop
}
}
} else {
if ($conf) {
$rc = $conf;
} else {
global $TSFE;

$rc = ($rootRow['uid'] ? $rootRow['uid'] : $TSFE->id);
$rc = intval($rc);
}
}
return $rc;
}

Achtet darauf, dass sie bei euch genauso aussieht. Wenn nicht, kopiert den Methodenrumpf in euren Quellcode.

Nun nun noch die TypoScript-Anweisung ins SETUP:
plugin.tt_products.PIDItemDisplay {
10.type = sql
10.where = category = 56
10.pid = 71
}
Die Kategorie und und die pid natürlich noch mit euren Werten versehen und es klappt. Falls ihr trotzdem noch Probleme haben solltet, probiert die Funktion getPID zu debuggen. Schaut welche Werte übergeben werden usw.

Bei Fragen, wie gesagt, helfe ich gerne weiter.

beste grüße
*max
15-08-09 23:18:55 tt_products 2.6.1
Franz Holzinger
Vielen Dank für den Code. Er sieht gleich aus, wie jener aus tt_products 2.6.1. Oder gibt es hier einen Unterschied/Verbesserungsvorschlag?

Grüße
Franz
16-08-09 16:34:32 Das kann ich nicht sagen
max **********
Hallo Franz,

ich weiß nicht, ob es der gleiche Code ist wie bei 2.6.1, da ich bisher nur 2.6.0 verwendet habe. Übrigens kann natürlich das print_r nach if ($confExt) { natürlich raus.

Der Code ist nur als Hilfe gedacht, falls jemand die gleichen Probleme hat wie ich. Aber witzig wäre es schon, wenn unwissentlich zweimal der gleiche Quellcode entsteht... :)

Grüße
*max
21-10-09 16:35:48 Abfrage nach pid?
Daniel Völkel
Da ich bei mir mit pages_as_category = 2 arbeite, würde ich gerne anhand der pid der Produkte auf eine andere Einzelansicht wechseln.

Folgender Code wurde ins Setup eingefügt:

plugin.tt_products.PIDItemDisplay {
10.type = sql
10.where = pid = 146
10.pid = 163
}

Leider bringt weder der Standard-Code aus 2.7.1 oder der hier abgebildete ein Ergebnis. Es scheint mir so, als würde überhaupt keine SQL-Abfrage gestartet.

Kennt ihr das Problem eventuell?
21-10-09 16:54:36 Log It
max **********
Hi Daniel,

versuche doch mal in der Funktion, die ich oben beschrieben habe, mal ein print oder echo. Dann siehst du, ob die Funktion angesprochen wird. Wenn dies nicht passiert, dann fehlt hier wohl die Unterstützung.
Mir erscheint die Abfrage auch ein wenig unlogisch...
Du nimmst die Pid, auf der deine Produkte liegen und willst auf ein eine SingleView-Pid, oder? Warum erstellst du nicht ein Template auf jeder Listenansicht deiner Produkte, worin du per TS einfach eine SingleView angibst.

plugin.tt_products.PIDItemDisplay = 13 #Beispiel

22-10-09 09:28:03 Guter Tipp
Daniel Völkel
Hi Max,

natürlich wird die Funktion nicht angesprochen. Auf deine Idee bin ich gar nicht gekommen, da habe ich eindeutig zu kompliziert gedacht. :)

Grüße,
Daniel
24-10-09 15:11:26 Schreibweise
Franz Holzinger
plugin.tt_products.PIDitemDisplay {
10.type = sql
10.where = pid = 146
10.pid = 163
}
< Zurück zum Forum