ConPresso Community

Fragen, Antworten, Diskussionen rund um das Content Management System ConPresso

 
Dynamische Navigation in CPO4 erklaert:
Gehe zu Seite 1, 2  Weiter
 
Neue Antwort erstellen    ConPresso Community Foren-Übersicht -> ConPresso 4
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
balu
ConPresso-Entwickler


Anmeldungsdatum: 01.01.1970
Beiträge: 1746

BeitragVerfasst am: 11.08.2005 22:27    Titel: Dynamische Navigation in CPO4 erklaert: Antworten mit Zitat


 Also gut, dann wollen wir mal auf die schnelle ein bischen zaubern:

Die dynamische Navigation laesst sich in ConPresso4 ueber ein einziges Wunderwerk an rekursiver Funktion ausgeben . Ich selber verstehe die Funktion nicht mehr, sie muss also technisch ein Meisterwerk sein Wink.

Alles was ich jetzt schreibe ist zur Geisterstunde aus meinem Kopf gefallen und wurde nicht getestet. Sollte bei den Beispielen ein Problem auftauchen, haben die Geister mir einen Streich gespielt Smile.

Diese Funktion befindet sich in der Datei _include/printnavigation.inc.php, die Ihr z.B. am Anfang im globalen Header einbinden muesst - in den folgenden Versionen von ConPresso wird das vermutlich automatisch passieren:

php:
include_once(CPO_BASEDIR.'_include/printnavigation.inc.php');?>


Dann hat man zwei Funktionen zur Verfuegung:

php:
<?array getActiveElements(array $naviint $activeRubric)?>


Die Funktion liefert ein Array mit der Zuordnung Ebenen => RubrikIDs des gerade aktuellen Navigationspfades. Das funktioniert natuerlich nur, wenn eine Rubrik nicht in verschiedenen Ebenen vorkommt. 

Parameter:

$navi
Hier kann man das Navigationsarray übergeben, das man mit getNavigation() bekommen kann. Wird der Defaultwert '' uebergeben, lädt sich diese Funktion diese Daten alleine.

$activeRubric
Die aktuell aktive Rubrik. Wird der Defaultwert 0 übergeben, so wird automatisch die aktive Rubrik genommen ($GLOBALS['cpoRubric']['id']Wink

Hiermit kann man z.B. ein Breadcrumb-Menue ausgeben:
php:
<?$aE getActiveElements();
foreach (
$aE as $k=>$v) {
    if (
$k=='X') continue; // dieses Element ist "Ebene 0", die es natuerlich nicht gibt.
    
echo "Ebene $k: Rubrik: $v >> ";
}
?>

Natuerlich sollte man aus der Rubrik-ID noch den richtigen Namen machen Wink


php:
<?boolean printNavigation(array $naviint $activeRubricint $levelsint $parentboolean $activeOnly)?>


Das eigentlicher Herzstueck der Datei gibt die Navigation in Form einer HTML-Liste aus.

Parameter:
$navi 
Hier kann man das Navigationsarray übergeben, das man mit getNavigation() bekommen kann. Wird der Defaultwert '' uebergeben, lädt sich diese Funktion diese Daten alleine. 

$activeRubric
Die aktuell aktive Rubrik. Wird der Defaultwert 0 übergeben, so wird automatisch die aktive Rubrik genommen ($GLOBALS['cpoRubric']['id']Wink

$levels 
Wie viele Ebenen sollen angezeigt werden. Der Standardwert ist 99 - wer mehr Ebenen hat, hat ein Problem mit seiner Navigation Wink

$parent
Welches ist das Elternelement der auszugebenden Navigation? Der Defaultwert von "0" faengt in der Wurzel der Navigation an. Wird hier z.B.  eine andere Navigations-Id angegeben, gibt ConPresso den Inhalt erst ab diesem Punkt aus. Das kann man z.B. nutzen, wenn man ganz oben zwei Ebenen "Deutsch" und "Englisch" hat und je nach Sprache eine andere Navigation ausgeben moechte.

$activeOnly
Wird dieser Wert auf "true" gesetzt, werden nur die aktuell "aufgeklappten" Ebenen ausgegeben. wenn andere Ebenen auch Unterpunte haben, werden diese nicht angezeigt. Der Standardwert hier ist "false".

$target
Dieser Wert erlaubt es, die Ziele der Navigationslinks in einen anderen Frame zu verlinken.

Beispiele:
Ausgabe der kompletten Navigationsstruktur:
php:
<?printNavigation();?>


Ausgabe nur der ersten Ebene (Hauptmenue einer Website):
php:
<?printNavigation(''010false);?>


Ausgabe nur des aktuell aufgeklappten Verzeichnisbaumes:
php:
<?printNavigation(''0990true);


Die Navigation wird als verschachtelte <ul>-Liste ausgegeben. Diese laesst sich mit den passenden CSS-Definitionen in jeder erdenklichen Form formatieren.

Hierzu werden natuerlich spaeter noch einige Beispiele folgen. Aber fuers erste hoffe ich Euch reicht dieses kleine Sammelsurium als Start fuer die Ausgabe eigener Navigationen.

     Balu



Zuletzt bearbeitet von balu am 01.02.2006 09:22, insgesamt einmal bearbeitet
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
dnimtsch
Gast





BeitragVerfasst am: 16.08.2005 03:48    Titel: Antworten mit Zitat

balu hat geschrieben:

> $parent
> Welches ist das Elternelement der auszugebenden Navigation?
> Der Defaultwert von "0" faengt in der Wurzel der Navigation an.
> Wird hier z.B. eine andere Navigations-Id angegeben, gibt
> ConPresso den Inhalt erst ab diesem Punkt aus. Das kann man
> z.B. nutzen, wenn man ganz oben zwei Ebenen "Deutsch" und
> "Englisch" hat und je nach Sprache eine andere Navigation
> ausgeben moechte.


Hier muss noch ein Bug im Code sein! Ich habe drei root Ebenen (de, en, pl), darunter jeweils die Hauptrubriken. Ich lasse mir das Menu mit "printNavigation('', 0, 2, 0, false);" ausgeben. Alles roger, ich sehe die zwei Ebenen.

Nicht so bei "printNavigation('', 0, 2, 1, false);". Hier wird keine Ebene ausgegeben, sollte die zweite Ebene unter den Sprachenebene sein. Sad(

Mit freundlichen Grüssen,

Daniel Nimtsch
Nach oben
dnimtsch
Gast





BeitragVerfasst am: 16.08.2005 03:48    Titel: Antworten mit Zitat

Achso, verwende natürlich ConPresso 4.0.1
Nach oben
Marko
Gast





BeitragVerfasst am: 16.08.2005 03:49    Titel: Antworten mit Zitat

balu hat geschrieben:

> Natuerlich sollte man aus der Rubrik-ID noch den richtigen
> Namen machen Wink.

Das Breadcrumb-Skript funktioniert wie erwartet. Als php & conPresso Neuling fällt mir allerdings keine elegante Lösung ein, wie man an die Rubriknamen rankommt. Hat da jemand eine Idee?

Marko
Nach oben
dnimtsch
Gast





BeitragVerfasst am: 16.08.2005 10:50    Titel: Antworten mit Zitat

Wegen meinem Problem oben nochmal einen Link für die Testdomain:

http://www.nady.de/

Viele Grüsse,

Daniel Nimtsch

 
Für dieses Posting bedanken sich die folgenden User: balu
Nach oben
Matthias Baum
ConPresso-User


Anmeldungsdatum: 01.01.1970
Beiträge: 26

BeitragVerfasst am: 17.08.2005 11:29    Titel: Antworten mit Zitat

Gibt es eine Möglichkeit in CPO4.0.1 auszulesen, was die aktuelle $cpoRubric['id'] für Eltern hat?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 7023

BeitragVerfasst am: 17.08.2005 11:30    Titel: Antworten mit Zitat


 so zum Beispiel:

php:
function getParent($actRubric) {
$navArray getNavigation();
// erstmal die Rubrik selbst suchen
$rubrik_left '';
$rubrik_right '';
$rubrik_level '';
for (
$ip;$ip<count($navArray);$ip++) {
if (
$actRubric == $navArray[$ip]['rubric']['id'] OR $actRubric == $navArray[$ip]['rubric']['name']) {
$rubrik_left $navArray[$ip]['l'];
$rubrik_right $navArray[$ip]['r'];
$rubrik_level $navArray[$ip]['level'];
}
}
// Übergeordneten Eintrag suchen
foreach ($navArray as $key=>$value) {
if ((
$value['level'] == $rubrik_level-1) AND ($value['l'] < $rubrik_left) AND ($value['r'] > $rubrik_right)) {
$parentID $value['rubric']['id'];
}
}
return 
$parentID;
}


_________________
Ciao Markus
ConPresso-Module
ConPresso und PHP 7

 
Für dieses Posting bedanken sich die folgenden User: AleXa
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
dnimtsch
Gast





BeitragVerfasst am: 17.08.2005 11:31    Titel: Antworten mit Zitat


 balu hat geschrieben:

> $parent
> Welches ist das Elternelement der auszugebenden Navigation?
> Der Defaultwert von "0" faengt in der Wurzel der Navigation an.
> Wird hier z.B. eine andere Navigations-Id angegeben, gibt
> ConPresso den Inhalt erst ab diesem Punkt aus. Das kann man
> z.B. nutzen, wenn man ganz oben zwei Ebenen "Deutsch" und
> "Englisch" hat und je nach Sprache eine andere Navigation
> ausgeben moechte.

Nehme alles zurück!! Kein Bug im Code! Ich habe nur die Erklärung missverstanden. Man muss die Navigations-Id (z. B. 12) angeben, nicht die Ebene, ab der man die dynamische Navigation angezeigt haben will.

Da die Navigations-Id nun mit der Landessprache wechselt muss man die dynamisch angeben.

Hier ein rudimentäres Beispiel für eine dynamische Navigation mit übergeordneten Landessprachen, die aber nur im Backend angezeigt werden. Die dynamische Navigation zeigt nur die Rubriken der jeweiligen Landessprache an, in der man sich gerade befindet.

z.B. eingebunden in _cfg/global_header.php

php:
<?php
include_once(CPO_BASEDIR.'_include/printnavigation.inc.php');

$aE getActiveElements();
foreach (
$aE as $k=>$v) {
if (
$k=='1'printNavigation(''099$vfalse); // wenn "Ebene 1" im Array erreicht, Navigations-Id
// der Landessprache als $parent uebergeben.
}
?>



Nochmal Entschuldigung, Meister Balu!!

Nach oben
Claus
Gast





BeitragVerfasst am: 26.08.2005 14:23    Titel: Rubrik-ID Antworten mit Zitat

Hallo!

Könntet ihr mir mitteilen, ob ich die Einträge in der Tabelle navtree nachträglich ändern kann ohne dass ich irgendetwas durcheinander bringe? ich hätte gerne eine 'neue und logische" Reihenfolge der Rubriken ...


Viele Grüße
Claus
Nach oben
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 7023

BeitragVerfasst am: 26.08.2005 14:28    Titel: Antworten mit Zitat

In der Tabelle navtree sollte GAR NICHTS gemacht werden, sondern ausschließlich im Backend über "Navigation bearbeiten".

Dort können die Einträge nach Belieben umgeordnet werden, wenn man zuerst auf klickt, dann hat man die Möglichkeit des Einsortierens mittels , und

_________________
Ciao Markus
ConPresso-Module
ConPresso und PHP 7
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Gast






BeitragVerfasst am: 26.08.2005 14:31    Titel: Antworten mit Zitat

Ja, verstanden. Es ging mir nur um die navigations-id. da komme ich über das backend nich' dran, oder?
Nach oben
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 7023

BeitragVerfasst am: 26.08.2005 14:36    Titel: Antworten mit Zitat

Nein.

Und da diese ID nichts mit der Anordnung zu tun hat kannst Du damit lediglich das System zerstören, aber nichts an der Reihenfolge ändern.

Vermutlich möchtest Du gerne, daß Deine Links auf die Rubriken so aussehen:

http://www.deinedomain.tld/_rubric/index.php?rubric=1
dann
http://www.deinedomain.tld/_rubric/index.php?rubric=2
dann
http://www.deinedomain.tld/_rubric/index.php?rubric=3
dann
http://www.deinedomain.tld/_rubric/index.php?rubric=4
dann
http://www.deinedomain.tld/_rubric/index.php?rubric=5
etc.

weils eben schöner aussieht.

Da hilft nur strukturiertes vorausplanendes Arbeiten oder einfach das Verwenden des Rubriknamens statt der Nummer, das macht es noch "logischer"

P.S. Für die Reihenfolge ist nicht die id sondern die Einträge l und r zuständig. Dieses "nested"-System wurde hier von Balu ja schon erklärt.

_________________
Ciao Markus
ConPresso-Module
ConPresso und PHP 7
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Claus
Gast





BeitragVerfasst am: 26.08.2005 14:43    Titel: Antworten mit Zitat

... die Seiten können nicht angezeigt werden. Und mit dem Namen? Dat jeht nich'!

printNavigation('', 0, 99, 1.1 Profil, true);

Macht aber nix, dann schreibe ich eben doch die Navigations-id aus der Tabelle ab und verzichte auf die Logik. Vielen Dank! Very Happy
Nach oben
MarkusR
Handbuchversteher


Anmeldungsdatum: 01.01.1970
Beiträge: 7023

BeitragVerfasst am: 26.08.2005 14:50    Titel: Antworten mit Zitat

Siehste! Mr. Green

Kaum zwei mal gefragt und zwei ausführliche Antworten bekommen, schon erhält man den Grund für die Frage, nämlich die Benutzung der Funktion printNavigation().

Die ID selbst sieht man im Backend, wenn man die Maus über die Symbole hält (Statuszeile &id=x).

Würde mich aber dennoch interessieren, wie es für Dich "logisch" wäre...?

_________________
Ciao Markus
ConPresso-Module
ConPresso und PHP 7
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Gast






BeitragVerfasst am: 26.08.2005 21:30    Titel: Antworten mit Zitat

logisch wäre für mich: sitemap = inhaltsverzeichnis mit durchnummerierung => nummern = navigations-id.

darum zeigt sich mal wieder:
VORHER NACHDENKEN TUT GUT! Wink


Claus
Nach oben
Beiträge der letzten Zeit anzeigen:   
Neue Antwort erstellen    ConPresso Community Foren-Übersicht -> ConPresso 4 Alle Zeiten sind GMT + 1 Stunde
Gehe zu Seite 1, 2  Weiter
Seite 1 von 2

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum nicht posten
Du kannst Dateien in diesem Forum herunterladen