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: Verbesserung Suchfunktion modified 2.0

    ShopNix

    • Viel Schreiber
    • Beiträge: 1.208
    Verbesserung Suchfunktion modified 2.0
    am: 01. November 2016, 20:13:54
    Schon in früheren Versionen hatte ich die Suchfunktion so angepasst, dass bei Eingabe einer Artikelnummer (products_model) die reguläre Suche umgangen und genau dieser Artikel angezeigt wurde.

    Ab Modified 2.0 gibt es die Suggestions. Auch hier habe ich das Programm wieder entsprechend angepasst. Um es zum Standard kompatibel zu halten, habe ich auch einen passenden Parameter eingefügt.

    Bei der Gelegenheit fiel mir auf, dass es einen neuen Parameter für die Mindestlänge des Suchbegriffs gibt. Der wird allerdings in advanced_search_result nicht genutzt, statt dessen ist hier eine Länge von 3 hart kodiert.

    Außerdem wir einmal mit >, einmal mit < verglichen, was bei gleichem Wert zu einer unterschiedlichen Länge für Suggestion und reguläre Suche führt. Das habe ich durch >= in api/autocomplete/autocomplete.php korrigiert.

    Ein patch dazu findet sich im Anhang, Sprachdateien sind manuell zu korrigieren.

    Hinweis
    Der Patch ist im Format tar gzip. Weil das Forum die typische Extension .tgz nicht zulässt, habe ich das Ding umbenannt.

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

    h-h-h

    • modified Team
    • Beiträge: 4.562
    Re: Verbesserung Suchfunktion modified 2.0
    Antwort #1 am: 01. November 2016, 21:02:34
    Hallo ShopNix,
    hier die Änderungen aus dem Anhang einmal lesbar. ;-)

    Code: SQL  [Auswählen]
    -- ShopNix - add configuration key for preferred search on products_model
    INSERT INTO configuration (configuration_key, configuration_value, configuration_group_id, sort_order, date_added) VALUES ('SEARCH_MODEL_PREFERRED', 'true', 22, 1, now());

    api/autocomplete/autocomplete.php
    Code: PHP  [Auswählen]
        $queryString = xtc_db_input(trim(decode_utf8($_POST['queryString'])));

        // create $search_keywords array
        $keywordcheck = xtc_parse_search_string($queryString, $search_keywords);
            #ShopNix - A
            $searchModelPreferred = 0;     
            if ($keywordcheck === true && strlen($queryString) >= 1) {
                    if (SEARCH_MODEL_PREFERRED == true) {
                            $preferredQry = "select p.*, pd.products_name from products p, products_description pd ".
                                    "where p.products_id = pd.products_id ".
                                    "and p.products_status = 1 ".
                                    "and pd.language_id = ".(int)$_SESSION['languages_id'] ." ".
                                    "and p.products_model = '$queryString'";
                            $preferredQry = xtc_db_query($preferredQry);
                            $searchModelPreferred = xtc_db_num_rows($preferredQry);
                    }
            }
           
        if ($keywordcheck === true && (strlen($queryString) >= SEARCH_AC_MIN_LENGTH || $searchModelPreferred > 0 )) {
        if ($searchModelPreferred == 0) {
        #if ($keywordcheck === true && strlen($queryString) > SEARCH_AC_MIN_LENGTH) {
       #ShopNix - A - END
         $from_str .= SEARCH_IN_ATTR == 'true' ? " LEFT OUTER JOIN ".TABLE_PRODUCTS_ATTRIBUTES." AS pa ON (p.products_id = pa.products_id)
                                                    LEFT OUTER JOIN "
    .TABLE_PRODUCTS_OPTIONS_VALUES." AS pov ON (pa.options_values_id = pov.products_options_values_id) " : "";
          $from_str .= SEARCH_IN_MANU == 'true' ? " LEFT OUTER JOIN ".TABLE_MANUFACTURERS." AS m ON (p.manufacturers_id = m.manufacturers_id) " : "";

          if (SEARCH_IN_FILTER == 'true') {
            $from_str .= "LEFT JOIN ".TABLE_PRODUCTS_TAGS." pt ON (pt.products_id = p.products_id)
                          LEFT JOIN "
    .TABLE_PRODUCTS_TAGS_VALUES." ptv ON (ptv.options_id = pt.options_id AND ptv.values_id = pt.values_id AND ptv.status = '1' AND ptv.languages_id = '".(int)$_SESSION['languages_id']."') ";
          }

          include(DIR_WS_INCLUDES.'build_search_query.php');
         
          $where_str .= " ) ";
                                                       
          $autocomplete_search_query = "SELECT p.*,
                                               pd.products_name
                                          FROM "
    .TABLE_PRODUCTS." p
                                     LEFT 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) != ''
                                               "
    .$from_str."
                                         WHERE p.products_status = '1'
                                                "
    .$where_str."
                                                "
    .PRODUCTS_CONDITIONS_P."
                                       GROUP BY p.products_id
                                       ORDER BY p.products_id ASC"
    ;
           
          $autocomplete_search_query = xtc_db_query($autocomplete_search_query);
        #ShopNix - B
            } else {
              $autocomplete_search_query =  $preferredQry;
            }
        #ShopNix - B - END
         if (xtc_db_num_rows($autocomplete_search_query) > 0) {
            $module_content = array();
            while ($autocomplete_search = xtc_db_fetch_array($autocomplete_search_query)) {
              $module_content[] = $product->buildDataArray($autocomplete_search);
            }
            $module_smarty->assign('module_content', $module_content);
          } else {
            $module_smarty->assign('error', 'true');
          }
          $module_smarty->caching = 0;
          $module_smarty->display(CURRENT_TEMPLATE.'/module/autocomplete.html');
        }

    [ Für Gäste sind keine Dateianhänge sichtbar ]

    Ich verstehe jetzt nicht warum SEARCH_AC_MIN_LENGTH für die Artikelnummer umgangen werden sollte.

    Viele Grüße,
    h-h-h

    Bonsai

    • Viel Schreiber
    • Beiträge: 4.127
    • Geschlecht:
    Re: Verbesserung Suchfunktion modified 2.0
    Antwort #2 am: 02. November 2016, 09:42:57
    Vermutlich, weil z.B. Artikelnummer 15 Existieren könnte, die bei Einstellung 3 Zeichen dann nicht gefunden würde.

    ShopNix

    • Viel Schreiber
    • Beiträge: 1.208
    Re: Verbesserung Suchfunktion modified 2.0
    Antwort #3 am: 02. November 2016, 15:25:40

    Code: SQL  [Auswählen]
    -- ShopNix - add configuration key for preferred search on products_model
    INSERT INTO configuration (configuration_key, configuration_value, configuration_group_id, sort_order, date_added) VALUES ('SEARCH_MODEL_PREFERRED', 'true', 22, 1, now());

    Guter Hinweis: Hier fehlt noch die Funktion xtc_cfg_select_option(array('true', 'false')).  ;)

    Richtig wäre:

    Code: SQL  [Auswählen]
    -- ShopNix - add configuration key for preferred search on products_model
    INSERT INTO configuration (configuration_key, configuration_value, configuration_group_id, sort_order, date_added, set_function) VALUES ('SEARCH_MODEL_PREFERRED', 'true', 22, 1, now(), 'xtc_cfg_select_option(array(\'true\', \'false\'))');
     

    Ich verstehe jetzt nicht warum SEARCH_AC_MIN_LENGTH für die Artikelnummer umgangen werden sollte.

    Wie der Kollege oben schon anmerkte: Wegen kurzer Artikelnummern. Auch dafür sollte man für die Übernahme in den Standard einen Parameter in der Konfiguration anlegen.

    Interessant ist die Änderung vorwiegend für Firmen, die einen gedruckten Katalog herausgeben, aber auch für solche, die den Shop auch als Hilfsmittel bei Kundentelefonaten einsetzen. Auf diese Weise werden die vielen false-positives wenigstens bei direkter Eingabe der Artikelnummer unterdrückt.

    umbi

    • Mitglied
    • Beiträge: 163
    • Geschlecht:
    Re: Verbesserung Suchfunktion modified 2.0
    Antwort #4 am: 01. Oktober 2019, 22:38:42
    Ich würde meinen der richtige MYSQL Insert würde so lauten:

    Code: PHP  [Auswählen]
    INSERT INTO configuration (configuration_key, configuration_value, configuration_group_id, sort_order, date_added, set_function) VALUES ('SEARCH_MODEL_PREFERRED', 'true', 22, 1, now(), 'xtc_cfg_select_option(array(\'true\', \'false\'),');

    Komma damit die anderen values korrekt im Admin config dargestellt werden...

    Btw würde ich auf jeden Fall die autocomplete.php und die advanced_search.result.php in den Veränderungen identisch machen, da wir keinen differenzierten Sugest gegenüber dem finalen Suchresultat möchten.

    Grüsse aus den Bergen
    23 Antworten
    7557 Aufrufe
    24. Juli 2017, 17:31:56 von Timm
    1 Antworten
    2290 Aufrufe
    25. Juli 2010, 00:30:52 von Tomcraft
    0 Antworten
    1885 Aufrufe
    22. August 2010, 08:18:05 von xtc-user09