
Tags zu den Joomla! BeiträgenProblem:Man möchte zu den einzelnen Joomla! Beiträgen Tags anzeigen. Allerdings nicht im Content-Bereich, also dort wo der Text und die Bilder sind, sondern vielleicht im Kopf oder im Fuß der Webseite oder in einer anderen Spalte (wie auf dieser Webseite in der rechten Spalte).
Lösung:1. Herunterladen der Komponente Jootags http://extensions.joomla.org/extensions/search-&-indexing/tags-&-clouds/4430/details Das Ganze ist eine Komponente, die prinzipiell schon genau die Funktionalität mitbringt, die wir benötigen. Dabei ist nämlich ein Modul, welches wir beliebig auf unserer Webseite platzieren können. Allerdings werden die Tags nicht Beitragsbezogen angezeigt, sondern es tauchen bei jedem Beitrag immer alle Tags von allen Beiträgen auf. Nehmen wir beispielsweise an, dass es auf unserer Webseite zwei Beiträge gibt. Einer über Hunde und einer über Katzen. Bei dem Hundebeitrag sind die Tags "Hund" und "Hundefutter" hinterlegt. Bei dem über Katzen hingegen "Katze" und "Katzenklo". So werden mit dem Modul von Jootags bei dem Beitrag über Hunde die Tags "Hund" und "Hundefutter" aber auch "Katze" und "Katzenfutter" angezeigt. Das wollen wir so nicht. Deshalb müssen wir... 2. Tags für einzelne Beiträge ermöglichenDazu nehmen wir uns den Quellcode des Moduls vor. Wir öffnen hier die Datei helper.php im Verzeichnis modules/mod_jootags. Entscheidend für die Zuordnung der Tags ist hier das SQL-Statement, das in der Methode _buildQuery() steht. Es sieht so aus:
$query = 'SELECT t.id, t.title, t.alias, COUNT(ti.item_id) AS count '
. ' FROM #__jootags_tags AS t '
. ' INNER JOIN #__jootags_tag_items AS ti ON ti.tag_id=t.id '
. ' GROUP BY t.id';
Hier werden u. a. die Titel (also die einzelnen Tags) geladen. Es werden halt dummerweise immer alle Tags geladen. Wir wollen aber jeweils nur diejenigen, die zum aktuellen Beitrag gehören. Deshalb muss der Query folgendermaßen geändert werden:
// Neuer Query: Nur die Tags anzeigen lassen, die zum aktuellen Beitrag gehören
$query = "
SELECT t.id, t.title, t.alias, COUNT(ti.item_id) AS count
FROM #__jootags_tags AS t
INNER JOIN jos_jootags_tag_items AS ti ON ti.tag_id=t.id
INNER JOIN #__jootags_tag_items AS item ON item.tag_id = t.id
WHERE item.item_id = ".(int)JRequest::getVar('id')."
GROUP BY t.id
";
Was hier passiert ist folgendes: Wir holen uns nur die Tags, deren item_id gleich der id des aktuellen Beitrags ist: (int)JRequest::getVar('id'). Somit haben wir das Problem gelöst und es werden nur dieTags angezeigt, die zum jeweiligen Beitrag passen.
|
Kommentare