OXID Community Forum

> German forum > Module > Free AutoSuggest with brain
Login
FAQ Members List Calendar Search Today's Posts Mark Forums Read

Thread: Free AutoSuggest with brain


Reply
 
Thread Tools Display Modes
#Top   #11  
Old 07-21-2011, 10:57 AM
coarsy's Avatar
coarsy coarsy is online now
Senior Member
Join Date: May 2010
Location: Frankfurt / Main
Posts: 1,778
coarsy is on a distinguished road
Send a message via Skype™ to coarsy
Default Re: Free AutoSuggest with brain

_header.tpl Scripteinbindung:
PHP Code:
<script src="[{ $oViewConf->getResourceUrl() }]autosuggest.js" type="text/javascript"></script> 
Hier die autosuggest.js, welche im Ordner "src" im Template abgelegt wird:
PHP Code:
var startSuggest 1;

$(
document).ready(function()
{
    
initEvents(thisParent);
});

/* Init basic events and effects */
function initEvents(thisParent)
{
  
initAutoSuggest();  
}

function 
initAutoSuggest()
{
  $(
"#searchparam").bind('keyup', function() { autoSuggest(); } );
  $(
"#searchparam").focus(function() { $('#searchparam').val(""); } );
  
  var 
0;
  $(
"#results").mouseenter(function() {
    
0;
    }).
mouseleave(function() {
    
1;
  });
  
  $(
"body").click(function(){ 
    if (
== 1) {
      $(
"#results").slideUp();
          $(
"#searchparam").blur(function() { $('#searchparam').val("Suchbegriff eingeben"); } );
    }
  });

PHP Code:
Dieses Script wird unter dem Namen autosuggest.php im Ordner Views abgelegt:

<?php
class autosuggest extends oxubase
    

        public function 
render()
        { 
            
        
$SQL_FROM 'SELECT * FROM oxarticles WHERE oxparentid = "" AND oxactive = 1 ';
        
$SQL_WHERE 'oxtitle';
        
$SQL_FROM_HERSTELLER 'oxmanufacturers';        
        
        
$searchq strip_tags($_GET['q']);
        
$articles_pp 8;
        
        
$page = !isset($_GET["page"]) ? intval($_GET["page"]);  
        
        
$start =  ($page $articles_pp) - $articles_pp;
        
        
$dbx oxDb::getDb()->qstr(''.$searchq.'');
        
$getRecord_sql $SQL_FROM.'AND '.$SQL_WHERE.' LIKE '.oxDb::getDb()->qstr('%'.$searchq.'%').' LIMIT '$start.' , '$articles_pp;        
        
mysql_query"SET NAMES 'utf8'" ); // Umlaute ausgeben
        
$getRecord        =    mysql_query($getRecord_sql);
        
        
$getRecord_sum $SQL_FROM.'AND '.$SQL_WHERE.' LIKE '.oxDb::getDb()->qstr('%'.$searchq.'%');
        
$getRecordsum        =    mysql_query($getRecord_sum);
        
                if(
$getRecord) {
        
$num_rows1 mysql_num_rows($getRecordsum);
        
$allrows $num_rows1;
        
$num_rows_all mysql_num_rows($getRecord);
        
$pages_sum ceil($num_rows1 $articles_pp);
        }
        
        if (
$num_rows1 == 0) {
        
$where_str "AND ( soundex_match(".$dbx.", oxtitle, ' ') = 1 ) LIMIT "$start." , "$articles_pp;
        
        
$getRecord_sql $SQL_FROM.' '.$where_str;  
        
$getRecord        =    mysql_query($getRecord_sql);
        
        
$getRecord_sum $SQL_FROM."AND ( soundex_match(".$dbx.", oxtitle, ' ') = 1 )";
        
$getRecordsum        =    mysql_query($getRecord_sum);
        
                    if(
$getRecord) {
            
$num_rows2 mysql_num_rows($getRecordsum);
            
$allrows $num_rows2;
            
$num_rows_all mysql_num_rows($getRecord);        
            
$pages_sum ceil($num_rows2 $articles_pp);
            }
        
        }
        
                if (
$num_rows1 == && $num_rows2 == 0) {
        
$where_str "AND ( koelner_match(".$dbx.", oxtitle, ' ') = 1 ) LIMIT " $start ." , "$articles_pp
        
        
$getRecord_sql 'select * FROM '.$SQL_FROM.' WHERE '$where_str;
        
$getRecord        =    mysql_query($getRecord_sql);
        
        
$getRecord_sum $SQL_FROM "AND ( koelner_match(".$dbx.", oxtitle, ' ') = 1 )";
        
$getRecordsum     =    mysql_query($getRecord_sum);
        
            if(
$getRecord) {
            
$num_rows3 mysql_num_rows($getRecord_sum);
            
$allrows $num_rows3;
            
$num_rows_all mysql_num_rows($getRecord);            
            
$pages_sum ceil($num_rows3 $articles_pp);
            }
            
        }
        
              
//Hersteller auslesen
              
$where_str " AND " $SQL_WHERE " LIKE " oxDb::getDb()->qstr('%'.$searchq.'%');
              
$getRecord_sql "SELECT * FROM " $SQL_FROM_HERSTELLER " WHERE oxactive = '1'" $where_str;  
              
$getRecordHersteller mysql_query($getRecord_sql);

              if(
$getRecordHersteller){
                  
$num_rows_manufactures mysql_num_rows($getRecordHersteller);
              }                                    
        
        if (
$num_rows1 == && $num_rows2 == && $num_rows3 == && $num_rows_manufactures == 0) {
                    echo 
"<table><tr class=\"first\"><td colspan=\"3\" class=\"title\">Es wurden keine Ergebnisse gefunden.</td></tr></table>"
                    exit;
        }

        if(
strlen($searchq)>0){
                
        
parent::render();
        
$oCurr oxConfig::getInstance()->getActShopCurrencyObject();
        
$sShopURL oxConfig::getInstance()->getConfigParam'sShopURL' );
        
        echo 
"<table>";
        
                if (
$num_rows1 || $num_rows2 || $num_rows3) {
                    echo 
"<tr class=\"first\"><td colspan=\"3\" class=\"title\">Zeige Ergebnisse " . ($start 1) . " - " . ($num_rows_all $start) . " von $allrows</td></tr>";       
        } 
        
        while (
$row mysql_fetch_array($getRecord)) {
        
        
$query "select oxseourl from oxseo WHERE oxobjectid = '" $row['OXID'] . "' AND oxlang = 0 AND oxparams IN(select oxid from oxcategories)";
        
$result mysql_query($query);
        while(
$zeile1 mysql_fetch_array($result))
        { 
$seourl $zeile1['oxseourl'] ;    
        }
        
$picname str_replace(".jpg"""trim(utf8_encode($row['OXPIC1'])));
        
?>
        <tr>
                    <td class="title"><?php echo '<a class="picture" href="/' .$seourl .'">' $row['OXTITLE']. '</a>'?></td>
                    <td class="price"><?php echo number_format($row['OXPRICE'], 2",""").' '.$oCurr->sign?></td>
                    <td class="image"><?php echo '<a href="/' .$seourl .'"><img src="'.$sShopURL.'out/pictures/generated/product/1/56_42_100/' $picname '.jpg" alt="' $row['OXTITLE'] . '">'?></td>
                </tr>
        
                <?php }
        
          if(
$num_rows_manufactures){
              
//Hersteller auflisten
              
              
echo '<tr><td colspan="3">' $num_rows_manufactures ' gefundene Hersteller:</tr>';
                                            
              while(
$row mysql_fetch_array($getRecordHersteller))
              {  
                  
$query "select oxseourl FROM oxseo WHERE oxobjectid = '" $row['OXID'] . "' AND oxlang = 0";
                  
$result mysql_query($query);
                  while(
$zeile1 mysql_fetch_array($result))
                  {
                    
$seourl $zeile1['oxseourl'] ;    
                  }
                  
                  
$picname str_replace(".jpg"""trim(utf8_encode($row['OXICON'])));
    
              
?>
                        <tr>
                            <td class="title" colspan="2"><?php echo '<a class="picture" href="/' .$seourl .'">' $row['OXTITLE']. '</a>'?></td>
                            <td class="image"><?php echo '<a href="/' .$seourl .'"><img src="'.$sShopURL.'out/pictures/generated/manufacturer/icon/56_42_100/' $picname '.jpg" alt="' $row['OXTITLE'] . '">'?></td>
                        </tr>
              <?php
              
}
                }        
        
        if (
$pages_sum 1) {
                echo 
'<tr><td class="pages" colspan="3"><span>Seiten:</span><ul class="pagination">';
        
        for(
$i=1$i<=$pages_sum$i++)
        {
          if (
$i==$page){
            echo 
'<li class="active"><a href="' $i '"><span>' $i '</span></a></li>';
          }
          else {
            echo 
'<li><a href="' $i '"><span>' $i '</span></a></li>';
          }
        }
            
        echo 
'</ul></td></tr>';
        }
  
        echo 
'</table>';
        exit; 
// Header-Fehler vermeiden
            
} else {
            exit;
            }
        }
    }
?>
search_field.tpl für basic.tpl (an gewünschter Stelle inkludieren) bzw. im Basic Template innerhalb
der _header.tpl (mittels: [{ include file="search_field.tpl" }]). Vorher das Template natürlich auf den Server laden und unter search_field.tpl speichern.

PHP Code:
<script type="text/javascript">
function 
autoSuggest() {
  var 
jQuery.trim($('#searchparam').val());
    
  if (
q.length >= startSuggest)
  {
    $(
"#results").hide(); 
    $(
"#results").html(" ");
   
    $.
ajax({
      
urlparent.location.protocol '//www.meinestruempfe.de/index.php?cl=autosuggest&q=' q,
      
cachefalse,
      
type"get",
      
success: function(data){
        if(
data) {
          $(
"#results").html(" ");
          $(
"#results").html(data);
          $(
'#results').show();
        }
        
initPagination(q);
      }
    });

  } else {
        $(
'#results').hide();
    }
}

function 
initPagination(q) {

    $(
'.pagination li a').click(function() {
            
        var 
= $(this).attr("href");
                
            $.
ajax({
            
urlparent.location.protocol '//www.meinestruempfe.de/index.php?cl=autosuggest&q=' '&page=' p,
            
cachefalse,
            
type"get",
            
success: function(data){
              if(
data) {
                $(
"#results").html(" ");
                $(
"#results").html(data);
                $(
"#results").show();
              }
                
initPagination(q);
            }
          });
          
        return 
false;  
    }); 

}

</script>
[{if $oView->showSearch() }]
<div id="sitesearch">
    <form action="[{ $oViewConf->getSelfActionLink() }]" method="get" class="search" id="f.search">
      <div>
              <div class="inner">
              [{ $oViewConf->getHiddenSid() }]
              <input type="hidden" name="cl" value="search">
              <input type="text" name="searchparam" value="Suchbegriff eingeben" size="20" id="searchparam" class="text" autocomplete="off">
              
              </div>
              [{if $oView->getSearchCatTree() }]
              <select id="test_searchCategorySelect" class="search_input" name="searchcnid" [{if $oViewConf->isAutoSearchOnCat() }]onchange="oxid.search('f.search','f.search.param');"[{/if}]>
                  <option value=""> [{ oxmultilang ident="INC_SEARCHLEFTITEM_ALLCATEGORIES" }] </option>
                  [{include file="inc/category_options.tpl" tree=$oView->getSearchCatTree() sSpacer=""}]
              </select>
              [{/if}]
              <button id="test_searchGo" type="submit" class="btn" value="Suchen"><span>Los</span></button>
      </div>
    </form>
</div>
<div id="results"></div>
[{/if}] 
__________________
Allerbeste Grüße und Dankeschön vom Chris

https://www.meinestruempfe.de
Oxid CE 4.7.13 / CAO <-> COI

Last edited by coarsy; 11-11-2011 at 12:13 PM.
Reply With Quote
#Top   #12  
Old 07-21-2011, 10:59 AM
cottoneyejoe cottoneyejoe is offline
Senior Member
Join Date: Apr 2010
Posts: 155
cottoneyejoe is on a distinguished road
Default AW: Free AutoSuggest with brain

Bitte zulassen. Einer reicht. Ich werd sonst klirre.

@leofonic: Dazu kann man doch die Ergebnisse begrenzen und 25000 Artikel kann man so oder so nur mit Suchbegriffen durchforsten.
Reply With Quote
#Top   #13  
Old 07-21-2011, 12:35 PM
leofonic's Avatar
leofonic leofonic is online now
Senior Member
Join Date: Oct 2009
Posts: 3,119
leofonic is on a distinguished road
Default AW: Free AutoSuggest with brain

Quote:
Originally Posted by cottoneyejoe View Post
@leofonic: Dazu kann man doch die Ergebnisse begrenzen und 25000 Artikel kann man so oder so nur mit Suchbegriffen durchforsten.
Ja, und? Amazon war doch nur ein Beispiel dafür warum ich die Suche bei http://www.yacht-steel.com/deutsch.html nicht für das Maß der Dinge halte, das Beispiel http://www.smow.de/ von caladan finde ich auch sehr gut.
__________________
Frank

www.zunderweb.de - Zunderweb IT Beratung - Templates und Module für Oxid eShop
Theme "EXP TWO" für 4.8.x - 2-spaltiges OXID 4.8 Theme mit 8 Farbschemata
Ajax Multifilter XL - Turbo für den Attributfilter
Reply With Quote
#Top   #14  
Old 07-21-2011, 12:41 PM
cottoneyejoe cottoneyejoe is offline
Senior Member
Join Date: Apr 2010
Posts: 155
cottoneyejoe is on a distinguished road
Default AW: Free AutoSuggest with brain

Dann habe ich das falsch interpreteirt. Ich habe jetzt nciht so die Ahnung, aber wird nicht mit
Code:
oxparentid = ""
eine Variante ausgeschlossen?
Reply With Quote
#Top   #15  
Old 07-21-2011, 12:50 PM
caladan caladan is offline
Senior Member
Join Date: Nov 2008
Location: Sindelfingen
Posts: 953
caladan is on a distinguished road
Send a message via ICQ to caladan
Default AW: Free AutoSuggest with brain

hmm könnte es nicht sein, dass oxparentid NULL ist? und ich meine mich zu erinnern bei sql wäre das dann "oxparentid= NIL" .. aber nicht sicher.
Reply With Quote
#Top   #16  
Old 07-21-2011, 01:04 PM
cottoneyejoe cottoneyejoe is offline
Senior Member
Join Date: Apr 2010
Posts: 155
cottoneyejoe is on a distinguished road
Default AW: Free AutoSuggest with brain

Das findet man in allen Abfragen des Shops und muß korrekt sein.
Reply With Quote
#Top   #17  
Old 07-21-2011, 01:07 PM
cottoneyejoe cottoneyejoe is offline
Senior Member
Join Date: Apr 2010
Posts: 155
cottoneyejoe is on a distinguished road
Default AW: Free AutoSuggest with brain

Zwischenfrage: Das Thema ist sehr interessant. Noch interessanter finde ich allerdings Filter. Könntert ihr euch vorstellen, so ein Tuts auch dafür zu machen. ?
Reply With Quote
#Top   #18  
Old 07-21-2011, 01:11 PM
caladan caladan is offline
Senior Member
Join Date: Nov 2008
Location: Sindelfingen
Posts: 953
caladan is on a distinguished road
Send a message via ICQ to caladan
Default AW: Free AutoSuggest with brain

das wäre dann wohl offtopic und mach doch nen eigenen thread dafür auf
Reply With Quote
#Top   #19  
Old 07-21-2011, 01:18 PM
Hebsacker's Avatar
Hebsacker Hebsacker is offline
Moderator
Join Date: Feb 2009
Location: Freie Republik Hohenlohe
Posts: 11,641
Hebsacker is on a distinguished road
Default AW: Free AutoSuggest with brain

Quote:
Originally Posted by caladan View Post
das wäre dann wohl offtopic ...
__________________
Ray
www.stahlwarenhaus-hebsacker.de______________._.__Tipps zur Forensuche
www.haller-stahlwaren.de____________________._____Tipps zum Forum
_________________________________________._____Forum für Dummies
Reply With Quote
#Top   #20  
Old 07-21-2011, 01:33 PM
beme's Avatar
beme beme is offline
Senior Member
Join Date: Dec 2009
Location: Hamburg Germany
Posts: 170
beme is on a distinguished road
Default Re: AW: Free AutoSuggest with brain

Quote:
Originally Posted by cottoneyejoe View Post
Dann habe ich das falsch interpreteirt. Ich habe jetzt nciht so die Ahnung, aber wird nicht mit
Code:
oxparentid = ""
eine Variante ausgeschlossen?
Hab das gerade gecheckt. Das Feld ist nicht NULL. Ist also korrekt. Es werden dann nur Vaterartikel angezeigt.

Amazon löst es übrigens wirklich geschickt. Zunächst wird verglichen ob der Suchbegriff als Teil eines Kategorienamens irgendwo auftaucht. Wenn ja, dann erscheint zunächst die Kategorie, ansonsten der Artikel, sortiert nach Relevanz. Ausserdem zieht die Live-Suche auch Attribute mit ran. So z.b DVD player tragbar, DVD Player Auto, DVD player USB etc. p. p. So kommt man auch mit nur wenigen Suchergebnissen aus.

Interessant ist, dass zuerst Kategorien und Attribute, dann erst Artikelergebnisse angezeigt werden.

Mal am Rande Sobald ich das Gefühl habe, dass eine Live Suche für mich wichtige Suchergebnisse unterschlägt nutze ich diese eh nicht, und schlänge mich lieber durch die normalen Ergebnisse.

Den Sinn des Thread Schliessens habe ich übrigens nicht ganz verstanden.
__________________
Gruß, René

Want to build a real driving motion simulator?
www.x-simulator.de
Reply With Quote
Reply

Bookmarks

Tags
autosuggest, brain, free, modul

« Previous Thread | Next Thread »
Thread Tools
Display Modes

Nicht Sichtbar
Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Free and available templates nheaney Templates and Design 8 05-16-2012 10:39 PM
Workshop 1 von X: AutoSuggest rubbercut Entwickler 69 07-21-2011 10:41 AM
oxid id free choosable? scuba303 Developers 2 05-12-2011 12:24 PM
Cannot download free module! bitconstructor@gmail.com Modules 3 10-27-2009 03:11 PM
bug/feature - get templates 4 free caladan Templates and Design 9 06-17-2009 05:14 AM

All times are GMT +1. The time now is 04:22 PM.