MovableType Livesuche

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • MovableType Livesuche

    Hallo, mein erster Post hier ganz nebenbei :)

    Hat jemand von Euch diese Livesuche schonmal unter MovableType zum laufen bekommen? Ich versuch mich daran gerade nur bekomme ich nicht unbedingt das ausgegeben, was ich gerne hätte. den Titel zum Beispiel als Link dorthin :)

    Hier wird sie eingesetzt:
    blogfactor.de/mt-static/blogfactor/

    Ich nutze bisher die Scriptgoodies hier aus diesem Thread. Bin für jeden Tipp dankbar, da meine PHP/MYSQL Kenntnisse nicht allzu weiten Horizont besitzen.

    Als Beispiel wie ich die Livesuchen-Ausgabe gerne einsetzen möchte schaut Euch doch bitte diese Seite mal an :)

    pixelgraphix.de/log/

    Danke für jeden Tipp, Sven

    So ein kleiner Nachtrag für alle die an einer Livesuche für MovableType interessiert sind. Das verwendete Javascript/ Ajax könnt Ihr direkt von der Bitflux-Seite runterladen. Instruktionen zur implementierung des Scripts findet Ihr dort geschrieben. (http://blog.bitflux.ch/wiki/LiveSearch).

    Dieser Thread behandelt die Datenbankabfrage einer MovableType (3.2)-Datenbank, in wie weit diese abwärtskompatibel ist weis ich nicht.

    Speichert das Script als livesearch.php oder wie Ihr sie nennen wollt (als Template-Vorlage im MT-Interface und vergesst nicht die Variable ebenfalls Euren wünschen anzupassen. Standart ist "q" - und so ist es auch hier belassen.

    Wenn Ihr bereits eigene Abfragen gebastelt habt für MT - postet diese doch hier herein - vielleicht habt Ihr noch mehr Funktionen drin die sehr interessant sind.
  • Hi, ich korrigiere mich mal in meiner Vermutung. Es liegt sicher nicht an dieser Zeile*g

    Ich habe nach langem Suchen, tüftel seit 3 Tagen daran rum und, naja wenn man sich nicht soooo sehr damit auskennt kanns noch länger werden*g aber ich geb nicht auf. Ich habe nun nen Link gefunden der mir schonmal ansatzweise mehr erläutert, doch nen Fehler gibts da leider noch immer. Zeile 7.

    Blogfactor wird meine Seite ja :)

    Hier mal der Code, wie er bisher jetzt aussieht:
    <?
    include ('db_config.inc.php');

    $res = mysql_query("SELECT entry_id, entry_title, entry_excerpt,DATE_FORMAT(entry_created_on,'%Y_%m') AS date FROM mt_entry WHERE entry_text LIKE '%$q%' ORDER BY entry_created_on DESC ");

    echo "<?xml version='1.0' encoding='utf-8' ?>"
    echo "<ul class='LSRes'>\n"while ($row = @mysql_fetch_array($query_results)) {echo "<li class='LSRow'>Link text</li>"}echo "</ul>\n"

    ?>


    achja, der Link:
    wishingline.com/notebook/archives/2004_12.php
    Title: Implementing Livesearch (Updated)*
  • wie kamst du denn zu deiner bisherigen lösung?

    also aus
    echo "<ul class='LSRes'>\n"while ($row = @mysql_fetch_array($query_results)) {echo "<li class='LSRow'>Link text</li>"}echo "</ul>\n"


    solltest du folgendes machen

    Quellcode

    1. echo "<ul class='LSRes'>\n";
    2. while ($row = @mysql_fetch_array($query_results)) {
    3. echo "<li class='LSRow'>Link text</li>";
    4. }
    5. echo "</ul>\n";
  • Hi,

    ändert leider nix, kann es sein das der Fehler - oder ein weiterer schon in folgender Zeile ist? Das Syntax-highlighting in Maguma bricht in folgender Zeile ab.

    Quellcode

    1. echo "<?xml version='1.0' encoding='utf-8' ?>"


    So sieht es aktuell komplett aus:

    Quellcode

    1. <?
    2. include('db_config.inc.php');
    3. $res = mysql_query("SELECT entry_id, entry_title, entry_excerpt, DATE_FORMAT (entry_created_on,'%Y_%m') AS date FROM mt_entry WHERE entry_blog_id='1' AND entry_text LIKE '%$q%' ORDER BY entry_created_on DESC");
    4. echo "<?xml version='1.0' encoding='utf-8' ?>"
    5. echo "<ul class='LSRes'>\n";
    6. while ($row = @mysql_fetch_array($query_results)) {
    7. echo "<li class='LSRow'>Link text</li>";
    8. }
    9. echo "</ul>\n";
    10. ?>
    Alles anzeigen


    Den Lösungsvorschlag von www.wishingline.com sieht folgendermaßen aus. Sind aber eben nur Bruchstücke mit denen allein ich nix anfangen kann.

    --------
    The next piece of the puzzle is to return the results in a standard XML format to be parsed by the XMLHTTPRequest JavaScript object. The Wiki page describes this format but I will reproduce it here so it is clear. This is the PHP you essentially will need to use to return a correctly formatted set of results:

    Quellcode

    1. echo "<?xml version='1.0' encoding='utf-8' ?>"
    2. echo "<ul class='LSRes'>\n"while ($row = @mysql_fetch_array($query_results)) {echo "<li class='LSRow'>Link text</li>"}echo "</ul>\n"


    Don’t necessarily copy this verbatim, but it should be enough to give you a good start on how to return the results. Include links and such where appropriate and watch out for whitespace parsing and validation issues with the XML returned. Note that you don’t have to use an unordered list here, this is just a suggestion to keep thing clean and to try to make the returned content clean and easy to style with CSS.

    //EDIT:
    Okay, habe in die oben genannte Zeile auch ein Semikolon zum Schluß gesetzt. Kommt keine Fehlermeldung mehr, allerdings auch keine Ergebnisse.....auweia

    //EDIT2:
    So, ich habe nun nochmal einen anderen Lösungsansatz gefunden, basiert ebenfalls auf die BITFLUX Livesearch. Zumindest passiert jetzt mal etwas wenn ich was ins Suchfeld einge. Allerdings, für mich auch noch Logisch, zeigt er mit die letzten 5 Artikel die überhaupt gepostet wurden immer an. Egal was ich einge. Das der Code nichts anderes aussagt ist mir klar, wie müsste ich den Code umschreiben, um genau das zu erreichen was ich möchte?

    Ist es auf diesem Weg den ich jetzt eingeschlagen habe überhaupt möglich daraus eine php-Abfrage zu erstellen?

    Hier mal der Code der auch aktuell auf diesem Link angewendet wird: http://www.blogfactor.de/mt-static/blogfactor/

    Quellcode

    1. <?
    2. header("Content-type: text/xml;charset=ISO8859-1");
    3. ?>
    4. <p>Results for: <strong><?=$_REQUEST["q"]?></strong></p>
    5. <!-- MovableType Tags -->
    6. <ul>
    7. <MTEntries category="News OR Mods OR Tracks OR Texturen OR Videos OR Updates">
    8. <li><a href="<$MTEntryPermalink$>#more"><$MTEntryTitle$></a></li>
    9. <li><$MTEntryDate format="%e. %B %Y"$></li>
    10. </MTEntries>
    11. </ul>
    Alles anzeigen


    Und nein, ich geb nicht auf. Gibts bei mir nicht!!! Mittlererweile gibt es glaub ich zu diesem Thema auch keinen Link bei Google, den ich nicht besucht habe.....bin für alles dankbar!
  • Jap, also die Funktion ansich isdt bereits da :) Allerdings, du wirst es feststellen wenn Du mal irgendwelche Buchstaben da rein schreibst, das die Treffer immer die selben sind - in eimmer gleicher Reihenfolge.

    Die Livesearch ist es jap, weil da noch keine "echte Datenbankabfrage" passiert.

    Das ist die livesearch.php

    Quellcode

    1. <?
    2. header("Content-type: text/xml;charset=ISO8859-1");
    3. ?>
    4. <p>Results for: <strong><?=$_REQUEST["q"]?></strong></p>
    5. <MTEntries category="News OR Mods OR Tracks OR Texturen OR Videos OR Updates">
    6. <ul>
    7. <li><a href="<$MTEntryPermalink$>#more"><$MTEntryTitle$></a></li>
    8. <li><$MTEntryDate format="%e. %B %Y"$></li>
    9. </ul>
    10. </MTEntries>


    Ich sehe selber, das da keine Datenbankabfrage passiert, sondern eben bei Eingabe egal welcher Buchstaben einfach eine Artikellistung erfolgt mit absteigendem Datum.

    //EDIT:
    Die richtigen Daten zur Verbindung und anschließend richtigen Tabelle habe ich schon hier:

    Quellcode

    1. <?
    2. include('db_config.inc.php');
    3. $res = mysql_query("SELECT entry_id, entry_title, entry_excerpt, DATE_FORMAT (entry_created_on,'%Y_%m') AS date FROM mt_entry WHERE entry_blog_id='1' AND entry_text LIKE '%$q%' ORDER BY entry_created_on DESC");
    4. ?>



    Allein Quasi die Ausgabe der Daten, mit den Permalinks und Titeln der Artikel ist mir noch ein Dorn im Auge!

    //EDIT:
    Vielleicht hilft mir ein Plugin weiter, und zwar dieses hier:
    http://www.sixapart.com/pronet/plugins/plugin/sql.html

    //EDIT
    So, das Plugin habe ich mal installiert und unterhalb der Livesuche, also separat eingefügt.

    <MTSQLEntries query="select entry_id from mt_entry
    where entry_title like '%Textur%'">
    <a href="<MTEntryLink>"><MTEntryTitle></a><br />
    </MTSQLEntries>


    Ich nutze quasi eine festgeschriebene Abfrage zu allem, was das Textur beinhaltet. Wenn ich statt %Textur% nun das Script mit der Livesuche verbinde, sollte es doch irgendwie möglich sein, das zum laufen zu bekommen? Also quasi müsstedas Script der Livesuche lediglich den Wert anpassen...hmmhmm....

    //EDIT
    So, das ist jetzt der aktuelle Stand, mit Teilerfolg

    Quellcode

    1. <?
    2. header("Content-type: text/xml;charset=ISO8859-1");
    3. ?>
    4. <p>Results for: <strong><?=$_REQUEST["q"]?></strong></p>
    5. <MTEntries category="News OR Mods OR Tracks OR Texturen OR Videos OR Updates">
    6. <ul>
    7. <li><MTSQLEntries query="select entry_id from mt_entry
    8. where entry_title like '%q%'">
    9. <a href="<MTEntryLink>"><MTEntryTitle></a><br />
    10. </MTSQLEntries></a></li>
    11. </ul>
    12. </MTEntries>
    Alles anzeigen
  • uff.. gewöhn dir mal an deine beiträge zu bearbeiten, anstatt neue zu erstellen ;)

    habe mal ein bisschen aufgeräumt

    Nach MovableType Syntax wäre folgender Code korrekt..

    Quellcode

    1. <?php header("Content-type: text/xml;charset=ISO8859-1"); ?>
    2. <p>Results for: <strong><?=$_GET["q"]; ?></strong></p>
    3. <ul>
    4. <MTSQLEntries query="select entry_id from mt_entry where entry_title like '%Movable Type%'">
    5. <li><a href="<MTEntryLink>"><MTEntryTitle></a></li>
    6. </MTSQLEntries>
    7. </ul>


    aber ich bin mir nicht sicher, wie du den Code durch MovableType parsen lassen willst..
    livesearch.php läuft ja quasi standalone

    Daher würde ich dir eine normale SQL Abfrage empfehlen
    die sähe ungefähr so aus.. allerdings weiß ich nicht genau, wie sich die URL zusammensetzt

    Quellcode

    1. <?php header("Content-type: text/xml;charset=ISO8859-1"); ?>
    2. <p>Results for: <strong><?=$_GET["q"]; ?></strong></p>
    3. <ul>
    4. <? $res = mysql_query("select entry_title from mt_entry where entry_title like '%$_GET[q]%' OR entry_text like '%$_GET[q]%'; ");
    5. while($row = mysql_fetch_object($res)) {
    6. echo '<li><a href="'.$row->entry_title.'">'.$row->entry_title.'</a></li>';
    7. } ?>
    8. </ul>
  • Hi, sorry für diesen, naja, wirrwarr - spiegelt ungefähr auch meinen stand bei der arbeit in diesem fall wieder. bin selbst schon ziemlich verwirrt was diese Livesearch angeht, hehe. Ich bemühe mich in zukunft übersichtlicher zu bleiben!

    Ich habe jetzt deinen Code eingefügt und bekomme folgende Fehlermeldung:

    Warning: Wrong parameter count for mysql_fetch_object() in /var/www/web12/html/mt-static/blogfactor/livesearch.php on line 7


    Hinzugefügt habe ich lediglich die Zeile zur DB-Verbindung:

    Quellcode

    1. include('db_config.inc.php');


    Leider habe ich bisher noch immer keinen Erfolg :(
  • pass deine livesearch.php mal bitte folgendermaßen an

    Quellcode

    1. <?php
    2. include('db_config.inc.php');
    3. header("Content-type: text/xml;charset=ISO8859-1");
    4. ?>
    5. <p>Results for: <strong><?=$_GET["q"]; ?></strong></p>
    6. <ul>
    7. <? $res = mysql_query("select entry_title from mt_entry where entry_title like '%$_GET[q]%' OR entry_text like '%$_GET[q]%' LIMIT 10; ");
    8. while($row = mysql_fetch_object($res)) {
    9. echo '<li><a href="'.$row->entry_title.'">'.$row->entry_title.'</a></li>';
    10. } ?>
    11. </ul>
    12. <!--
    13. <? $res = mysql_query("select entry_title,entry_text from mt_entry LIMIT 5; ");
    14. while($row = mysql_fetch_object($res)) {
    15. echo '<li><b><a href="'.$row->entry_title.'">'.$row->entry_title.'</a></b><br />'.$row->entry_text.'</li>';
    16. } ?>
    17. //-->
    Alles anzeigen
  • Den Code so übernommen wie beschrieben - ändert sich leider nichts.
    Wenn ich die Schleife durch den ausgeklammerten Bereich ersetze, bekomme ich folgende Meldung:

    mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /var/www/web12/html/mt-static/blogfactor/livesearch.php on line 9


    Nebenbei hier mal die db_config.inc.php (Nicht das dort der Hase läuft)

    Quellcode

    1. <?php
    2. mysql_connect("localhost","username","db_passwort");
    3. mysql_select_db("db_name");
    4. ?>
  • "MoDzilla" schrieb:

    Wenn ich die Schleife durch den ausgeklammerten Bereich ersetze, bekomme ich folgende Meldung:

    mysql_fetch_object(): supplied argument is not a valid MySQL result resource in /var/www/web12/html/mt-static/blogfactor/livesearch.php on line 9


    verstehe ich nicht genau..
    online sehe ich keinen fehler:
    http://www.blogfactor.de/mt-static/blogfactor/livesearch.php?q=text

    naja, hier noch ein bugfix aus meinem sql query
    um die GET Variable müssen noch prozent-zeichen
  • ich werd verrückt...was ein tag...bin heute zum 2. mal papa geworden und die liversearch funzt!!!! (worüber freu ich mich jetzt mehr??*g) es waren die Prozentzeichen die fehlten!!! :) Boahhh, was akt...

    ...jetzt ist der rohling ja schonmal vorhanden. mal sehen ob ich aus eigener kraft noch optimieren kann. das wäre zunächst z.B. das a) keine Einträge angezeigt werden, die noch veröffentlich sind*lol Also eine Art von anfang bis heutiger tag. b) die ergebnisse Links produzieren, die mich zum gewählten Eintrag führen. Aber heute gönne ich mir erstmal nen pils oder 2 :)

    Der erste Teil ist jetzt geschafft: Die Links funktionieren. Dazu musste ich in den Grundeinstellungen von MovableType das Archivformat anpassen. Das klappt soweit schonmal.

    Der aktuelle Code sieht somit folgendermassen aus bei mir:

    Quellcode

    1. <? $res = mysql_query("select entry_basename, entry_title from mt_entry where entry_title like '%$_GET[q]%' OR entry_text like '%$_GET[q]%' LIMIT 5; ");
    2. while($row = mysql_fetch_object($res)) {
    3. echo '<li><a href="archives/'.$row->entry_basename.'.php#more">'.$row->entry_title.'</a></li>';
    4. } ?>
  • hoi, also MT speichert es (gehe zumindest von aus) in die Spalte entry_status. Dort finde ich den Wert "1" der für Entwurf bzw. nicht veröffentlicht steht. Wert "2" ist veröffentlicht. Wert "4" Steht für geplanter Artikel - also auch unveröffentlicht. Welchen Status Wert "3" hat weis ich bisher noch nicht, da ich nur 3 Speicheroptionen für einen Artikel habe!?

    Habe eben versucht es mit in den query einzubauen. Klappt auch fast.
    Habe ich mein Suchwort komplett ausgeschrieben zeigt er mir nur veröffentlichte Einträge an. Wäre korrekt. Ist das Wort noch nicht komplett geschrieben, zeigt er mir auch noch unveröffentlichte Artikel an.

    Quellcode

    1. mysql_query("select entry_basename, entry_status, entry_title from mt_entry where 'entry_status' = '2' AND entry_title like '%$_GET[q]%' OR entry_text like '%$_GET[q]%' LIMIT 5; ");
  • leider kein output dann :(

    Fehlalarm, abfrage funktioniert. Hatte noch ein Zeichen zuviel*schäm

    Quellcode

    1. SELECT entry_basename, entry_status, entry_title from mt_entry where entry_status=2 AND (entry_title like '%$_GET[q]%' OR entry_text like '%$_GET[q]%') LIMIT 5;



    Also wenn Du nichts dagegen hast, würd ich jetzt anfangen rum zu spinnen und vielleicht noch funktionen hinzufügen. Gibt sicherlich genug Hunde wie mich, die so eine Abfrage für MovableType mal nutzen wollen bzw. ausprobieren. Zum Beispiel wie ich in die Ausgabe zunächst noch die Kategorie mit einbinde.

    Das interessante daran für mich ist, das die Kategorien in einer eigenen Tabelle (mt_category) abgelegt sind mit namen und ID usw. In der Tabelle mt_entry - aus der wir bisher lesen - gibt es die Spalte entry_category_id. In dieser Spalte steht aber irgendwie kein Wert sondern einfach NULL. Sehr Tricky

    Habe mir weitere Tabellen angschaut. Die Tabelle mt_placement scheint die Einträge zusammenzufügen. Dort finde ich die Angaben, welche Artikel (placement_entry_id) in welcher Kategorie (placement_category_id) in welchem Blog (placement_blog_id) die placement_id selbst. Noch mehr Tricky

    Kann ich mehrere Tabellen in das Query setzen wie bei den Spalten aus den Tabellen?