Page 1 of 1

Ähnliche Artikel und Freetag

Posted: Wed Oct 10, 2007 9:18 am
by Webster206
Hallo zusammen,

ist es irgendwie möglich, beim Freetag Plugin auswählen zu können, mit welchen Tags nach ähnlichen Artikeln gesucht werden soll? Manchmal habe ich ein breites Spektrum an Tags in meinen Artikeln und die Vorschläge haben oftmals absolut nichts mit dem Thema des Artikels zu tun. Da wäre es praktisch, wenn ich beim Artikel schreiben vielleicht schon angeben könnte, welche der Tags benutzt werden sollen, um ähnliche Artikel anzuzeigen.

Beispiel: Ich habe einen Text und die Tags fragen, internet, blog, weil ich darin eben dieses Thema behandle. Vorgeschlagen wird als ähnlicher Artikel dann ein Artikel über einen Film, bei dem ich ebenfalls eine Frage stellte und das Tag frage nutzte. Aber das Thema Internet und Blogs hat nun leider nichts mit Filmen zu tun, sondern nur dummerweise das geliche Tag, weil in beiden etwas gefragt wurde. Praktisch wäre nun, das Tag "fragen" einfach ausklammern zu können

So etwas ist vermutlich für mich als Laien erst mal nicht zu machen, deshalb frage ich einfach mal in die Runde, ob ein solches Feature sinnvoll ist und vielleicht dem Plugin hinzu gefügt werden könnte.

Re: Ähnliche Artikel und Freetag

Posted: Wed Oct 10, 2007 10:43 am
by garvinhicking
Hi!

Leider geht das nicht ohne tief in die SQL-Abfrage des Plugins einzugreifen. Mir würde da jetzt auch interfacetechnisch nichts einfallen wie man das lösen könnte?

Viele Grüße,
Garvin

Posted: Wed Oct 10, 2007 11:20 am
by Webster206
Ich ahnte, dass hier mehr programmiertechnisches Wissen vonnöten ist.

Interfacetechnisch könnte ich es mir ähnlich vorstellen wie bei den Meta Tags Angaben die man jedem Artikel vergeben kann. So könnte man beim Erstellen des Artikel, wenn man die Tags vergibt, vielleicht einfach noch eine Zeile einbauen, wo Vergleichsrelevante Tags angegeben werden.

Um bei meinem Beispiel zu bleiben: Dort würde ich nur das Tag "blog" angeben, damit wirklich nur Blog-ähnliche Artikel vorgeschlagen werden.

Posted: Wed Oct 10, 2007 11:21 am
by garvinhicking
Hi!

Hm, ne neue Box fände ich etwas unhübsch. Wie wäre es, wenn Du Tags die nicht aufgenommen werden mit einem "*" am Ende markierst? Dann könntest Du die Tags so eingeben:

Bla,Blub,Wurst*,Blog*,Bärg

Und für die Verwandten Tags würde dann nur Bla,Blub und Bärg genommen werden. Müsste man im Plugin irgendwo dokumentieren, aber dann wär's evtl. halbwegs komfortabel?

Grüße,
Garvin

Posted: Wed Oct 10, 2007 11:30 am
by garvinhicking
Hi!

Tja, wäre zwar ne gute Idee, ist aber nicht wirklich umsetzbar, da es im Code zu viele Stellen gibt wo die Tags ausgelesen werden. Man müsste dann an jeder Stelle im Code das "*" aus dem Tag rausnehmen um es darzustellen. Das ist zum einen zu viel Aufwand und zum anderen nimmt es zu viel Performance, das dann auch langsamer werden würde für leute, die die verwandten Tags garnicht einschränken wollen.

Eine zweite Eingabebox ist komplex, weil dafür eine weitere Datenbanktabelle geschrieben werden müsste. Das ist leider alles andere als unaufwändig umzusetzen.

Gibt es in deinem Fall evtl. fixe Tags die Du rausnehmen magst? Du könntest mit relativ geringem Aufwand das plugin für dich individuell ändern, indem Du die Funktion

Code: Select all

    function getRelatedEntries($tags, $postID) {
        global $serendipity;

        if (!is_array($tags)) {
            return false;
        }

        $q = "SELECT DISTINCT e1.entryid,
                     e2.title,
                     e2.timestamp
                FROM {$serendipity['dbPrefix']}entrytags AS e1
           LEFT JOIN {$serendipity['dbPrefix']}entries   AS e2
                  ON e1.entryid = e2.id
               WHERE e1.tag IN ('" . implode("', '", $tags) . "')
                 AND e1.entryid != " . (int)$postID . "
                 AND e2.isdraft = 'false'
                     " . (!serendipity_db_bool($serendipity['showFutureEntries']) ? " AND e2.timestamp <= " . time() : '') . "
            ORDER BY  e2.timestamp DESC
               LIMIT " . $this->get_config('show_related_count', 10);

        $result = serendipity_db_query($q, false, 'assoc', false, 'entryid', 'title');

        if (!is_array($result)) {
            return false;
        }

        return $result;
    }
im Plugin umschreibst. $tags enthält die Liste der verwandten Tags, dort könntest Du in einer Schleife vorher beispielsweise einige Tags hart entfernen:

Code: Select all

foreach($tags AS $i => $tag) {
  if ($tag == 'blog' OR $tag == 'Internet') {
    unset($tags[$i]);
  }
}
Grüße,
Garvin

Posted: Wed Oct 10, 2007 11:32 am
by Webster206
Na das wäre natürlich eine noch bessere Idee. Dann könnte man schon gleich beim Vergeben der Tags entscheiden, welche Suchrelevant sein sollen und welche nicht. Und hätte somit viel gezieltere Vorschläge nach ähnlichen Themen.

Darauf gekommen bin ich übrigens, weil ich das Suchen nach ähnlichen Themen mit dem Tag Plugin viel komfortabler finde, als ähnliche Artikel immer manuell suchen und eintragen zu müssen. Nur die Relevanz ist mir beim dem Plugin eben noch zu breit gefächert.

Posted: Wed Oct 10, 2007 11:36 am
by garvinhicking
Hi!

Bump, nur damit Du siehst, dass wir scheinbar zeitgleich gepostet haben, ich schrieb weiter oben, warum das mit den Tags* so nicht wirklich klappt.

Grüße,
Garvin

Posted: Wed Oct 10, 2007 11:43 am
by Webster206
Oh. Schade, dass es offenbar doch komplexer ist, so etwas umzusetzen. Den Plugin Code möchte ich eigentlich eher nicht verändern, weil mir dafür die Kenntnisse fehlen und ich eher etwas kaputt mache. ;-)

Auch das "harte" entfernen von Tags mag mir nicht so recht gefallen, denn wenn es Tags gäbe, die ich niemals benutzen wollte (egal ob für den normalen Zweck oder für den Zweck um ähnliche Artikel zu finden) so würde ich sie auch einfach nicht benutzen. Das wäre in diesem Fall dann immer noch die einfachst Idee: Die Vergabe von Tags einschränken und etwas allgemeiner werden. Allerdings leidet darunter natürlich wieder der ganze Vorteil der Tags.

Schade, aber trotzdem danke.

Beste Grüße.

Posted: Wed Oct 10, 2007 11:50 am
by garvinhicking
Hi!

Vielleicht hat ja jemand anders hier noch eine geschickte Idee dazu. Das doofe ist halt, dass wenn man ein "*" einfügt man zwar leicht filtern könnte, aber dann würde das "*" halt auch an anderen Stellen mit dem Tagnamen ausgegeben - das fände ich sehr unschön.

Das 'harte entfernen' würde ja übrigens nur die Ausgabe der "verwandten Artikel" betreffen. Die Tags würden sonst schon normal gelistet werden. So könntest du halt einige pauschale Tags immer von den verwandten Artikeln ausschließen. Wenn Du das konzeptionell machen könntest wäre es auch leicht in die Konfiguration des Plugins eine Eingabebox einzugeben wo man "für verwandte Artikel zu filternde Tags" eintragen kann. Dann müsstest du den Code des plugins garnicht anfassen.

Grüße,
Garvin