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: MODUL: jQuery Autocomplete (ähnlich Ajax Search Suggest, IntelliSearch)

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Die autocomplete.php im Rootverzeichnis ist doch sehr schön strukturiert und mit Kommentaren versehen.
    Das sollte man doch relativ leicht die Suche auch nach Hersteller realisieren können.

    Je mehr Suchparameter berücksichtigt werden müssen um so langsamer wird das ganze allerdings und verliert dann seinen Sinn, schließlich sollen die Vorschläge der Suchergebnisse ja schnell angezeigt werden.

    Gruß,
    noRiddle
    Marktplatz - Eine große Auswahl an neuen und hilfreichen Modulen sowie modernen Templates für die modified eCommerce Shopsoftware

    voodoopupp

    • Fördermitglied
    • Beiträge: 1.869
    • Geschlecht:
    Nun ja, dachte ich mir eigentlich auch.

    daher dachte ich, dass ich einfach z.B. diese Passage (products_name:
    Code: PHP  [Auswählen]
    //Search in products_name
    if($searchConfig['SEARCH_IN_PRODUCTS_NAME'] == 1) {
            !$firstItem ? $where_str.=" OR " : false;
            if($searchConfig['SEVERAL_KEYWORDS_AND'] == 1) {
                    $temp_ary = explode(' ', $keyword);
                    $temp_ary2 = array();
                    for ( $i = 0; $i < count($temp_ary); ++$i )
                    {
                            $temp_ary2[] = " pd.products_name LIKE '%" . $temp_ary[$i] . "%' ";
                    }
                    if ( count($temp_ary2) > 0 )
                    {
                            $where_str.= ' ( ' . implode(' AND ', $temp_ary2) . ' ) ';
                    }

                    if ($ent_keyword)
                    {
                            $temp_ary = explode(' ', $ent_keyword);
                            $temp_ary2 = array();
                            for ( $i = 0; $i < count($temp_ary); ++$i )
                            {
                                    $temp_ary2[] = " pd.products_name LIKE '%" . $temp_ary[$i] . "%' ";
                            }
                            if ( count($temp_ary2) > 0 )
                            {
                                    $where_str.= ' OR ( ' . implode(' AND ', $temp_ary2) . ' ) ';
                            }
                    }

            } else {
                    $where_str .= "pd.products_name LIKE '%" . $keyword . "%' ";
                    $where_str .= ($ent_keyword) ? "OR pd.products_name LIKE ('%".$ent_keyword."%') " : '';
            }
            $firstItem=false;
    }
    kopiere und daraus dann das hier mache (pd.products_name geändert in m.manufacturers_name):
    Code: PHP  [Auswählen]
    //Search in manufacturers_name
    if($searchConfig['SEARCH_IN_MANUFACTURERS_NAME'] == 1) {
            !$firstItem ? $where_str.=" OR " : false;
            if($searchConfig['SEVERAL_KEYWORDS_AND'] == 1) {
                    $temp_ary = explode(' ', $keyword);
                    $temp_ary2 = array();
                    for ( $i = 0; $i < count($temp_ary); ++$i )
                    {
                            $temp_ary2[] = " m.manufacturers_name LIKE '%" . $temp_ary[$i] . "%' ";
                    }
                    if ( count($temp_ary2) > 0 )
                    {
                            $where_str.= ' ( ' . implode(' AND ', $temp_ary2) . ' ) ';
                    }

                    if ($ent_keyword)
                    {
                            $temp_ary = explode(' ', $ent_keyword);
                            $temp_ary2 = array();
                            for ( $i = 0; $i < count($temp_ary); ++$i )
                            {
                                    $temp_ary2[] = " m.manufacturers_name LIKE '%" . $temp_ary[$i] . "%' ";
                            }
                            if ( count($temp_ary2) > 0 )
                            {
                                    $where_str.= ' OR ( ' . implode(' AND ', $temp_ary2) . ' ) ';
                            }
                    }

            } else {
                    $where_str .= "m.manufacturers_name LIKE '%" . $keyword . "%' ";
                    $where_str .= ($ent_keyword) ? "OR m.manufacturers_name LIKE ('%".$ent_keyword."%') " : '';
            }
            $firstItem=false;
    }

    dann hab ich noch oben in den Sucheinstellungen aus dem hier
    Code: PHP  [Auswählen]
            'SEARCH_IN_PRODUCTS_NAME' => true,                              // Would you like to search in the product names? Possible values: true / false. Standard: true
            'SEARCH_IN_PRODUCTS_KEYWORDS' => true,                  // Would you like to search in the product keywords? Possible values: true / false. Standard: true
    das hier gemacht
    Code: PHP  [Auswählen]
            'SEARCH_IN_PRODUCTS_NAME' => true,                              // Would you like to search in the product names? Possible values: true / false. Standard: true
            'SEARCH_IN_MANUFACTURERS_NAME' => true,                 // Would you like to search in the product names? Possible values: true / false. Standard: true
            'SEARCH_IN_PRODUCTS_KEYWORDS' => true,                  // Would you like to search in the product keywords? Possible values: true / false. Standard: true

    Jedoch bin ich mir sicher, dass ich die Hersteller eigentlich irgendwie über die Tabelle "products" mit der "manufacturers_id" verknüpfen muss...nur hier fehlt mir irgendwie ein wenig der Plan.

    Kannst du mir da nen Tip geben?

    Danke
    Dominik

    voodoopupp

    • Fördermitglied
    • Beiträge: 1.869
    • Geschlecht:
    Also wenn ich nun testweise anstatt
    Code: PHP  [Auswählen]
    m.manufacturers_name
    das hier einsetze
    Code: PHP  [Auswählen]
    p.manufacturers_id
    funktioniert die Suche auch nach der Hersteller ID

    Aber wie bekomme ich es nun hin, dass man nicht nach der p.manufacturers_id sucht, sondern eben nach m.manufacturers_name ?
    Dazu muss ich doch über die manufacturer_id (vorhanden in der Tabelle products irgendwie auf die Tabelle manufacturers wechseln und über die ID dann entsprechend den Namen wählen!?

    NUR:
    Wie wechsle ich auf die Tabelle? Das ist etwas, was ich irgendwie nicht verstehe...

    Grüße
    Voodoo

    voodoopupp

    • Fördermitglied
    • Beiträge: 1.869
    • Geschlecht:
    okay, bin wieder einen Schritt weiter. Die Suche nach dem Hersteller funktioniert nun. Dafür sind folgende Dinge notwendig:
    Ersetze
    Code: PHP  [Auswählen]
    $searchConfig = array(
            'USE_SUMA_LINKS' => true,                                       // Would you like SUMA Links? Possible values: true / false. Standard: true
            'SEARCH_IN_PRODUCTS_NAME' => true,                              // Would you like to search in the product names? Possible values: true / false. Standard: true
     
    durch
    Code: PHP  [Auswählen]
    $searchConfig = array(
            'USE_SUMA_LINKS' => true,                                       // Would you like SUMA Links? Possible values: true / false. Standard: true
            'SEARCH_IN_PRODUCTS_NAME' => true,                              // Would you like to search in the product names? Possible values: true / false. Standard: true
            'SEARCH_IN_MANUFACTURERS_NAME' => true,                 // Would you like to search in the manufacturers names? Possible values: true / false. Standard: true

    füge nach
    Code: PHP  [Auswählen]
            } else {
                    $where_str .= "pd.products_name LIKE '%" . $keyword . "%' ";
                    $where_str .= ($ent_keyword) ? "OR pd.products_name LIKE ('%".$ent_keyword."%') " : '';
            }
            $firstItem=false;
    }
     
    dieses ein
    Code: PHP  [Auswählen]
    //Search in manufacturers_name
    if($searchConfig['SEARCH_IN_MANUFACTURERS_NAME'] == 1) {
            !$firstItem ? $where_str.=" OR " : false;
            if($searchConfig['SEVERAL_KEYWORDS_AND'] == 1) {
                    $temp_ary = explode(' ', $keyword);
                    $temp_ary2 = array();
                    for ( $i = 0; $i < count($temp_ary); ++$i )
                    {
                            $temp_ary2[] = " m.manufacturers_name LIKE '%" . $temp_ary[$i] . "%' ";
                    }
                    if ( count($temp_ary2) > 0 )
                    {
                            $where_str.= ' ( ' . implode(' AND ', $temp_ary2) . ' ) ';
                    }

                    if ($ent_keyword)
                    {
                            $temp_ary = explode(' ', $ent_keyword);
                            $temp_ary2 = array();
                            for ( $i = 0; $i < count($temp_ary); ++$i )
                            {
                                    $temp_ary2[] = " p.manufacturers_name LIKE '%" . $temp_ary[$i] . "%' ";
                            }
                            if ( count($temp_ary2) > 0 )
                            {
                                    $where_str.= ' OR ( ' . implode(' AND ', $temp_ary2) . ' ) ';
                            }
                    }

            } else {
                    $where_str .= "p.manufacturers_name LIKE '%" . $keyword . "%' ";
                    $where_str .= ($ent_keyword) ? "OR p.manufacturers_name LIKE ('%".$ent_keyword."%') " : '';
            }
            $firstItem=false;
    }

    Ersetze
    Code: PHP  [Auswählen]
    $sql_str = "
      SELECT
        p.products_id,
        p.products_tax_class_id,
        p.products_price,
        p.products_image,
        pd.products_name,
        pd.products_short_description,
        p2c.categories_id,
        c.categories_status,
        cd.categories_name,
      FROM
         "
    . TABLE_PRODUCTS . " p
        LEFT JOIN "
    . TABLE_PRODUCTS_DESCRIPTION . " pd ON p.products_id = pd.products_id
        LEFT JOIN "
    . TABLE_PRODUCTS_TO_CATEGORIES . " p2c ON p2c.products_id = pd.products_id
        LEFT JOIN "
    . TABLE_CATEGORIES . " c ON c.categories_id = p2c.categories_id
        LEFT JOIN "
    . TABLE_CATEGORIES_DESCRIPTION . " cd ON c.categories_id = cd.categories_id
      WHERE
    mit
    Code: PHP  [Auswählen]
    $sql_str = "
      SELECT
        p.products_id,
        p.products_tax_class_id,
        p.products_price,
        p.products_image,
        pd.products_name,
        pd.products_short_description,
        p2c.categories_id,
        c.categories_status,
        cd.categories_name,
        m.manufacturers_id,
        m.manufacturers_name
      FROM
         "
    . TABLE_PRODUCTS . " p
        LEFT JOIN "
    . TABLE_PRODUCTS_DESCRIPTION . " pd ON p.products_id = pd.products_id
        LEFT JOIN "
    . TABLE_PRODUCTS_TO_CATEGORIES . " p2c ON p2c.products_id = pd.products_id
        LEFT JOIN "
    . TABLE_CATEGORIES . " c ON c.categories_id = p2c.categories_id
        LEFT JOIN "
    . TABLE_CATEGORIES_DESCRIPTION . " cd ON c.categories_id = cd.categories_id
        LEFT JOIN "
    . TABLE_MANUFACTURERS . " m ON m.manufacturers_id = p.manufacturers_id
      WHERE

    Nur steht jetzt noch eine weitere Frage offen: wie kann ich die Suchabfrage kombinieren, so dass er auch Teile der Suche in allen Feldern prüft?

    Denn aktuell sieht es wie folgt aus:
    Artikelname: "Testartikel rot kariert hochkant"
    Hersteller: "Hersteller ABC"

    -> jetzt kann man entweder nach "Hersteller" suchen, dann wird "Hersteller ABC" angezeigt, suche ich nach "Testartikel" wird der "Testartikel rot kariert hochkant" angezeigt.
    ABER: Suche ich Nach "Testartikel ABC" oder "Hersteller rot kariert" o.ä. wird keines von beiden angezeigt.

    Das liegt scheinbar am Modul selbst. Zumindest, scheint es mir, dass er auch keinerlei Kombinationen aus den anderen wählbaren Suchkriterien kann, z.B. Artikelname und Artikelnummer usw.

    Hat einer eine Idee, wo man ansetzen muss damit eine Kombination aus den gewählten Suchkriterien möglich ist?

    Grüße
    Dominik

    h-h-h

    • modified Team
    • Beiträge: 4.562
    Hallo Dominik,
    sollte es machbar sein.
    Würde aber auf die Geschwingkeit drücken.
    Es sollte auch auf nur maximal 3 Keywords und bestimmte Spalten ( z.B products_name & manufacturers_name) beschränkt sein.

    Viele Grüße

    h-h-h

    voodoopupp

    • Fördermitglied
    • Beiträge: 1.869
    • Geschlecht:
    Hi h-h-h,

    ja ich habs jetzt schon mit CONCAT versucht, aber irgendwie hab ich das nicht hinbekommen.

    Das einzige, was ich eigentlich möchte, ist dass die Spalten m.manufacturers_name und pd.products_name wie eine abgefragt werden können...

    Grüße
    Dominik

    h-h-h

    • modified Team
    • Beiträge: 4.562
    Hallo Dominik,
    ich kann mir das in den kommenden Tagen anschauen.

    Freundlichen Gruß

    h-h-h

    voodoopupp

    • Fördermitglied
    • Beiträge: 1.869
    • Geschlecht:
    Hallo h-h-h,

    danke dafür aber ich hab das vorher schon an web28 geschickt, will da jetzt nicht mehrere Leute aufscheuchen und dann Stress verursachen ;)

    Wir haben ja noch was wichtigeres offen  :thumbs:

    Grüße
    Dominik

    Body62

    • Neu im Forum
    • Beiträge: 15
    • Geschlecht:
    Super Modul, habe ich in meinem Test-Shop laufen, der Anfang nächsten Jahres online gehen soll.  :thx:

    Was noch super wäre, wenn der Suchbegriff falsch eingegeben wird, das Modul den Vorschlag des Suchbegriffes über den gefundenen Kategorien bzw. Produkten anzeigen könnte und diesen Vorschlag in das Suchfenster übernehmen könnte.

    Dann könnte man die normale Suche nutzen und man muss sich nicht für einen der angezeigten Artikel entscheiden.

    Ich habe da eine Seite gefunden, so wie ich mir das vorstelle. Gebt mal in das Suchfeld "Betwasche" ein.

    http://www.bettenrid.de

    Grüße
    Uwe

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Das ist doch schon eingebaut, nicht ?
    siehe zur Erklärung http://de.wikipedia.org/wiki/K%C3%B6lner_Phonetik

    Gruß,
    noRiddle

    Body62

    • Neu im Forum
    • Beiträge: 15
    • Geschlecht:
    @noRiddle

    Ja das Modul findet die Artikel nur möchte ich das unter "Meinten Sie" der berichtigte bzw vorgeschlagene Suchbegriff erscheint und dieser dann durch anklicken in das Suchfeld übernommen werden kann.

    z.B. betwasche  dann findet er den Begriff Bettwäsche.
    Nun soll der Begriff Bettwäsche durch anklicken in die Suche übernommen werden und man könnte dann in der advanced_search_result.php alle Suchergebnisse sehen.

    Das hätte den Vorteil das man die Suchergebnisse noch vorfindet wenn man zurück geht.

    Wie es jetzt ist könnte man ja max 15 Artikel anzeigen und er Kunde muss sich für einen entscheiden und wenn dieser nicht gefällt muss er die Suche wiederholen.

    Gruß
    Uwe

    noRiddle (revilonetz)

    • Experte
    • Beiträge: 13.990
    • Geschlecht:
    Ich habe das Modul noch nicht verwendet, denke aber, daß es ein kleiner Eingriff ist neben den vorgeschlagenen Artikeln auch einfach das "verbesserte" oder vorgeschlagene Suchwort zum anklicken anzeigen zu lassen.
    Da müsste dir jemand helfen der das Modul in Verwendung hat und sich damit auskennt.
    Mir wäre das mom. zu aufwändig mich da reinzudenken, sorry.

    Gruß,
    noRiddle

    karabey

    • Schreiberling
    • Beiträge: 320
    • Geschlecht:
    Leider schaffe ich es nicht unter jquery-ui.css die Autocomplete box nach links zu verschieben.. Kann mir vielleicht jemand ein Tip geben wie ich es verschieben kann?

    Angeal

    • Fördermitglied
    • Beiträge: 411
    • Geschlecht:
    Ich habe das Problem das bei manchen Suchanfragen kein Link unter die Suchergebnisse gelegt wird.

    Dann sind diese nicht anklickbar. Erst wenn ich die Suchanfrage fortführe (und einige Suchergebnisse dadurch verschwinden) werden wieder Links unterlegt.

    Ich konnte leider keine Fehlerquelle ausfindig machen.
    Weiß einer Rat?

    voodoopupp

    • Fördermitglied
    • Beiträge: 1.869
    • Geschlecht:
    Hallo Angeal,

    dieses Phänomen konnten wir auch schon nachvollziehen. Stell mal an der Zeichenanzahl in der autocomplete.php rum unter "SUBSTRING_COUNT"

    Uns ist allerdings auch noch nicht genau klar, was diesen Fehler hevorruft. Anfangs hatten wir das Problem, wenn die Anzahl zu hoch war, so dass wir diese runtergeschraubt hatten. Dann war es irgendwann zu kurz und hat öfter mal zu dem genannten Fehler geführt. Jetzt sind wir aktuell auf "60" Zeichen...scheint zumindest zu funktionieren.

    Das hängt aber scheinbar auch irgendwie zusammen mit der Breite der Suche, der Bildgröße etc.

    Grüße
    Dominik
    1 Antworten
    2713 Aufrufe
    10. April 2012, 01:32:40 von h-h-h
    2 Antworten
    3256 Aufrufe
    12. April 2012, 09:29:29 von werresal
    2 Antworten
    2701 Aufrufe
    29. Mai 2017, 11:36:33 von monnecke
    18 Antworten
    13169 Aufrufe
    21. Dezember 2010, 11:45:08 von plasticman
               
    anything