Autor Thema: Artikel sortieren nach Preis  (Gelesen 4561 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

Offline dobra

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1353
  • Lob: 18
Artikel sortieren nach Preis
« 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 ";
}
}


Linkback: https://www.shoppilot.net/pf/index.php?topic=1726.0
mfG
dobra

Offline dobra

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1353
  • Lob: 18
Re: Artikel sortieren mit jQuery
« Antwort #1 am: Mai 15, 2015, 19:03:22 »
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>

Offline ahe

  • Global Moderator
  • Sr. Member
  • *****
  • Beiträge: 435
  • Lob: 20
Re: Artikel sortieren nach Preis
« Antwort #2 am: Mai 18, 2015, 10:33:59 »
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.
MfG ahe


xx
Artikelreihenfolge nach Hersteller/Preis etc.

Begonnen von Andi

3 Antworten
6283 Aufrufe
Letzter Beitrag Januar 27, 2009, 14:32:28
von Andi
xx
Artikel sortieren

Begonnen von dobra

1 Antworten
4917 Aufrufe
Letzter Beitrag Februar 29, 2008, 14:11:56
von dobra
xx
EP: Preis aller Artikel im Subkatalog ändern

Begonnen von hop

1 Antworten
8412 Aufrufe
Letzter Beitrag August 11, 2006, 23:39:22
von admin
xx
je nach Tageszeit andere Artikel anzeigen

Begonnen von dobra

0 Antworten
4469 Aufrufe
Letzter Beitrag Februar 16, 2010, 19:45:46
von dobra