Neuigkeiten
  • Die modified eCommerce Shopsoftware ist kostenlos, aber nicht umsonst.
    Spenden
  • Damit wir die modified eCommerce Shopsoftware auch zukünftig kostenlos anbieten können:
    Spenden
  • Thema: Warenkorb nach Artikelnummer sortieren?

    cjuestel

    • Neu im Forum
    • Beiträge: 3
    Warenkorb nach Artikelnummer sortieren?
    am: 06. Oktober 2014, 14:40:23
    Hallo liebe Modified-Experten
    Ich habe einen Shop aufgesetzt (v1.06) und möchte gern meinen Warenkorb nach der von mir vergebenen Artikelnummer sortieren (und die Reihenfolge der Artikel in der Bestellübersicht auch).
    Leider habe ich nun schon einige Zeit vergeblich versucht, mit Forenberichten und ähnlichen Aufgabenstellungen weiter zu kommen. Ich vermute, ich muss die includes/classes/shopping_cart.php anpassen, nur leider sind meine Versuche bisher gescheitert...
    Ich hoffe auf nun Eure Hilfe.
    Vielen Dank im Voraus

    Linkback: https://www.modified-shop.org/forum/index.php?topic=31214.0

    adiebler

    • Frisch an Board
    • Beiträge: 52
    • Geschlecht:
    Re: Warenkorb nach Artikelnummer sortieren?
    Antwort #1 am: 07. Oktober 2014, 11:44:51
    Hallo cjuestel,

    der Ansatzpunkt mit /includes/classes/shopping_cart.php war schonmal sehr gut. Über die Funktion get_products() dieser Klasse werden die Produkte aus dem Warenkorb ausgelesen. Da dies im ersten Schritt einzeln geschieht, kann man hier nicht mit "order by" nachhelfen, sondern kann erst kurz vor Ende die Sortierung beeinflussen:

    Code: PHP  [Auswählen]
        usort($products_array, function($a, $b) {
            return $a['model'] - $b['model'];
        });

        return $products_array;
    (/includes/classes/shopping_cart.php, ~ Zeile 545)

    Füge einfach mal den usort-Befehl vor dem vorhandenen return ein.
    (Es wird eine anonyme Funktion genutzt, daher erst am PHP 5.3! Hoffe, das ist gegeben.)

    VG, Alex

    PS: Später werden die Produkte in dieser Reihenfolge in die Datenbank order_products geschrieben. Von daher sollten keine weiteren Anpassungen notwendig sein.

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: Warenkorb nach Artikelnummer sortieren?
    Antwort #2 am: 07. Oktober 2014, 13:41:10
    Hallo Alex

    Kleine Anmerkung:

    Die Artikelnummer ist in der DB als varchar(64) abgelegt, besteht also nicht zwingend nur aus Ganz-Zahlen sondern kann auch andre Zeichen enthalten und wenn sie nur aus Ganz-Zahlen besteht sollte man, so denke ich den Typ hier ‘return $a['model'] - $b['model'];’ eindeutig festlegen.

    Gruss
    Hanspeter

    adiebler

    • Frisch an Board
    • Beiträge: 52
    • Geschlecht:
    Re: Warenkorb nach Artikelnummer sortieren?
    Antwort #3 am: 07. Oktober 2014, 14:03:11
    Hallo Hanspeter,

    perfekt aufgepasst. Das habe ich nicht ganz bedacht. Mit folgender Lösung wird auch alphabetisch sortiert:

    Code: PHP  [Auswählen]
        usort($products_array, function($a, $b) {
            return $a['model'] > $b['model'];
        });

    Die ausgelesenen Werte sind Strings und die kann PHP auch alphabetisch vergleichen.
    (Bzw. reine Zahlenwerte, die ja auch nur String sind "123" und alphanummerische Werte "A23X".)

    Danke nochmals für den Hinweis!  :thumbs:

    VG, Alex

    cjuestel

    • Neu im Forum
    • Beiträge: 3
    Re: Warenkorb nach Artikelnummer sortieren?
    Antwort #4 am: 08. Oktober 2014, 08:40:35
    Hallo Alex_CC, hallo Hanspeter,

    vielen Dank für die kompetente Hilfestellung. Klingt total logisch und verständlich. Leider tut sich absolut nichts... Müssen $a und $b noch deklariert werden? (man merkt, ich bin kein php-Profi...) Ich habe auch alles aus meiner Artikelnummer rausgeworfen, was keine Zahl ist (Bindestriche, Unterstriche). hat leider auch nichts genutzt.
    php-Version: 5.3.3-7+squeeze22 (Zend: 2.3.0)
    Die Funktion lautet nun folgendermaßen:
    Code: PHP  [Auswählen]
      function get_products() {
        global $xtPrice,$main;
        if (!is_array($this->contents)){
          return false;
        }

        $products_array = array ();
        reset($this->contents);
        while (list ($products_id,) = each($this->contents)) {
          if($this->contents[$products_id]['qty'] != 0 || $this->contents[$products_id]['qty'] !=''){
            $products_query = xtc_db_query("select p.products_id,
                                                   pd.products_name,
                                                   pd.products_description,
                                                   pd.products_short_description,
                                                   pd.products_order_description,
                                                   p.products_shippingtime,
                                                   p.products_image,
                                                   p.products_model,
                                                   p.products_price,
                                                   p.products_vpe,
                                                   p.products_vpe_status,
                                                   p.products_vpe_value,
                                                   p.products_discount_allowed,
                                                   p.products_weight,
                                                   p.products_tax_class_id,
                                                   p.products_status
                                              from "
    .TABLE_PRODUCTS." p,
                                                   "
    .TABLE_PRODUCTS_DESCRIPTION." pd
                                             where p.products_id='"
    .xtc_get_prid($products_id)."'
                                               and pd.products_id = p.products_id
                                               and pd.language_id = '"
    .(int)$_SESSION['languages_id']."'
                                           "
    );

            if ($products = xtc_db_fetch_array($products_query)) {          
              if ($products['products_status'] == 0) {
                  $this->remove($products_id);
              } else {
                $products_price = $xtPrice->xtcGetPrice($products['products_id'],
                                    $format = false,
                                    $this->contents[$products_id]['qty'],
                                    $products['products_tax_class_id'],
                                    $products['products_price']);

                $products_array[] = array ( 'id' => $products_id,
                              'name' => $products['products_name'],
                              'description' => $products['products_description'],
                              'short_description' => $products['products_short_description'],
                              'order_description' => $products['products_order_description'],
                              'model' => $products['products_model'],
                              'image' => $products['products_image'],
                              'price' => $products_price + $this->attributes_price($products_id),
                              'vpe' => $main->getVPEtext($products, $products_price),
                              'quantity' => $this->contents[$products_id]['qty'],
                              'weight' => $products['products_weight'],
                              'shipping_time' =>(ACTIVATE_SHIPPING_STATUS == 'true') ? $main->getShippingStatusName($products['products_shippingtime']) : null,
                              'final_price' => ($products_price + $this->attributes_price($products_id)),
                              'tax_class_id' => $products['products_tax_class_id'],
                              'tax' => isset($xtPrice->TAX[$products['products_tax_class_id']]) ? $xtPrice->TAX[$products['products_tax_class_id']] : 0,
                              'attributes' => isset($this->contents[$products_id]['attributes']) ? $this->contents[$products_id]['attributes'] : null
                            );

              }
            }
          }
        }
            usort($products_array, function($a, $b) {
                return $a['model'] > $b['model'];
            });

        return $products_array;
      }
    VG cjuestel

    ado

    • Fördermitglied
    • Beiträge: 195
    Re: Warenkorb nach Artikelnummer sortieren?
    Antwort #5 am: 08. Oktober 2014, 09:05:18
    Hi,

    also das ist ja ein 2dim array.

    Sowas sortiere ich immer so:

    (db_array ist das zu sortierende array)

    Code: PHP  [Auswählen]
    // Hole eine Liste von Spalten
    foreach ($db_array as $key => $row) {
        $so_wert[$key]    = $row['su_wert']; //absteigend
        $so_menge[$key] = $row['su_menge']; //aufsteigend
    }

    // Die Daten mit 'so_wert' absteigend, die mit 'so_menge' aufsteigend sortieren.(z.Bsp.)
    // Gib $db_array als letzten Parameter an, um nach dem gemeinsamen Schlüssel zu sortieren.

    array_multisort($so_wert, SORT_DESC, $so_menge, SORT_ASC, $db_array);

    echo "<br>";echo "<pre>";echo "db-array  ";echo "<br>";print_r($db_array);
    // für zum kucken wie's aussieht nach dem sortieren
     

    Grüße
    ado

    cjuestel

    • Neu im Forum
    • Beiträge: 3
    Re: Warenkorb nach Artikelnummer sortieren?
    Antwort #6 am: 08. Oktober 2014, 11:57:06
    Hallo ihr Guten!

    Es geht! Ich bin so glücklich. Vielen, vielen Dank für eure Hilfe. Der Ansatz von Alex_CC funktioniert doch. Ich kann aber gar nicht sagen, warum's im ersten Anlauf nicht wollte. Vielleicht ein hartnäckiger Cache? Super! Ihr seid Klasse!  :-B

    Viele Grüße

    adiebler

    • Frisch an Board
    • Beiträge: 52
    • Geschlecht:
    Re: Warenkorb nach Artikelnummer sortieren?
    Antwort #7 am: 08. Oktober 2014, 12:04:23
    Hallo cjuestel,

    das sind doch super Neuigkeiten.  :thumbs:

    VG, Alex
    5 Antworten
    2183 Aufrufe
    16. Mai 2017, 15:04:45 von Maxi
    6 Antworten
    4876 Aufrufe
    20. März 2012, 00:56:52 von dernix
    5 Antworten
    3857 Aufrufe
    23. Oktober 2012, 05:56:45 von mdesign
    5 Antworten
    4666 Aufrufe
    12. April 2015, 09:35:40 von karsta.de
               
    anything