[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Raybeam Navigation Root verändern - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Chriz
Beiträge: 47
Registriert: 24. Nov 2006, 17:22

Raybeam Navigation Root verändern

12. Feb 2009, 13:01

Hallo zusammen.
Ich habe ein kleines Problem bei der Abwandlung der Raybeam Navi und hoffe Ihr könnt mir helfen.

Folgendes Problem:

Die Seite soll 2 Bereiche haben (Über 2 verschiedene Templates geregelt)
Momentan sieht meine Struktur so aus:

-Home[1]
-Privatkunde[2]
--Unterkategorie
----Unterkategorie
----Unterkategorie
----Unterkategorie
-Geschäftskunde[3]
--Unterkategorie
----Unterkategorie
----Unterkategorie
----Unterkategorie

Jetzt möchte ich, dass die raybeam Navigation die ID 2 als root sieht und danach ganz normal mit submenü etc. handelt.

Ich habe in Zeile 488 folgendes:

Code: Alles auswählen

foreach (OOCategory::getRootCategories(1) as $nav)
gegen

Code: Alles auswählen

foreach (OOCategory::getChildrenbyID(2) as $nav)
getauscht. Jetzt wird zwar alles erst ab ID2 angezeigt, leider werden aber die CSS Klassen und IDs für die Sub, aktive und current Punkte nicht vergeben und die Submenüs öffnen sich nicht.

Muss ich noch irgendwo angeben dass er erst ab ID2 auslesen soll ?

Liebe Grüße, Chriz

Benutzeravatar
raybeam
Beiträge: 442
Registriert: 5. Feb 2006, 21:30
Kontaktdaten: Website

12. Feb 2009, 19:35

Hallo Chriz,

könntest Du vielleicht kurz erläutern, warum Du diese Anpassung benötigst? Das habe ich nicht verstanden.

Gruß

Peter

Chriz
Beiträge: 47
Registriert: 24. Nov 2006, 17:22

12. Feb 2009, 20:57

Hallo Peter, erstmal danke für das klasse Navi Template!

Also ich brauche praktisch eine Website, die 2 verschiedene Bereiche hat, und zwar Privat- und Geschäftskunden.

Die Menüpunkte sind bei beiden Seiten gleich, nur der Inhalt variiert bei 60% der Unterseiten

Deshalb habe ich meine Menüstruktur einmal unter der Kategorie "Privatkunden" und einmal unter "Geschäftskunden" angelegt.

Das ganze wollte ich mit 2 verschiedenen Design Templats und 2 (auf die Root Kategorie) angepassten Navigations Templates lösen.

Oder stimmt der Ansatz nicht ?

Benutzeravatar
raybeam
Beiträge: 442
Registriert: 5. Feb 2006, 21:30
Kontaktdaten: Website

12. Feb 2009, 21:43

Ich weiß nicht, ob ich genau verstanden habe aber ich versuch's mal :wink:

erste Idee:
Bleib bei einer Navigation und passe das Layout über individuelle Style-Klassen für jeden Navigationslink per Meta-Infos an (Beispiel unter http://www.raybeam.de/1-0-Home.html - 15.11.08 Erweiterung des yaml_navigation Templates)

zweite Idee:
Binde die einzelnen Kategorien als separate Navigation ein (http://www.raybeam.de/43-0-Einzelkatego ... ation.html) Über die <ul class="blabla"> kannst Du dann alle Menüs separat gestalten.

Dein Anpassungsansatz würde vermutlich sehr umfangreich in den Code des Templates eingreifen (ohne dass ich das jetzt genau geprüft hätte)

Bei der zweiten Idee muss zwar auch im Navigations-Template Code hinzugefügt werden, das beschränkt sich aber auf die beschriebenen 3-4 Zeilen pro separater Navigation.

Vielleicht probierst Du es einfach mal aus.

Gruß

Peter

Chriz
Beiträge: 47
Registriert: 24. Nov 2006, 17:22

13. Feb 2009, 09:48

Wow. Die zweite Version war es. Super.

Nun habe ich das Menü genau so wie ich es haben möchte, allerdings ist der erste Menüpunkt die "Rootkategorie" die ich als Quelle für das separate Menü angegeben habe.

Besteht die Möglichkeit diesen Menüpunkt ohne CSS verschwinden zu lassen ?

Benutzeravatar
raybeam
Beiträge: 442
Registriert: 5. Feb 2006, 21:30
Kontaktdaten: Website

14. Feb 2009, 12:13

Chriz hat geschrieben:Besteht die Möglichkeit diesen Menüpunkt ohne CSS verschwinden zu lassen ?
Ja, indem die Funktion des "Menü-Umschalters" auch für dein Extra-Menü nutzt:

Code: Alles auswählen

$catIdExtramenue='3';
// Hier wird das Extra-Menü aufgebaut und an $navigation_extra übergeben
$nav1=OOCategory::getCategoryById($catIdExtramenue);
// Hier wird der "Menü-Umschalter" auf 'extra' gesetzt
$naviExtra = build_navigation($userTyp, $nav1, $path, 'extra');
// durch $naviExtra[1] werden nur die Submenuepunkte uebergeben
$navigation_extra = "<ul class="extramenu">\n {$naviExtra[1]} </ul>\n";
Im ersten Schritt setzt Du beim Aufruf der Funktion build_navigation den "Menü-Umschalter" 'extra'.

Dadurch wird dein Menü in dem Array $naviExtra[] zurück gegeben.
In $naviExtra[0] befindet sich der root-Menüpunkt und
in $naviExtra[1] die Submenüpunkte

Lass dich nicht irritieren wenn dein root-Menüpunkt ebenfalls erscheint aber nicht mit einem Link versehen ist. Es handelt sich hierbei um den Menütitel, der mit der CSS-ID "title" versehen ist, so dass Du ihn per CSS einfach ausblenden kannst.

Die ganze Sache hat nur einen Haken. Irgendwo muss Dein Rootmenüpunkt sichtbar sein, damit man überhaupt in diese Kategorie gelangt, um dann das Submenü zu sehen.

Der Grund für die Trennung von Root- und Submenü liegt bei den YAML-Templates ja darin, dass Du dadurch z. B. die Root-Menüpunkte in einem horizontalen und die dazu gehörigen Submenüpunkte in einem separaten vertikalen Menü anordnen kannst.

Vielleicht hast Du es aber auch genau so gemacht, dann weiß ich, dass ich dein Layout immer noch nicht verstanden hatte :lol:

Gruß

Peter

oliver
Beiträge: 14
Registriert: 9. Nov 2008, 21:53
Wohnort: Heinsberg

21. Aug 2009, 23:30

sorry, aber ich hab das mit der zweiten lösung nicht hinbekommen. habe das nach der angegeben beschreibung versucht einzufügen, bekomme aber ne fehlermedlung. hier mal mein code.

bin kein php-mann, um das wirklich zu verstehen, wie das überhaupt klappt.

Code: Alles auswählen

<?php
/*
 * Universelle <ul>-Navigation (YAML)
 * YAML-Navigationstemplate
 * V 0.9
 *
 * YAML3.0-konformes universelles Navigations-Template
 * fuer Redaxo 3.x/4.x
 *
 * 	Navigationstemplate zur Gestaltung von Seitennavigationen/-menues auf der
 * 	Grundlage unsortierter Listen (<ul></ul>) mit folgenden Funktionen:
 *  - Durch eine Meta-Info cat_styleclass kann jeder beliebigen Kategorie eine
 *    individuelle Style-Klasse hinzugefuegt werden
 * 	- An YAML CSS-Framework angepasst, funktioniert aber auch eigenstaendig
 * 	- beliebige Verschachtelungstiefe
 * 	- Veroeffentlichungszeitraum (Online vom/bis) wird beachtet
 * 	- individuelle Benutzerbereiche des Simple User - Addon 0.9 und 1.1
 *    und Community Addon werden ausgewertet
 * 	- Verschachtelung der unsortierten Listen wahlweise mit w3c-konformer
 * 	  <ul>-Gliederung im jeweils uebergeordnetern <li>-Element oder als
 * 	  "Pseudo"-Verschachtelung in nur einem <ul>-Element
 * 	- Wahlweise Anzeige der Untermenuepunkte nur der aktuellen Kategorie oder
 * 	  Anzeige aller Untermenuepunkte
 * 	- Wahlweise getrennte Anzeige von Haupt- und Untermenue
 * 	- Generierung eines Breadcrumb-Menues
 *  - zusaetzliches Navigationsmenue aus root-Artikeln moeglich
 *
 * weitere ausfuehrliche Erlaeuterungen zu diesem Template neben den
 * Hinweisen im Quelltext auch unter:
 *
 * http://www.raybeam.de/index.php?article_id=20
 * http://www.raybeam.de/index.php?article_id=35
 *
 * -----------------------------
 * Peter Reiche - www.raybeam.de
 * -----------------------------
 * letzte Aenderung: 15.11.08
 * Individuelle Styleklassen ueber Meta-Infos
 * -----------------------------
 * letzte Aenderung: 06.09.08
 * Anpassung an Simple User 1.1
 * -----------------------------
 * letzte Aenderung: 15.08.08
 * Anpassung an redaxo-community-addon
 * -----------------------------
 * letzte Aenderung: 01.05.2008
 * -Neue Navigationsmoeglichkeit
 * anhand von root-Artikeln hinzugefuegt
 * -Bei getrennter Darstellung von Haupt-/Untermenue
 * wird dem Untermenue der Hauptmenuename als Titel hinzugefuegt
 * -----------------------------
 * letzte Aenderung: 27.02.2008:
 * Anpassung an redaxo 3.x/4.x
 * -----------------------------
 */

function build_navigation($feUser, $nav, $path, $subUl='on',$pathIndex=1)
{
	/* Wenn der Veroeffentlichungszeitraum "Online von / bis zum" nicht zutrifft, wird der
	 * Navigationslink nicht angezeigt. Artikel die direkt ueber den URL aufgerufen
     * wurden, werden jedoch immer noch angezeigt. Das entsprechende Seiten-Template
     * muss also bezuegl. des Veroeffentlichungszeitraums ebenfalls angepasst werden. */
    $time = time();

    /* Type-ID fuer den "SuperUser", der alle individuellen Menuepunkte sehen darf.
	 * Die ID sollte mit dem $su-Wert aus dem Authentifizierungstemplate uebereinstimmen. */
	$su = 99;

	/* -------> redaxo 4.x Anpassung:
	 * online_from und online_to werden nunmehr ueber Metainformationen der Artikel zur
	 * Verfuegung gestellt.
	 * Folgende Felder muessen, fall nicht vorhanden, ueber "Metainformationen erweitern/Artikel"
	 * angelegt werden
	 * /////////////////////////////////
	 * Prefix: 		art_
	 * Spaltenname: online_from
	 * Feldposition: [nach belieben]
	 * Feldbezeichnung: [nach belieben]
	 * Feldtyp:		date
	 * Feldattribute: [kein Eintrag]
	 * Standardwert: [kein Eintrag]
	 * /////////////////////////////////
	 * und
	 * ////////////////////////////////
	 * Prefix: 		art_
	 * Spaltenname: online_to
	 * ... wie oben

	 * Werden die Metadaten im Backend gespeichert, so wird das aktuelle Datum in art_online_from
	 * und art_online_to gespeichert, wenn dort zuvor keine Werte eingetragen waren. Um eine un-
	 * beabsichtigte Sperrung der Artikel zu vermeiden, wird das Onlinedatum nur in die Pruefung
	 * einbezogen, wenn sich art_online_from und art_online_to unterscheiden. */

   	if($nav->getValue('online_from') != $nav->getValue('online_to'))
	{
   		if($nav->getValue('online_from') > $time || $nav->getValue('online_to') < $time)
   		{
   			return;
   		}
	}
   	/* Wenn die Typ-ID des Startartikels = 1 ist oder der UserTyp des angemeldeten
   	 * Benutzers mit der Typ-ID des Startartikels der aktuellen Kategorie ueberein
   	 * stimmt, geht es weiter
   	 * -------> redaxo 4.x Anpassung:
   	 * Der Artikel-Typ wird nun ueber die Metainformationen der Artikel zur Verfuegung gestellt
   	 * Folgendes Feld muss, falls nicht vorhanden, ueber "Metainformationen erweitern/Artikel" angelegt werden
   	 * /////////////////////////////////
	 * Prefix: 		art_
	 * Spaltenname:	type_id
	 * Feldposition: [nach belieben]
	 * Feldbezeichnung: [nach belieben]
	 * Feldtyp:		select
	 * Parameter: 	|[typ1]|[typ2]...
	 * Feldattribute: size=1
	 * Standardwert: [kein Eintrag]
	 * /////////////////////////////////
	 * WICHTIG: Im Unterschied zu den Beispielen in der Demo, erfolgt bereits vor
	 * dem ersten Parameter [typ1] das Pipezeichen "|". Dadurch wird der Select-Auswahl
	 * "Artikeltyp" im Backend ein "Leerfeld" vorangestellt. Dieser "Nullwert" stellt
	 * die Standardeinstellung eines fuer alle sichtbaren Artikels dar. */

	// redaxo 4.x
	global $REX;
	global $csMetaInfo;

	if($REX['VERSION']>"3")
	{
		// Zugriffsberechtigung fuer redaxo-community pruefen
		if(OOAddon::isAvailable('community'))
		{
			$chkUsrPerm = rex_com_checkUserPerm($nav->getValue("art_com_perm"));
		}
		else
		{
			// permisson-Check fuer redaxo-community umgehen
			$chkUsrPerm = true;
		}

		// Zugriffsberechtigungen fuer Simple User 1.1 pruefen
		if(OOAddon::isAvailable('simple_user'))
		{
			// auf User-Gruppen pruefen
			$arrArticleGroupId = explode("|",$nav->getValue("art_type_group_id"));

			if($arrArticleGroupId[1]!="")
			{
				$arrUserGroupId = explode("|+|",$feUser['group']);
				if($feUser['group'] != "")
				{
					$chkSimpleUsrGrp = false;

					foreach($arrUserGroupId as $usrGroupId)
					{
						if(in_array($usrGroupId,$arrArticleGroupId))
						{
							$chkSimpleUsrGrp = true;
						}
					}
				}
			}
			else
			{
				$chkSimpleUsrGrp = true;
			}
		}
		else
		{
			$chkSimpleUsrGrp = true;
		}

		if($nav->getValue('art_type_id')=='' || $nav->getValue('art_type_id')=='Standard')
		{
			$artTypeId = '1';
		}
		else
		{
			$artTypeId = $nav->getValue('art_type_id');
		}
	}
	// redaxo 3.x
	else
	{
		$artTypeId = $nav->getTypeId();

		// permisson-Check fuer redaxo-community umgehen
		$chkUsrPerm = true;
		// Group-Check fuer simple_user umgehen
		$chkSimpleUsrGrp = true;
	}

   	if($chkUsrPerm && $chkSimpleUsrGrp && ($artTypeId=='1' || $feUser['typ'] == $artTypeId || $feUser['typ'] == $su))
   	{
   		// Falls MetaInfo cat_styleclass vorhanden ist, Klasseneintrag
   		// 'class="cat_styleclass-Wert" ' generieren
   		if($nav->getValue($REX['csMetaInfo']))
   		{
   			$oStyleClass = ' class="'.$nav->getValue($REX['csMetaInfo']).'" ';
   		}

   		// "geoeffnete" Rootkategorie durch css-ID 'current' markieren
       	if($pathIndex==1 || ($pathIndex==2 && $subUl=='extra'))
       	{
       		if($pathIndex==1)
       		{
       			$oStyleID=' id="current"';
       		}
       		else
       		{
       			$oStyleID=' id="current'.$pathIndex.'"';
       		}
       	}
		else
		{
        	$oStyleID=' id="active"';
		}

      	// Nur Submenue des aktuellen Root anzeigen
      	if($subUl=='on' || $subUl=='off' || $subUl=='extra')
      	{
      		if($nav->getId()==$path[$pathIndex])
      		{
      			// Namen der aktuellen root-Kategorie als Titel fuer
      			// das Submenue uebernehmen
      			if($pathIndex==1)
      			{
      				$subNavigation='<li id="title"'.$oStyleClass.'>'.$nav->getName()."</li>\n";
      			}

      			// Durch ...->getChildren(1) anstatt ...->getChildren() werden
        		// nur Kategorien durchlaufen die "online" sind
        		if($nav->getChildren(1))
        		{
      				if((count($path) > $pathIndex) && ($path[$pathIndex + 1] > 0))
           			{
           				if($pathIndex>1 && $subUl=='extra')
           				{
           					$subNavigation.='<li'.$oStyleID.$oStyleClass.'><a href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
           				}
           				else
           				{
        					if($oStyleID==' id="active"')$oStyleID='';
            				$navigation.='<li'.$oStyleID.$oStyleClass.'><a href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
            			}
            		}
            		else
            		{
            			// bei 'extra' wuerde der root-Navigationspunkt ins submenue verschoben, soll er aber nicht
            			if($pathIndex>1 && $subUl=='extra')
            			{
            				$subNavigation.='<li'.$oStyleID.$oStyleClass.'><a  href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
            			}
            			else
            			{
            				$navigation.='<li'.$oStyleID.$oStyleClass.'><a href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
            			}
            		}
            		// Wenn keine untergeordneten <ul>-Tags im Menue verwendet
            		// werden sollen ($subUl='off'), wird der <li>-Tag geschlossen
					if($subUl=='off')
            		{
            			$navigation.= '</li>'."\n";
            		}
            		// Wenn untergeordnete <ul>-Tags im Menue verwendet
            		// werden sollen ($subUl='on'), wird in dem noch offenen
            		// <li>-Tag der <ul>-Tag geoeffnet
            		else
            		{
            			if($pathIndex>1 && $subUl=='extra')
            			{
            				$subNavigation.= "\n<ul class=\"subnav".$pathIndex."\">\n";
            			}
            			else
            			{
            				$navigation.= "\n<ul class=\"subnav".$pathIndex."\">\n";
            			}
            		}
            		// Durch ...->getChildren(1) anstatt ...->getChildren() werden
            		// nur Kategorien durchlaufen die "online" sind - dazu wird die
            		// Funktion erneut aufgegrufen
            		foreach($nav->getChildren(1) as $sub)
            		{
            			$tmpNav=build_navigation($feUser, $sub, $path,$subUl, $pathIndex+1);
            			$navigation.=$tmpNav[0];
            			$subNavigation.=$tmpNav[1];
            		}
            		// Wenn untergeordnete <ul>-Tags im Menue verwendet
            		// werden sollen ($subUl='on'), wird der <ul>-Tag hier wieder geschlossen
            		if($subUl=='on' || $subUl=='extra')
            		{
            			if($pathIndex>1 && $subUl=='extra')
            			{
            				$subNavigation.="</ul>\n";
            			}
            			else
            			{
            				$navigation.="</ul>\n";
            			}
            		}
            	}
            	else
            	{
					if($pathIndex>1 && $subUl=='extra')
					{
       					$subNavigation.='<li'.$oStyleID.$oStyleClass.'><a class="level'.$pathIndex.' active" href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
       				}
       				else
       				{
       					$navigation.='<li'.$oStyleID.$oStyleClass.'><a href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
       				}

					if($subUl=='off')
       				{
       					$navigation.= '</li>'."\n";
       				}
           		}
           	}
           	else
     		{
				if($pathIndex>1 && $subUl=='extra')
				{
					$subNavigation.='<li'.$oStyleClass.'><a href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
				}
				else
				{
					$navigation.='<li'.$oStyleClass.'><a href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
				}

				if($subUl=='off')
       			{
       				$navigation.= '</li>'."\n";
          		}
          	}
			if($subUl=='on' || $subUl=='extra')
        	{
        		if($pathIndex>1 && $subUl=='extra')
        		{
        			$subNavigation.= '</li>'."\n";
        		}
        		else
        		{
        			$navigation.= '</li>'."\n";
        		}
      		}
      	}
      	// Submenues aller Kategorien anzeigen
      	elseif($subUl=='allOn' || $subUl=='allOff')
      	{
      		if($nav->getChildren(1))
        	{
        		// ID="active" bei aktiver Unterkategorie wieder loeschen
        		if((count($path) > $pathIndex) && ($path[$pathIndex + 1] > 0))
        		{
        			if($oStyleID==' id="active"')$oStyleID='';
        		}

       			if($nav->getId()==$path[$pathIndex])
           		{
           			$navigation.='<li'.$oStyleID.$oStyleClass.' ><a href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
           		}
           		else
           		{
           			$navigation.='<li'.$oStyleClass.'><a href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
           		}
           		// Wenn keine untergeordneten <ul>-Tags im Menue verwendet
           		// werden sollen ($subUl='allOff'), wird der <li>-Tag geschlossen
				if($subUl=='allOff')
           		{
           			$navigation.= '</li>'."\n";
           		}
           		// Wenn untergeordnete <ul>-Tags im Menue verwendet
           		// werden sollen ($subUl='allOn'), wird in dem noch offenen
           		// <li>-Tag der <ul>-Tag geoeffnet
           		else
           		{
           			$navigation.= "\n<ul class=\"subnav".$pathIndex."\">\n";
           		}
           		foreach($nav->getChildren(1) as $sub)
           		{
          			$tmpNav=build_navigation($feUser, $sub, $path,$subUl, $pathIndex+1);
           			$navigation.=$tmpNav[0];
           		}
           		// Wenn untergeordnete <ul>-Tags im Menue verwendet
           		// werden sollen ($subUl='allOn'), wird der <ul>-Tag hier wieder geschlossen
           		if($subUl=='allOn')
           		{
           			$navigation.="</ul>\n";
           		}
       		}
       		else
       		{
       			if($nav->getId()==$path[$pathIndex])
       			{
       				$navigation.='<li'.$oStyleID.$oStyleClass.'><a href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
       			}
       			else
       			{
       				$navigation.='<li'.$oStyleClass.'><a href="'.$nav->getUrl().'">'.$nav->getName().'</a>';
       			}
           		if($subUl=='allOff')
       			{
       				$navigation.= '</li>'."\n";
       			}
       		}
       	}
   		if($subUl=='allOn')
      	{
     		$navigation.= '</li>'."\n";
   		}
   	}
	// Kleiner Trick, falls ausser der root-Kategorie alle weiteren aufgrund
    // der Rechtevergabe ausgeblendet sind. Um validen HTML-Code zu erhalten
    // muss am Ende des $navigations-String "<ul class=\"subnav1\">\n</ul>"
    // geloescht werden
    if(strstr($navigation,"<ul class=\"subnav1\">\n</ul>"))
    {
    	$navigation = str_replace("\n<ul class=\"subnav1\">\n</ul>","\n",$navigation);
    }
    $navArray=array();
    $navArray[0].=$navigation;
    $navArray[1].=$subNavigation;
   	return $navArray;
}  // ------------------ Ende der function build_navigation ------------------

//////////////////////////////////////////////
//  " M E N U E - U M S C H A L T E R "
//////////////////////////////////////////////
//  Menue mit <ul></ul> Auszeichnung
//  auch in den Unter-Menuepunkten oder
//  alle Untermenuepunkte staendig anzeigen
//  <ul> einschalten:.................. on
//  <ul> ausschalten:.................. off
//  alle mit <ul> staendig anzeigen:.... allOn
//  alle ohne <ul> staendig anzeigen:... allOff
//  Untermenue extra:................... extra
//////////////////////////////////////////////
// Standardparameter fuer $subUl setzen, falls
// yaml-Layout-Template nicht benutzt wird
// (Bei Einsatz des yaml-templates werden diese
//  Werte dort gesetzt)
//////////////////////////////////////////////
if($subUl=='')$subUl='extra';
//////////////////////////////////////////////
// Ein Zusaetzliches Menue (z. B. als topnav-Menue) kann auf Basis von root-Artikeln,
// die ueber eine Meta Info selektiert werden koennen, oder ohne eine Meta Info
// komplett in die Variable $raNavigation uebergeben werden.
// $raNav = 'on|off' (Bei Einsatz des yaml-templates wird dieser Wert dort gesetzt)
if($raNav=='')$raNav = 'off';
//////////////////////////////////////////////
// Standardwert fuer individuelle StyleKlassen der Kategorien ueber MetaInfo setzen
// ueber $REX['csMetaInfo'] ist der Wert automatisch global, also auch in der
// Funktion build_navigation sofort abrufbar (Bei Einsatz des yaml-templates wird
// dieser Wert dort gesetzt)
if($REX['csMetaInfo']=='')$REX['csMetaInfo']= 'cat_styleclass';
// Den Meta Infos wird unter *KATEGORIEN* folgendes hinzugefuegt:
// ---------------------------------
// Spaltenname: styleclass
// Feldposition: beliebiger Wert
// Feldbezeichnung: styleclass
// Feldtyp: select
// Parameter (z.B.): |rot|gruen|blau          (durch das erste Pipezeichen kann ein Eintrag spaeter wieder geleert werden)
// Feldattribute: size=1
// ---------------------------------
// Über Kategorie editieren/löschen im Strukturmenue kann man jetzt
// jeder Kategorie eine css-Klassenbezeichnung zufuegen, die dann im
// Quelltext z. B. aus <li> <li class="rot"> macht.



// ------------------ Navigation erstellen ------------------

// Voreinstellungen:
   $path = explode("|",$this->getValue("path").$this->getValue("article_id")."|");

// Usertyp und -gruppe festlegen, um Authentifizierung zu ermoeglichen

if(is_array($FORM))
{
	$feUser['typ']=$FORM['USR_TYP'];
	$feUser['group']=$FORM['USR_GROUP'];
}
else
{
	$feUser['typ']=$_SESSION['USR_TYP'];
	$feUser['group']=$_SESSION['USR_GROUP'];
}

// Durch ...::getRootCategories(1) anstatt ...::getRootCategories()
// werden nur die Root-Kategorien durchlaufen die "online" sind
$navi=array();
foreach (OOCategory::getRootCategories(1) as $nav)
{
	$navi=build_navigation($feUser, $nav, $path, $subUl);
	$navMain.=$navi[0];
	$navSub.=$navi[1];
  
}

$cssId = ' id="submenu"';

if($subUl=='extra')
{
	$navigation= "<ul> \n".$navMain."</ul>\n";
}
else
{
	$navigation= "<ul $cssId> \n".$navMain."</ul>\n";
}

if($navSub)
{
	$subNavigation= "<ul $cssId>\n".$navSub."</ul>\n";
}

// Hier die ID's für die gewünschten Kategorien zuordnen
// z. B. $catIdRot='2'
$catIdRot='';
$catIdGruen='';
$catIdBlau='';

// Hier wird das "rote" Menü aufgebaut und an $navigation_rot übergeben
$nav1=OOCategory::getCategoryById($catIdRot);
$navi1 = build_navigation($userTyp, $nav1, $path, 'on');
$navigation_rot = "<ul class=\"rot\">\n {$navi1[0]} </ul>\n";

// Hier wird das "grüne" Menü aufgebaut und an $navigation_gruen übergeben
$nav2=OOCategory::getCategoryById($catIdGruen);
$navi2 = build_navigation($userTyp, $nav2, $path, 'on');
$navigation_gruen = "<ul class=\"gruen\">\n {$navi2[0]} </ul>\n";

// Hier wird das "blaue" Menü aufgebaut und an $navigation_blau übergeben
$nav3=OOCategory::getCategoryById($catIdBlau);
$navi3 = build_navigation($userTyp, $nav3, $path, 'on');
$navigation_blau = "<ul class=\"blau\">\n {$navi3[0]} </ul>\n";

// Im Seitentemplate können die Menüs nun einfach mit der Variable
// §navigation_rot, $navigation_gruen oder $navigation_blau uebergeben und angezeigt werden


// ------------------ Breadcrumb erstellen ------------------

$aktArticle = OOArticle::getArticleById($this->getValue('article_id'));
$tree = $aktArticle->getParentTree();

//////////////////////////////////////////////
//  Standardwerte fuer Titel und Trennzeichen
//  fuer die Breadcrumb-Links festlegen, falls
//  yaml-Layout-Template nicht benutzt wird
//  (Bei Einsatz des yaml-templates werden diese
//  Werte dort gesetzt)
//////////////////////////////////////////////
if($bcTitle=='')$bcTitle = 'Sie befinden sich hier: ';
if($bcDivi =='')$bcDivi  = ' > ';
//  Startartikel im Breadcrumbmenue verlinken (Dank an rudoo fuer die Idee!)
//  $bcServerLink='on|off'
if($bcServerLink=='')$bcServerLink='on';
//////////////////////////////////////////////

if(is_array($path))
{
	if($bcServerLink=='on')
	{
		$startArticle = OOArticle::getArticleByID($REX['START_ARTICLE_ID']);
		$breadcrumb = '<div id="breadcrumb">'."\n".'<span class="bcTitle">'.$bcTitle.'<a href="'.$startArticle->getUrl().'">'.$REX ['SERVERNAME'].'</a>'.'</span>';
	}
	else
	{
		$breadcrumb = '<div id="breadcrumb">'."\n".'<span class="bcTitle">'.$bcTitle.$REX ['SERVERNAME'].'</span>';
	}

   	foreach($path as $bcNr)
   	{
   		if($bcNr!='')
   		{
   			$art = OOArticle::getArticleByID($bcNr);
   			if($art->getValue('id')!=$this->getValue('article_id'))
   			{
   				// Pfad-Eintraege des Artikels verlinken
   				$breadcrumb .= $bcDivi.$art->toLink();
   			}
   			else
   			{
   				// Artikelname der aktuellen Seite nicht verlinken
   				$breadcrumb .= $bcDivi.'<span class="bcActive">'.$this->getValue("name")."</span>\n";
   			}
   		}
   	}
   	$breadcrumb .='</div>'."\n";
}

// ------------------ Navigationsmenue anhand von root-Artikeln erstellen ------------------
if($raNav=='on')
{
	$rootArticles = OOArticle::getRootArticles($ignore_offlines = true, $clang = false);
	$raNavigation='';
	$raCnt = 1;

	foreach($rootArticles as $rootArticle)
	{
		// ab redaxo 4.x
		// mit MetaInfo ob der root-Artikel im Menue erscheinen soll
		if($REX['VERSION']>"3" && $rootArticle->hasValue($raMetaInfo))
		{
			if($rootArticle->getValue($raMetaInfo)=='|true|')
			{
				if($raCnt>1)
				{
					$raNavigation=$raNavigation.$raDivi;
				}
				$raCnt++;
				$raNavigation = $raNavigation.$rootArticle->toLink($params='', $attributes=null, $sorround_tag=null, $sorround_attributes=null);
			}
		}
		// redaxo 3. oder redaxo 4.x ohne MetaInfo-Nutzung
		else
		{
			if($raCnt>1)
			{
				$raNavigation=$raNavigation.$raDivi;
			}
			$raCnt++;
			$raNavigation = $raNavigation.$rootArticle->toLink($params='', $attributes=null, $sorround_tag=null, $sorround_attributes=null);
		}
	}
}

?>

Benutzeravatar
raybeam
Beiträge: 442
Registriert: 5. Feb 2006, 21:30
Kontaktdaten: Website

22. Aug 2009, 11:13

Hallo Oliver,

mit welcher Redaxo-Version arbeitest Du?

Gruß

Peter

oliver
Beiträge: 14
Registriert: 9. Nov 2008, 21:53
Wohnort: Heinsberg

22. Aug 2009, 11:41

hallo peter,

ich arbeite mit der version 4.1

gruß

oliver

Benutzeravatar
raybeam
Beiträge: 442
Registriert: 5. Feb 2006, 21:30
Kontaktdaten: Website

22. Aug 2009, 12:15

Vergiß meine Frage :oops:

Das Problem liegt in folgenden Zeilen

Code: Alles auswählen

// Hier die ID's für die gewünschten Kategorien zuordnen
// z. B. $catIdRot='2'
$catIdRot='';
$catIdGruen='';
$catIdBlau=''; 
Den catIdxxx müssen entsprechende Id's der Kategorien übergeben werden, die du mit den Extramenüs darstellen möchtest. Z. B.

Code: Alles auswählen

// Hier die ID's für die gewünschten Kategorien zuordnen
// z. B. $catIdRot='2'
$catIdRot='1';
$catIdGruen='12';
$catIdBlau='99'; 
Dann sollte es funktionieren.

Gruß

Peter

oliver
Beiträge: 14
Registriert: 9. Nov 2008, 21:53
Wohnort: Heinsberg

24. Aug 2009, 11:43

vielen dank für den tipp!

leider kapiere ich das nicht ganz mit den kategorie ids. von typo3 kann ich nur was mit levels anfangen und bin vielleicht deswegen etwas schwer von begriff. ich verstehe einfach nicht wie ich auf die richtige ids für jedes menü komme (davon habe ich drei: zu sehen hier: http://www.fzkunst.de/index.php?article_id=8)

Benutzeravatar
raybeam
Beiträge: 442
Registriert: 5. Feb 2006, 21:30
Kontaktdaten: Website

24. Aug 2009, 17:24

Hallo Oliver,

kein Problem, ging mir anfangs genau so. :wink:

Als erstes solltest du im Backend die Seite "Benutzer" aufrufen. Wähle deinen Benutzernamen (dürfte ja vermutlich der Administrator sein). Auf der Benutzerseite findest Du im Feld Optionen u. A. den "advancedMode[]". Sollte der noch nicht markiert sein, so werden dir in der Strukturübersicht die Kategorien- und Artikel-Id's nicht angezeigt. Der Einfachheit halber solltest Du alle Einträge der Liste markieren (auch als Admin).

Auf die Schnelle kannst Du die ID der Kategorie auch dadurch erkennen, dass du im Backend/Struktur mit dem Mauszeiger auf den jeweiligen Kategorie-Link zeigst. Im Firefox z. B. findest Du dann in der Statusleiste (Ansicht/Statusleiste) den URL zur Kategorie. Dieser enthält u.a den Wert "category_id=..." mit der ID die Du suchst.

Was mich Anfangs bei redaxo völlig verwirrte, war die Vorgehensweise, dass Kategorie-ID und die ID des Startartikels dieser Kategorie identisch sind. Wunder dich also nicht - nimm es einfach hin :)

Gruß

Peter

oliver
Beiträge: 14
Registriert: 9. Nov 2008, 21:53
Wohnort: Heinsberg

26. Aug 2009, 21:01

hallo peter,

das prinzip ist mir mittlerweile klar. leider hilft es mir bei meinem problem irgendwie nicht weiter. also, wie man im testlink sehen kann, habe ich die kategorie künstler. geht man darauf, öffnet sich das submenü mit den allen künstlern. soweit so gut.
die künstler habe ich alle in kategorien angelegt in denen sich immer die kategorie vita und arbeiten befindet. und diese beiden möchte ich einfach wieder in einem neuen div ausgeben. es ist ja quasi die 3. menüebene und die soll ebenfalls gesondert formatiert werde unabhängig der id, damit es dynamisch bleibt.

ich hoffe, das ist verständlich.

Zurück zu „Allgemeines [R4]“