Breadcrumb mit Headline

Gesperrt
#ayshe
Beiträge: 445
Registriert: Do 25. Mär 2004, 10:04
Kontaktdaten:

Breadcrumb mit Headline

Beitrag von #ayshe » Di 30. Okt 2007, 15:15

Hallo,

mal wieder ein Frage zum Brotkrümelpfad.
Folgenden Code verwende ich:

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, "", 1);

if ($retval=='') {
	$retval='';	
} 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;
?>
Die Ausgabe resultiert in einem einfachen

Code: Alles auswählen

<a href="kategorie">Kategoriename</a>.
Ich möchte die Ausgabe aber mit einer Headline haben, so also:

Code: Alles auswählen

<h1><a href="kategorie">Kategoriename</a></h1>
Ich hab vielleicht grad n Brett vorm Kopp, aber ich hab keine Idee, wie ich das realisieren kann.

Kann jemand helfen?

Gruß,
#ayshe[/code]

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

Beitrag von xmurrix » Di 30. Okt 2007, 18:00

Hallo,

du kannst die Zeile

Code: Alles auswählen

	$retval = str_replace('"/index.html"', '"Home/index.html"', $retval); 
um folgenden Code erweitern:

Code: Alles auswählen

	$retval = str_replace('"/index.html"', '"Home/index.html"', $retval); 
	// text bei '<a ' splitten
	$tmp = explode('<a ', $retval); 
	// loop durch die elemente und </a> gegen </a></h1> ersetzen
	foreach($tmp as $p => $item) {
		$tmp = str_replace('</a>','</a></h1>', $tmp);
	}
	// zusammenfuehren des arrays zu einem string mit <h1><a 
	$retval = implode('<h1><a ', $tmp); 
Das sollte dafür sorgen, dass die Anker im BC-Navi von einem h1-Tag umschlossen werden, getestet habe ich das aber nicht. Eventuell geht das auch elegenter mit preg_replace und einem passenden regulären Ausdruck.

Gruß
xmurrix

#ayshe
Beiträge: 445
Registriert: Do 25. Mär 2004, 10:04
Kontaktdaten:

GELÖST

Beitrag von #ayshe » Mi 31. Okt 2007, 11:10

Hallo xmurrix,

vielen Dank für deinen Lösungsansatz. Funktioniert fast, es werden aber zwei </h1> hintereinander generiert.

Macht aber nix. Mir fiel nämlich eben das Brett vorm Kopf runter, das ich gestern hatte. Es ist ja ganz einfach über das Layout zu lösen. Dazu einfach <h1><container id="n">[weitere Variablen]</container></h1> und schon hat man eine valide Headline an der richtigen Stelle :)

Beste Grüße,
#ayshe

Gesperrt