[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
REDAXO Forum • Demo-Navigation - Link von Elternelement bei Dropdown deaktivieren
Seite 1 von 1

Demo-Navigation - Link von Elternelement bei Dropdown deaktivieren

Verfasst: 24. Nov 2017, 01:00
von joaopinto
Hallo,
ich habe die Navigation der Demo im Einsatz und würde gerne das Elternelement der ersten Ebene ohne Verlinkung darstellen, so dass nur die jeweiligen Kindelemente (2. Ebene) im Dropdown verlinkt sind.

Besipiel aus der Redaxo-Demo:
Elternelement der 1. Ebene ADDONS //
Kindelemente der 2. Ebene EDITOREN l DEVELOPER l YFORM ...

In diesem Beispiel sollte "ADDONS" nicht verlinkt werden, da ich in dieser Kategorie keine passende allgemeine Seite verfüge. Der User soll nur (über das Dropdown) zu den Unterkategorieseiten (2. Ebene) gelangen.

Was muss ich im Code anpassen? Wäre ich mit

Code: Alles auswählen

if ($category->getChildren(true))
auf der richtigen Spur?

Demo-Navi:

Code: Alles auswählen

<?php
$path = explode("|",$this->getValue("path").$this->getValue("article_id")."|");
$path1 = ((!empty($path[1])) ? $path[1] : '');
$path2 = ((!empty($path[2])) ? $path[2] : '');

$nav_main = '';

foreach (rex_category::getRootCategories() as $lev1) {

	$hidden_ids = array(1,6);
	// Home und Footer-Hilfsartikel sollen nicht in der Navi auftauchen
	if ($lev1->isOnline(true) && (!in_array($lev1->getId(), $hidden_ids))) {
		
		if ($lev1->getId() == $path1) {
			$nav_main .= '
			<li class="dropdown-toggle active"><a href="'.$lev1->getUrl().'">'.htmlspecialchars($lev1->getValue('name')).'</a>';
		} else {
   			$nav_main .= '
			<li class="dropdown-toggle"><a href="'.$lev1->getUrl().'">'.htmlspecialchars($lev1->getValue('name')).'</a>';
		}

		// 1st level start
		$lev1Size = sizeof($lev1->getChildren());

			if ($lev1Size != "0") {

				$nav_main .= '
				<ul class="dropdown-menu">';

					// START 2nd level categories
					foreach ($lev1->getChildren() as $lev2):
						if ($lev2->isOnline(true)) {

							if ($lev2->getId() == $path2) {
								$nav_main .= '
								<li class="dropdown-toggle active"><a href="'.$lev2->getUrl().'">'.htmlspecialchars($lev2->getValue('name')).'</a></li>';
							} else {
								$nav_main .= '
								<li class="dropdown-toggle"><a href="'.$lev2->getUrl().'">'.htmlspecialchars($lev2->getValue('name')).'</a></li>';
							}
						}
					endforeach;

				$nav_main .= '
				</ul>';

			}

		$nav_main .= '
		</li>';
	}
}

echo '
<div class="navbar-collapse collapse navbar-right">
	<ul class="nav navbar-nav">
		'.$nav_main.'
		'.rex::getProperty('lang_switch').'
	</ul>
</div><!--/.nav-collapse -->';
?>
Vielen Dank im voraus ;-)

Re: Demo-Navigation - Link von Elternelement bei Dropdown deaktivieren

Verfasst: 24. Nov 2017, 17:21
von anita
hallo,

ich würde ganz einfachhier

Code: Alles auswählen

} else {
   			$nav_main .= '
			<li class="dropdown-toggle"><a href="'.$lev1->getUrl().'">'.htmlspecialchars($lev1->getValue('name')).'</a>';
		}
die Änderungen vornehmen, entweder href raus oder gleich a-Tag raus

Re: Demo-Navigation - Link von Elternelement bei Dropdown deaktivieren

Verfasst: 26. Nov 2017, 20:14
von joaopinto
Danke Anita für den Tipp,
aber wenn ich dort ansetze werden mir alle Links von Elementen der 1. Ebene deaktiviert, nicht nur jene mit Kindelementen (sprich Dropdown).
Sorry, das hatte ich zuvor nicht ausreichend klar formuliert:
Nur wenn das Navi-Element in der 1. Ebene Kindelemente hat, soll dieses als Link deaktiviert werden.
Ich vermute, dass ich hierfür noch eine if-Schleife einbauen muss, nur wo und wie... :wink:

Re: Demo-Navigation - Link von Elternelement bei Dropdown deaktivieren

Verfasst: 27. Nov 2017, 17:00
von anita
dann notierst Du in dieser else-Anweisung noch ein if else und als Bedingung, wenn Kindelement, dann mit <a> und else ohne <a>

dafür kannst Du $lev1Size nutzen, musst die abfrage nur weiter oben notieren

Re: Demo-Navigation - Link von Elternelement bei Dropdown deaktivieren

Verfasst: 27. Nov 2017, 23:06
von joaopinto
Ist das so sinngemäß richtig?
(funktionieren tut es bereits...)
Mit $lev1Size hab ich's nicht verstanden, ist mir zu hoch :wink: (bin ein PHP Noob)

Nachtrag: Gibt scheinbar doch noch ein Problem, wenn die Seite der betroffenen Kategorie aktiv ist (also das zutrifft: if ($lev1->getId() == $path1)),
fängt er wieder ganz oben an und verlinkt das Elternelement ....

Code: Alles auswählen

} else {
                        // Bedingung wenn Kindelemente
			if ($lev1->getChildren(true)) {
			        $nav_main .= '
			<li><a href="#" style="pointer-events:none;cursor:default;text-decoration:none;">'.htmlspecialchars($lev1->getValue('name')).'</a>';
			} else {
				$nav_main .= '
			<li><a href="'.$lev1->getUrl().'">'.htmlspecialchars($lev1->getValue('name')).'</a>';
			}	
		}

Re: Demo-Navigation - Link von Elternelement bei Dropdown deaktivieren

Verfasst: 28. Nov 2017, 16:31
von anita
hi,

jetzt hab ich's

Code: Alles auswählen

if(sizeof($lev1->getChildren()) != "0"){
           $profilelink = strip_tags($profilelink);
          
      }

Re: Demo-Navigation - Link von Elternelement bei Dropdown deaktivieren

Verfasst: 29. Nov 2017, 10:59
von joaopinto
Aber mit diesem Ansatz (strip_tags) nimmt er mir das komplette Elternelement in der Navigation raus ... dieses sollte schon noch bestehen bleiben, nur eben nicht verlinkt (wenn Kinder bzw. Dropdown).

Re: Demo-Navigation - Link von Elternelement bei Dropdown deaktivieren

Verfasst: 29. Nov 2017, 18:06
von anita
das versteh ich nicht, bei mir geht es, lediglich die styles müssen korrigiert werden

Re: Demo-Navigation - Link von Elternelement bei Dropdown deaktivieren

Verfasst: 29. Dez 2017, 21:46
von Thomas.Skerbis
Hallo joaopinto , ich empfehle Dir nichts am Navi-Code zu ändern und stattdessen eine geeignete Rewrite scheme zu verwenden. https://github.com/FriendsOfREDAXO/yrewrite_scheme