oberste Ebene eines Kategoriebaumes auslesen

Gesperrt
mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

oberste Ebene eines Kategoriebaumes auslesen

Beitrag von mvf »

hallo community

die suche hier im board hat ergeben, dass das auslesen der obersten ebene eines kategoriebaumes für die navigation anscheinend nicht geht. ich möchte jedoch die oberste ebene als überschrift der hauptnavigation nutzen.

beispiel: HIER

wenn man auf Studio, InfoCenter oder News in der headernavi klickt, dann soll in der linken hauptnavi-box im boxheader auch studio, infocenter oder news stehen.

ich habe auch schon versucht das modul 'Navigationspfad' zu missbrauchen. dort habe ich

Code: Alles auswählen

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

Code: Alles auswählen

#Get path to root
$dummy = conCreateLocationString($idcat,' '.$separator.' ', $retval, true, "navipath", 0);
gesetzt um in den breadcrumbs die erste ebene mit anzuzeigen. nun wollte ich das modul kopieren und darauf beschränken nur die oberste ebene anzuzeigen, sprich die foreach schleife am ende auf einen durchgang zu beschränken, ohne erfolg :( [und mit sicherheit auch nur ein miserabler workaround]

bitte helft mir weiter, vielen lieben dank
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams
mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf »

missverständins,

für die seiten in den kategoriebäumen

Studio
InfoCenter
News

sieht der navigationspfad wie folgt aus und funktioniert:

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

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;
?>
das liefert immer den ganzen string, also z.b.
Studio :: Portfolio :: Anwendungen :: Classics

Infocenter :: Impressum

News :: 2005 November
das modul möchte ich nun so modifizieren, dass es immer nur die erste eben auswirft, also
Studio

Infocenter

News
egal wie tief ich mich im baum befinde, dann könnte ich das in einem container als headline für die kategoriebox hernehmen.

aber wie gesagt, dass ist nur eine idee um die headline der navigation zu füllen.
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

du kriegst ja einen kompletten string retour geliefert der immer :: enthält

man könnte es zb über die php funktion explode machen...

$retval = explode($retval, "::");
$retval = trim($retval[0]);

nicht getestet, sollte aber gehen...
*** make your own tools (wishlist :: thx)
mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf »

probiere ich gleich und gebe rückmeldung
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams
mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf »

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.' ', $retval2, true, "navipath", 0);

if ($retval2=='') {
	$retval2='&nbsp;';	
} else {
	$pattern = "'>.*?<'";
	
	preg_match_all($pattern, $retval2, $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.'<';
				$retval2 = str_replace('>'.$text.'<', $text_new, $retval2);
			}
		}
	}
	$retval2 = str_replace('"/index.html"', '"Home/index.html"', $retval2);
}

$retval2 = explode($retval2, "::");
$retval2 = trim($retval2[0]);
    
echo $retval2;
?>
liefert nun als ergebnis lediglich :: siehe HIER
implmentiert in studio und allen subkats zum testen
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams
mvf
Beiträge: 1758
Registriert: Mo 1. Aug 2005, 00:35
Wohnort: in der schönen Hallertau, mitten im Hopfen
Kontaktdaten:

Beitrag von mvf »

jetzt habe ich es hurrah !!! :)

danke dir vielmal, mit

Code: Alles auswählen

$retval2 = explode("::", $retval2);
$retval2 = trim($retval2[0]);
   
echo $retval2;
?>
geht es!!!


merci danke grazie thx ;)
Grüsse, Guido

"A common mistake that people make when trying to design something completely foolproof is to underestimate the ingenuity of complete fools."
Mostly Harmless - Douglas Adams
Gesperrt