Seite 1 von 1
oberste Ebene eines Kategoriebaumes auslesen
Verfasst: So 13. Nov 2005, 15:41
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
Verfasst: So 13. Nov 2005, 15:57
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=' ';
} 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.
Verfasst: So 13. Nov 2005, 16:08
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...
Verfasst: So 13. Nov 2005, 16:10
von mvf
probiere ich gleich und gebe rückmeldung
Verfasst: So 13. Nov 2005, 16:19
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=' ';
} 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
Verfasst: So 13. Nov 2005, 16:27
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
