Bewertung: 5 / 5

Stern aktivStern aktivStern aktivStern aktivStern aktiv
 

Joomla bietet seit Version 3.1 die Möglichekeit Tags anzulegen. Die Tags können Beiträgen, Weblinks oder auch Kontakten zugeordnet werden, um den Inhalt zu Organisieren. Leider hat normalerweise jeder Tag eine ID als Präfix in der Linkadresse, selbst wenn man z.B. einen Menüpunkt "Liste aller Schlagwörter" erstellt. Da ich nach dem Umstieg auf Joomla 3.4 zunächst nur ein Tag-Modul genutz habe und keinen Menüpunkt für die Tags erzeugt hatte, wurden mir in den Google Webmaster-Tools unter HTML-Verbesseungen ausserdem auch Hinweise angezeigt. Es hatten sich doppelte "title"-Tags und doppelte Metabeschreibungen eingeschlichen.

Mit der folgenden Anleitung werden Sie sowohl die ID in der URL los, als auch die Hinweise in den Google Webmaster-Tools.

Um die ID in den Tag URL's los zu werden, muss man jeden einzelnen Tag einem Menü hinzufügen. Das Menü muss nicht auf Seite sichtbar sein, man braucht auch keine Modulposition zuweisen. Bei einem solchen Menü spricht man auch von einem Schattenmenü. Es dient nur dazu die Linkadresse für die Suchmaschinen zu optimieren. Für ein paar Tags ist das manuelle Anlegen der Menüpunkte kein Thema, aber ab einer gewissen Anzahl Tags macht das keinen Spaß mehr. Auf der Seite foobla.com habe ich eine Lösung gefunden, die über eine SQL Abfrage die Menüpunkte automatisch erstellt.

Nur wer mit phpMyAdmin vertraut ist, sollte sich mit Hilfe der folgenden Anleitung an den Joomla-Innereien zu schaffen machen!

Los geht's:

Als erstes legt man ein neues Menü an. Ich habe mein Menü "Tagsmenü" genannt und als Menutyp "tagsmenue" gewählt. Anschließend fügt man dem neuen Menü einen neuen Menüeintrag "Tags" hinzu. Als Menüeintragstyp wählt man "Liste aller Schlagwörter" aus dem Bereich Schlagwörter (Tags), ohne ein übergeordnetes Schlagwort festzulegen.

Für die spätere SQL-Abfrage brauchen wir die ID des neue erzeugten Menüeintrags. In der Liste der Menüeinträge für unser neues Menü bekommen wir die ID angezeigt. Bei mir ist es die 229.

Im nächsten Schritt führen wir die SQL-Abfrage aus, um für alle Tags (außer dem ROOT-Tag mit ID 1) einen Menüeintrag unter dem Menüpunkt "Tags" zu erzeugen.

ACHTUNG! Bitte unbedingt ein Backup der Tabelle #__menu erstellen, bevor die Abfrage ausgeführt wird. # bitte durch Euer Joomla-Tabellen Präfix ersetzen. In der folgenden SQL-Abfrage müssen ausser dem Tabellen-Präfix auch folgende Parameter an die jeweilige Joomla-Datenbank angepasst werden: menutype, path, parent_id, level, params, component_id
INSERT IGNORE INTO #__menu (`menutype`, `title`, `alias`, `path`, `link`, `type`, `published`, `parent_id`, `level`, `access`, `params`, `component_id`, `language`)
SELECT
    "tagsmenue" AS menutype,
    t.title AS title,
    t.alias AS alias,
    CONCAT("tags/", t.alias) AS path,
    CONCAT("index.php?option=com_tags&view=tag&layout=list&id[0]=", t.id, "&types[0]=1") AS link,
    "component" AS type,
    1 AS published,
    229 AS parent_id,
    2 AS level,
    1 AS access,
    "{\"show_tag_title\":\"\",\"tag_list_show_tag_image\":\"\",\"tag_list_show_tag_description\":\"\",\"tag_list_image\":\"\",\"tag_list_description\":\"\",\"show_tag_num_items\":\"\",\"tag_list_orderby\":\"\",\"tag_list_orderby_direction\":\"\",\"tag_list_show_item_image\":\"\",\"tag_list_show_item_description\":\"\",\"tag_list_item_maximum_characters\":0,\"filter_field\":\"\",\"show_pagination_limit\":\"\",\"show_pagination\":\"\",\"show_pagination_results\":\"\",\"tag_list_show_date\":\"\",\"date_format\":\"\",\"return_any_or_all\":\"\",\"include_children\":\"\",\"maximum\":200,\"show_feed_link\":\"\",\"menu-anchor_title\":\"\",\"menu-anchor_css\":\"\",\"menu_image\":\"\",\"menu_text\":1,\"page_title\":\"\",\"show_page_heading\":\"\",\"page_heading\":\"\",\"pageclass_sfx\":\"\",\"menu-meta_description\":\"\",\"menu-meta_keywords\":\"\",\"robots\":\"\",\"secure\":0}" AS params,
    29 AS component_id,
    "*" AS language
FROM
    #__tags t
WHERE
    t.id > 1

Der Nachteil der Methode ist, das man die Abfrage immer wieder ausführen muss, wenn neue Tags hinzukommen, oder man pflegt die neuen Tags von Hand in das Menü ein. Falls man auf seinem Webspace Cronjobs anlegen kann, bietet es sich an, die SQL-Anweisung in eine php-Datei zu packen. Das ganze könnte dann so aussehen:

<?php
$username="myusername";
$password="mypassword";
$dbname="mydbname";
$dbhost="localhost";
$query='
INSERT IGNORE INTO #__menu (`menutype`, `title`, `alias`, `path`, `link`, `type`, `published`, `parent_id`, `level`, `access`, `params`, `component_id`, `language`)
SELECT
    "tagsmenue" AS menutype,
    t.title AS title,
    t.alias AS alias,
    CONCAT("tags/", t.alias) AS path,
    CONCAT("index.php?option=com_tags&view=tag&layout=list&id[0]=", t.id, "&types[0]=1") AS link,
    "component" AS type,
    1 AS published,
    229 AS parent_id,
    2 AS level,
    1 AS access,
    "{\"show_tag_title\":\"\",\"tag_list_show_tag_image\":\"\",\"tag_list_show_tag_description\":\"\",\"tag_list_image\":\"\",\"tag_list_description\":\"\",\"show_tag_num_items\":\"\",\"tag_list_orderby\":\"\",\"tag_list_orderby_direction\":\"\",\"tag_list_show_item_image\":\"\",\"tag_list_show_item_description\":\"\",\"tag_list_item_maximum_characters\":0,\"filter_field\":\"\",\"show_pagination_limit\":\"\",\"show_pagination\":\"\",\"show_pagination_results\":\"\",\"tag_list_show_date\":\"\",\"date_format\":\"\",\"return_any_or_all\":\"\",\"include_children\":\"\",\"maximum\":200,\"show_feed_link\":\"\",\"menu-anchor_title\":\"\",\"menu-anchor_css\":\"\",\"menu_image\":\"\",\"menu_text\":1,\"page_title\":\"\",\"show_page_heading\":\"\",\"page_heading\":\"\",\"pageclass_sfx\":\"\",\"menu-meta_description\":\"\",\"menu-meta_keywords\":\"\",\"robots\":\"\",\"secure\":0}" AS params,
    29 AS component_id,
    "*" AS language
FROM
    #__tags t
WHERE
    t.id > 1
';
mysql_connect($dbhost,$username,$password);
@mysql_select_db($dbname) or die(strftime('%c')." Unable to select database");
mysql_query($query);
mysql_close();
echo strftime('%c')." ok!";
?>
Die Anmeldeinformationen für die Datenbank müssen natürlich noch angepasst werden. Wird der Job 1x täglich ausgeführt, hat man mit den Tags keine Arbeit mehr.