Navigationspfad
-
- Beiträge: 59
- Registriert: Mi 18. Apr 2007, 18:43
- Kontaktdaten:
Navigationspfad
Hallo Forum,
ich habe leider trotz sorgfältiger Suche nichts passendes gefunden. Ich verwende das Modul Navigationspfad des Beispielmandanten aus 4.6.15.
Jetzt meine Frage:
Gibt es eine Möglichkeit nur die ersten 2 Kategorien zu verlinken, so das der Navigationspfad so ausgegeben wird?
Katergorie 1 > Katergorie 2 > Kategorie 3
Also ab der 3 Kategorie soll nicht mehr verlinkt werden.
Geht das?
ich habe leider trotz sorgfältiger Suche nichts passendes gefunden. Ich verwende das Modul Navigationspfad des Beispielmandanten aus 4.6.15.
Jetzt meine Frage:
Gibt es eine Möglichkeit nur die ersten 2 Kategorien zu verlinken, so das der Navigationspfad so ausgegeben wird?
Katergorie 1 > Katergorie 2 > Kategorie 3
Also ab der 3 Kategorie soll nicht mehr verlinkt werden.
Geht das?
Hab das Modul jetzt nicht zur Hand, aber generell sollte das ganz einfach über eine for-Schleife machbar sein.
Ungefähr so:
Gruß,
Thomas
Ungefähr so:
Code: Alles auswählen
for ($i=0; $i<2; $i++){
machwas;
}
Thomas
-
- Beiträge: 59
- Registriert: Mi 18. Apr 2007, 18:43
- Kontaktdaten:
Hallo und danke für die flotte Antwort.
Das Modul sieht so aus:
Wo muß ich da die Änderung vornehmen?
Das Modul sieht so aus:
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=' ';
} 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;
?>
Wenn ich das richtig blicke, stehen die einzelnen Elemente in $matches. Statt des foreach ($matches as $value) könntest Du die Schleife von Thomas verwenden. Dann sollten nicht mehr als zwei Einträge im Navigationspfad erscheinen.
Z.B. so:
Damit es bei keinem oder nur einem Eintrag in $matches nicht knallt, besser
Ich hoffe, das passt so, bin in php nicht so fit.
Grüße,
Jürgen
Z.B. so:
Code: Alles auswählen
for ($i=0; $i<2; $i++){
$value = $matches[i];
... weiter wie gehabt.
}
Code: Alles auswählen
$numentries = count($matches);
if ($numentries > 2)
{
$numentries = 2;
}
for ($i=0; $i<$numentries; $i++){
$value = $matches[i];
... weiter wie gehabt.
}
Grüße,
Jürgen
-
- Beiträge: 59
- Registriert: Mi 18. Apr 2007, 18:43
- Kontaktdaten:
Also, meiner Ansicht nach musst Du folgende Dinge ersetzen:
durch
und
durch
wobei die 2. Schleife wohl nur noch sehr selten ausgeführt wird. Sie sorgt nämlich dafür, dass die einzelnen Items eingekürzt werden, sollte der Gesamtpfad mehr als 65 Zeichen haben. Bei nur zwei Items im Pfad ist das wohl kaum mehr der Fall.
Probier's mal aus, würde mich interessieren, ob es funktioniert.
Viele Grüße,
Jürgen
Code: Alles auswählen
foreach ($matches as $value) {
$length += strlen($value) - 2;
}
Code: Alles auswählen
$numentries = count($matches);
if ($numentries > 2)
{
$numentries = 2;
}
for ($i=0; $i<$numentries; $i++){
$value = $matches[i];
$length += strlen($value) - 2;
}
Code: Alles auswählen
#Shorten items
if ($length > $max_length) {
foreach ($matches as $value) {
Code: Alles auswählen
#Shorten items
if ($length > $max_length) {
for ($i=0; $i<$numentries; $i++){
$value = $matches[i];
Probier's mal aus, würde mich interessieren, ob es funktioniert.
Viele Grüße,
Jürgen
-
- Beiträge: 59
- Registriert: Mi 18. Apr 2007, 18:43
- Kontaktdaten:
Hm, dann kann man nur noch an der Query basteln:
Da bin ich allerdings überfragt und die Zeit, die zu analysieren habe ich im Moment nicht. Kann jemand anders aushelfen?
Grüße,
Jürgen
Code: Alles auswählen
$pattern = "'>.*?<'";
preg_match_all($pattern, $retval, $matches);
$matches = $matches[0];
Grüße,
Jürgen
-
- Beiträge: 59
- Registriert: Mi 18. Apr 2007, 18:43
- Kontaktdaten: