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)

    techway

    • Experte
    • Beiträge: 163
    Hi,

    ja ich bin aus Obersulm.

    Wenn du dir das Algorithmus von SOUNDEX anschaust dann wird dir klar werden warum es nicht erkannt wird.

    Ich hab auch mal mit Kölner Phonetik probiert, dort wird es erkannt.

    Hier ein neues Package mit Kölner Phonetik integriert.
    Es wurde nur die autocomplete.php geändert und die neue SQL-Datei ist dazugekommen.

    Man kann auch beide Algorithmen (Soundex und Kölner Phonetik) aktivieren, wenn Soundex nichts findet dann wird Kölner Phonetik ausgeführt.

    Testet einfach was bei euch besser funktioniert...

    Gruß
    TechWay

    [EDIT Tomcraft 27.02.2011: Modul in Beitrag 1 aktualisiert.]

    xarnu

    • Mitglied
    • Beiträge: 128
    Na das doch mal klasse.

    Hab's mal meinem Techniker weiter gegeben der das ganze in die Datenbank importiert. ;)

    Können ja bei Gelegenheit mal a Bierle zamme zischa ganga. ;)

    rockacker.de

    • Fördermitglied
    • Beiträge: 17
    Hallo,

    ich nutze die PHP Version PHP Version 5.2.0-8+etch11 und habe das selbe Problem wie Piru, es wird einfach nix angezeigt.

    [...] Deine neue function __json_encode($data) funktioniert perfekt. [...]

    Könntet Ihr diese Lösung evtl. nochmal posten?

    techway

    • Experte
    • Beiträge: 163
    Hallo,

    bei piru war dass Problem dass Sie eine ältere PHP Version (<5.2.0) hatte, die Funktion json_encode aber erst ab 5.2.0 gibt.
    Eigentlich sollte bei dir wegen der Funktion kein Fehler geben.

    Probiere mal das PHP-Skript direkt aufzurufen um PHP Fehler auszuschließen:
    Zitat
    http://www.my-shop.de/autocomplete.php?term=test
    (natürlich deine Domain richtig einsetzen)

    Wenn Du doch einen Fehler bekommst dass die Funktion json_encode nicht bekannt sei, dann musst du in der autocomplete.php diese Funktion einfügen:

    Code: PHP  [Auswählen]
    function __json_encode( $data ) {
        if( is_array($data) || is_object($data) ) {
            $islist = is_array($data) && ( empty($data) || array_keys($data) === range(0,count($data)-1) );

            if( $islist ) {
                $json = '[' . implode(',', array_map('__json_encode', $data) ) . ']';
            } else {
                $items = Array();
                foreach( $data as $key => $value ) {
                    $items[] = __json_encode("$key") . ':' . __json_encode($value);
                }
                $json = '{' . implode(',', $items) . '}';
            }
        } elseif( is_string($data) ) {
            # Escape non-printable or Non-ASCII characters.
           # I also put the \\ character first, as suggested in comments on the 'addclashes' page.
           $string = '"' . addcslashes($data, "\\\"\n\r\t/" . chr(8) . chr(12)) . '"';
            $json    = '';
            $len    = strlen($string);
            # Convert UTF-8 to Hexadecimal Codepoints.
           for( $i = 0; $i <$len; $i++ ) {

                $char = $string[$i];
                $c1 = ord($char);

                # Single byte;
               if( $c1 <128 ) {
                    $json .= ($c1> 31) ? $char : sprintf("\\u%04x", $c1);
                    continue;
                }

                # Double byte
               $c2 = ord($string[++$i]);
                if ( ($c1 & 32) === 0 ) {
                    $json .= sprintf("\\u%04x", ($c1 - 192) * 64 + $c2 - 128);
                    continue;
                }

                # Triple
               $c3 = ord($string[++$i]);
                if( ($c1 & 16) === 0 ) {
                    $json .= sprintf("\\u%04x", (($c1 - 224) <<12) + (($c2 - 128) <<6) + ($c3 - 128));
                    continue;
                }

                # Quadruple
               $c4 = ord($string[++$i]);
                if( ($c1 & 8 ) === 0 ) {
                    $u = (($c1 & 15) <<2) + (($c2>>4) & 3) - 1;

                    $w1 = (54<<10) + ($u<<6) + (($c2 & 15) <<2) + (($c3>>4) & 3);
                    $w2 = (55<<10) + (($c3 & 15)<<6) + ($c4-128);
                    $json .= sprintf("\\u%04x\\u%04x", $w1, $w2);
                }
            }
        } else {
            # int, floats, bools, null
           $json = strtolower(var_export( $data, true ));
        }
        return $json;
    }
     
    Quelle: http://php.net/manual/de/function.json-encode.php

    und am ende der Datei den Aufruf ändern, statt:

    Code: PHP  [Auswählen]
    print json_encode($return_arr);
     
    dann über die neue Funktion aufrufen:

    Code: PHP  [Auswählen]
    print __json_encode($return_arr);
     
    Gruß
    TechWay

    bkabel

    • Schreiberling
    • Beiträge: 341
    • Geschlecht:
    Hi techway,

    ich habe genau die gleichen Probleme wie piru und rockacker.de:?

    Bei mir gibt der Direktaufruf der "autocomplete.php" folgendes aus:

    Code: PHP  [Auswählen]
    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/[...]/autocomplete.php on line 143

    Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /home/[...]/inc/xtc_db_fetch_array.inc.php on line 44

    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/[...]/autocomplete.php on line 437

    Es sieht so aus, als würden die beiden SQL-Abfragen in der "autocomplete.php" nicht funktionieren und die funktion in der "/inc/xtc_db_fetch_array.inc.php".

    meine xtc_db_fetch_array.inc.php:

    Code: PHP  [Auswählen]
    //   $Id: xtc_db_fetch_array.inc.php 864 2005-04-16 12:05:41Z mz $  

        function xtc_db_fetch_array(&$db_query,$cq=false) {

            //BOF - DokuMan - 2010-02-25 - also check for defined DB_CACHE constant
            if (defined('DB_CACHE') && DB_CACHE=='true' && $cq) {
            //if (DB_CACHE=='true' && $cq) {
            //EOF - DokuMan - 2010-02-25 - also check for defined DB_CACHE constant

                    // BOF - Tomcraft - 2009-08-18 - fixed bug with switched on DB-CACHE in relation with multi-language metatags.php
              //if (!count($db_query)) return false;
              if (!is_array($db_query) || !count($db_query)) return false;
              // BOF - Tomcraft - 2009-08-18 - fixed bug with switched on DB-CACHE in relation with multi-language metatags.php
              $curr = current($db_query);
              next($db_query);
              return $curr;
            } else {
                if (is_array($db_query)) {
                $curr = current($db_query);
                next($db_query);
                return $curr;
                }
    /*Zeile 44*/ return mysql_fetch_array($db_query, MYSQL_ASSOC);
            }
        }
    ?>

    Gruß Björn

    piru

    • Fördermitglied
    • Beiträge: 1.263
    • Geschlecht:
    Hallo Techway,

    ich habe meine PHP Version aktualisiert und jetzt geht mit der originalen autocomplete.php perfekt!

    Gruß
    piru

    xarnu

    • Mitglied
    • Beiträge: 128
    Also bei mir ist's nun auch drin aber die Kölner will irgendwie nicht so recht.
    Wenn ich statt samsung mal samusng eingebe, spuckt er mir nichts aus.

    riffi_at

    • Fördermitglied
    • Beiträge: 72
    kann es sein, dass nach dem einbau und import der sql lahmt? habe ca. 60000 artikel und ab der zweiten suche steht alles. der shop braucht dann ca. 2 min bis er eine seite aufgebaut hat.wie kann man die sql wieder deinstallieren?

    techway

    • Experte
    • Beiträge: 163
    Hallo riffi_at,

    die SQL-Dateien stören nicht, da diese lediglich Zusatz-Funktion in die DB speichern.
    Um die ganze geschichte zu deaktivieren muss du lediglich die ID des Suchfeldes ändern (Siehe Install.html die Änderung der Datei templates/xtc5/source/boxes/search.php )

    Wenn Du doch die SQL-Funktionen raus haben willst dann musst du einfach die Drop-Querys ausführen wie z.b.:

    Code: SQL  [Auswählen]
    DROP FUNCTION IF EXISTS soundex_match;
     
    (diese findest du auch in der SQL-Datei ganz am Anfang)

    Bei vielen Artikeln würde ich vermuten dass die Fehlertolerante Suche ewig braucht, diese kann man aber auch extra ausschalten ;)

    (das Fuzzy-Search Modul was hier noch im Forum existiert ist meiner Meinung nach noch langsamer)

    techway

    • Experte
    • Beiträge: 163
    Also bei mir ist's nun auch drin aber die Kölner will irgendwie nicht so recht.
    Wenn ich statt samsung mal samusng eingebe, spuckt er mir nichts aus.

    Hi,

    wenn du diesen Link anschaust:
    http://www.cogido.de/autocomplete.php?term=samusng

    dann siehst du dass es ein Fehler zurückliefert:
    Zitat
    1305 - FUNCTION cogido_de.soundex_match does not exist

    d.h. du hast wohl nicht richtig die SQL-Datei eingespielt bzw. es sind fehler aufgetreten beim installieren der SQL-Datei (dass kann bei älteren Versionen von phpMyAdmin passieren, die kannten den Delimiter noch nicht...)

    riffi_at

    • Fördermitglied
    • Beiträge: 72
    danke für die info. die vorschläge kommen auch sehr schnell - schon bei der eingabe, aber wenn ich jetzt im suchfeld die enter-taste drücke passierts. dann bleibt die seite für minuten weiss, als wie wenn sich die datenbank vertschüsst. habs probiert und SOUNDEX_SEARCH + KOELNER_PHONETIK auf false gestellt, dann gehts. fuzzy search funktioniert bei mir wunderbar und geht auch sehr flott. vielleicht bekommen sich die beiden module in die haare. wäre schön, wenn die suche dann "ibad" auch als "ipad" erkennt

    techway

    • Experte
    • Beiträge: 163
    Hast du vielleicht ein Link zum Shop um es zu testen?

    luckybaron

    • Mitglied
    • Beiträge: 168
    Habe zur Zeit noch IntelliSearch 1.04 im Einsatz, doch leider funktioniert der nicht im Warenkorb(SSL).
    Ist es mit diesem Modul möglich im SSL Modus zu arbeiten?
    Und ist es einfach so möglich, das ich es über das IntelliSearch Modul installiere oder muss ich den IntelliSearch Code erst entfernen?

    techway

    • Experte
    • Beiträge: 163
    Hallo,

    ob mit SSL funktioniert kann ich nicht sagen, habe es noch nicht produktiv im Einsatz. Vielleicht kann sich jemand anders dazu äußern/ausprobieren...

    Ich denke schon dass du dieses Modul parallel zu IntelliSearch installieren kannst, nur musst du natürlich das IntelliSearch irgendwie deaktivieren, sonst kriegst du immer zwei Fenster angezeigt ;)

    Gruß
    TechWay

    bkabel

    • Schreiberling
    • Beiträge: 341
    • Geschlecht:
    Hi techway,

    kannst du mir bei meinem Problem mit den SQL-Funktionen Hilfestellung geben?

    Den Post dazu findest du weiter oben!

    Gruß Björn

    1 Antworten
    2624 Aufrufe
    10. April 2012, 01:32:40 von h-h-h
    2 Antworten
    3202 Aufrufe
    12. April 2012, 09:29:29 von werresal
    2 Antworten
    2617 Aufrufe
    29. Mai 2017, 11:36:33 von monnecke
    18 Antworten
    12884 Aufrufe
    21. Dezember 2010, 11:45:08 von plasticman