Zum Inhalt springen

Rootline-Navigation kürzen?

Erstellt am 21. August 2007 · 1 Antwort · letzte Antwort am 4. September 2007

Tags: Frage

irisia3 ·

Hallo zusammen,

Ich versuche seit einiger Zeit auf meine Seite die Rootline zu kürzen, weil Ich will nicht, das die auf zwei Zeilen umgebrochen wird wenn sie zu lang wird. Stattdessen sollte die Länge der Menüeinträge zusammengezählt werden und wenn das größer als eine eingegebene Zahl ist, sollte die verkürtzt werden, also so etwas:
ebene1 > ... > ebene5 > ebene6 > ebene7

Also Ich habe in irgendeinem Forum gelesen, das die crop Methode der stdWrap innerhalb von HTML-Tags abschneidet und deswegen nicht an der Stelle zu gebrauchen ist. Als Vorschlag gab es da eine php-Methode, was aber genau dafür geignet ist - cropHTML:

//parse given html
$doc = domxml_xmltree('<body>' . $content . '</body>');
$body = $doc->get_elements_by_tagname('body');
$length = 0;
$content = cropHTML($body[0], $length, 40);


echo $content;


function cropHTML(&$node, &$length, $maxLength = 200, $replaceString = '...') {
    $st = "";
    if ($length >= $maxLength)
        return $st;
    foreach ($node->child_nodes() as $cnode){
        if ($cnode->node_type() == XML_TEXT_NODE) {
            $text = $cnode->node_value();
            if (strlen($text) + $length < $maxLength) {
                $st .= $text;
                $length += strlen($text);
            } else if ($length < $maxLength) {
                $st .= substr($text, 0, $maxLength - $length) . $replaceString;
                $length = $maxLength+1;
                return $st;
            }
        } else {
            if ($cnode->node_type() == XML_ELEMENT_NODE) {
                $st .= "<" . $cnode->node_name();
                if ($attribnodes = $cnode->attributes()) {
                    $st .= " ";
                    foreach ($attribnodes as $anode) {
                        $st .= $anode->node_name() . "='" .$anode->node_value() . "'";
                    }
                }
                $nodeText = cropHTML($cnode, $length, $maxLength, $replaceString);
                if (empty ($nodeText) && !$attribnodes)
                    $st .= " />"; // unary
                else
                    $st .= ">" . $nodeText . "</" . $cnode->node_name() . ">";
            }
        }
        if($length >= $maxLength) break;
    }
    return $st;
}

Also habe Ich mir das runtergeladen und in dem typo3 folgendes ausprobiert:

page.includeLibs.some_random_id_string = fileadmin/php/cropHTML.inc

lib.rootline.20 = USER 
lib.rootline.20 {
	userFunc = user_functions->cropHTML
	minLength = 20
	replaceString = ....
}

...aber leider ohne Erfolg #paralyzed#

Hat sich jemand vielleicht schon damit auseinandergesetzt? Ich wäre sehr dankbar für jede Hilfe.

Viele Grüße
Irisia

irisia3 ·

Hallo Leute endlich habe Ich es hinbekommen und das wonach Ich gesucht habe war natürlich ganz einfach #paralyzed#
Hier auch die Lösungsvorschlag dazu:

lib.rootline = HMENU
lib.rootline.special = rootline
lib.rootline.includeNotInMenu = 0         #aktivieren (1), wenn auch versteckte Seite angezeigt werden sollen
lib.rootline.special.targets.8 = page
lib.rootline.1 = TMENU
lib.rootline.1.target = _top

[treeLevel = 0,1,2,3,4,5]		  #Diese Bedingung sort dafür, dass die Rootline ab 6 Ebene verkürzt wird
lib.rootline.special.range = 0|-1
lib.rootline.1.NO {
     allWrap = <div class="bluebox"></div> | &nbsp; > &nbsp; |*| | &nbsp; > &nbsp; |*| | 
}
[ELSE]
lib.rootline.special.range = -5|-1
lib.rootline.1.NO {
     allWrap = {$rootLine} | &nbsp; > &nbsp; |*| | &nbsp; > &nbsp; |*| | 
}
[END]
lib.rootline.special.range = -5|-1

sorgt nähmlich dafür, dass Rootline relativ zu aktueller Ebene neu berechnet wird und zwar z.B mit -5 fängt die Rootline bei der fünftletzte Ebene an.

{$rootLine} in Zeile 16 ist eine Konstante in der Ich dann die 0-te Ebene (root) plus '...' statisch reincodiert habe und es sieht so aus:

rootLine = <a href=index.php?id=1>Home</a> &nbsp;> &nbsp;... &nbsp;>&nbsp;

Und somit sieht meine fertige Rootline-Navigation wenn in tiefer in den Baumstruktur reingehe so aus:

Home > ... > Ebene 4 > Ebene 5 > Ebene 6 > Ebene 7 > Ebene 8

Viele Grüße
Irisia