Textpattern CMS support forum
You are not logged in. Register | Login | Help
- Topics: Active | Unanswered
Pages: 1
#1 2006-04-24 10:48:27
- MrLongbaugh
- Member
- From: Hamburg - Germany
- Registered: 2004-10-11
- Posts: 116
[de-de] CSS Drop Down Menue
Hallo,
ich möchte ein Drop Down Menue als Navigation mit zwei Ebenen in eine TXP-Seite einbauen.
Als Ausgabgspunkt habe ich mir den Forumsartikel static/dynamic site with dynamic two/three level nav angesehen.
Die Struktur soll folgendermassen aufgebaut sein:
Die erste Navigationsebene stellen die Sektionen dar.
Als zweite Ebene möchte ich die Artikelkategorien benutzen.
Das Drop Down Menue arbeitet mit ungeordneten Listen. Die erste Ebene kann ich mit dem Plugin ako_nav darstellen. Das die aktuell ausgewählte Sektion wird markiert.
Nun zu meiner Frage:
Wie kann ich die Ausgabe der Sektionen und der Artikelkategorien so gestalten, dass sie als Drop Down Menue funktionieren (also als verschalchtelte ungeordnete Liste ausgegeben wird)?
Hat dazu vielleicht jemand eine Idee?
Danke schon einmal.
Offline
#2 2006-04-24 14:51:32
- ralph
- Member
- Registered: 2005-02-28
- Posts: 106
Re: [de-de] CSS Drop Down Menue
Hab sowas auch schon mal gemacht, bin aber gerade nicht zu Hause. Ich werds gleich mal raussuchen, falls ich es vergesse, schreib mir einfach ne PM.
Offline
#3 2006-04-24 15:36:14
- ralph
- Member
- Registered: 2005-02-28
- Posts: 106
Re: [de-de] CSS Drop Down Menue
OK, hier ist, wie es funktioniert. Ich habe das speziell für eine Seite gemacht, ist also wenig universell, aber leicht anpassbar.
1. Du legst die komplette Navigation als Kategorien an, also Hauptkategorien und und Unterkategorien. Das ist notwendig, um festzulegen, welche Kategorien zu welchen Sektionen gehören. Hauptkategorien müssen also doppelt angelegt werden, einmal als Sektionen und einmal als Kategorien. Nehmen wir dieses Beispiel:
- Startseite
- Über uns
- Unternehmen
- Historie
- Presse
- Mitarbeiter
- Versand
- Beratung
- Impressum
Um die Reihenfolge festzulegen, wird dem Namen der Kategorie eine Zahl zugeordnet. Diese taucht dann zwar in der URL auf, aber nicht auf der Seite, dafür ist der Kategorientitel verantwortlich. Da “Mitarbeiter” die dritte Hauptkategorie ist, bekommt sie den Namen “3-Mitarbeiter”. Da “Historie” die zweite Unterkategorie von “Über uns” ist, bekommt sie den Namen “2-Historie”. Also immer eine Zahl mit Bindestrich davorstellen.
Nun muss noch für jede Hauptkategorie eine Sektion angelegt werden. Diesmal ohne Zahl. Also zB einfach “Startseite”.
Anschließend diesen Code ins Plugin Cache Dir:
<code>
<?php
function fir_cat_menu($atts = array())
{
require_once $GLOBALS[“txpcfg”][“txpath”].”/include/txp_category.php”;
$categories = getTree(“root”,“article”);
$items = array();
foreach($categories as $category)
{
if (1 = (int) $category["level"])
{
$main_id = "";
$show_class = "";
if (fir_detect_active_section($category["name"]))
{
$main_id = ' id="mainactive"';
$show_class = "show";
}
if (1 <= (int) $category["children"])
{
$subcategories = getTree($category["name"],"article");
$subitems = array();
$first_subcategory_name = "/?c=".$subcategories[1]["name"];
foreach($subcategories as $subcategory)
{
if (1 = (int) $subcategory[“level”])
{
$sub_id = “”;
if (fir_detect_active_category($subcategory[“name”]))
{
$sub_id = ‘ id=“subactive”’;
}
array_push($subitems, doTag($subcategory[“title”], ‘a’, ‘’, ‘ href=”’.site_url(“”).fir_strip_prefix($category[“name”]).”/?c=”.$subcategory[“name”].’”’.$sub_id));
}
}
$submenu = doWrap($subitems, ‘ul’, ‘li’, $show_class) . “\n”;
}
$item = doTag($category[“title”], ‘a’, ‘’, ‘ href=”’.site_url(“”).fir_strip_prefix($category[“name”]).$first_subcategory_name.’”’.$main_id).$submenu;
array_push($items, $item);
unset($submenu);
unset($first_subcategory_name);
}
}
$ul_class = “”;
if (!empty($atts[‘ul_class’]))
{
$ul_class = $atts[‘ul_class’];
}
return doWrap($items, ‘ul’, ‘li’, $ul_class) . “\n”;
}
function fir_strip_prefix($category_name)
{
$section = preg_replace(‘/^\d-/’, “”, $category_name, 1);
return $section;
}
function fir_detect_active_section($category_name)
{
$section = preg_replace(‘/^\d-/’, “”, $category_name, 1);
if (strcasecmp($section, $GLOBALS[‘s’]) == 0)
{
return true;
}
return false;
}
function fir_detect_active_category($category_name)
{
if (strcasecmp($category_name, $GLOBALS[‘c’]) == 0)
{
return true;
}
return false;
}
?>
</code>
Jetzt kann man mit <txp:fir_cat_menu />
das Menü ausgeben.
—
Viel Spass!
Ralph
P.S.: Ich habe gemerkt, dass Textile ein paar Sachen im obigen Script geschrottet hat, zumindest dreifache Gleichheitszeichen sind mir aufgefallen. Mail mir also nochmal, falls du die richtige Version brauchst.
Offline
#4 2006-04-24 15:48:27
- MrLongbaugh
- Member
- From: Hamburg - Germany
- Registered: 2004-10-11
- Posts: 116
Re: [de-de] CSS Drop Down Menue
Hallo ralph,
danke für die Antwort. Sorry, aber was ist das Plugin Cache Dir?
Offline
#5 2006-04-24 18:39:48
- ralph
- Member
- Registered: 2005-02-28
- Posts: 106
Re: [de-de] CSS Drop Down Menue
Das kannst du unter Administration -> Einstellungen -> Erweiterte Einstellungen definieren, mit absolutem Pfad. Am besten die Angabe unter “Pfad für Datei-Upload” kopieren und den letzten Teil des Pfades von “files” in “plugins” ändern. Das Verzeichnis muss natürlich existieren.
Das Plugin Cache Verzeichnis ist eigentlich dafür gedacht, Plugins zwischenzuspeichern, damit diese nicht für jeden Seitenaufruf aus der DB geladen werden müssen. Dieses Feature kommt aber frühestens mit TxP 4.1, aber man kann dieses Verzeichnis schon jetzt als alternative Möglichkeit nutzen, Plugins zu installieren.
Offline
#6 2006-04-24 19:03:41
- MrLongbaugh
- Member
- From: Hamburg - Germany
- Registered: 2004-10-11
- Posts: 116
Re: [de-de] CSS Drop Down Menue
Danke. Habe das Verzeichnis angelegt und eingetragen.
Leider bekomme ich folgende Fehlermeldung:
Parse error: syntax error, unexpected T_IS_GREATER_OR_EQUAL in /www/htdocs/w006b9ab/plugins/fir_cat_menu.php on line 10
Offline
#7 2006-04-24 19:40:43
- ralph
- Member
- Registered: 2005-02-28
- Posts: 106
Re: [de-de] CSS Drop Down Menue
Das ist es, was ich meinte mit “Textile hat ein paar Sachen geschrottet”. Schick mir deine eMail-Adresse per PM, dann schick ich dir das richtige Script.
An der Stelle, die du genannt hast, muss jedenfalls ein dreifaches Gleichheitszeichen anstatt <1>=
. Es kann aber sein, dass Textile hier im Forum noch ein paar andere Stellen falsch darstellt.
Offline
Pages: 1