Seite 21 von 25

Re: Modul :: NavigationUniversell

Verfasst: Di 30. Mär 2010, 19:18
von idea-tec
ohne JS gibt es heute nicht mehr

Re: Modul :: NavigationUniversell

Verfasst: Di 30. Mär 2010, 22:21
von GaMbIt_
Hahaha.. doooch :D :twisted:

Re: Modul :: NavigationUniversell

Verfasst: Mi 31. Mär 2010, 08:33
von Dodger77
Ich würde mal sagen, die Diskussionen über JS oder nicht ist off-topic. => Sollte also dazu nun alles gesagt sein.

Anbei nun eine Variante der Klasse, die einen Platzhalter {idcat} beinhaltet, damit sollte sich das soch machen lassen:

Code: Alles auswählen

<?php


/**
 * navigationUniversell (aQnavigation)
 * 
 * @version 1.2.2
 * @since 1.2.2 - 15.10.2007
 * @since 1.2.1 - 15.10.2007
 * @author Andreas Kummer
 * @copyright Copyright &copy; 2007 atelierQ
 * @modified by I. van Peeren - added idcat 
 */

class aQnavigation {

	/**
	 * Konstruktor der Klasse.
	 * @param Integer  Prim?rschl?ssel der Startkategorie.
	 */
	function aQnavigation($startId) {

		global $client, $lang, $idcat, $db;

		$this->startId = $startId;

		$this->client = $client;
		$this->lang = $lang;

		$this->idcat = (isset ($_GET['pretend'])) ? ($_GET['pretend']) : ($idcat);

		$this->before = '';
		$this->beforeEach = '';
		$this->between = '';
		$this->after = '';

		$this->excludeItemsStartingWith = '__';

		$this->db = $db;

		$this->setStartIds();

		$this->getNavigation();
	}

	/**
	 * Auslesen der Navigationsstruktur aus der Datenbank.
	 */
	function getNavigation() {

		global $cfg, $auth;

		if ($this->startId != $this->id[0]) {
			/*
			 * Wenn die StartId nicht identisch ist mit der h?chsten Ebene der
			 * aktuell selektierten Kategorie, dann liegt die gew?hlte Kategorie
			 * folgerichtig ausserhalb des f?r die Navigation gew?hlten Baumes.
			 * In diesem Fall ist nur die Hauptnavigation einzublenden.
			 */
			$this->id[0] = $this->startId;
			for ($i = 1; $i <= 3; $i++) {
				$this->id[$i] = -1;
			}
		}

		if ($auth->auth['uid'] == '' || !$this->isNumeric($auth->auth['uid'])) {
			/*
			 * Login nicht erfolgt
			 */
			$user = 0;
		} else {
			/*
			 * Benutzer ist eingeloggt
			 */
			$user = $auth->auth['uid'];
		}

		$this->db->query("" .
		"SELECT DISTINCT " .
		"a.idcat, " .
		"a.parentid, " .
		"a.preid, " .
		"a.postid, " .
		"b.name, " .
		"b.idlang, " .
		"IF (b.visible = 1 && (b.public = 1 || d.idfrontenduser IS NOT NULL), 1, 0) AS visible " .
		"FROM {$cfg['tab']['cat']} AS a " .
		"LEFT JOIN {$cfg['tab']['cat_lang']} AS b ON a.idcat = b.idcat " .
		"LEFT JOIN {$cfg['tab']['frontendpermissions']} AS c ON ((c.item = b.idcatlang OR c.item = '__GLOBAL__') AND c.idlang = b.idlang AND plugin ='category') " .
		"LEFT JOIN {$cfg['tab']['frontendgroupmembers']} AS d ON c.idfrontendgroup = d.idfrontendgroup AND d.idfrontenduser = {$user} " .
		"WHERE " .
		"   a.idclient = {$this->client} " .
		"   AND (" .
		"      a.parentid = {$this->id[0]} " .
		"      OR a.parentid = {$this->id[1]} " .
		"      OR a.parentid = {$this->id[2]} " .
		"      OR a.parentid = {$this->id[3]} " .
		"   ) " .
		"");
		
/*		echo "<!-- " .
		"SELECT DISTINCT " .
		"a.idcat, " .
		"a.parentid, " .
		"a.preid, " .
		"a.postid, " .
		"b.name, " .
		"b.idlang, " .
		"IF (b.visible = 1 && (b.public = 1 || d.idfrontenduser IS NOT NULL), 1, 0) AS visible " .
		"FROM {$cfg['tab']['cat']} AS a " .
		"LEFT JOIN {$cfg['tab']['cat_lang']} AS b ON a.idcat = b.idcat " .
		"LEFT JOIN {$cfg['tab']['frontendpermissions']} AS c ON ((c.item = b.idcatlang OR c.item = '__GLOBAL__') AND c.idlang = b.idlang AND plugin ='category') " .
		"LEFT JOIN {$cfg['tab']['frontendgroupmembers']} AS d ON c.idfrontendgroup = d.idfrontendgroup AND d.idfrontenduser = {$user} " .
		"WHERE " .
		"   a.idclient = {$this->client} " .
		"   AND (" .
		"      a.parentid = {$this->id[0]} " .
		"      OR a.parentid = {$this->id[1]} " .
		"      OR a.parentid = {$this->id[2]} " .
		"      OR a.parentid = {$this->id[3]} " .
		"   ) " .
		" -->";*/

		$this->navigationTree = array ();

		$this->firstId[0] = 0;
		$this->firstId[1] = 0;
		$this->firstId[2] = 0;
		$this->firstId[3] = 0;

		while ($this->db->next_record()) {

			for ($i = 0; $i <= 3; $i++) {
				if (($this->firstId[$i] == 0 && $this->db->f('parentid') == $this->id[$i] && $this->db->f('preid') == 0 && $this->db->f('idlang') == $this->lang) || ($this->firstId[$i] == 0 && $this->db->f('parentid') == $this->id[$i] && $this->db->f('preid') == 0 && $this->db->f('idlang') == null)) {
					$this->firstId[$i] = $this->db->f('idcat');
				}
			}
			/*
			 * Das Einf?gen in den Navigationsbaum darf nur erfolgen, wenn noch kein Eintrag existiert
			 * oder - wenn bereits einer existiert - der neue Eintrag der aktuell gew?hlten Sprache
			 * entspricht.
			 */
			if (!isset ($this->navigationTree[$this->db->f('parentid')][$this->db->f('idcat')]) || $this->db->f('idlang') == $this->lang && $this->db->f('visible') == 1) {
				$this->navigationTree[$this->db->f('parentid')][$this->db->f('idcat')] = array ('preid' => $this->db->f('preid'),
                                                                                                'postid' => $this->db->f('postid'),
                                                                                                'visible' => $this->db->f('visible'),
                                                                                                'name' => $this->db->f('name'),
                                                                                                'idlang' => $this->db->f('idlang'));
			}
		}
		
/*		echo '<!-- ';
		print_r($this->navigationTree);
		echo ' -->';*/

	}

	/**
	 * Ausgabe der Navigation an die Standardausgabe.
	 * @param String  Navigationstyp
	 */
	function showNavigation($type, $next = -1) {

		static $first;
		static $output = array (
			false,
			false,
			false,
			false,
			false,
			false,
			false
		);

		$returnValue = "";

		if ($next == 0) {
			if ($output[$type]) {
				return $this->after[$type];
			} else {
				return false;
			}
		}

		if ($next == -1) {
			$returnValue .= $this->before[$type];
			$next = $this->firstId[$type];
			$first[$type] = true;
		}

		$parentId = $this->id[$type];

		$link = 'front_content.php?idcat=' . $next;

		if ($this->navigationTree[$parentId][$next]['visible'] == 1 && $this->navigationTree[$parentId][$next]['idlang'] == $this->lang && $this->isVisble($this->navigationTree[$parentId][$next]['name'])) {
			if (!$first[$type]) {
				$returnValue .= $this->between[$type];
			}

			if (strstr($this->navigationTree[$parentId][$next]['name'], '$$$') == true) {
				$name = explode('$$$', $this->navigationTree[$parentId][$next]['name']);
				$name1 = $name[0];
				$name2 = $name[1];
			} else {
				$name1 = $this->navigationTree[$parentId][$next]['name'];
				$name2 = '';
			}

			$sub = (isset ($this->sub[$type])) ? ($this->sub[$type]) : ('');

			if ($this->isActive($next) & !empty ($this->maskActive[$type]) & !empty ($this->maskActive[$type])) {
				$returnValue .= $this->beforeSelected[$type];
				$returnValue .= str_replace('{idcat}', $next, str_replace('{sub}', $sub, str_replace('{name2}', $name2, str_replace('{name1}', $name1, str_replace('{link}', $link, ($sub == '') ? ($this->maskActive[$type]) : ($this->maskActiveSub[$type]))))));
			}
			elseif ($this->isSelected($next)) {
				$returnValue .= $this->beforeSelected[$type];
				$returnValue .= str_replace('{idcat}', $next, str_replace('{sub}', $sub, str_replace('{name2}', $name2, str_replace('{name1}', $name1, str_replace('{link}', $link, ($sub == '') ? ($this->maskSelected[$type]) : ($this->maskSelectedSub[$type]))))));
			} else {
				$returnValue .= $this->beforeEach[$type];
				$returnValue .= str_replace('{idcat}', $next, str_replace('{sub}', $sub, str_replace('{name2}', $name2, str_replace('{name1}', $name1, str_replace('{link}', $link, $this->maskNormal[$type])))));
			}

			$first[$type] = false;
			$output[$type] = true;
		}
		elseif (!$output && $this->navigationTree[$parentId][$next]['postid'] == 0) {
			/*
			 * Die Navigation enth?lt nichts.
			 */
		}

		return $returnValue . $this->showNavigation($type, $this->navigationTree[$parentId][$next]['postid']);
	}

	function setExcludeStart($start) {
		$this->excludeItemsStartingWith = $start;
	}

	function isVisble($name) {
		if (substr($name, 0, strlen($this->excludeItemsStartingWith)) == $this->excludeItemsStartingWith) {
			return false;
		}
		return true;
	}

	/**
	 * Ausgabe vor der Navigation
	 * @param String  Ausgabe vor der Navigation.
	 */
	function before($level, $text) {
		$this->before[$level] = $text;
	}

	/**
	 * Ausgabe vor jedem Eintrag
	 * @param String  Ausgabe vor jedem Eintrag.
	 */
	function beforeEach($level, $text) {
		$this->beforeEach[$level] = $text;
	}

	/**
	 * Ausgabe vor jedem selektierten Menueintrag
	 * @param String  Ausgabe vor jedem selektierten Menueintrag.
	 */
	function beforeSelected($level, $text) {
		$this->beforeSelected[$level] = $text;
	}

	/**
	 * Ausgabe zwischen zwei Hauptmenupunkten
	 * @param String  Ausgabe zwischen zwei Hauptmenupunkten.
	 */
	function between($level, $text) {
		$this->between[$level] = $text;
	}

	/**
	 * Ausgabe nach der Navigation
	 * @param String  Ausgabe nach der Navigation.
	 */
	function after($level, $text) {
		$this->after[$level] = $text;
	}

	function maskNormal($level, $text) {
		$this->maskNormal[$level] = $text;
	}

	function maskNormalSub($level, $text) {
		$this->maskNormalSub[$level] = $text;
	}

	function maskSelected($level, $text) {
		$this->maskSelected[$level] = $text;
	}

	function maskSelectedSub($level, $text) {
		$this->maskSelectedSub[$level] = $text;
	}

	function maskActive($level, $text) {
		$this->maskActive[$level] = $text;
	}

	function maskActiveSub($level, $text) {
		$this->maskActiveSub[$level] = $text;
	}

	function setSub($level, $content) {
		$this->sub[$level] = $content;
	}

	/**
	 * Gibt das Level der Kategorie zur?ck.
	 * @param Integer  Prim?rschl?ssel der Kategorie.
	 * @return Integer Level der spezifizierten Kategorie.
	 */
	function getLevel($idcat) {

		global $cfg;

		if (empty ($idcat)) {
			return 0;
		}

		$this->db->query("" .
		"SELECT level FROM {$cfg['tab']['cat_tree']} " .
		"WHERE " .
		"   idcat = $idcat" .
		"");
		if ($this->db->next_record()) {
			return $this->db->f('level');
		} else {
			return 0;
		}
	}

	/**
	 * Gib die Tiefe relativ zum Hauptmenu an.
	 * @param Integer  Prim?rschl?ssel der Kategorie
	 * @return Integer Level relativ zum Hauptmenu
	 */
	function getNetLevel($idcat) {

		return $this->getLevel($idcat) - $this->getLevel($this->startId);
	}

	/**
	 * Ermittlung des jeweils ersten Kategorieeintrages jeder Ebene. Die
	 * Speicherung dieser Daten erfolgt in das Klassenattribut id.
	 */
	function setStartIds() {

		$id = $this->idcat;

		$level = $this->getNetLevel($id);
		$this->id[$level] = $id;

		while ($level > 0) {
			$this->id[$level -1] = $this->getParentId($id);
			$id = $this->id[$level -1];
			$level = $this->getNetLevel($id);
		}

		if (empty ($this->id)) {
			$this->id[0] = $this->startId;
		}
		for ($i = 1; $i <= 3; $i++) {
			if (empty ($this->id[$i])) {
				$this->id[$i] = -1;
			}
		}
		ksort($this->id);
	}

	/**
	 * Ermittlung des Elternelementes der Kategorie mit dem Prim?rschl?ssel
	 * idcat
	 * @param Integer  Prim?rschl?ssel des Kindelementes, dessen Elternelement
	 * ermittelt werden soll.
	 * @return Integer Prim?rschl?ssel des Elternelementes.
	 */
	function getParentId($idcat) {

		global $cfg;

		$this->db->query("" .
		"SELECT parentid FROM {$cfg['tab']['cat']} " .
		"WHERE " .
		"   idcat = $idcat " .
		"");
		if ($this->db->next_record()) {
			return $this->db->f('parentid');
		} else {
			return 0;
		}
	}

	/**
	 * Anzeige, ob eine Navigationsebene Elemente enth?lt oder nicht.
	 * @param Integer  Navigationsstufe.
	 * @return Boolean True, wenn die Navigationsstufe leer ist (keine Elemente
	 * enh?lt). Sonst false.
	 */
	function navigationEmpty($level) {

		if ($this->firstId[$level] == 0) {
			return true;
		}

		return false;
	}

	/**
	 * Anzeige, ob eine Kategorie selektiert ist oder nicht. Eine Kategorie gilt
	 * als selektiert, wenn sie die aktuelle Kategorie ist oder ein direktes
	 * oder indirektes Elternelement der aktuellen Kategorie.
	 * @param Integer  Prim?rschl?ssel der Kategorie, deren Status gefragt ist.
	 * @return Boolean True, wenn die gefragte Kategorie mit der aktuellen
	 * Kategorie ?bereinstimmt oder ein direktes oder indirektes Elternelement
	 * der aktuellen Kategorie darstellt.
	 */
	function isSelected($idcat) {

		return in_array($idcat, $this->id);
	}

	/**
	 * Anzeige, ob es sich bei der Kategorie um die aktive Kategorie handelt oder nicht.
	 * @param Integer Prim?rschl?ssel der Kategorie, deren Status gefragt ist.
	 * @return Boolean True, wenn die gefragte Kategorie aktiv ist.
	 */
	function isActive($idcat) {

		return $idcat == $GLOBALS['idcat'];
	}

	/**
	 * Die Funktion gibt true zur?ck, wenn der ?bergene String ausschliesslich aus nummerischen Ziffern besteht.
	 * @param String parameter String, der gepr?ft werden soll.
	 * @return Boolean True, wenn der ?bergebene String ausschliesslich aus nummerischen Ziffern besteht.
	 */
	function isNumeric($parameter) {
		return !preg_match("/[^0-9]/", $parameter);
	}
}
?>

Re: Modul :: NavigationUniversell

Verfasst: Sa 12. Jun 2010, 21:25
von Mario_m
Habe leider ein Problem mit der Anzeig der Submenüs. Folgender Code gibt nur die Hauptkategorien aus.

Code: Alles auswählen

<?php

cInclude('frontend', 'includes/atelierq.navigation.class.inc.php');

$cApiClient = new cApiClient($client);
$aQnavigation = new aQnavigation($cApiClient->getProperty('navigation', 'idcat_mainnavigation'));


$aQnavigation->between(1, '');
$aQnavigation->maskNormal(1, '<div><a target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskNormalSub(1, '<div><a target="_self" href="{link}">{name1}</a></div>{sub}');
$aQnavigation->maskSelected(1, '<div><a target="_self" href="{link}">›{name1}</a></div>');
$aQnavigation->maskSelectedSub(1, '<div><a target="_self" href="{link}">›{name1}</a></div>{sub}');
echo $aQnavigation->showNavigation(1);

$aQnavigation->between(0, '');
$aQnavigation->maskNormal(0, '<div><a target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskNormalSub(0, '<div><a target="_self" href="{link}">{name1}</a></div>{sub}');
$aQnavigation->maskSelected(0, '<div><a target="_self" href="{link}">›{name1}</a></div>');
$aQnavigation->maskSelectedSub(0, '<div><a target="_self" href="{link}">›{name1}</a></div>{sub}');
echo $aQnavigation->showNavigation(0);

?> 
Hat jemand eine Idee warum. Auch der Code aus den vorherigen Postings kommt zum gleichen Ergebnis. Alle Kategorien sind online. Template habe ich nochmal gespeichert. con_code hab ich auch schon geleert

Re: Modul :: NavigationUniversell

Verfasst: So 13. Jun 2010, 13:16
von GaMbIt_
joa... Dir fehlt die Subnavi.. was ja auch logisch ist ..
Und wieso ist da oben in der Subnavi ein Echo drin?


$aQnavigation->setSub(0, $aQnavigation->showNavigation(1)); <---sowas brauchst Du ;) und zwar im Block der ersten Ebene ...

Re: Modul :: NavigationUniversell

Verfasst: So 13. Jun 2010, 17:48
von Mario_m
OK, habs. Hatte ein Problem mit dem AMR. Jetzt gehts

Re: Modul :: NavigationUniversell

Verfasst: So 13. Jun 2010, 17:57
von BagHira
Servus mario_m,
Mario_m hat geschrieben:Hatte ein Problem mit dem AMR.
Was hat das AMR mit den Submenüs zu tun? <- nur für die Nachwelt

Re: Modul :: NavigationUniversell

Verfasst: So 13. Jun 2010, 21:08
von Mario_m
In der Form, dass ich die Aliasse zurücksetzen musste, damit überhaupt Artikel geladen werden.

Re: Modul :: NavigationUniversell

Verfasst: Mo 14. Jun 2010, 22:12
von Mario_m
Das Ganze funktioniert nun hervorragend. Ein Problem hätte ich noch. Ich habe die Navigatin gesplittet und würde gerne in
dem Submenü immer den aktiven Menüpunkt des Hauptmenüs mit anzeigen.
Weiss einer wie das funktioniert?
Also so:
Menü1 >Menü2 Menü3 Menü4



>Menü2
Submenü1
Submenü2
Submenü3
Submenü4

Re: Modul :: NavigationUniversell

Verfasst: Di 15. Jun 2010, 16:29
von BagHira
Servus Mario_m

ich hab bei mir ein Modul laufen, das dies tut, guggst du hier:

Output:

Code: Alles auswählen

<?php
#Settings
$separator = '';
#Get path to root
$dummy = conCreateLocationString($idcat, ' '.$separator.' ', $retval, true, "navipath", 1);
if ($retval=='') {
	$retval='&nbsp;';	
} else {
	$pattern = "'>.*?<'";
	preg_match_all($pattern, $retval, $matches);
	$matches = $matches[0];
   $retval = substr($matches[0], 1, strlen($matches[0]) - 2);
}
echo $retval;
?>
Beispiel -> siehe Signatur...

Re: Modul :: NavigationUniversell

Verfasst: Di 15. Jun 2010, 23:03
von Mario_m
Hallo Holger,

funzt! Vielen Dank nochmal

Gruss

Mario

Re: Modul :: NavigationUniversell

Verfasst: Mi 23. Jun 2010, 13:30
von thilo
Hallo zusammen,

kann mir bitte jemand von dem Schlauch runterhelfen auf dem ich jetzt seit 3 Stunden stehe.
Ich hab mich jetzt durch die 21 Seiten dieses Threads durchgeackert, aber keine Lösung gefunden:

Wie bekomme ich dieses Modul so formatiert, daß die Hauptnavigation horizontal dargestellt wird?

Das einzige was ich gefunden habe ist "einfach das HTML entsprechend formatieren". Aber wie???

Ich bin mir sicher daß die Lösung supereinfach ist, aber ich hab mittlerweile den Tunnelblick und seh nicht mehr klar....

Bitte rettet mich :cry: :cry: :cry:
Viele Grüße
Thilo

Re: Modul :: NavigationUniversell

Verfasst: Mi 23. Jun 2010, 14:06
von idea-tec
thilo hat geschrieben:Das einzige was ich gefunden habe ist "einfach das HTML entsprechend formatieren". Aber wie???
http://www.css4you.de/
Speziell: http://www.css4you.de/float.html

Re: Modul :: NavigationUniversell

Verfasst: Mi 23. Jun 2010, 14:26
von thilo
@Karsten

Du bist mein Held !!!!

Danke Danke Danke !!! Völlig logisch, klappt innerhalb 2 Sekunden, wär ich in 10.000 Jahren nicht draufgekommen.

Merci :D
Thilo

Re: Modul :: NavigationUniversell

Verfasst: Mi 23. Jun 2010, 16:36
von thilo
vielleicht noch eine kleine Frage an die Navigationsprofis:

wenn ich einen Hauptmenüpunkt der ersten Ebene habe, der keine Subnavipunkte (Ebene 2) hat, dann wird trotzdem eine CSS Formatierung angezeigt obwohl es keine Menüpunkte zu formatieren gibt.

Muss ich irgendwo eine Unterscheidung berücksichtigen zwischen "es gibt Subnavipunkte" und "es gibt keine Subnavipunkte"? Und wenn ja - WO?

Danke euch !!

Thilo