---
title: "Extension für die rootline-Navigation"
url: "https://www.typo3.net/d/67075-extension-fuer-die-rootline-navigation"
source: "typo3.net"
tags: ["Extensions","Entwicklung","Frage"]
created: "2007-08-21"
last_reply: "2007-09-04"
replies: 6
solved: false
page: 1
pages: 1
lang: "de"
---

# Extension für die rootline-Navigation

Extensions › Entwicklung · 6 Antworten · gestartet 2007-08-21

## Eröffnungsbeitrag

**irisia3** · 2007-08-21 · [Beitrag #1](https://www.typo3.net/d/67075-extension-fuer-die-rootline-navigation/1)

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**:

```php
//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:

```typoscript
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

## Antworten

### [#2](https://www.typo3.net/d/67075-extension-fuer-die-rootline-navigation/2) · steffenk · 2007-08-22

erstens versteh ich nicht, was man mit einer RootlineExtension soll, die 4 Zeilen kann man auch ins TS schreiben

zweitens kann man crop wie bei jedem Menü machen mit

```typoscript
NO.stdWrap.crop=200|...
```

Nur der Text wird gecropt, der Link bleibt erhalten.

### [#3](https://www.typo3.net/d/67075-extension-fuer-die-rootline-navigation/3) · irisia3 · 2007-08-22

Hi Steffenk,

Danke für deine Antwort, aber das ist leider nicht das was Ich will, denn mit NO.stdWrap.crop=200|... wird jeden einzelnen Menüeintrag gezürzt und das was Ich wollte ist, die komplete rootline auf die Länge zu überprüfen und sie zu kürzen. Also mit diesen Quellecode

```typoscript
lib.rootline = HMENU
lib.rootline.special = rootline
lib.rootline.special.range = 0|-1
lib.rootline.includeNotInMenu = 1         #aktivieren (1), wenn auch versteckte Seite angezeigt werden sollen
lib.rootline.special.targets.8 = page
lib.rootline.1 = TMENU
lib.rootline.1 { 
	NO {
		stdWrap.crop=10|...|1
		doNotLinkIt = 1
		stdWrap.cObject = COA
		stdWrap.cObject {
			10 = TEXT
			10.field = title
			10.typolink {
				parameter.field = uid
			}
		}
		linkWrap = {$root}| &nbsp; > &nbsp; |*| | &nbsp; > &nbsp; |*| |
	}	
}
```

**habe ich das Ergebniss:**
lalalalala...>lalalalala...>lalalalala...>lalalalala...

**und Ich wollte aber folgendes haben:**
lalalalalala > ... > lalalalalala > lalalalalala > lalalalalala

Wenn du wüsstest wie man das mit 4 Zeilen Code machen kann, dann verrate es mir bitte!

Vielen Dank im Voraus und liebe Grüße
Irisia

### [#4](https://www.typo3.net/d/67075-extension-fuer-die-rootline-navigation/4) · steffenk · 2007-08-22

das mit den 4 Zeilen bezog sich auf die Extension rootline

### [#5](https://www.typo3.net/d/67075-extension-fuer-die-rootline-navigation/5) · irisia3 · 2007-08-22

Und hast du eine Idee wie man das machen kann?

### [#6](https://www.typo3.net/d/67075-extension-fuer-die-rootline-navigation/6) · steffenk · 2007-08-22

spontan nicht, ich würde über TS was konstruieren - sieht nach was zusammengesetztes aus

Root-Page > ...abhängig von treelevel... > rootline mit nur 2-3 Elementen

u.U. eine Anweisung mit Condition für jeden Treelevel.

### [#7](https://www.typo3.net/d/67075-extension-fuer-die-rootline-navigation/7) · irisia3 · 2007-09-04

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:

```typoscript
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]
```

```typoscript
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:

```typoscript
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

---

Quelle: „Extension für die rootline-Navigation“, typo3.net, https://www.typo3.net/d/67075-extension-fuer-die-rootline-navigation
Beiträge von Mitgliedern des Forums. Bitte mit Link auf die Diskussion zitieren.
