Automatische Navigationsfunktion für CPO 4
-
- ConPresso-User
- Beiträge: 37
- Registriert: 01.01.1970 01:00
Automatische Navigationsfunktion für CPO 4
Hallo,
da hier doch des öfteren mal nach einer Navigation für ConPresso 4 nachgefragt wird, hier ein kurzes Beispiel wie man automatisch eine Navigation erstellen kann.
Prinzipiell besteht die ganz einfache Navigation aus z. Zeit 5 PHP-Funktionen, die an den entsprechenden Stellen z.Bsp. in der global_header.php eingebunden werden können. Die Navigation funktioniert bis zu drei Leveln, das sollte auch für anspruchsvolle Navigationsbäume reichen. Die Level werden in Unordered Lists ausgegeben (<ul><li></li></ul>), wobei Level 1 alleine und Level 2 + 3 ineinander verschachtelt sind.
Zur Verdeutlichung schaut aufder Testseite 'http://www.dav-weinheim.de/intern' nach, dort wird Level 1 horizontal und Level 2 + 3 untereinander ausgegeben. Sagt mehr als tausend Worte.
Bei den Funktionen handelt es sich um:
function getRubric() - ermittelt die Daten der aktuell ausgewählten Rubric,
function getParents() - ermittelt dir Schlüssel der (falls vorhanden) Eltern der aktiven Rubrik,
function printLevel1() - gibt eine Liste (<ul><li></li></ul>) mit den Level 1 - Einträgen aus, und markiert den aktiven Eintrag (oder das Elternelement zur aktiven Rubrik)
function printLevel2() - gibt eine Liste (<ul><li></li></ul>) mit den verschachtelten Level 2 + 3 - Einträgen aus, und markiert den aktiven Eintrag (oder das Elternelement zur aktiven Rubrik)
function printSitemap() - gibt eine verschachtelte Liste mit allen Rubriken des Navigationsbaumes aus
Die Funktionen sind in eine Datei 'navigation.inc.php' abgelegt, diese habe ich in der global_header.php-Beispieldatei erstmal in das Verzeichnis /_cfg gelegt. Das Verzeichnis kann beliebig geändert werden, dann muss allerdings auch der require_once() - Aufruf der navigation.inc.php in der global_header.php geändert werden.
Die Datei 'navigation.cfg.php' und das Beispiel für eine global_header.php könnt Ihr als Zip-File unter http://www.kolonna.de/download/navigation.zip herunterladen. Die global_header.php sollte die Anwendung der Funktionen ausreichend erklären, das Aussehen der einzelnen Menülevel müsst Ihr direkt in den einzelnen PHP-Funktionen ändern.
Betrachtet die Navigationsfunktionen als vorläufig und mit heißer Nadel gestrickt. Sie funtkionieren problemlos, sind aber nicht gerade elegant und schnell aus der Not geboren.
Viel Spaß damit!
Mathias
da hier doch des öfteren mal nach einer Navigation für ConPresso 4 nachgefragt wird, hier ein kurzes Beispiel wie man automatisch eine Navigation erstellen kann.
Prinzipiell besteht die ganz einfache Navigation aus z. Zeit 5 PHP-Funktionen, die an den entsprechenden Stellen z.Bsp. in der global_header.php eingebunden werden können. Die Navigation funktioniert bis zu drei Leveln, das sollte auch für anspruchsvolle Navigationsbäume reichen. Die Level werden in Unordered Lists ausgegeben (<ul><li></li></ul>), wobei Level 1 alleine und Level 2 + 3 ineinander verschachtelt sind.
Zur Verdeutlichung schaut aufder Testseite 'http://www.dav-weinheim.de/intern' nach, dort wird Level 1 horizontal und Level 2 + 3 untereinander ausgegeben. Sagt mehr als tausend Worte.
Bei den Funktionen handelt es sich um:
function getRubric() - ermittelt die Daten der aktuell ausgewählten Rubric,
function getParents() - ermittelt dir Schlüssel der (falls vorhanden) Eltern der aktiven Rubrik,
function printLevel1() - gibt eine Liste (<ul><li></li></ul>) mit den Level 1 - Einträgen aus, und markiert den aktiven Eintrag (oder das Elternelement zur aktiven Rubrik)
function printLevel2() - gibt eine Liste (<ul><li></li></ul>) mit den verschachtelten Level 2 + 3 - Einträgen aus, und markiert den aktiven Eintrag (oder das Elternelement zur aktiven Rubrik)
function printSitemap() - gibt eine verschachtelte Liste mit allen Rubriken des Navigationsbaumes aus
Die Funktionen sind in eine Datei 'navigation.inc.php' abgelegt, diese habe ich in der global_header.php-Beispieldatei erstmal in das Verzeichnis /_cfg gelegt. Das Verzeichnis kann beliebig geändert werden, dann muss allerdings auch der require_once() - Aufruf der navigation.inc.php in der global_header.php geändert werden.
Die Datei 'navigation.cfg.php' und das Beispiel für eine global_header.php könnt Ihr als Zip-File unter http://www.kolonna.de/download/navigation.zip herunterladen. Die global_header.php sollte die Anwendung der Funktionen ausreichend erklären, das Aussehen der einzelnen Menülevel müsst Ihr direkt in den einzelnen PHP-Funktionen ändern.
Betrachtet die Navigationsfunktionen als vorläufig und mit heißer Nadel gestrickt. Sie funtkionieren problemlos, sind aber nicht gerade elegant und schnell aus der Not geboren.
Viel Spaß damit!
Mathias
- MarkusR
- Handbuchversteher
- Beiträge: 7362
- Registriert: 01.01.1970 01:00
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 934 Mal
- Kontaktdaten:
Re: Automatische Navigationsfunktion für CPO 4
Nach einem kurzen Blick auf den Code:
Sehe ich das richtig, daß Du dich bewußt auf 3 Levels beschränktst?
Ist keine Kritik, wollte nur nachhaken, weil man ja rekursiv beliebige Tiefen erreichen könnte (was ich aber noch nicht kapiert habe) und ich selbst bei meinen Menüs aus optischen und Platzgründen max. 4 Level einsetze.
Werde es bei nächster Gelegenheit mal einbauen...
Sehe ich das richtig, daß Du dich bewußt auf 3 Levels beschränktst?
Ist keine Kritik, wollte nur nachhaken, weil man ja rekursiv beliebige Tiefen erreichen könnte (was ich aber noch nicht kapiert habe) und ich selbst bei meinen Menüs aus optischen und Platzgründen max. 4 Level einsetze.
Werde es bei nächster Gelegenheit mal einbauen...
Ciao Markus
ConPresso-Module
Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!
Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
ConPresso-Module
Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!
Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
-
- ConPresso-User
- Beiträge: 37
- Registriert: 01.01.1970 01:00
Re: Automatische Navigationsfunktion für CPO 4
Hallo Markus,
ja, die Einschränkung auf 3 Level ist bewußt vorgenommen. Weitergehende Tiefen wären problemlos durch Anpassung der Ausgabefunktionen möglich, aber da ich sie nicht brauche habe ich mir die Arbeit und die Kopfschmerzen beim Anblick der 'if'-Konstrukte erspart.
Mathias
ja, die Einschränkung auf 3 Level ist bewußt vorgenommen. Weitergehende Tiefen wären problemlos durch Anpassung der Ausgabefunktionen möglich, aber da ich sie nicht brauche habe ich mir die Arbeit und die Kopfschmerzen beim Anblick der 'if'-Konstrukte erspart.
Mathias
-
- ConPresso-User
- Beiträge: 37
- Registriert: 01.01.1970 01:00
Re: Automatische Navigationsfunktion für CPO 4
Kleiner Hinweis:
in der Datei navigation.inc.php, Zeile 72 steht ein </strong> - Tag den ich übersehen hatte. Das Archiv ist nun bereinigt, der unnötige HTML-Tag gelöscht.
Mathias
in der Datei navigation.inc.php, Zeile 72 steht ein </strong> - Tag den ich übersehen hatte. Das Archiv ist nun bereinigt, der unnötige HTML-Tag gelöscht.
Mathias
Re: Automatische Navigationsfunktion für CPO 4
In der Datei "navigation.inc.php" ist der Browser in Zeile 46 beim Parsen haengengeblieben.
Nachdem ich nach dem if-statement die drei "echo" in geschweifte Klammern verpackt hatte, lief es dann.
Nachdem ich nach dem if-statement die drei "echo" in geschweifte Klammern verpackt hatte, lief es dann.
Code: Alles auswählen
<?php
// printLevel1(array Navigationsarray, key Level1)
// gibt alle Elemente des Level 1 aus, und kennzeichnet das aktive Element
function printLevel1($navArray, $actKey1) {
// echo "<ul id='iHeaderNavList'>\n";
foreach ($navArray as $key=>$value) {
if (($value['level'] == 1) AND ($key == $actKey1))
{ // eingefuegt
echo "<li id='iActiv'> <a href='../_rubric/index.php?rubric=".$value['rubric']['id']."'> \n";
echo "<img src=\"../_images/navid/".$value['caption'].".gif\"> \n";
echo " </a> \n";
} // eingefuegt
elseif (($value['level'] == 1) AND ($key != $actKey1))
echo "<li><a href='../_rubric/index.php?rubric=".$value['rubric']['id']."'>".$value['caption']."</a></li>\n";
}
echo "</ul>\n";
}
?>
Re: Automatische Navigationsfunktion für CPO 4
Obiger Beitrag ist hinfaellig. Der von mir korrigierte "Fehler" ist ueberhaupt erst durch meine Aenderungen enstanden. Sorry. Francis
Re: Automatische Navigationsfunktion für CPO 4
moin,
ich bekomme folgende fehlermeldung:
Fatal error: Cannot redeclare getrubric() (previously declared in /home/jm/homepage/buchladen-langen/_cfg/navigation.inc.php:10) in /home/jm/homepage/buchladen-langen/_cfg/navigation.inc.php on line 10
MfG
Benny
ich bekomme folgende fehlermeldung:
Fatal error: Cannot redeclare getrubric() (previously declared in /home/jm/homepage/buchladen-langen/_cfg/navigation.inc.php:10) in /home/jm/homepage/buchladen-langen/_cfg/navigation.inc.php on line 10
MfG
Benny
- MarkusR
- Handbuchversteher
- Beiträge: 7362
- Registriert: 01.01.1970 01:00
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 934 Mal
- Kontaktdaten:
Re: Automatische Navigationsfunktion für CPO 4
Poste doch mal die Datei, in der Du _cfg/navigation.inc.php eingebunden hast (vermutlich global_header.php)...
Ciao Markus
ConPresso-Module
Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!
Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
ConPresso-Module
Kein Support per PN!!! Für Fragen und Diskussionen ist das Forum da!
Succi recentis officinalis
Hochwertige Kräutersäfte und -Öle
-
- ConPresso-User
- Beiträge: 37
- Registriert: 01.01.1970 01:00
Re: Automatische Navigationsfunktion für CPO 4
Hi Benny,
nach deiner Fehlermeldung vermute ich mal du versuchst die Funktion getrubric() zweimal einzubinden. Wie hast du die ganze Navigation in deiner (z.Bsp.) global_header.php eingebunden? Mit der entsprechenden Datei wäre eine Fehlersuche einfacher.
Mathias
nach deiner Fehlermeldung vermute ich mal du versuchst die Funktion getrubric() zweimal einzubinden. Wie hast du die ganze Navigation in deiner (z.Bsp.) global_header.php eingebunden? Mit der entsprechenden Datei wäre eine Fehlersuche einfacher.
Mathias
- Matthias V
- Modul-Entwickler
- Beiträge: 1251
- Registriert: 01.01.1970 01:00
- Wohnort: Sondershausen
- Hat sich bedankt: 54 Mal
- Danksagung erhalten: 147 Mal
- Kontaktdaten:
Re: Automatische Navigationsfunktion für CPO 4
Hallo M.Klaucke,
ist es möglich diese automatische Navigation zu benutzen, auch wenn man viele verschiedene Rubrikverzeichnisse benutzt, also nicht nur _rubric ?
Wie muss man in dem Fall die Datei navigation.inc.php anpassen ?
Gruß Matthias
ist es möglich diese automatische Navigation zu benutzen, auch wenn man viele verschiedene Rubrikverzeichnisse benutzt, also nicht nur _rubric ?
Wie muss man in dem Fall die Datei navigation.inc.php anpassen ?
Gruß Matthias
mod_Guestbook 4.1.0
Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
- Matthias V
- Modul-Entwickler
- Beiträge: 1251
- Registriert: 01.01.1970 01:00
- Wohnort: Sondershausen
- Hat sich bedankt: 54 Mal
- Danksagung erhalten: 147 Mal
- Kontaktdaten:
Re: Automatische Navigationsfunktion für CPO 4
Hallo ihr alle,
ich habe mir die Frage selber beantwortet.
Dazu muss in navigation.inc.php, die oben zum Link bereitsteht, folgendes ersetzt werden
Statt folgender Pfadangabe:
>>> href='../_rubric/index.php?rubric=.................und so weiter
kann man auch
>>> href='../".$directory."/index.php?rubric=.................und so weiter
oder
>>> href='".CPO_BASEDIR.$directory."/index.php?rubric=.................und so weiter
schreiben.
Denn dann funktionieren auch die Links, welche in einem anderen Rubrikverzeichnis als _rubric liegen.
Gruß Matthias
ich habe mir die Frage selber beantwortet.
Dazu muss in navigation.inc.php, die oben zum Link bereitsteht, folgendes ersetzt werden
Statt folgender Pfadangabe:
>>> href='../_rubric/index.php?rubric=.................und so weiter
kann man auch
>>> href='../".$directory."/index.php?rubric=.................und so weiter
oder
>>> href='".CPO_BASEDIR.$directory."/index.php?rubric=.................und so weiter
schreiben.
Denn dann funktionieren auch die Links, welche in einem anderen Rubrikverzeichnis als _rubric liegen.
Gruß Matthias
mod_Guestbook 4.1.0
Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
- Matthias V
- Modul-Entwickler
- Beiträge: 1251
- Registriert: 01.01.1970 01:00
- Wohnort: Sondershausen
- Hat sich bedankt: 54 Mal
- Danksagung erhalten: 147 Mal
- Kontaktdaten:
Re: Automatische Navigationsfunktion für CPO 4
Hallo ihr alle,
mein Vorschlag funktioniert doch nicht.
Ich habe jetzt auch noch eine Weile rumexperimentiert, aber es will nicht.
Hat nicht jemand einen Vorschlag, wie es sonst gehen könnte, villeicht auf ähnliche Art und Weise wie ich es schon probiert habe?
Gruß Matthias
mein Vorschlag funktioniert doch nicht.
Ich habe jetzt auch noch eine Weile rumexperimentiert, aber es will nicht.
Hat nicht jemand einen Vorschlag, wie es sonst gehen könnte, villeicht auf ähnliche Art und Weise wie ich es schon probiert habe?
Gruß Matthias
mod_Guestbook 4.1.0
Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
Re: Automatische Navigationsfunktion für CPO 4
Eine Erweiterung von „rubric“ scheint mir sinnvoll, damit man den Namen des Rubric-verzeichnisses ermitteln kann.
In „_include/function.php“ zwei Ergänzungen in der Funktion „getNavigation“
function getNavigation()
{
$query = 'SELECT id, name, seclevel,directory ' <-------------------------hier das "directory" ergänzen!
.'FROM '.CPO_RUBRIC.' ';
DEBUG(1, $query, __FILE__, __LINE__);
$db = new DB;
$db->query($query);
$rubrics = array(0=>'');
while ($db->next_record()) {
$rubrics[$db->v('id')] = array('id'=>$db->v('id'), 'name'=>$db->v('name'), 'seclevel'=>$db->v('seclevel'), 'directory'=>$db->v('directory')); <------------------------hier ebenfalls den Teil directory ergänzen
}
……………...Rest unverändert.
Dann kann das zur Rubric gehörige Verzeichnis z.B. über $Key[’rubric’][’directory’] ermittelt werden
In „_include/function.php“ zwei Ergänzungen in der Funktion „getNavigation“
function getNavigation()
{
$query = 'SELECT id, name, seclevel,directory ' <-------------------------hier das "directory" ergänzen!
.'FROM '.CPO_RUBRIC.' ';
DEBUG(1, $query, __FILE__, __LINE__);
$db = new DB;
$db->query($query);
$rubrics = array(0=>'');
while ($db->next_record()) {
$rubrics[$db->v('id')] = array('id'=>$db->v('id'), 'name'=>$db->v('name'), 'seclevel'=>$db->v('seclevel'), 'directory'=>$db->v('directory')); <------------------------hier ebenfalls den Teil directory ergänzen
}
……………...Rest unverändert.
Dann kann das zur Rubric gehörige Verzeichnis z.B. über $Key[’rubric’][’directory’] ermittelt werden
- Matthias V
- Modul-Entwickler
- Beiträge: 1251
- Registriert: 01.01.1970 01:00
- Wohnort: Sondershausen
- Hat sich bedankt: 54 Mal
- Danksagung erhalten: 147 Mal
- Kontaktdaten:
Re: Automatische Navigationsfunktion für CPO 4
Hallo Jürgen Becker,
bei mir funktioniert es noch nicht, wahrscheinlich hab ich ein Brett vorm Kopf.
In welcher Datei kann man $Key[’rubric’][’directory’] verwenden, um den Ordnernamen der entsprechenden Rubrik zu bekommen.
Ich möchte ja, wie schon weiter oben bemerkt in der Datei "navigation.inc.php" von M.Klaucke den Ordner der zugehörigen Rubrik dynamisch erzeugen.
Muss ich villeicht noch in der Datei, wo ich "getNavigation()" aufrufe noch einen weiteren Parameter an z.B. "printLevel1()" (in "navigation.inc.php" von M.Klaucke) übergeben?
Ich habe schon alle möglichen Übergaben von Parametern und in den unterschiedlichsten Dateien probiert.
Gruß Matthias
bei mir funktioniert es noch nicht, wahrscheinlich hab ich ein Brett vorm Kopf.
In welcher Datei kann man $Key[’rubric’][’directory’] verwenden, um den Ordnernamen der entsprechenden Rubrik zu bekommen.
Ich möchte ja, wie schon weiter oben bemerkt in der Datei "navigation.inc.php" von M.Klaucke den Ordner der zugehörigen Rubrik dynamisch erzeugen.
Muss ich villeicht noch in der Datei, wo ich "getNavigation()" aufrufe noch einen weiteren Parameter an z.B. "printLevel1()" (in "navigation.inc.php" von M.Klaucke) übergeben?
Ich habe schon alle möglichen Übergaben von Parametern und in den unterschiedlichsten Dateien probiert.
Gruß Matthias
mod_Guestbook 4.1.0
Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
Re: Automatische Navigationsfunktion für CPO 4
Hallo Matthias!
Nach der Ergänzung in der Funktion "getNavigation" kannst Du im Vorschlag von M. Klaucke diese Erweiterung direkt nutzen.
Beisp.: Hier erst das Original aus "navigation.inc.php"
function printLevel1($navArray, $actKey1) {
echo "<ul id='iHeaderNavList'>\n";
foreach ($navArray as $key=>$value) {
if (($value['level'] == 1) AND ($key == $actKey1))
Hier ändern------------------>echo "<li id='iActiv'><a href='../_rubric/index.php?rubric=".$value['rubric']['id']."'>".$value['caption']."</a></li>\n";
elseif (($value['level'] == 1) AND ($key != $actKey1))
Hier analog _rubric ersetzen------>echo "<li><a href='../_rubric/index.php?rubric=".$value['rubric']['id']."'>".$value['caption']."</a></li>\n";
}
echo "</ul>\n";
Hier die veränderte Zeile:
echo "<li><a href='../".$value['rubric']['directory']."/index.php?rubric=".$value['rubric']['id']." >".$value['caption']."</a></li>\n";
Die fest vorgegebene _rubric wird ersetzt durch den Eintrag aus navArray .$value['rubric']['directory'].
In den anderen Funktionen im Vorschlag Klauke entsprechned ändern.
Gruß Jürgen
Nach der Ergänzung in der Funktion "getNavigation" kannst Du im Vorschlag von M. Klaucke diese Erweiterung direkt nutzen.
Beisp.: Hier erst das Original aus "navigation.inc.php"
function printLevel1($navArray, $actKey1) {
echo "<ul id='iHeaderNavList'>\n";
foreach ($navArray as $key=>$value) {
if (($value['level'] == 1) AND ($key == $actKey1))
Hier ändern------------------>echo "<li id='iActiv'><a href='../_rubric/index.php?rubric=".$value['rubric']['id']."'>".$value['caption']."</a></li>\n";
elseif (($value['level'] == 1) AND ($key != $actKey1))
Hier analog _rubric ersetzen------>echo "<li><a href='../_rubric/index.php?rubric=".$value['rubric']['id']."'>".$value['caption']."</a></li>\n";
}
echo "</ul>\n";
Hier die veränderte Zeile:
echo "<li><a href='../".$value['rubric']['directory']."/index.php?rubric=".$value['rubric']['id']." >".$value['caption']."</a></li>\n";
Die fest vorgegebene _rubric wird ersetzt durch den Eintrag aus navArray .$value['rubric']['directory'].
In den anderen Funktionen im Vorschlag Klauke entsprechned ändern.
Gruß Jürgen