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: ANLEITUNG: Artikelsuche im Admin auch für Produktattribute und Artikelbeschreibung

    franky_n

    • Experte
    • Beiträge: 4.950
    Hallo Descreator,

    und die anderen beiden Versionen? Eine davon müsste gehen...

    Wenn ich mit ../../../ zu weit runter gehe im Verzeichnisbaum (also sozusagen unter dem root Verzeichnis) kommt so eine Fehlermeldung. Das ist normal da ich dort keine Zugriffsrechte habe.

    Viele Grüße

    Franky

    Da Sandro

    • Fördermitglied
    • Beiträge: 832
    • Geschlecht:
    Hi Franky,

    HA - mit nur einem ../ geht's!
    Bei der Suche kommt dann aber der Fehler:

    Code: PHP  [Auswählen]
    1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'LEFT JOIN products_description AS pd ON (p.products_id = pd.products_id) LEFT JO' at line 16

    SELECT DISTINCT p.products_tax_class_id, p.products_id, pd.products_name, p.products_sort, p.products_quantity, p.products_image, p.products_model, p.products_price, p.products_discount_allowed, p.products_date_added, p.products_last_modified, p.products_date_available, p.products_status, p.products_startpage, p.products_startpage_sort, p2c.categories_id LEFT JOIN products_description AS pd ON (p.products_id = pd.products_id) LEFT JOIN products_to_categories AS p2c ON (p.products_id = p2c.products_id) LEFT OUTER JOIN products_attributes AS pa ON (p.products_id = pa.products_id) LEFT OUTER JOIN products_options_values AS pov ON (pa.options_values_id = pov.products_options_values_id) LEFT OUTER JOIN specials AS s ON (p.products_id = s.products_id) AND s.status = '1' WHERE p.products_status = '1' AND pd.language_id = '2' AND ( ( pd.products_keywords LIKE ('%103030%') OR pd.products_name LIKE ('%103030%') OR p.products_model LIKE ('%103030%') OR pa.attributes_model LIKE ('%103030%') OR (pov.products_options_values_name LIKE ('%103030%') AND pov.language_id = '2') ) ) GROUP BY p.products_id ORDER BY p.products_sort, pd.products_name ASC

    franky_n

    • Experte
    • Beiträge: 4.950
    Hi Descreator,

    aha! Ok das ist mal eine Fehlermeldung anderer Art.
    Ich schaue es mir an! Moment! :)

    Im Quelltext das ändern:

    Code: PHP  [Auswählen]
            $from_str  = "LEFT JOIN ".TABLE_PRODUCTS_DESCRIPTION." AS pd ON (p.products_id = pd.products_id) ";

    in das:

    Code: PHP  [Auswählen]
            $from_str  .= "LEFT JOIN ".TABLE_PRODUCTS_DESCRIPTION." AS pd ON (p.products_id = pd.products_id) ";

    Da fehlte einfach ein Punkt! :)

    Hab's oben verbessert und auch das include...

    Viele Grüße

    Franky

    Da Sandro

    • Fördermitglied
    • Beiträge: 832
    • Geschlecht:
    hoppla, jetzt seh ich das erst. Hab leider keine Mail bekommen weil du ja nen Edit gemacht hast ;)

    LÄUFT WIE SAU!!! Perfekt - vielen vielen Dank :)

    franky_n

    • Experte
    • Beiträge: 4.950
    Hallo Torsten,

    vielleicht ist das was für den Trunk...

    "Artikelsuche im Admin auch für Produktattribute und Artikelbeschreibung"

    Viele Grüße

    Franky

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.373
    • Geschlecht:
    Jepp, finde ich gut! :pro:
    Schiebst du das in den Trunk?

    Grüße

    Torsten

    franky_n

    • Experte
    • Beiträge: 4.950
    Hallo Torsten,

    ist nun in r2286 eingefügt.

    Viele Grüße

    Franky

    Gradler

    • Viel Schreiber
    • Beiträge: 2.083
    • Geschlecht:
    Hallo Franky,

    danke für diese super Erweiterung. Leider läuft es bei eingebautem Live Shopping nicht richtig.

    Suche ich etwas, das nicht im Live Shopping ist läuft alles tadellos. Kommt aber ein Suchbegriff der auch als Live Shopping vorhanden ist erhalte ich folgende Fehlermeldung:

    Code: SQL  [Auswählen]
    1064 - You have an error IN your SQL syntax; CHECK the manual that corresponds TO your MySQL server version FOR the RIGHT syntax TO USE near 'and ) GROUP BY p.products_id ORDER BY p.products_sort, pd.products_name ASC ( p' at line 17

    SELECT DISTINCT p.live_shopping, p.products_tax_class_id, p.products_id, pd.products_name, p.products_sort, p.products_quantity, p.products_image, p.products_model, p.products_price, p.products_discount_allowed, p.products_date_added, p.products_last_modified, p.products_date_available, p.products_status, p.products_startpage, p.products_startpage_sort, p2c.categories_id FROM products AS p LEFT JOIN products_description AS pd ON (p.products_id = pd.products_id) LEFT JOIN products_to_categories AS p2c ON (p.products_id = p2c.products_id) LEFT OUTER JOIN products_attributes AS pa ON (p.products_id = pa.products_id) LEFT OUTER JOIN products_options_values AS pov ON (pa.options_values_id = pov.products_options_values_id) LEFT OUTER JOIN specials AS s ON (p.products_id = s.products_id) AND s.status = '1' WHERE p.products_status = '1' AND pd.language_id = '2' AND ( ( pd.products_keywords LIKE ('%testartikel%') OR pd.products_name LIKE ('%testartikel%') OR p.products_model LIKE ('%testartikel%') OR pa.attributes_model LIKE ('%testartikel%') OR (pov.products_options_values_name LIKE ('%testartikel%') AND pov.language_id = '2') ) ) GROUP BY p.products_id ORDER BY p.products_sort, pd.products_name ASC AND ) GROUP BY p.products_id ORDER BY p.products_sort, pd.products_name ASC ( pd.products_keywords LIKE ('%1%') OR pd.products_name LIKE ('%1%') OR p.products_model LIKE ('%1%') OR pa.attributes_model LIKE ('%1%') OR (pov.products_options_values_name LIKE ('%1%') AND pov.language_id = '2') ) ) GROUP BY p.products_id ORDER BY p.products_sort, pd.products_name ASC

    Habe, wie auch in der Einbauanleitung des Live Shopping Modules, die Datenbankabfrae in die Erweiterung eingebaut

    original:

    Code: PHP  [Auswählen]
            $products_query = xtc_db_query("
            SELECT
            p.live_shopping,
            p.products_tax_class_id,
            p.products_id,
            pd.products_name,
            p.products_sort,
            p.products_quantity,
            p.products_image,
    -- BOF - Tomcraft - 2009-12-03 - show model-number upon search for products
            p.products_model,
    -- EOF - Tomcraft - 2009-12-03 - show model-number upon search for products
            p.products_price,
            p.products_discount_allowed,
            p.products_date_added,
            p.products_last_modified,
            p.products_date_available,
            p.products_status,
            p.products_startpage,
            p.products_startpage_sort,
            p2c.categories_id FROM "
    . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS_TO_CATEGORIES . " p2c
            WHERE p.products_id = pd.products_id AND pd.language_id = '"
    . (int)$_SESSION['languages_id'] . "' AND
            p.products_id = p2c.products_id AND (pd.products_name like '%"
    . xtc_db_prepare_input($_GET['search']) . "%' OR "
                    // BOF - web28 - 2010-04-10 - change for ADMIN SEARCH BAR
            // p.products_model = '" . $_GET['search'] . "') ORDER BY " . $prodsort);
                    . "p.products_model like '%" . xtc_db_prepare_input($_GET['search']) . "%') ORDER BY " . $prodsort);
            //EOF - web28 - 2010-04-10 - change for ADMIN SEARCH BAR

    nach Einbau Deiner Erweiterung:

    Code: PHP  [Auswählen]
    include("../inc/xtc_parse_search_string.inc.php");
            define(ADMIN_SEARCH_IN_ATTR, true); // true = search in attributes
            define(ADMIN_SEARCH_IN_DESC, false); // true = search in description
            //build query
            $select_str = "SELECT DISTINCT p.live_shopping,
                                          p.products_tax_class_id,
                                          p.products_id,
                                          pd.products_name,
                                          p.products_sort,
                                          p.products_quantity,
                                          p.products_image,
                                          p.products_model,
                                          p.products_price,
                                          p.products_discount_allowed,
                                          p.products_date_added,
                                          p.products_last_modified,
                                          p.products_date_available,
                                          p.products_status,
                                          p.products_startpage,
                                          p.products_startpage_sort,
                                          p2c.categories_id "
    ;
     
            $from_str  = "FROM ".TABLE_PRODUCTS." AS p ";
            $from_str  .= "LEFT JOIN ".TABLE_PRODUCTS_DESCRIPTION." AS pd ON (p.products_id = pd.products_id) ";
            $from_str .= "LEFT JOIN ".TABLE_PRODUCTS_TO_CATEGORIES." AS p2c ON (p.products_id = p2c.products_id) ";
            if (ADMIN_SEARCH_IN_ATTR == 'true') {
              $from_str .= "LEFT OUTER JOIN ".TABLE_PRODUCTS_ATTRIBUTES." AS pa ON (p.products_id = pa.products_id) ";
              $from_str .= "LEFT OUTER JOIN ".TABLE_PRODUCTS_OPTIONS_VALUES." AS pov ON (pa.options_values_id = pov.products_options_values_id) ";
            }
            $from_str .= "LEFT OUTER JOIN ".TABLE_SPECIALS." AS s ON (p.products_id = s.products_id) AND s.status = '1'";
            //where-string
            $where_str = " WHERE p.products_status = '1' "." AND pd.language_id = '".(int) $_SESSION['languages_id']."'";
            //go for keywords... this is the main search process
            if (isset ($_GET['search']) && xtc_not_null($_GET['search'])) {
              if (xtc_parse_search_string(stripslashes($_GET['search']), $search_keywords)) {
                $where_str .= " AND ( ";
                for ($i = 0, $n = sizeof($search_keywords); $i < $n; $i ++) {
                  switch ($search_keywords[$i]) {
                    case '(' :
                    case ')' :
                    case 'and' :
                    case 'or' :
                      $where_str .= " ".$search_keywords[$i]." ";
                      break;
                    default :
                      $ent_keyword = htmlentities($search_keywords[$i]);
                      $ent_keyword = ($ent_keyword != $search_keywords[$i]) ? addslashes($ent_keyword) : false;
                      $keyword = addslashes($search_keywords[$i]);
                      $where_str .= " ( ";
                      $where_str .= "pd.products_keywords LIKE ('%".$keyword."%') ";
                      $where_str .= ($ent_keyword) ? "OR pd.products_keywords LIKE ('%".$ent_keyword."%') " : '';
                      if (ADMIN_SEARCH_IN_DESC == 'true') {
                        $where_str .= "OR pd.products_description LIKE ('%".$keyword."%') ";
                        $where_str .= ($ent_keyword) ? "OR pd.products_description LIKE ('%".$ent_keyword."%') " : '';
                        $where_str .= "OR pd.products_short_description LIKE ('%".$keyword."%') ";
                        $where_str .= ($ent_keyword) ? "OR pd.products_short_description LIKE ('%".$ent_keyword."%') " : '';
                      }
                      $where_str .= "OR pd.products_name LIKE ('%".$keyword."%') ";
                      $where_str .= ($ent_keyword) ? "OR pd.products_name LIKE ('%".$ent_keyword."%') " : '';
                      $where_str .= "OR p.products_model LIKE ('%".$keyword."%') ";
                      $where_str .= ($ent_keyword) ? "OR p.products_model LIKE ('%".$ent_keyword."%') " : '';
                      if (ADMIN_SEARCH_IN_ATTR == 'true') {
                        $where_str .= "OR pa.attributes_model LIKE ('%".$keyword."%') ";
                        $where_str .= ($ent_keyword) ? "OR pa.attributes_model LIKE ('%".$ent_keyword."%') " : '';
                        $where_str .= "OR (pov.products_options_values_name LIKE ('%".$keyword."%') ";
                        $where_str .= ($ent_keyword) ? "OR pov.products_options_values_name LIKE ('%".$ent_keyword."%') " : '';
                        $where_str .= "AND pov.language_id = '".(int) $_SESSION['languages_id']."')";
                      }
                      $where_str .= " ) ";
                      break;
                  }
                  $where_str .= " ) GROUP BY p.products_id ORDER BY " . $prodsort;
                }
              }
            }
            //glue together
            $listing_sql = $select_str.$from_str.$where_str;
            $products_query = xtc_db_query($listing_sql);

    Kannst Du mir bitte helfen?

    Danke

    Gerd

    franky_n

    • Experte
    • Beiträge: 4.950
    Hallo Gradler,

    wenn ich die SQL auseinander pflücke erscheint 2mal der hintere Teil der SQL (?)...

    Code: PHP  [Auswählen]
    SELECT DISTINCT p.live_shopping,
                    p.products_tax_class_id,
                    p.products_id,
                    pd.products_name,
                    p.products_sort,
                    p.products_quantity,
                    p.products_image,
                    p.products_model,
                    p.products_price,
                    p.products_discount_allowed,
                    p.products_date_added,
                    p.products_last_modified,
                    p.products_date_available,
                    p.products_status,
                    p.products_startpage,
                    p.products_startpage_sort,
                    p2c.categories_id
               FROM products AS p
          LEFT JOIN products_description AS pd ON (p.products_id = pd.products_id)
          LEFT JOIN products_to_categories AS p2c ON (p.products_id = p2c.products_id)
    LEFT OUTER JOIN products_attributes AS pa ON (p.products_id = pa.products_id)
    LEFT OUTER JOIN products_options_values AS pov ON (pa.options_values_id = pov.products_options_values_id)
    LEFT OUTER JOIN specials AS s ON (p.products_id = s.products_id)
                AND s.STATUS = '1'
              WHERE p.products_status = '1'
                AND pd.language_id = '2'
                AND ( ( pd.products_keywords LIKE ('%testartikel%')
                     OR pd.products_name LIKE ('%testartikel%')
                     OR p.products_model LIKE ('%testartikel%')
                     OR pa.attributes_model LIKE ('%testartikel%')
                     OR (pov.products_options_values_name LIKE ('%testartikel%') AND pov.language_id = '2')
                     ) )
           GROUP BY p.products_id
           ORDER BY p.products_sort, pd.products_name ASC

    bis hierhin korrekt aber dann kommt noch das hinten dran:

    Code: PHP  [Auswählen]
           AND ) GROUP BY p.products_id ORDER BY p.products_sort, pd.products_name ASC ( pd.products_keywords LIKE ('%1%') OR pd.products_name LIKE ('%1%') OR p.products_model LIKE ('%1%') OR pa.attributes_model LIKE ('%1%') OR (pov.products_options_values_name LIKE ('%1%') AND pov.language_id = '2') ) ) GROUP BY p.products_id ORDER BY p.products_sort, pd.products_name ASC

    Dazu müsste man sich mal den Teil der Einbauanleitung vom Live Shopping Modul anschauen...
    Vor allen Dingen der Umbau im Fronend bei der Suche und im Backend bei der Suche...

    EDIT: Also wenn ich mir das so in der Anleitung anschaue wird nur das "p.live_shopping," zusätzlich eingebaut und das kann nicht die Ursache dafür sein das da plötzlich hinten weitere SQL Sachen dran hängen...  :whistle:
    Da hast Du sicherlich noch was anderes eingebaut was nun stört...

    Viele Grüße

    Franky

    Gradler

    • Viel Schreiber
    • Beiträge: 2.083
    • Geschlecht:
    Hallo Franky,

    danke für die schnelle Antwort. Ich habe nichts zusätzliches eingebaut.

    Nur zwei Artikel in zwei verschiedenen Unterkategorien angelegt. Testartikel 1 und Testartikel 2.

    Testartikel 2 ist der aktive Live Shopping Artikel. -> Bild angehängt liveshopping - testartikel 2.jpg

    Wenn ich im Frontend suche und folgende Suchebegriffe eingebe erscheint

    Suchbegriff: Testartikel - Ergebnis: Testartikel 1, Testartikel 2
    Suchbegriff: Testartikel 1 - Ergebnis: Testartikel 1 und Testartikel 2 <- normal sollte nur Testartikel 1 erscheinen
    Suchbegriff: Testartikel1 - Ergebnis: Artikel wurde nicht gefunden!
    Suchbegriff: Testartikel 2 - Ergebnis: Testartikel 2
    Suchbegriff: Testartikel2 - Ergebnis: Testartikel 2

    Im Backend in der Suche Adminleiste oben

    Suchbegriff: Testartikel - Ergebnis: Testartikel 1, Testartikel 2
    Suchbegriff: Testartikel 1 - Ergebnis: sql Fehlermeldung
    Suchbegriff: Testartikel1 - Ergebnis: Testartikel
    Suchbegriff: Testartikel 2 - Ergebnis: sql Fehlermeldung
    Suchbegriff: Testartikel2 - Ergebnis: Testartikel 2

    Hoffe ich hab's verständlich beschrieben.

    Werde jetzt nochmal mit der original Datei die Suche durchspielen und dann nochmal berichten ob da auch Fehler in der Suche vorkommen. Dürfte allerdings nur im Adminbereich differieren.

    Gerd

    Gradler

    • Viel Schreiber
    • Beiträge: 2.083
    • Geschlecht:
    Ich hab jetzt die Änderung rückgängig gemacht und folgende Ergebnisse erhalten

    Im Backend in der Suche Adminleiste oben

    Suchbegriff: Testartikel - Ergebnis: Testartikel 1, Testartikel 2
    Suchbegriff: Testartikel 1 - Ergebnis: Testartikel 1
    Suchbegriff: Testartikel1 - Ergebnis: Testartikel 1
    Suchbegriff: Testartikel 2 - Ergebnis: kein Ergebnis
    Suchbegriff: Testartikel2 - Ergebnis: kein Ergebnis

    Nachdem ich den Live Shopping Artikel beendet habe (Datum zurückgesetzt) folgendes Ergebnis:

    Suchbegriff: Testartikel - Ergebnis: Testartikel 1, Testartikel 2
    Suchbegriff: Testartikel 1 - Ergebnis: Testartikel 1
    Suchbegriff: Testartikel1 - Ergebnis: kein Ergebnis
    Suchbegriff: Testartikel 2 - Ergebnis: kein Ergebnis
    Suchbegriff: Testartikel2 - Ergebnis: kein Ergebnis

    Nachdem ich den Live Shopping Artikel beendet habe (Datum zurückgesetzt) folgendes Ergebnis:

    Suchbegriff: Testartikel - Ergebnis: Testartikel 1, Testartikel 2
    Suchbegriff: Testartikel 1 - Ergebnis: Testartikel 1
    Suchbegriff: Testartikel1 - Ergebnis: kein Ergebnis
    Suchbegriff: Testartikel 2 - Ergebnis: kein Ergebnis
    Suchbegriff: Testartikel2 - Ergebnis: kein Ergebnis

    Nachdem ich die für Live Shopping Freigabe entfernt habe (Status rot) folgendes Ergebnis:

    Suchbegriff: Testartikel - Ergebnis: Testartikel 1, Testartikel 2
    Suchbegriff: Testartikel 1 - Ergebnis: Testartikel 1
    Suchbegriff: Testartikel1 - Ergebnis: kein Ergebnis
    Suchbegriff: Testartikel 2 - Ergebnis: kein Ergebnis
    Suchbegriff: Testartikel2 - Ergebnis: kein Ergebnis

    Sonderbar! Woran kann das liegen?

    franky_n

    • Experte
    • Beiträge: 4.950
    Hallo Gradler,

    dann stimmt aber Deine Aussage oben nicht das es nur bei Live Shopping Artikeln passiert... ;)
    Es scheint nur so zu sein wenn Du 2 Suchbegriffe hintereinander angibst... :)

    Ich schau es mir an!

    Viele Grüße

    Franky

    Gradler

    • Viel Schreiber
    • Beiträge: 2.083
    • Geschlecht:
    Hallo Franky,

    es tritt eben der sql Fehler auf, wenn ich die Live Shopping Erweiterung in der Suchabfrage einbinde.

    Die Artikel habe ich wie folgt angelegt:

    Kategorie 1 - Unterkategorie 1-1 - Testartikel 1
    Kategorie 1 - Unterkategorie 1-2 - Testartikel 2

    Vieleicht hat es auch was mit der Konstelation der Unterkategorienamen 1-1 und 1-2 zu tun?

    Danke für Deine Bemühungen

    Gerd

    franky_n

    • Experte
    • Beiträge: 4.950
    Hallo Gradler,

    tausche mal in dem Umbau das um:

    Code: PHP  [Auswählen]
                      $where_str .= " ) GROUP BY p.products_id ORDER BY " . $prodsort;
                    }

    in:

    Code: PHP  [Auswählen]
                    }
                    $where_str .= " ) GROUP BY p.products_id ORDER BY " . $prodsort;

    und probier mal.
    Ich bin wahrscheinlich bei dem letzten WHERE String einmal zu früh abgebogen! Bedeutet: Eine Klammer zu früh steht der WHERE String! ;)

    Viele Grüße

    Franky

    Gradler

    • Viel Schreiber
    • Beiträge: 2.083
    • Geschlecht:
    Hallo Franky,

    danke für Deine schnelle Lösung.

    Der sql Fehler ist nun weg - was bleibt sind die sonderbaren Suchergebnisse

    Suchbegriff: Testartikel - Ergebnis: Testartikel 2, Testartikel 1
    Suchbegriff: Testartikel 1 - Ergebnis: Testartikel 2, Testartikel 1
    Suchbegriff: Testartikel1 - Ergebnis: kein Ergebnis
    Suchbegriff: Testartikel 2 - Ergebnis: Testartikel 2
    Suchbegriff: Testartikel2 - Ergebnis: Testartikel 2

    Es ist bei dieser Suche kein Artikel für Live Shopping freigegeben. D.h. Status für alle Artikel gleich - kein Live Shopping

    Beim Anlegen der Artikel habe ich zuerst Hauptkategorien erstellt, dann Unterkategorien und dann zuerst Testartikel 1 und danach Testartikel 2 angelegt.

    Sie Sortierung bei den Suchergebnissen ist aber umbekehr zuerst Testartikel 2 und dann Testartikel 1. Bei wenig Artikeln egal, im Livebetrieb (irgendwann) werden es aber viel mehr Artikel werden.

    Danke.

    Gerd

    0 Antworten
    2140 Aufrufe
    23. Mai 2012, 19:24:26 von marketingthom
    2 Antworten
    2648 Aufrufe
    15. März 2011, 10:46:30 von Clever
    0 Antworten
    2366 Aufrufe
    13. November 2013, 22:21:45 von Van