Shopsystem ShopPilot
ShopPilot => SSP - Shop Server Pages => SSP Bibliothek => Thema gestartet von: dobra am Mai 15, 2015, 15:55:30
-
Die Sortierung nach Preis (Beispiel im Demo-Styleshop) funktioniert mit sort.ipl nicht richtig wenn man kleine Preise hat und beim sortieren auch die Kommastellen berücksichtigt werden müssen.
Lösung:
Callback::AddSQLCondition in std.all anpassen
original (berücksichtigt die Kommastellen nicht
if ($sfield == 1) { ## sortieren nach Preis
if ($sdirection == 1) {
$sqlstr = " ORDER BY ($pre\ITEM.PRICE + 0.0) ASC ";
} else {
$sqlstr = " ORDER BY ($pre\ITEM.PRICE + 0.0) DESC ";
}
}
ändern auf (Kommastellen werden berücksichtigt)
if ($sfield == 1) {
if ($sdirection == 1) {
$sqlstr = " ORDER BY ((REPLACE($pre\ITEM.PRICE,',','.'))+0.0) ASC ";
} else {
$sqlstr = " ORDER BY ((REPLACE($pre\ITEM.PRICE,',','.'))+0.0) DESC ";
}
}
-
sehr viel eleganter (und wesentlich schneller, da die Seite nicht neu geladen werden muss) geht das Sortieren mit jQuery :)
Voraussetzung:
jQuery ist bereits eingebunden
Bei der Produktausgabe sind die erforderlichen Klassen definiert
(hier im Beispiel rot markiert - kann natürlich auch anders heißen - dann muss das in Script angepasst werden)
<ul id="products">
<!--spmacro:loopitem-->
<li class="sortit">
<h3>produkt</h3>
image, ergaenz, etc ##beliebig
<span class="price">__preis__</span>
</li>
<!--spmacro:enditem-->
</ul>
function Sorter(listSelector,itemSelector,orderSelector,order)
{
var items=$(listSelector).clone(true).find(itemSelector);
items.sort(($.grep(items,function(e){return isNaN($(e).find(orderSelector).eq(0).text());}).length)
?(function(a,b)
{
var c=(order=='desc')?[b,a]:[a,b];
return ($(c[0]).find(orderSelector).eq(0).text()>$(c[1]).find(orderSelector).eq(0).text())?1:-1;
})
:(function(a,b)
{
var c=(order=='desc')?[b,a]:[a,b];
return ($(c[0]).find(orderSelector).eq(0).text()-$(c[1]).find(orderSelector).eq(0).text());
})
);
for(var i=0;i<items.length;++i)
{
$(listSelector+' '+itemSelector).eq(i).replaceWith(items[i]);
}
}
function price_desc() {
Sorter('#products','li.sortit','.price','desc');
}
function price_asc() {
Sorter('#products','li.sortit','.price','asc');
}
function art_desc() {
Sorter('#products','li.sortit','h3','desc');
}
function art_asc() {
Sorter('#products','li.sortit','h3','asc');
}
Ausgabe mit
Artikel: <a href="javascript:void(0)" onclick="art_asc();">aufsteigend</a> ### Text oder Image sowie natürlich beliebige Formatierung möglich
<a href="javascript:void(0)" onclick="art_desc();">absteigend</a>
Preis: <a href="javascript:void(0)" onclick="price_asc();">aufsteigend</a>
<a href="javascript:void(0)" onclick="price_desc();">absteigend</a>
-
Zur Soritierung mit jQuery sei aber noch angemerkt, dass das nur sauber funktioniert wenn man alle Artikel auf einer Seite anzeigt.
Wenn man mit __weitereseiten__ arbeitet jedoch nicht, da dann immer nur der sichtbare Teil neu sortiert würde.