Re: Modul :: NavigationUniversell
Verfasst: Mi 23. Jun 2010, 20:21
Poste bitte mal den Modul-Output, wie soll man das beantworten, wenn man nicht sehen kann, was getan wird?
Das Diskussionsforum zum Open Source Content Management System
https://forum.contenido.org/
Code: Alles auswählen
<?php
cInclude('classes', 'atelierq.navigation.class.inc.php');
$cApiClient = new cApiClient($client);
$aQnavigation = new aQnavigation($cApiClient->getProperty('navigation', 'idcat-home', '1'));
$aQnavigation->between(0, '');
$aQnavigation->maskNormal(0, '<div id="button"><div id="buttontext"><a class="navi" target="_self" href="{link}">{name1}</a></div></div>');
$aQnavigation->maskNormalSub(0, '<div id="button"><div id="buttontext"><a class="navi" target="_self" href="{link}">{name1}</a></div></div>');
$aQnavigation->maskSelected(0, '<div id="buttonaktiv"><div id="buttontextaktiv"><a class="active" target="_self" href="{link}">{name1}</a></div></div>');
$aQnavigation->maskSelectedSub(0, '<div id="buttonaktiv"><div id="buttontextaktiv"><a class="active" target="_self" href="{link}">{name1}</a></div></div>');
echo $aQnavigation->showNavigation(0);
?>
Code: Alles auswählen
<?php
$aQnavigation->between(2, '');
$aQnavigation->maskNormal(2, '<div><a target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskSelected(2, '<div><a target="_self" href="{link}">›{name1}</a></div>');
$aQnavigation->maskNormalSub(2, '<div><a target="_self" href="{link}">{name1}</a>{sub}</div>');
$aQnavigation->maskSelectedSub(2, '<div><a target="_self" href="{link}">›{name1}</a>{sub}</div>');
$aQnavigation->between(1, '');
$aQnavigation->maskNormal(1, '<div id="subnavibutton"><div id="subnavibuttontext"><a class="sub" target="_self" href="{link}">{name1}</a></div></div>');
$aQnavigation->maskNormalSub(1, '<div id="subnavibutton"><div id="subnavibuttontext"><a class="sub" target="_self" href="{link}">{name1}</a></div></div>{sub}');
$aQnavigation->maskSelected(1, '<div id="subnavibuttonaktiv"><div id="subnavibuttontextaktiv"><a class="subactive" target="_self" href="{link}">{name1}</a></div></div>');
$aQnavigation->maskSelectedSub(1, '<div id="subnavibuttonaktiv"><div id="subnavibuttontextaktiv"><a class="subactive" target="_self" href="{link}">{name1}</a></div></div>{sub}');
$aQnavigation->setSub(1, $aQnavigation->showNavigation(2));
echo $aQnavigation->showNavigation(1);
?>
Code: Alles auswählen
<?php
cInclude('classes', 'atelierq.navigation.class.inc.php');
$cApiClient = new cApiClient($client);
$aQnavigation = new aQnavigation($cApiClient->getProperty('navigation', 'idcat_subnavigation'));
$aQnavigation->between(3, '');
$aQnavigation->maskNormal(3, '<li><a href="{link}">{name1}</a></li>');
$aQnavigation->maskSelected(3, '<li class="selected"><a href="{link}">{name1}</a></li>');
$aQnavigation->between(2, '');
$aQnavigation->maskNormal(2, '<li><a href="{link}">{name1}</a></li>');
$aQnavigation->maskSelected(2, '<li class="selected"><a href="{link}">{name1}</a></li>');
$aQnavigation->maskSelectedSub(2, '<li class="selected"><a href="{link}">{name1}</a><ul>{sub}</ul></li>');
$aQnavigation->setSub(2, $aQnavigation->showNavigation(3));
$aQnavigation->between(1, '');
$aQnavigation->maskNormal(1, '<li><a href="{link}">{name1}</a></li>');
$aQnavigation->maskSelected(1, '<li class="selected"><a href="{link}">{name1}</a></li>');
$aQnavigation->maskSelectedSub(1, '<li class="selected"><a href="{link}">{name1}</a><ul id="subnavi">{sub}</ul></li>');
$aQnavigation->setSub(1, $aQnavigation->showNavigation(2));
$aQnavigation->between(0, '');
$aQnavigation->maskNormal(0, '<li><a href="{link}">{name1}</a></li>');
$aQnavigation->maskSelected(0, '<li class="selected"><a href="{link}">{name1}</a></li>');
echo '<ul id="navi">';
echo $aQnavigation->showNavigation(0);
echo '</ul>';
?>
Code: Alles auswählen
<?php
/**
* navigationUniversell (aQnavigation)
* @version $Id: atelierq.navigation.class.inc.php 9572 2009-03-02 17:47:08Z akm $
* @author Andreas Kummer, w3concepts AG
* @copyright Copyright © 2009, w3concepts AG
*/
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 <= 4; $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, " .
"a.parentid, " .
"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]} " .
" OR a.parentid = {$this->id[4]} " .
" ) " .
"");
$this->navigationTree = array ();
$this->firstId[0] = 0;
$this->firstId[1] = 0;
$this->firstId[2] = 0;
$this->firstId[3] = 0;
$this->firstId[4] = 0;
while ($this->db->next_record()) {
for ($i = 0; $i <= 4; $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->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'));
}
}
}
/**
* 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 '#END#' . $this->after[$type];
} else {
return false;
}
}
if ($next == -1) {
$returnValue .= $this->before[$type] . '#START#';
$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('{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('{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('{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.
*/
}
$returnValue = $returnValue . $this->showNavigation($type, $this->navigationTree[$parentId][$next]['postid']);
$returnValue = preg_replace('/#START#(.*?)\\{iffirst:(.*?)\\}/', "$1$2", $returnValue);
$returnValue = preg_replace('/\\{iffirst:(.*?)\\}/', "", $returnValue);
$returnValue = preg_replace('/\\{iflast:(.*?)\\}(.*?)#END#/', "$1$2", $returnValue);
$returnValue = preg_replace('/\\{iflast:(.*?)\\}/', "", $returnValue);
$returnValue = preg_replace('/#START#/', "", $returnValue);
return $returnValue;
}
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 <= 4; $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);
}
}
?>
Code: Alles auswählen
// return '#END#' . $this->after[$type];
return $this->after[$type];
Code: Alles auswählen
// $returnValue = preg_replace('/\\{iflast:(.*?)\\}(.*?)#END#/', "$1$2", $returnValue);
$returnValue = preg_replace('/\\{iflast:(.*?)\\}(.*?)/', "$1$2", $returnValue);
Code: Alles auswählen
$aQnavigation->between(0, '');
$aQnavigation->maskNormal(0, '<li><a href="{link}">{name1}</a></li>');
$aQnavigation->maskSelected(0, '<li class="selected"><a href="{link}">{name1}</a></li>');
//-- Die beiden nachfolgenden Zeilen müssen unterhalb der 3 oberen Zeilen NOCH eingefügt werden.
//-- Auf html habe ich nun nicht geachtet, es geht ums "setSub", "{sub}" und "maskSelectedSub"
$aQnavigation->maskSelectedSub(0, '<li class="selected"><a href="{link}">{name1}</a><ul id="subnavi">{sub}</ul></li>');
$aQnavigation->setSub(0, $aQnavigation->showNavigation(1));
?>
Das ist schön So soll es seinschnueffel hat geschrieben:vielen Dank für die Hilfe, jetzt funktioniert alles!
Schon in Ordnung ...schnueffel hat geschrieben:Ich bin leider noch ziemlicher Contenido-Neuling und habe deshalb auch den Fehler im Modul nicht erkannt, tut mir Leid.
Code: Alles auswählen
<?php
cInclude('frontend', 'includes/atelierq.navigation.class.inc.php');
$cApiClient = new cApiClient($client);
$aQnavigation = new aQnavigation($cApiClient->getProperty('mainnavigation', 'idcat_nav'));
/* Level 1 */
$aQnavigation->before(1, '<ul>');
$aQnavigation->after(1, '</ul>');
$aQnavigation->between(1, '');
$aQnavigation->maskNormal(1, '<li><a href="{link}">{name1}</a></li>');
$aQnavigation->maskNormalSub(1, '<li><a href="{link}">{name1}</a></li>');
$aQnavigation->maskSelected(1, '<li class="current"><a href="{link}">{name1}</a></li>');
$aQnavigation->maskSelectedSub(1, '<li class="current"><a href="{link}">{name1}</a></li>');
/* Level 0 */
$aQnavigation->before(0, '<div id="nav"><ul class="sf-menu">');
$aQnavigation->after(0, '</ul></div>');
$aQnavigation->between(0, '');
$aQnavigation->maskNormal(0, '<li><a href="{link}">{name1}</a></li>');
$aQnavigation->maskNormalSub(0, '<li><a href="{link}">{name1}</a>{sub}</li>');
$aQnavigation->maskSelected(0, '<li class="current"><a href="{link}">{name1}</a></li>');
$aQnavigation->maskSelectedSub(0, '<li class="current"><a href="{link}">{name1}</a>{sub}</li>');
$aQnavigation->setSub(0, $aQnavigation->showNavigation(1));
/* Ausgabe */
echo $aQnavigation->showNavigation(0);
?>
Code: Alles auswählen
$aQnavigation->maskNormalSub(0, '<li><a href="{link}">{name1}</a>{sub}</li>');
Geht nicht ... es wird immer nur das nächste level der aktuell selektierten kategorie ausgegebenDalamar hat geschrieben:Rufe ich die neue Seite (http://www.....) auf werden alle Elternelemente OHNE die Kindelemente ausgegeben. Erst nach einem Klick, z.B. auf "Unternehmen", werden die Kinder gerendert.
<gekürzt>
Kann mir jemand erklären, wie ich die Kindelemente auch ohne Klick auf das Elternelement angezeigt bekomme ?
Jupp, ich auchDalamar hat geschrieben:Aber an einer Lösung, basierend auf der NavigationUniversell bin ich stark interessiert.
Code: Alles auswählen
cInclude('classes', 'atelierq.navigation.class.inc.php');
$aQnavigation1 = new aQnavigation(27);