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

    zvenson

    • Frisch an Board
    • Beiträge: 69
    • Geschlecht:
    Hallo zusammen!
    Die Suche im Forum brachte viel widersprüchliches zutage, daher möchte ich nochmal die Frage stellen wie es sich mit der Suche von Artikelnummern von Produktattributen verhält. Ich habe im Backend bei Such-Optionen "Suche in Produkt Attributen" auf "true" gestellt und den Produktattributen jeweils eigene Artikelnummern gegeben. Dies ist nötig und muss auch so sein, da dies in unserem gedruckten Katalog auch so ist. Nun findet der Shop diese Produkte aber nicht wenn man direkt nach der Artikelnummer des Produktattributs sucht.  Wenn man allerdings nach der Artikelnummer des "eigentlichen Produkts" sucht und die Attributbeschreibung wie z.B. braun eingibt dann wird das Produkt gefunden. Also eine Suche nach 12345 braun gibt das richtige Ergebnis - eine Suche nach 12345b nicht.

    Kann mir jemand helfen, wie ich die Attributartikelnummern auch auffindbar machen kann? Ich wäre für Hinweise sehr sehr dankbar!

    EDIT 1: okay kann gut sein, dass ich in r333 die Lösung eben doch selber gefunden habe.
    Auf den ersten Blick funktioniert es - mal sehen, ob es auch in der direktbestell box funktioniert.

    EDIT 2: Jau - es funktioniert eigentlich tadellos - allerdings wird bei der Direktbestellbox das Produkt nicht direkt in den Warenkorb gepackt, sondern lediglich das Produkt als Suchergebnis angezeigt - gut ist schonmal, dass auch die Suche nach 12345n bei der Direktbestellbox zu einem Ergebnis kommt. Wenn ich es jetzt noch hin bekomme, dass das Produkt mit dem richtigen Attribut sofort in den Warenkorb gepackt wird bin ich ganz glücklich - ich befürchte aber das wird nicht so ohne weiteres gehen - bin weiterhin für alle Tipps offen. :)

    [EDIT Tomcraft 25.10.2011: Hier geht es direkt zur Anleitung von franky_n.]

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

    Da Sandro

    • Fördermitglied
    • Beiträge: 832
    • Geschlecht:
    Danke für den Link - den habe ich gebraucht. :)

    Trotzdem habe ich noch eine Frage dazu: Kann man das auch für's Backend machen?

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.373
    • Geschlecht:
    Du meinst die Suche nach Attribut-Artikelnummern im Backend?

    Hatten wir das nicht schon integriert? Wenn nicht, dann meine ich mich zumindest zu erinnern, dass wir dafür schon eine Lösung haben. hier schonmal geschaut? -> Kleine Verbesserungen für den Admin-Bereich

    Grüße

    Torsten

    Da Sandro

    • Fördermitglied
    • Beiträge: 832
    • Geschlecht:
    Danke dir Tom, aber den Thread kannte ich schon. Da ist davon leider nix drin...
    Dann bemühe ich währenddessen einfach nochmal die Suche. :)

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.373
    • Geschlecht:
    Ich könnte schwören, dass wir das Thema schonmal hatten. ich meine mich zu erinnern, dass koshiro aka Micha danach mal gefragt hatte.

    Grüße

    Torsten

    Da Sandro

    • Fördermitglied
    • Beiträge: 832
    • Geschlecht:
    Ich behaupte das Gegenteil. :D
    Nee Quatsch, auch die Suche nach seinem Namen hat mir jetzt gerade nix gebracht. :(

    Tomcraft

    • modified Team
    • Gravatar
    • Beiträge: 46.373
    • Geschlecht:
    Eine Lösung habe ich gerade nicht parat, da müsste dir jemand anders aushelfen. :oops:

    Grüße

    Torsten

    franky_n

    • Experte
    • Beiträge: 4.950
    Hallo Descreator,

    Du könntest mal das probieren. Vorher wie immer Sicherheitskopie... das ist nicht getestet.

    In der "/admin/includes/modules/categories_view.php" in Z.306 nach:

    Code: PHP  [Auswählen]
        $products_count = 0;
        if ($_GET['search']) {

    das:

    Code: PHP  [Auswählen]
            $products_query = xtc_db_query("
            SELECT
            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 = '"
    . $_SESSION['languages_id'] . "' AND
            p.products_id = p2c.products_id AND (pd.products_name like '%"
    . $_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 '%" . $_GET['search'] . "%') ORDER BY " . $prodsort);
            //EOF - web28 - 2010-04-10 - change for ADMIN SEARCH BAR

    ersetzen durch das:

    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.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);

    Dann ist die Suche im Backend fast genauso gestaltet wie im Frontend...
    Die defines könnte man noch verfeinern mit z.B. Checkboxen im Admin zur Auswahl ob man auch in den Attributen und in den Beschreibungen der Artikel suchen möchte, aber das kannst Du ja mal selber versuchen zu basteln. :)

    Viele Grüße

    Franky

    [EDIT franky_n 24.10.2011: Fehler im Code korrigiert und um ein "include" erweitert.]
    [EDIT franky_n 26.10.2011: Fehler im Code korrigiert.]

    Da Sandro

    • Fördermitglied
    • Beiträge: 832
    • Geschlecht:
    hmmm, da kommt's zu folgendem Fehler:

    Code: PHP  [Auswählen]
    Fatal error: Call to undefined function xtc_parse_search_string() in /.../admin/includes/modules/categories_view.php on line 365

    Zeile 365 sagt:

    Code: PHP  [Auswählen]
     if (xtc_parse_search_string(stripslashes($_GET['search']), $search_keywords)) {

    franky_n

    • Experte
    • Beiträge: 4.950
    Hallo Descreator,

    dann setze vor den Quelltext noch ein:

    Code: PHP  [Auswählen]
    include("/inc/xtc_parse_search_string.inc.php");

    damit die Funktion da ist...

    Viele Grüße

    Franky

    Da Sandro

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

    ich wusste jetzt nicht vor welchen Quelltext ich es setzen soll, darum hab ichs
    a) vor den gesamten gesetzt und
    b) mal vor

    Code: PHP  [Auswählen]
    $products_count = 0;
        if ($_GET['search']) {

    gesetzt

    in beiden Fällen kommt es zu diesem Fehler:

    Code: PHP  [Auswählen]
    Warning: include(/inc/xtc_parse_search_string.inc.php) [function.include]: failed to open stream: No such file or directory in ....

    franky_n

    • Experte
    • Beiträge: 4.950
    Hi Descreator,

    dann findet er die Datei noch nicht.

    Probier mal so:

    Code: PHP  [Auswählen]
    include("../../../inc/xtc_parse_search_string.inc.php");

    Dann springt er erst zurück ins root des Shop Verzeichnis um dann in den Ordner inc zu gehen...
    Das andere geht wahrscheinlich nicht weil Du Deinen Shop wohl in einem Unterverzeichnis hast.

    Viele Grüße

    Franky

    Da Sandro

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

    ich glaube zwar, dass du ein "/" am Anfang vergessen hast, aber auch wenn ich das einfüge kommt es zum selben Fehler...
    Ich weiß aber nicht warum, denn das File wäre ja da unter /inc/...

    franky_n

    • Experte
    • Beiträge: 4.950
    Hallo Descreator,

    habe ich denn ein ../ zu viel?
    Nimm mal:

    Code: PHP  [Auswählen]
        include("../../inc/xtc_parse_search_string.inc.php");

    oder:

    Code: PHP  [Auswählen]
        include("../inc/xtc_parse_search_string.inc.php");

    Einer von denen müsste funktionieren... hab jetzt nicht nachschauen wollen! ;)

    Viele Grüße

    Franky

    Da Sandro

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

    nein, hattest du nicht, ich dachte nur der Code würde mit /../ angehen und nicht mit ../

    Aber wenn ich's so eingebe wie meintest, dann kommt's zu folgendem Fehler:

    Code: PHP  [Auswählen]
    Warning: include() [function.include]: open_basedir restriction in effect. File(../../../inc/xtc_parse_search_string.inc.php) is not within the allowed path(s): (/www/htdocs/.../:/tmp:/usr/bin:/www/htdocs/...:/bin:/usr/local/bin:/usr/share/php) in /www/htdocs/.../fiatwelt/admin/includes/modules/categories_view.php on line 25

    Warning: include(../../../inc/xtc_parse_search_string.inc.php) [function.include]: failed to open stream: Operation not permitted in /www/htdocs/.../fiatwelt/admin/includes/modules/categories_view.php on line 25

    Warning: include() [function.include]: open_basedir restriction in effect. File(../../../inc/xtc_parse_search_string.inc.php) is not within the allowed path(s): (/www/htdocs/.../:/tmp:/usr/bin:/www/htdocs/...:/bin:/usr/local/bin:/usr/share/php) in /www/htdocs/.../fiatwelt/admin/includes/modules/categories_view.php on line 25

    Warning: include(../../../inc/xtc_parse_search_string.inc.php) [function.include]: failed to open stream: Operation not permitted in /www/htdocs/.../fiatwelt/admin/includes/modules/categories_view.php on line 25

    Warning: include() [function.include]: Failed opening '../../../inc/xtc_parse_search_string.inc.php' for inclusion (include_path='.:/usr/share/php:..') in /www/htdocs/.../fiatwelt/admin/includes/modules/categories_view.php on line 25
    0 Antworten
    2140 Aufrufe
    23. Mai 2012, 19:24:26 von marketingthom
    0 Antworten
    2366 Aufrufe
    13. November 2013, 22:21:45 von Van
    3 Antworten
    3768 Aufrufe
    06. September 2009, 22:51:40 von Tomcraft
    2 Antworten
    2648 Aufrufe
    15. März 2011, 10:46:30 von Clever