Automatische Navigationsfunktion für CPO 4

Allgemeine Diskussionen zu ConPresso 4. Handhabung, Möglichkeiten, Verständnisfragen.
Achtung: Bitte benutzt wenn möglich die themenspezifischen Foren!
M. Klaucke
ConPresso-User
Beiträge: 37
Registriert: 01.01.1970 01:00

Automatische Navigationsfunktion für CPO 4

Beitrag von M. Klaucke »

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
Benutzeravatar
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

Beitrag von MarkusR »

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...

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
M. Klaucke
ConPresso-User
Beiträge: 37
Registriert: 01.01.1970 01:00

Re: Automatische Navigationsfunktion für CPO 4

Beitrag von M. Klaucke »

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

M. Klaucke
ConPresso-User
Beiträge: 37
Registriert: 01.01.1970 01:00

Re: Automatische Navigationsfunktion für CPO 4

Beitrag von M. Klaucke »

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
Francis

Re: Automatische Navigationsfunktion für CPO 4

Beitrag von Francis »

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.

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";
}
?>
Francis

Re: Automatische Navigationsfunktion für CPO 4

Beitrag von Francis »

Obiger Beitrag ist hinfaellig. Der von mir korrigierte "Fehler" ist ueberhaupt erst durch meine Aenderungen enstanden. Sorry. Francis

mkd
ConPresso-Checker
Beiträge: 114
Registriert: 01.01.1970 01:00
Hat sich bedankt: 1 Mal

Re: Automatische Navigationsfunktion für CPO 4

Beitrag von mkd »

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
Benutzeravatar
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

Beitrag von MarkusR »

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
M. Klaucke
ConPresso-User
Beiträge: 37
Registriert: 01.01.1970 01:00

Re: Automatische Navigationsfunktion für CPO 4

Beitrag von M. Klaucke »

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
Benutzeravatar
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

Beitrag von Matthias V »

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
mod_Guestbook 4.1.0

Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
Benutzeravatar
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

Beitrag von Matthias V »

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
mod_Guestbook 4.1.0

Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
Benutzeravatar
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

Beitrag von Matthias V »

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
mod_Guestbook 4.1.0

Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
Jürgen Becker

Re: Automatische Navigationsfunktion für CPO 4

Beitrag von Jürgen Becker »

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

Benutzeravatar
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

Beitrag von Matthias V »

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
mod_Guestbook 4.1.0

Features:
- Einträge als ConPresso-Artikel
- benutzt Templates, Rubriken, ...
- Captcha
- BB-Code + Smilies + Zitieren
- Badwords
- Anonymisierung
Jürgen Becker

Re: Automatische Navigationsfunktion für CPO 4

Beitrag von Jürgen Becker »

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
Antworten