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: order_by nach Order_by möglich - um auto include zu nutzen

    manne35

    • Fördermitglied
    • Beiträge: 615
    • Geschlecht:
    Hallo liebe Modgemeinde,
    ich möchte in der products_new  eine Sortierung, die bereits gemacht ist umsortieren.
    Weil die auto includes direkt nach dem db Abruf steht.
    also aus
            "
    Code: PHP  [Auswählen]
    .((isset($_SESSION['filter_sorting'])) ? $_SESSION['filter_sorting'] : 'ORDER BY p.products_date_added DESC');
    will ich machen
    Code: PHP  [Auswählen]
    ".((isset($_SESSION['filter_sorting'])) ? 'ORDER BY p.products_date_added DESC' : $_SESSION['filter_sorting']);

    Die Daten der Datenbank sind nach der Abfrage in der
    Code: PHP  [Auswählen]
    $products_new_query_raw

    Direkt in der Datei ändern geht, aber bei auto include Nutzung sollte ich ja die Original Sortierung stehen lassen und erst danach das mit der auto include machen.
    Mit php sort hab ich s nicht hinbekommen.
    (Hintergrund ist, dass ich das filter_sorting geändert habe um ausverkaufte Produkte nach unten zu schieben.)
    Vielloicht sieht jemand den Denkfehler, den meinen ?
    lgmanne

    Linkback: https://www.modified-shop.org/forum/index.php?topic=39388.0
    Trade Republic - Provisionsfrei Aktien handeln

    karsta.de

    • Experte
    • Beiträge: 3.156
    Re: order_by nach Order_by möglich - um auto include zu nutzen
    Antwort #1 am: 05. August 2018, 20:06:58
    Suche (kommt 2x vor):
    Code: PHP  [Auswählen]
    IFNULL(s.specials_new_products_price, p.products_price) AS price

    DAVOR EINFÜGEN:
    Code: PHP  [Auswählen]
    (CASE WHEN p.products_quantity > 0 THEN 1 ELSE 0 END) as order_by_availability,

    und die Sortierung ersetzt du dann so:
    ORDER BY order_by_availability DESC, p.products_date_added DESC

    Leider nicht updatesicher!

    BG kgd

    hpzeller

    • Experte
    • Beiträge: 4.129
    • Geschlecht:
    Re: order_by nach Order_by möglich - um auto include zu nutzen
    Antwort #2 am: 05. August 2018, 21:03:09
    Hallo manne35,

    du machst einen Denkfehler, in $products_new_query_raw stehen nicht die Daten aus der Datenbank, sondern in $products_new_query_raw steht lediglich folgender String

    Code: PHP  [Auswählen]
    "SELECT DISTINCT p.*,
                                                 pd.products_name,
                                                 pd.products_short_description,
                                                 m.manufacturers_name,
                                                 IFNULL(s.specials_new_products_price, p.products_price) AS price
                                            FROM "
    .TABLE_PRODUCTS." p
                                       LEFT JOIN "
    .TABLE_MANUFACTURERS." m
                                                 ON p.manufacturers_id = m.manufacturers_id
                                            JOIN "
    .TABLE_PRODUCTS_DESCRIPTION." pd
                                                 ON p.products_id = pd.products_id
                                                    AND pd.language_id = '"
    .(int)$_SESSION['languages_id']."'
                                                    AND trim(pd.products_name) != ''
                                            JOIN "
    .TABLE_PRODUCTS_TO_CATEGORIES." p2c
                                                 ON p.products_id = p2c.products_id
                                            JOIN "
    .TABLE_CATEGORIES." c
                                                 ON c.categories_id = p2c.categories_id
                                                    AND c.categories_status=1
                                       LEFT JOIN "
    .TABLE_SPECIALS." s
                                                 ON p.products_id = s.products_id
                                                    "
    .SPECIALS_CONDITIONS_S."
                                                 "
    .$filter_join."
                                           WHERE p.products_status = '1'
                                                 "
    .PRODUCTS_CONDITIONS_P."
                                                 "
    .$days."
                                                 "
    .$where."
                                                 "
    .((isset($_SESSION['filter_sorting'])) ? $_SESSION['filter_sorting'] : 'ORDER BY p.products_date_added DESC');
     

    welcher nach

    Code: PHP  [Auswählen]
      foreach(auto_include(DIR_FS_CATALOG.'includes/extra/modules/products_new_split/','php') as $file) require ($file);
     

    nämlich in Zeile 101 mit folgendem Code

    Code: PHP  [Auswählen]
      $products_new_split = new splitPageResults($products_new_query_raw, (isset($_GET['page']) ? (int)$_GET['page'] : 1), $max_display_results, $products_new_count_key);
     

    für einer Datenbank Abfrage benutzt wird.

    Das bedeutet Du kannst also updatesicher im Ordner includes/extra/modules/products_new_split/ eine PHP-Datei mit z.B folgendem Inhalt erstellen und so den ursprünglichen Inhalt von $products_new_query_raw vor seiner Benutzung zur Datenbankabfrage überschreiben.

    Code: PHP  [Auswählen]
    <?php

      $products_new_query_raw = "SELECT DISTINCT p.*,
                                                 pd.products_name,
                                                 pd.products_short_description,
                                                 m.manufacturers_name,
                                                 IFNULL(s.specials_new_products_price, p.products_price) AS price
                                            FROM "
    .TABLE_PRODUCTS." p
                                       LEFT JOIN "
    .TABLE_MANUFACTURERS." m
                                                 ON p.manufacturers_id = m.manufacturers_id
                                            JOIN "
    .TABLE_PRODUCTS_DESCRIPTION." pd
                                                 ON p.products_id = pd.products_id
                                                    AND pd.language_id = '"
    .(int)$_SESSION['languages_id']."'
                                                    AND trim(pd.products_name) != ''
                                            JOIN "
    .TABLE_PRODUCTS_TO_CATEGORIES." p2c
                                                 ON p.products_id = p2c.products_id
                                            JOIN "
    .TABLE_CATEGORIES." c
                                                 ON c.categories_id = p2c.categories_id
                                                    AND c.categories_status=1
                                       LEFT JOIN "
    .TABLE_SPECIALS." s
                                                 ON p.products_id = s.products_id
                                                    "
    .SPECIALS_CONDITIONS_S."
                                                 "
    .$filter_join."
                                           WHERE p.products_status = '1'
                                                 "
    .PRODUCTS_CONDITIONS_P."
                                                 "
    .$days."
                                                 "
    .$where."
                                                "
    .((isset($_SESSION['filter_sorting'])) ? 'ORDER BY p.products_date_added DESC' : $_SESSION['filter_sorting']);
     

    Gruss
    Hanspeter

    karsta.de

    • Experte
    • Beiträge: 3.156
    Re: order_by nach Order_by möglich - um auto include zu nutzen
    Antwort #3 am: 05. August 2018, 21:21:01
    Getestet. Oh ja super, geht updatesicher.  :tomato:

    Ick freu mir  :-B

    BG kgd

    manne35

    • Fördermitglied
    • Beiträge: 615
    • Geschlecht:
    Re: order_by nach Order_by möglich - um auto include zu nutzen
    Antwort #4 am: 06. August 2018, 10:53:15
    Ach das war noch gar nicht die db Abfrage sonder nur die Vorbereitung derselben..... meimeimei.....

    Mensch ns Kinder..., ja dann ists machbar...

    vielen Dank fuer die tolle Erklärung hpzeller

    auch kgd danke, auch von Dir was gelernt, wie man praktisch in einer db Abfrage noch ein "imaginäres Feld" das gar nicht in der db steht abfragen kann und case ist auch cool...-

    Mensch,... ich bin da praktisch 1. Klasse Russische Unterricht während Ihr Euch teilweise in der Sprache quasi fliesend unterhalten könnt...
    aber macht echt Spaß, freu mich immer, wenn ich wieder a bissle mehr verstanden hab...