Modul :: NavigationUniversell
die darstellung (also ob horizontal oder vertikal) wird nicht durch die klasse, sondern durch das modul, respektive durch die masken bestimmt. und das ist reines html.
du kannst für jedes level einerseits sowie für normale links, für solche mit untermenupunkten wie auch für aktive eine maske festlegen, die dann die darstellung übernimmt. und zwar für jeden menupunkt einzeln.
du musst also erst einmal das html bestimmen. am besten du machst eine navi als beispiel in html. dann musst du nur die entsprechenden bereiche in die masken übertragen und die links sowie die menupunktbezeichner durch die vorgsesehenen platzhalter ersetzen.
das publizierte modul ist nur als beispiel zu betrachten. die masken sind je nach layout natürlich anzupassen. damit kriegst du dann jede darstellung hin, die du gerne haben möchtest.
aber publiziere doch einmal das modul so, wie du es derzeit in verwendung hast.
du kannst für jedes level einerseits sowie für normale links, für solche mit untermenupunkten wie auch für aktive eine maske festlegen, die dann die darstellung übernimmt. und zwar für jeden menupunkt einzeln.
du musst also erst einmal das html bestimmen. am besten du machst eine navi als beispiel in html. dann musst du nur die entsprechenden bereiche in die masken übertragen und die links sowie die menupunktbezeichner durch die vorgsesehenen platzhalter ersetzen.
das publizierte modul ist nur als beispiel zu betrachten. die masken sind je nach layout natürlich anzupassen. damit kriegst du dann jede darstellung hin, die du gerne haben möchtest.
aber publiziere doch einmal das modul so, wie du es derzeit in verwendung hast.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
korrigierte version
mit dieser klasse sollte das problem mit den geschützten bereichen gelöst sein:
mit dieser klasse sollte das problem mit den geschützten bereichen gelöst sein:
Code: Alles auswählen
<?php
/**
* navigationUniversell (aQnavigation)
*
* @version 1.2.0
* @author Andreas Kummer
* @copyright Copyright © 2007 atelierQ
*/
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, " .
"a.parentid, " .
"b.name, " .
"b.idlang, " .
"IF (b.visible = 1 && (b.public = 1 || c.idfrontendpermission 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 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->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 $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('{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.
*/
}
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);
}
}
?>
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
???
Hi Andreas,
hast Du ein Beispiel, hab das nicht richtig verstanden.
THX kenzo
hast Du ein Beispiel, hab das nicht richtig verstanden.
Das ist mein Modulcode:die darstellung (also ob horizontal oder vertikal) wird nicht durch die klasse, sondern durch das modul, respektive durch die masken bestimmt. und das ist reines html.
du kannst für jedes level einerseits sowie für normale links, für solche mit untermenupunkten wie auch für aktive eine maske festlegen, die dann die darstellung übernimmt. und zwar für jeden menupunkt einzeln.
du musst also erst einmal das html bestimmen. am besten du machst eine navi als beispiel in html. dann musst du nur die entsprechenden bereiche in die masken übertragen und die links sowie die menupunktbezeichner durch die vorgsesehenen platzhalter ersetzen.
das publizierte modul ist nur als beispiel zu betrachten. die masken sind je nach layout natürlich anzupassen. damit kriegst du dann jede darstellung hin, die du gerne haben möchtest.
aber publiziere doch einmal das modul so, wie du es derzeit in verwendung hast.
Code: Alles auswählen
<?php
$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>');
$aQnavigation->maskSelected(0, '<div><a target="_self" href="{link}">›{name1}</a></div>');
$aQnavigation->maskSelectedSub(0, '<div><a target="_self" href="{link}">›{name1}</a></div>');
echo $aQnavigation->showNavigation(0);
?>
ich glaube ich gebe auf
vielleicht bin ich doch ein DAU, ich kriege das mit der horizontalen Navi nicht hin. Schuster bleib bei Deinen Leisten. machs halt so wie bisher, ging auch immer prima.
Aber Danke allen die geholfen haben, besonders Andreas
Kenzo
Aber Danke allen die geholfen haben, besonders Andreas
Kenzo
wenn du eingeloggt bist sollten sie angezeigt werden; sonst natürlich nicht. bist du denn eingeloggt? oder siehst du sie, obwohl du nicht eingeloggt bist?achiboy hat geschrieben:Jetzt werden die geschützten Kategorien aber auch angezeigt. War das so gewollt?
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
die neuste version des moduls findet sich jeweils unter der url:
http://www.editio.ch/cms/front_content. ... uleView=23
gruss,
anreas
http://www.editio.ch/cms/front_content. ... uleView=23
gruss,
anreas
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
ok, ich schaue mir das an. allerdings bin ich erst am mittwoch wieder im büro. aber dann werde ich schauen, dass ich eine entsprechende korrektur vornehmen kann.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
Hi,
die Mail: info -at - editio.ch
bringt einen Zustellungsfehler.
die Mail: info -at - editio.ch
bringt einen Zustellungsfehler.
tja, das stimmt. die site ist ganz neu und ich habe noch keine email eingerichtet... werd's gleich nachholen.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
@ achiboy: könntest du mir bescheid geben, wenn du einen test durchführen könntest. ich habe eine anpassung, allerdings kann ich die bei mir nicht gut testen. danke im voraus.achiboy hat geschrieben:wenn ich abgemeldet bin kommen die geschützten Seiten trotzdem.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)
keine Navigation zu sehen
- Hallo Andreas,
ich habe Dein Modul in den ersten Container des Layouts eingebunden
und die atelierq.navigation.class.inc.php ins include Verzeichnis
des Mandanten kopiert.
In den Mandanteneigenschaften habe ich dann
navigation, idcat_mainnavigation, 1 eingetragen.
Der Modul-Code ist
Code: Alles auswählen
<?
cInclude('frontend', 'includes/atelierq.navigation.class.inc.php');
//error_reporting(E_ALL);
$linkclass2 = $linkclass;
$linkclass3 = $linkclass;
$cApiClient = new cApiClient($client);
$aQnavigation = new aQnavigation($cApiClient->getProperty('navigation', 'idcat_mainnavigation'));
$aQnavigation->between(3, '');
$aQnavigation->maskNormal(3, '<div class="navthirdoff"><a class="'.$linkclass3.'" target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskSelected(3, '<div class="navthirdon"><a class="'.$linkclass3.'" target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskSelectedSub(3, '<div class="navthirdon"><a class="'.$linkclass3.'" target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->between(2, '');
$aQnavigation->maskNormal(2, '<div class="navsecondoff"><a class="'.$linkclass2.'" target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskSelected(2, '<div class="navsecondon"><a class="'.$linkclass2.'" target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskSelectedSub(2, '<div class="navsecondon"><a class="'.$linkclass2.'" target="_self" href="{link}">{name1}</a></div>{sub}');
$aQnavigation->setSub(2, $aQnavigation->showNavigation(3));
$aQnavigation->between(1, '<img src="./upload/images/leer1.gif" width="100%" height="5"/>');
$aQnavigation->maskNormal(1, '<div class="navfirstoff"><a class="'.$linkclass.'" target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskSelected(1, '<div class="navfirstopen"><a class="'.$linkclass.'" target="_self" href="{link}">{name1}</a></div>');
$aQnavigation->maskSelectedSub(1, '<div class="navfirstopen"><a class="'.$linkclass.'" target="_self" href="{link}">{name1}</a></div>{sub}');
$aQnavigation->setSub(1, $aQnavigation->showNavigation(2));
echo $aQnavigation->showNavigation(1);
?>
Vom Mandanten sind 3 Sprachen angelegt. Hat das vielleicht wie bei matt.loker mit der Syncronisation zu tun?
Vielen Dank
Wiebke
Code: Alles auswählen
[07-Sep-2007 21:13:30] PHP Notice: Undefined variable: error in /serverpfad/contenido/includes/api/functions.api.general.php on line 157
[07-Sep-2007 21:13:30] PHP Notice: Undefined property: _driver in /serverpfad/contenido/classes/class.genericdb.php on line 268
[07-Sep-2007 21:13:30] PHP Notice: Uninitialized string offset: 3 in /serverpfad/contenido/includes/atelierq.navigation.class.inc.php on line 155
[07-Sep-2007 21:13:30] PHP Notice: Undefined offset: -1 in /serverpfad/contenido/includes/atelierq.navigation.class.inc.php on line 164
[07-Sep-2007 21:13:30] PHP Notice: Undefined offset: -1 in /serverpfad/contenido/includes/atelierq.navigation.class.inc.php on line 201
[07-Sep-2007 21:13:30] PHP Notice: Uninitialized string offset: 2 in /serverpfad/contenido/includes/atelierq.navigation.class.inc.php on line 155
[07-Sep-2007 21:13:30] PHP Notice: Undefined offset: -1 in /serverpfad/contenido/includes/atelierq.navigation.class.inc.php on line 164
[07-Sep-2007 21:13:30] PHP Notice: Undefined offset: -1 in /serverpfad/contenido/includes/atelierq.navigation.class.inc.php on line 201
[07-Sep-2007 21:13:30] PHP Notice: Uninitialized string offset: 1 in /serverpfad/contenido/includes/atelierq.navigation.class.inc.php on line 155
[07-Sep-2007 21:13:30] PHP Notice: Undefined offset: -1 in /serverpfad/contenido/includes/atelierq.navigation.class.inc.php on line 164
[07-Sep-2007 21:13:30] PHP Notice: Undefined offset: -1 in /serverpfad/contenido/includes/atelierq.navigation.class.inc.php on line 201
[07-Sep-2007 21:13:31] PHP Notice: Undefined variable: error in /serverpfad/contenido/includes/api/functions.api.general.php on line 157
es ist alles beim Alten. Ich habe die Klasse von deiner Webseite geholt. Hat sich bei der Version überhaupt etwas verändert? im Editor konnte ich keinen Unterschied feststellen.kummer hat geschrieben:@ achiboy: könntest du mir bescheid geben, wenn du einen test durchführen könntest. ich habe eine anpassung, allerdings kann ich die bei mir nicht gut testen. danke im voraus.achiboy hat geschrieben:wenn ich abgemeldet bin kommen die geschützten Seiten trotzdem.
Vielen Dank für den unermüdlichen Einsatz.
ich habe dir die klasse per pm gesendet. hast du nichts erhalten?achiboy hat geschrieben:es ist alles beim Alten. Ich habe die Klasse von deiner Webseite geholt. Hat sich bei der Version überhaupt etwas verändert? im Editor konnte ich keinen Unterschied feststellen.
aitsu.org :: schnell - flexibel - komfortabel :: Version 2.2.0 (since June 22, 2011) (jetzt mit dual license GPL/kommerziell)