printnavigation anpassen

Fragen zur Implementierung und/oder Anpassung von ConPresso 4 werden in diesem Forum diskutiert.
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

printnavigation anpassen

Beitrag von dutch »

Hallo,

ich baue gerade ein Menü, das über printnavigation erzeugt wird.

Mein Problem ist, dass ich etwas HTML code um die Untermenüs packen müsste, und zwar vor dem <ul> der Untermenüs und nach dem </ul> der Untermenüs.
Der HTML code soll aber NICHT vor dem <ul> und nach dem </ul> der ersten Menüebene erscheinen.

Könnte mir jemand helfen, wie ich dafür die printnavigation.inc.php anpassen müsste?

Gruß,
dutch
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Was ähnliches habe ich neulich erst gemacht, aber einen völlig anderen Ansatz gewählt.

Durch eine simple switch-Konstruktion habe ich ungeordnete printNavigation()-Ausgaben an HTML-Codes gehängt.
Hierbei war die Hauptstruktur fest und daher reichte eine solche Konstruktion.
Für eine variable Auslegung könnte man durch getNavigation() (dessen ErgebnisArray auch gleichzeitig als erster Parameter von prinNavigation genutzt werden kann) erst mal die gewünschten Hauptpunkte finden und dann in einer Schleife die Unterpunkte ausgeben lassen.

Das Forum ist übrigens für solche Problemlösungen gedacht. Definierte also das gewünschte Ergebnis und arbeite mit den Forumsteilnehmern eine Lösung aus. Das hilft allen.
Für individuelle Lösungen würde ich mich an einen der zahlreichen Dienstleister in der Liste auf der ConPresso-HP wenden.
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
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Hallo Markus,

danke für deine Antwort.
Ich glaube schon, dass die Lösung meines Problems sicher auch für andere interessant sein könnte.

Konkret geht es darum eine Lösung für folgendes IE6 Problem zu finden:
Ich will über printnavigation() ein Hauptmenü mit Untermenüs ausgeben lassen.

Mittels CSS wird die erste Menüebene horizontal ausgegeben. Die Untermenüs werden über CSS erst mal ausgeblendet und dann bei mouseover über die zugehörigen Hauptmenüpunkte ebenfalls mit CSS eingeblendet.

Das klappt sehr gut in FF, in Opera und im IE7
NUR leider nicht im IE6 (andere Browser habe ich noch nicht getestet).

Ich habe dann nach Lösungsmöglichkeiten recherchiert und habe herausgefunden, dass man das Problem lösen kann, wenn man für den IE6 die Untermenüs in Tabellen packt.

Das wird dann so gelöst.

Code: Alles auswählen

<!--[if IE 7]><!--></a><!--<![endif]-->
<!--[if lte IE 6]><table><tr><td><![endif]-->
		<ul>
		<li><a href="leer">eins</a></li>
		<li><a href="leer">zwei</a></li>
		<li><a href="leer">drei</a></li>
		<li><a href="leer">vier</a></li>
		<li><a href="leer">fuenf</a></li>
		</ul>
<!--[if lte IE 6]></td></tr></table></a><![endif]-->
Nur stehe ich jetzt vor dem Problem, wie bekomme ich diese code-Stücke in die printnavigation()?
Leider reichen meine PHP Kenntnisse nicht aus, um die so anzupassen, dass nur die Untermenüs mit dem obigen code umgeben werden.

Wenn mir jemand einen kleinen Tipp geben könnte, wäre ich sehr dankbar.

Gruß,
dutch
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Konkrete Fragen:

1.) Ist Dein Design so universell, daß eine beliebig erweiterbare horizontale Hauptnavigation möglich ist?

2.) Gibt es nur eine Untermenüebene oder noch weitere? Sprich: geht es darum die HTML-Elemente nur inder ersten nicht anzuzeigen oder sie eben nur in der zweiten auszugeben?
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
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Konkreter Vorschlag:

Schaue Dir die Ausgabe von getNavigation an.

Dort erscheinen Deine Hauptpunkte mit der Angabe Level 1 sowie der zuhörigen rubric-id

Diese kannst Du rausfiltern und durch eine Schleife ausgeben lassen.

Zu diesen Punkten lässt Du nun durch printNavigation die Unterpunkte umschlossen von Deinem HTML-Code ausgeben.

Dadurch mußt Du am Code nichts anpassen sondern nur die Ausgaben nutzen und sie Dir zunutze machen.
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
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Die horizontale Hauptnavigation kann nur begrenzt erweitert werden, mangels Platz natürlich. Muss aber schon variable bleiben, da die Hauptmenüpunkte mit der Zeit über cpo angepasst werden können sollen.

Es wird (wahrscheinlich...) nur eine Untermenüebene geben.
Für den Fall, dass noch eine Ebene hinzukommen würde, wäre es natürlich toll, wenn es gelingen würde, die HTML-Elemente nur in der ersten Ebene nicht ausgeben zu lassen.

Gruß,
dutch
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Hallo Markus,

ok, ich werde mal versuchen mit getNavigation was zu erreichen.

Danke schon mal für den Tipp.


Gruß,
dutch
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

die HTML-Elemente nur in der ersten Ebene nicht ausgeben zu lassen
Oha! Dann mußt Du tatsächlich printNavigation anpassen, weil dann natürlich für alle weiteren Ebenen jeweils der Code einzeln ausgegeben werden muß. Schade.
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
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Hallo Markus,

ich habe inzwischen ein bisschen mit der printnavigation() experimentiert und im code rumgestümpert aber echt weiter bin ich nicht.

Ich weiß einfach nicht wie ich die zweite Menüebene separat behandeln lassen kann.
Dafür muss ich wohl eine ganze Reihe neuer Variablen einführen?
Da steige ich dann nicht mehr durch...

Hättest du noch nen Tipp wo ich da am besten ansetze?

Gruß,
dutch
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Ich sitze jetzt gerade bei einem Kunden und habe keinen Zugriff auf irgendwelche Dateien, versuche es aber dennoch mal ganz theoretisch:

Die erste Aufgabe ist ja die Hauptpunkte zu identifizieren und von Ihnen die Rubrik-ID zu erhalten, um einen Link bauen zu können, sowie eine untergeordnete navigation für diese id.

Also lesen wir erst mal mittels

Code: Alles auswählen

$navigationspunkte = getNavigation();
alles in ein Array.

Dann durch laufen wir es und suchen die mit level=1

Code: Alles auswählen

for each ($navigationspunkte AS $punkt)  {
    if ($punkt['level'] == 1)  {
        hier jetzt der weitere Code...
    }
}
Nun wird ja nur bei den Hauptpunkten was ausgegeben und wir könnten dort z.B. den Hauptpunkt selbst und seine untergeordnete Navigation sowie weiteren HTML-Code ausgeben, also

Code: Alles auswählen

for each ($navigationspunkte AS $punkt)  {
    if ($punkt['level'] == 1)  {
        echo '<a href="'.$punkt['link'].'">".$punkt['caption']."</a>";
        echo '<!-- HTML-Code -->';
        printNavigation($navigationspunkte,0,99,$punkt['rubric']['id']);
        echo '<!-- HTML-Code -->';
   }
}

Das habe ich jetzt aber frei aus dem Gedächtnis geschrieben. Testen und an Deine Bedürfnisse anpassen mußt Du selbst...
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
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Mit umschließdem UL müßte es wohl so aussehen

Code: Alles auswählen

echo "<ul>";
for each ($navigationspunkte AS $punkt)  { 
    if ($punkt['level'] == 1)  { 
        echo "<li>";
        echo '<a href="'.$punkt['link'].'">".$punkt['caption']."</a>"; 
        echo '<!-- HTML-Code -->'; 
        printNavigation($navigationspunkte,0,99,$punkt['rubric']['id']); 
        echo '<!-- HTML-Code -->'; 
        echo "</li>";
   } 
}
echo "</ul">;
Ich habe die genaue Ausgabe von getNavigation jetzt leider nicht im Kopf, daher habe ich sicher mit den Key-Namen Fehler gemacht...
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
dutch
ConPresso-Experte
Beiträge: 547
Registriert: 04.07.2007 17:12
Hat sich bedankt: 27 Mal
Danksagung erhalten: 7 Mal

Beitrag von dutch »

Hallo Markus,

Cool!
Das sieht vielversprechend aus.
Wenn ich es getestet habe, melde ich mich wieder.

Vielen Dank schon mal!

Gruß,
dutch
Benutzeravatar
balu
ConPresso-Entwickler
Beiträge: 1748
Registriert: 01.01.1970 01:00
Hat sich bedankt: 81 Mal
Danksagung erhalten: 133 Mal

Beitrag von balu »

Hi Dutsch,
dutch hat geschrieben:Mittels CSS wird die erste Menüebene horizontal ausgegeben. Die Untermenüs werden über CSS erst mal ausgeblendet und dann bei mouseover über die zugehörigen Hauptmenüpunkte ebenfalls mit CSS eingeblendet.

Das klappt sehr gut in FF, in Opera und im IE7
NUR leider nicht im IE6 (andere Browser habe ich noch nicht getestet).

Ich habe dann nach Lösungsmöglichkeiten recherchiert und habe herausgefunden, dass man das Problem lösen kann, wenn man für den IE6 die Untermenüs in Tabellen packt.
hast Du mal einen Tipp, wo Du diese Lösung gefunden hast? Ich finde die Variante recht interessant.

Wir behelfen uns bei den IE-Navi-Versionen immer mit Javascript, da wir ansonsten noch keine Lösung für die Aufklapp-Probleme hatten.

Melde Dich mal, ob Markus Code funktioniert oder was Du sonst noch geändert hast.

Balu

Balu
Bartels.Schöne
ConPresso Support & Development
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Habe es nun mal komplettiert, korrigiert und vollständig getestet. Hier der vollständige funktionierende Code:

Code: Alles auswählen

<?php

// die HTML-Codes
$preHTML = '
<!--[if IE 7]><!--></a><!--<![endif]--> 
<!--[if lte IE 6]><table><tr><td><![endif]-->
';
$postHTML = '
<!--[if lte IE 6]></td></tr></table></a><![endif]-->
';

// die gesamte Navigation einlesen
$navigationspunkte = getNavigation();

echo "<ul>"; 
foreach ($navigationspunkte AS $punkt)  { 
    if ($punkt['level'] == 1)  { 
		$mainLink = ($punkt['rubric']['externalURL']) ? 
			'<a href="'.$punkt['rubric']['externalURL'].'" target="'.$punkt['rubric']['externalURLTarget'].'">'.$punkt['caption'].'</a>' :
			'<a href="../'.$punkt['rubric']['directory'].'/index.php?rubric='.$punkt['rubric']['id'].'">'.$punkt['caption'].'</a>';
        echo "<li>"; 
        echo $mainLink; // der Hauptpunkt
        echo $preHTML; // der voranstehende HTML-Code
        printNavigation($navigationspunkte,0,99,$punkt['id']); // die Unternavigation
        echo $postHTML; // der nachstehende HTML-Code
        echo "</li>"; 
   } 
} 
echo "</ul>";

?>
Kann man sich irgendwo mal ansehehen, wie sich das dann auswirkt (denn ich kenne ja jetzt nur den entstehenden Quelltext, aber nicht das CSS dazu)
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
Benutzeravatar
MarkusR
Handbuchversteher
Beiträge: 7362
Registriert: 01.01.1970 01:00
Hat sich bedankt: 111 Mal
Danksagung erhalten: 934 Mal
Kontaktdaten:

Beitrag von MarkusR »

Falls man die HTML-Codes übrigens für weitere Unterebenen benötigt, könnte man das ganze selbst in eine Funktion packen und mit sich selbst verschachteln.

Damit bliebe printNavigation unangetastet (und damit Updatefähig) aber man hat das gewünschte Ergebnis.
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
Antworten