Zum Inhalt springen

lösung für LINK_PREV_SINGLE / LINK_NEXT_SINGLE problem

Erstellt am 13. November 2005 · 1 Antwort · letzte Antwort am 15. November 2005

Tags: Tipp

hubertg ·

hallo,

ich habe in meiner seite (http://p9394.typo3server.info) das tt_products plugin im einsatz.
ich habe eine seite mit einer list-view und dann jeweils eine seite für die details.
die details-seite enthält die marker
###LINK_PREV_SINGLE### und ###LINK_NEXT_SINGLE###
um einen link auf das nächste bzw. vorige produkt einzufügen.

dabei gibts allerdings einen fehler, wenn die produkte nicht in der reihenfolge der uid's bzw. itemnumber in der tabelle stehen. das ergebnis sind dann falsche "vorige" bzw. "nächste" artikel.

beispiel:
beispiel-table tt_products
uid produkt
1 test1
4 test4
2 test2
3 test3
5 test5

select from tt_products where uid > 2

zurück kommt 4,3,5 (in der reihenfolge, weil's so in der db steht!).

also wird fälschicherweise 4 als das nächste produkt angezeigt, richtig wäre natürlich 3. bei den uid's gibts den fehler normalerweise eh nicht, aber die itemnumber ist ja frei wählbar!

ich hab mir das im code angeschaut und folgende lösung gefunden, ich habe zwei variablen definiert $prevOrderby und $nextOrderby, die man dann beim exec_SELECTquery als order-by anhängt.

damit werden dann immer wirklich die nächsten bzw. vorigen artikel zurückgegeben! 😃

bei mir funktioniert die lösung jetzt. (es kann natürlich sein, dass es eine bessere lösung gibt !).

das ganze in php:

class.tx_ttproducts.php,v 1.83 2005/10/19
: function products_display (ab ca. zeile 600)

// Create string with correct order by clause.
// When selecting next or previous products, more than one
// product can be returned, that for, the sorting of the result is needed.
$prevOrderby = '';
$nextOrderby = '';				
if ($this->conf['orderByItemNumberSg']) {
   $prevOrderby= 'itemnumber DESC';
} else
{
  $prevOrderby = 'uid DESC';
}
if ($this->conf['orderByItemNumberSg']) {
  nextOrderby= 'itemnumber ASC';
} else
{
  $nextOrderby = 'uid ASC';
}

die beiden exec_SELECT_query's müssen dann noch so geändert werden:

$resprev = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'tt_products', $queryprev,'', $prevOrderby);

$resnext = $GLOBALS['TYPO3_DB']->exec_SELECTquery('*', 'tt_products', $querynext, $nextOrderby);

ich hoffe, ich habe mich verständlich ausgedrückt .... #paralyzed#
wenn ich die ganze php-klasse posten oder mailen soll, bitte melden!

lg, hubert 😃