Page 2 of 3

Re: SUche + LiveSearch

Posted: Fri Feb 27, 2009 10:57 am
by onli
Ok. Wenn man mit dieser Indexabbildung arbeiten kann ist das von Vorteil.
Gruß

Re: SUche + LiveSearch

Posted: Fri Feb 27, 2009 11:08 am
by garvinhicking
Hi!

Hättest Du vielleicht Lust+Zeit den kompletten Patch nochmal mit der neuen Methode zu machen? Und dann hier im Board am besten die komplette plugins_internal.inc.php attachen, dann kann ich das committen?

Dank&Gruß,
Garvin

Re: SUche + LiveSearch

Posted: Fri Feb 27, 2009 11:09 am
by onli
Ja, allerdings kann ich das gerade nicht testen. Unter dem Vorbehalt also, dass ich die Indexabbildung ausbaldowern kann. Aber wahrscheinlich funktioniert dein Code so.
Gruß

Re: SUche + LiveSearch

Posted: Fri Feb 27, 2009 2:15 pm
by onli
So, klappt.

Code: Select all

diff -Nur serendipity-nightly/include/functions_entries.inc.php /var/www/include/functions_entries.inc.php 
--- serendipity-nightly/include/functions_entries.inc.php	2008-12-09 11:05:33.000000000 +0100
+++ /var/www/include/functions_entries.inc.php	2009-02-27 14:05:50.000000000 +0100
@@ -722,11 +722,13 @@
  * @access public
  * @param   string      The searchterm (may contain wildcards)
  * @param   int         Restrict the number of results [also uses $serendipity['GET']['page'] for pagination]
+ * @param   array       Add search Results at the top
  * @return  array       Returns the superarray of entries found
  */
-function &serendipity_searchEntries($term, $limit = '') {
+function &serendipity_searchEntries($term, $limit = '', $searchresults = '') {
     global $serendipity;
 
+    $orig_limit = $limit;
     if ($limit == '') {
         $limit = $serendipity['fetchLimit'];
     }
@@ -817,10 +819,35 @@
 
     $search =& serendipity_db_query($querystring);
 
-    if (is_array($search)) {
+    //Add param searchresults at the top and remove duplicates.
+    if (is_array($searchresults)) {
+        $ids_current = array();
+        foreach($searchresults AS $idx => $data) {
+            $ids_current[$data['id']] = true;
+        }
+   
+        foreach($search AS $idx => $data) {
+            if (isset($ids_current[$data['id']])) {
+                unset($search[$idx]);
+            }
+        }
+        $search = array_merge($searchresults, $search);
+    }
+
+    //if * wasn't already appended and if there are none or not enough
+    //results, search again for entries containing the searchterm as a part  
+    if (strpos($term, '*') === false) {
+        if (! is_array($search)) {
+            return serendipity_searchEntries($term.'*', $orig_limit);
+        }else if (count($search) < 4){
+            return serendipity_searchEntries($term.'*', $orig_limit, $search);
+        }
+    }
+    
+    if (is_array($search)){
         serendipity_fetchEntryData($search);
     }
-
+    
     return $search;
 }
Datei hochladen würde ich auch machen, leider bekomme ich dann einen connection-interrupted-Fehler.

Re: SUche + LiveSearch

Posted: Fri Feb 27, 2009 2:29 pm
by garvinhicking
Hi!

Gibt es einen speziellen GRund warum du $orig_limit benutzt?

Gräße,
Garvin

Re: SUche + LiveSearch

Posted: Fri Feb 27, 2009 4:41 pm
by onli
Ja. limit wird im Laufe der Funktion neu belegt. Gibt man dann einfach das weiter funktioniert der zweite Durchgang nicht.

Re: SUche + LiveSearch

Posted: Tue Mar 03, 2009 2:46 pm
by onli
Hi Garvin
Ich möchte keine Hektik verbreiten. Nur fragen, ob noch was fehlt.
Gruß

Re: SUche + LiveSearch

Posted: Tue Mar 03, 2009 3:02 pm
by garvinhicking
Hi!

Ah, ganz vergessen. Könntest Du den patch evtl jetzt nochmal versuchen zu attachen (hab in den foreneinstellungen auch plaintext zugelassen)? Dann kann ich das ganze leichter per wget auf meinen server ziehen, per copy+paste ist das hier remote alles etwas frickelig.

Danke,
Garvin

Re: SUche + LiveSearch

Posted: Tue Mar 03, 2009 3:21 pm
by onli
Tut mir Leid. Ich bekomme da immer noch einen "connections interrupted"-Fehler. Aber das geht ja auch anders: http://www.onli-blogging.de/uploads/fun ... ntries.txt .
Gruß

Re: SUche + LiveSearch

Posted: Tue Mar 03, 2009 3:49 pm
by garvinhicking
Hi!

Ich hab den Code nochmal gelesen, kann es sein dass wenn man eine Suche bereits mit "*" durchführt, es keine Suchergebnisse gibt weil $search nirgendwo belegt wird? Denn beim ersten Aufruf ist $searchresults ja auch noch nich belegt, und er springt nirgendwo in einen der IF-Teile...?!

Grüße,
Garvin

Re: SUche + LiveSearch

Posted: Tue Mar 03, 2009 6:56 pm
by onli
Vorab: Finde es gut, dass du den Code so überprüfst.

Die Variablenbenennung ist suboptimal. $search wird immer auf jeden Fall belegt, in $search wird das Ergebnis der Datenbankabfrage gespeichert: '$search =& serendipity_db_query($querystring);'

Wenn der Suchbegriff ein * enthält, wird (strpos($term, '*') === false) falsch, die Suche also nicht nochmal angeschmissen. Mehr ändert sich nicht.

$searchresult muss davon unabhängig betrachtet werden. Es ist ein Array, dessen Inhalt vorne an die Suchergebnisliste "$search" angefügt wird, Doppler in $search entfernt. Die Initialbelegung von $search ist davon unabhängig.

Also: Wenn ich nach tes* suche, findet er genau so viele Treffer, wie wenn ich nach test suche.
Gruß

Re: SUche + LiveSearch

Posted: Wed Mar 04, 2009 1:10 pm
by garvinhicking
Hi!

Ach mist. Ich hab den ganzen Anfang der funktion übersehen im Diff-Format. Entschuldigung für die unnötige Nachfrage, aber wie Du schon sagst - besser einmal zu oft als zu wenig gefragt :-)

Haben deinen Patch gerade eingestellt!

Grüße,
Garvin

Re: SUche + LiveSearch

Posted: Mon Mar 09, 2009 1:04 am
by serels
garvinhicking wrote:Hi!

Ach mist. Ich hab den ganzen Anfang der funktion übersehen im Diff-Format. Entschuldigung für die unnötige Nachfrage, aber wie Du schon sagst - besser einmal zu oft als zu wenig gefragt :-)

Haben deinen Patch gerade eingestellt!

Grüße,
Garvin
... und was muss ich jetzt tun, damit ich in den Genuß der erweiterten Such - Funktionalität komme ?

lg serels

Re: SUche + LiveSearch

Posted: Mon Mar 09, 2009 10:56 am
by garvinhicking
Hi!
... und was muss ich jetzt tun, damit ich in den Genuß der erweiterten Such - Funktionalität komme ?
Entweder indem Du den Patch manuell in deine Datei include/functions_entries.inc.php einspielst - wenn Dir das zu hakelig ist oder das KnowHow fehlt, musst Du entweder auf die Veröffentlichung von Serendipity 1.5 warten (das könnte jedoch noch mehrere Wochen dauern) oder Du müsstest auf den aktuellen Serendipity Snapshot von 1.5-alpha aktualisieren.

Dort hat sich auch am Loginmanagement etwas getan, daher solltest du die Snapshots eher nur einsetzen wenn Du vorher ein Backup machst. :-)

Grüße,
Garvin

Re: SUche + LiveSearch

Posted: Mon Mar 09, 2009 11:44 am
by serels
garvinhicking wrote:Hi!
... und was muss ich jetzt tun, damit ich in den Genuß der erweiterten Such - Funktionalität komme ?
Entweder indem Du den Patch manuell in deine Datei include/functions_entries.inc.php einspielst - wenn Dir das zu hakelig ist oder das KnowHow fehlt, musst Du entweder auf die Veröffentlichung von Serendipity 1.5 warten (das könnte jedoch noch mehrere Wochen dauern) oder Du müsstest auf den aktuellen Serendipity Snapshot von 1.5-alpha aktualisieren.

Dort hat sich auch am Loginmanagement etwas getan, daher solltest du die Snapshots eher nur einsetzen wenn Du vorher ein Backup machst. :-)

Grüße,
Garvin
Hi Garvin

Mal sehen ...

Wo finde ich den Patch und an welcher Stelle der Datei paste ich den code hinein ?

lg
serels