[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Bestimmte Kategorie und deren Kinder? - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Th0rSt3n
Beiträge: 7
Registriert: 23. Feb 2006, 12:47

Bestimmte Kategorie und deren Kinder?

28. Okt 2006, 16:58

Hallo,

ich nutze folgenden Code um nur eine bestimmte Kategorie anzeigen zu lassen:

Code: Alles auswählen

					      
					        <?
$cat = OOCategory::getCategoryById( 3);
$cats = $cat->getChildren();

if (is_array($cats)) {
	foreach ($cats as $cat) {

	$catId			= $cat->getId();
	$catName		= $cat->getName();
	if ($cat->isOnline(true)) {
	if ($catId == $_REQUEST['article_id']) {
	print '<a class="main_menu_entry_active" href="'.rex_getUrl($catId).'">'.$catName.'</a>'; }
	else {
	print '<a class="main_menu_entry" href="'.rex_getUrl($catId).'">'.$catName.'</a>'; }
}
}
}
?>
Das klappt auch wunderbar! Nur möchte ich nicht nur die Kategorie 3 anzeigen lassen, sondern auch alle Kategorien unterhalb von 3?

Gruß


Thorsten

Dr KillerJoe
Beiträge: 1711
Registriert: 24. Nov 2005, 22:29
Kontaktdaten: ICQ Website Yahoo Messenger

28. Okt 2006, 17:15

mit

Code: Alles auswählen

->getChildren()
bekommst Du die "Kinder" ;) (is nur ein schnipsel, aber hoffe es hilft)

In den Navitemplates wird es auch verwendet, vllt kannste da abgucken^^
Die Doku und Wiki sind Deine Freunde!!!

zehbaeh
Beiträge: 556
Registriert: 17. Okt 2006, 11:52
Wohnort: Solingen

28. Okt 2006, 19:46

Oehm...ich glaub das ist ihm bekannt, diese Methode hat er ja verwendet.)

Ich glaub er brauch eher sowas (rekursives:)

Code: Alles auswählen

function enumCategory($category,$function,$ignore_offlines = false,&$params=NULL,$path=NULL)
{
	if(!OOCategory::isValid($category)) return 0;
	if($path==NULL) $path = array();
	$enum = call_user_func($function,$category,$path,$params);
	if($enum > 0):
		$subcategories = $category->getChildren($ignore_offlines,$category->getClang());
		if(is_array($subcategories)):
			$path[] = $category;
			foreach($subcategories as $subcategory):
				$result = enumCategory($subcategory,$function,$ignore_offlines,$params,$path);
				if($result < 0) return $result;
				$enum += $result;
			endforeach;
		endif;
	endif;
	return $enum;
}
Und ein Beispiel zur Verwendung:

Code: Alles auswählen

function catWalk($cat,$path,$params)
{
   foreach($path as $p) echo $p->getName() . ' - ';
   echo $cat->getName();
   echo '<br />';
   return 1;
}

echo enumCategory(OOCategory::getCategoryById(3),'catWalk');

Benutzeravatar
Markus.Staab
Entwickler
Beiträge: 9634
Registriert: 29. Jan 2005, 15:50
Wohnort: Aschaffenburg/Germany
Kontaktdaten: ICQ Website

29. Okt 2006, 17:18

Hi zusammen,

wenn ich es richtig verstehe, will er alle Kategorien, die mit einer Kategorie (bei ihm mit ID 3) auf einer Ebene liegen?

Code: Alles auswählen

$cat = OOCategory::getCategoryById(3);
$parent = $cat->getParent();
$childs = $parent->getChildren();

foreach($childs as $child)
{
  echo $child->getName();
}
Gruß,
Markus

zehbaeh
Beiträge: 556
Registriert: 17. Okt 2006, 11:52
Wohnort: Solingen

29. Okt 2006, 17:32

Dann wäre es noch einfacher die Kinder der übergeordneten Kategorie zu verwursteln.)

Th0rSt3n
Beiträge: 7
Registriert: 23. Feb 2006, 12:47

30. Okt 2006, 11:38

Hallo,

ich habe mir jetzt einwenig unbeholfen geholfen :-) Indem ich oben genannten Code noch einmal verwende:

Code: Alles auswählen

$cat = OOCategory::getCategoryById( 3);
$cats = $cat->getChildren();

if (is_array($cats)) {
	foreach ($cats as $cat) {

	$catId			= $cat->getId();
	$catName		= $cat->getName();
	if ($cat->isOnline(true)) {
	if ($catId == $_REQUEST['article_id']) {
	
	print '<a class="main_menu_entry_active" href="'.rex_getUrl($catId).'">'.$catName.'</a>';}
	else {
	print '<a class="main_menu_entry" href="'.rex_getUrl($catId).'">'.$catName.'</a>'; }
	
						$cat = OOCategory::getCategoryById( $catId);
						$cats = $cat->getChildren();

						if ($catId == $_REQUEST['article_id']) {
						
						foreach ($cats as $cat) {
					
						$catId			= $cat->getId();
						$catName		= $cat->getName();
						if ($catId == $_REQUEST['article_id']) {
						print '<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i><a class="submenu" href="'.rex_getUrl($catId).'">'.$catName.'</a></i><br><br>'; }
						else {
						print '<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class="submenu" href="'.rex_getUrl($catId).'">'.$catName.'</a></i><br><br>'; }
						}
						}

}
}
}
Hat aber den Nachteil, dass die Eltern-Kategorie keine Kinder-Kategorien mehr anzeigt, nachdem ein Kind ausgewählt wurde.

Code: Alles auswählen

if ($catId == $_REQUEST['article_id']) 
Wie kann ich das dahin gehend ändern, dass die Kinder-Kategorien angezeigt werden, wenn die Eltern-Kategorie aktiv ist?

Gruß

Thorsten[/code]

Th0rSt3n
Beiträge: 7
Registriert: 23. Feb 2006, 12:47

30. Okt 2006, 13:32

Hallo,

ich habe es hinbekommen. Vielleicht nicht der eleganteste Weg. Aber es funktioniert:

Code: Alles auswählen

$cat = OOCategory::getCategoryById( 3);
$cats = $cat->getChildren();

if (is_array($cats)) {
	foreach ($cats as $cat) {

	$catId			= $cat->getId();
	$catName		= $cat->getName();
	if ($cat->isOnline(true)) {
	if ($catId == $_REQUEST['article_id']) {
	
	print '<a class="main_menu_entry_active" href="'.rex_getUrl($catId).'">'.$catName.'</a>';}
	else {
	print '<a class="main_menu_entry" href="'.rex_getUrl($catId).'">'.$catName.'</a>'; }
	
						$PATH = explode('|',$this->getValue('path').$this->getValue('article_id').'|');
						$path2 = $PATH[2];
						$path3 = $PATH[3];

						$cat2 = OOCategory::getCategoryById( $catId);
						$cats2 = $cat2->getChildren();
						if ($catId == $path2) {
						
						foreach ($cats2 as $cat2) {
					
						$catId			= $cat2->getId();
						$catName		= $cat2->getName();
						if ($catId == $_REQUEST['article_id']) {
						print '<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<i><a class="submenu" href="'.rex_getUrl($catId).'">'.$catName.'</a></i>'; }
						else {
						print '<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<a class="submenu" href="'.rex_getUrl($catId).'">'.$catName.'</a></i>'; }
						}
						if ($catId != $path2) { print '<br><br>'; }

						}

}
}
}
Gruß

Thorsten

P.S. Danke für die Hulfe bis hier hin!

Zurück zu „Allgemeines [R3]“