Navigationspfad mit Startseite

Contenider
Beiträge: 503
Registriert: Do 6. Apr 2006, 01:40
Kontaktdaten:

Beitrag von Contenider » Di 3. Okt 2006, 22:42

In dem Moduloutput wird zu Anfang über $retval der class="" Tag generiert, soweit ich das richtig verstanden habe. Ich habe versucht die Klassenzuweisung herauszunehmen, da ich die Formatierung anders lösen möchte. Leider habe ich null Ahnung was ich ändern muss, damit es klappt. Ich habe schon versucht bei der Generierung am Ende des Moduloutputs $retval herauszunehemn, dadurch entsteht dann eine Fehlermeldung - folglich der falsche Weg. Dann habe ich versucht die Erstellung der Klasse über $retval am Anfang des Moduloutputs auszukommentieren, was auch in Fehlermeldungen geendet ist.

Ist jemand so nett und hilft mir bei meinem Problem?

Code: Alles auswählen

<?php
/***********************************************
* CONTENIDO MODUL - OUTPUT
*
* Modulname  :      Navigationpath
* Author(s)   :     Andreas Lindner
* Copyright   :     Contenido - four for business, Andreas Lindner
* Created     :     05-08-2005
************************************************/

#Settings
$separator = '>';
$max_length = 65;

#Get path to root
$dummy = conCreateLocationString($idcat, ' '.$separator.' ', $retval, true, "navipath", 1);

if ($retval=='') {
	$retval='&nbsp;';	
} else {
	$pattern = "'>.*?<'";
	
	preg_match_all($pattern, $retval, $matches);
	$matches = $matches[0];
	
	#Get effective text length
	$length = 0;
	foreach ($matches as $value) {
		$length += strlen($value) - 2;
	}
	
	#Get shorten factor
	if ($length > $max_length * 4) {
		$shorten = 5;
	}
	elseif ($length > $max_length * 3) {
		$shorten = 4;
	}
	elseif ($length > $max_length * 2) {
		$shorten = 3;
	}
	elseif ($length > $max_length) {
		$shorten = 2;
	} else {
		$shorten = 1;
	}
	
	#Shorten items
	if ($length > $max_length) {
		foreach ($matches as $value) {
			if (strpos($value, $separator) === FALSE) {
				$text = substr($value, 1, strlen($value) - 2);
				$len = strlen($text);
				if (strpos($text, ' ') === FALSE) {
					$text_new = $text;
				} else {
					$text_new = capiStrTrimAfterWord($text, intval($len / $shorten));
				}
	
				if (strlen($text) != strlen($text_new)) {
					$text_new .= '...';
				}
	
				$text_new = '>'.$text_new.'<';
				$retval = str_replace('>'.$text.'<', $text_new, $retval);
			}
		}
	}
	
	$retval = str_replace('"/index.html"', '"Home/index.html"', $retval);
}

echo $retval;
?>
Ειμαστε στη μεση απο κατι...

wildstar1600
Beiträge: 32
Registriert: Fr 22. Jun 2007, 23:06
Wohnort: Ingolstadt
Kontaktdaten:

Re: CSS für Navigationspfad

Beitrag von wildstar1600 » Mo 30. Jul 2007, 22:38

#ayshe hat geschrieben:Hallo,

ich nutze oben zitiertes Modul für den Navigationspfad. Darin ist die CSS-Klasse "navipath" festgeschrieben. Wenn ich dafür im CSS z.B. eine Schriftfarbe definiere, wird die auf alle Einträge/Links des Navigationspfades angewendet - logisch.

Ich möchte aber, dass nur der letzte Link im Navigationspfad farblich hervorgehoben wird. Wie kann ich das bewerkstelligen?

Viele Grüße,
Ayshe
xmurrix hat geschrieben:Hallo,

eine Möglichkeit wäre die Zeile:

Code: Alles auswählen

    $retval = str_replace('"/index.html"', '"Home/index.html"', $retval);
um folgendes

Code: Alles auswählen

    $retval = str_replace('"/index.html"', '"Home/index.html"', $retval);
    $tmp = explode('<a ', $retval);
    $tmp[count($tmp)-1] = 'id="nav-path-last" '.$tmp[count($tmp)-1];
    $retval = implode('<a ', $tmp);
zu erweitern.

Dann kannst du den letzten Anker (mit der id nav-path-last) deinen Wünschen entsprechend formatieren.

Gruß
xmurrix
Wie kann man zusätzlich den letzten Link folgendermaßen zusätzlich gestalten. Die Trenner sollten jeweils vorn und hinten eine kleine grafik sein?

Home Erste Seite | Zweite Seite |

Vielen Dank schon mal vorab

xmurrix
Beiträge: 3151
Registriert: Do 21. Okt 2004, 11:08
Wohnort: Augsburg
Kontaktdaten:

Re: CSS für Navigationspfad

Beitrag von xmurrix » Di 31. Jul 2007, 14:26

wildstar1600 hat geschrieben:
Wie kann man zusätzlich den letzten Link folgendermaßen zusätzlich gestalten. Die Trenner sollten jeweils vorn und hinten eine kleine grafik sein?

Home Erste Seite | Zweite Seite |

Vielen Dank schon mal vorab
Hallo,

die Logik ist eigentlich die Gleiche. In deinem Fall kannst du nachdem der Navipfad in ein Array zerlegt wurde, das letzte Element deinen Wünschen entsprechend dekorieren. Vorher solltest du das Array durchlaufen und das "<a " überall wieder als Prefix anhängen.

Beispiel:

Code: Alles auswählen

$retval = str_replace('"/index.html"', '"Home/index.html"', $retval); 
$tmp = explode('<a ', $retval); 

// wenn das letze element eine id oder eine klasse erhalten soll
// $tmp[count($tmp)-1] = 'id="nav-path-last" '.$tmp[count($tmp)-1]; 

// loop und das prefix hinzufügen
foreach ($tmp as $pos => $item) {
    $tmp[$pos] = '<a ' . $item;
}

// das letzte element dekorieren
$tmp[count($tmp)-1] = '<img src="foo.png" ... />'.$tmp[count($tmp)-1].'<img src="foo.png" ... />';

// und wieder zu einem string zusammenfügen
$retval = implode('', $tmp); 
Mit regular Expressions geht das bestimmt eleganter, aber da kann sich ein Anderer Kopf darüber machen...

Grüße
xmurrix

wildstar1600
Beiträge: 32
Registriert: Fr 22. Jun 2007, 23:06
Wohnort: Ingolstadt
Kontaktdaten:

Beitrag von wildstar1600 » Mi 1. Aug 2007, 00:19

Vielen Dank xmurrix für die Unterstützung (find ich klasse von Dir),
ich werd das morgen gleich mal austesten. Gebe Dir wieder Bescheid.

Wildstar1600

wildstar1600
Beiträge: 32
Registriert: Fr 22. Jun 2007, 23:06
Wohnort: Ingolstadt
Kontaktdaten:

Beitrag von wildstar1600 » Fr 3. Aug 2007, 04:22

Habe das Script jetzt getestet.
Soweit funktioniert das Script zu 99,9%.

Die Hauptkategorie z.B Service (erhält nur auf der rechten Seite das <src img.....)

Service|


Klickt man auf die jeweiligen Unterkategorien z.B. Seite1 oder Seite 2 sieht das Ergebnis richtig aus:

Service |Seite 1|
Service Seite 1 |Seite 2|

Vielleicht gibt es noch eine weitere Möglichkeit, was die Hauptkategorie gezielter anspricht, dass auch auf der linken Seite die Grafik auch angezeigt wird. Habe mir die Funktionen und die Klassen bereits Std. lang angeschaut und komme leider auf keine Lösung.

wildstar1600
Beiträge: 32
Registriert: Fr 22. Jun 2007, 23:06
Wohnort: Ingolstadt
Kontaktdaten:

Beitrag von wildstar1600 » So 5. Aug 2007, 23:06

Habe nun die Lösung. Wer' s brauchen kann. :wink:

// Link mit nur css gestalten (siehe Code von xmurrix)

Code: Alles auswählen

    $retval = str_replace('"/index.html"', '"Home/index.html"', $retval); 
    $tmp = explode('<a ', $retval); 
    $tmp[count($tmp)-1] = 'id="nav-path-last" '.$tmp[count($tmp)-1]; 
    $retval = implode('<a ', $tmp); 
unmittelbar darunter folgenden code einfügen.
// Link mit Grafiken links und rechts

Code: Alles auswählen

    $retval = str_replace('"/index.html"', '"Home/index.html"', $retval); 
    $tmp = explode('a> ', $retval); 
    $tmp[count($tmp)-1] = '<img src="image.jpg">'.$tmp[count($tmp)-1].'<img src="image.jpg">';
    $retval = implode('a> ', $tmp); 
Amen

Gesperrt