Elternelement mittels idart/idcat herausfinden

Gesperrt
Dalamar
Beiträge: 298
Registriert: Di 16. Nov 2004, 15:43
Wohnort: Arnstadt / Thüringen
Kontaktdaten:

Elternelement mittels idart/idcat herausfinden

Beitrag von Dalamar »

Guten Morgen,

weis jemand, ob es in Contenido eine Standard-Methode gibt, die es mir ermöglicht mittels einer Artikel-ID (idart) und einer Kategorie-Ebene (0..x) die idcat der entsprechenden Elternkategorie zu erhalten.

So alla:

Code: Alles auswählen

function getParentlyIdcat($idart, $level) {
    ...
    return $idcat;
}
Schonmal besten Dank im voraus.

Christian
Zuletzt geändert von Dalamar am Sa 2. Feb 2008, 20:36, insgesamt 1-mal geändert.
Beruflich: eComradeGroup und Media Atoll
Privat: Fantasybuch.net ;)
emergence
Beiträge: 10653
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence »

also auf den level bezogen -> nein

vielleicht nützlich
functions.con.php -> function conGetCategoryAssignments
functions.con.php -> function conFetchCategoryTree

beides müsste halt kombiniert werden...
*** make your own tools (wishlist :: thx)
Dalamar
Beiträge: 298
Registriert: Di 16. Nov 2004, 15:43
Wohnort: Arnstadt / Thüringen
Kontaktdaten:

Beitrag von Dalamar »

Schonmal Danke emergence... werde es ausprobieren. :)
Beruflich: eComradeGroup und Media Atoll
Privat: Fantasybuch.net ;)
Dalamar
Beiträge: 298
Registriert: Di 16. Nov 2004, 15:43
Wohnort: Arnstadt / Thüringen
Kontaktdaten:

Beitrag von Dalamar »

Keine Ahnung, ob ich mir die Mühe umsonst gemacht habe. Leider wusste ich nicht wie man mit Hilfe einer idcat oder einer idart das Elternelement einer bestimmten Ebene beziehen kann. Also habe ich mich selber mal rangesetzt. Hier der Code... vielleicht kann ihn ja jemand gebrauchen:

Code: Alles auswählen

<?

function getCategoryAssignmentByIdart($idart) {
	// Liefert array, obwohl Artikel nur noch einer Kategorie zugeordnet werden kann
	$idcat = conGetCategoryAssignments((int)$idart);
	return $idcat[0];
}

function getCategoryAssignmentByIdcat($idcat) {
	// foo
	return (int)$idcat;
}

/**
 * Get the Idcat of Parent Element dependent on level
 *
 * @param integer $current_idcat - Idcat of Child Element
 * @param integer $level - Level of Parent Element
 *
 * @return $idcat
 *
 */
function getParentIdcatByLevel($current_idcat, $level = 0)
{
	global $db, $cfg, $lang, $client;

	if($current_idcat > 0)
	{
		if ($db === false)
		{
			$db = new DB_Contenido;
		}

		$sql = "SELECT
					c.level AS level
				FROM
					".$cfg["tab"]["cat_lang"]." AS a,
					".$cfg["tab"]["cat"]." AS b,
					".$cfg["tab"]["cat_tree"]." AS c
				WHERE
					a.idlang    = '".$lang."' AND
					b.idclient  = '".$client."' AND
					b.idcat     = '".$current_idcat."' AND
					a.idcat     = b.idcat AND
					c.idcat     = b.idcat";

		$db->query($sql);
		$db->next_record();

		$current_idcat_level = $db->f("level");

		if($current_idcat_level > 0)
		{
			$catarray = array();
			$catarray = conFetchCategoryTree($client);

			for($i = $current_idcat_level - 1; $i >= $level; $i--)
			{
				foreach($catarray AS $key=>$value)
				{
					// Alle Bäume, die sich auf der selben oder einer tieferen Ebenen befinden, löschen
					if($value["level"] > $i) unset($catarray["$key"]);
					// i.O.
					else
					{
						$parent = $current_idcat;

						while($parent != 0)
						{
							$sql = "SELECT
										a.parentid
									FROM
										".$cfg["tab"]["cat"]." AS a,
										".$cfg["tab"]["cat_lang"]." AS b
									WHERE
										a.idclient  = '".$client."' AND
										b.idlang    = '".$lang."' AND
										a.idcat     = b.idcat AND
										a.idcat     = '".$parent."'";

							$db->query($sql);
							$db->next_record();

							$parent = $db->f("parentid");

							if($parent == $value["idcat"] && $value["level"] == $i)
							{
								$parent_idcat = $value["idcat"];
								$parent       = $value["idcat"];
							}
						}
					}
				}
			}
			return $parent_idcat;
		}
	}
	return false;
}

// idart
if($idart) {
	$output = getParentIdcatByLevel(getCategoryAssignmentByIdart($idart), 1);
}
// idcat
else {
	$output = getParentIdcatByLevel(getCategoryAssignmentByIdcat($idcat), 1);
}

// echo $output;

?>
Zuletzt geändert von Dalamar am Sa 2. Feb 2008, 20:44, insgesamt 1-mal geändert.
Beruflich: eComradeGroup und Media Atoll
Privat: Fantasybuch.net ;)
kloevekorn
Beiträge: 199
Registriert: Mo 31. Okt 2005, 15:26
Wohnort: Hamburg
Kontaktdaten:

Beitrag von kloevekorn »

Hallo Dalamar,

vielen Dank! Ich glaube, genau diese Funktion könnte ich für mein Ziel gebrauchen, die vpSitemap aufzubohren. Ich möchte alle Kategorien fest auf n Level anzeigen (konkret: n=2), aber die aktuelle Kategorie auf 3-4 Level.
(->http://www.contenido.de/forum/viewtopic.php?t=19214.) Hierfür muss ich innerhalb der vpSitemap nur beim Parent der aktuellen Kategorie mehr Level ausgeben (wenn es ein besseres Modul für den Umbau gibt - nehme gerne einen Tipp an)

Meine Frage (ich kann den Code nicht richtig nachvollziehen): dein Code zeigt immer die oberste ParentID des Level1 an, nicht den direkten Parent, den ich für meinen Wunsch bräuchte. Ich hoffe, man muss nur einen Parameter verändern ... hast du, hat jemand einen Tipp?

Wenn ich den hätte, könnte ich die vpSitemap vielleicht erweitern. Auch wenn ich noch nicht weiß wie :roll:

vielen Dank und Gruß,
jan
Dalamar
Beiträge: 298
Registriert: Di 16. Nov 2004, 15:43
Wohnort: Arnstadt / Thüringen
Kontaktdaten:

Beitrag von Dalamar »

- Navigation (Ebene 0)
-- Menuepunkt 1 (Ebene 1)
---- Menuepunkt 1.1 (Ebene 2)
---- Menuepunkt 1.2 (Ebene 2)
---- Menuepunkt 1.3 (Ebene 2)
-------- Menuepunkt 1.3.1 (Ebene 3)
-------- Menuepunkt 1.3.2 (Ebene 3) <--- idcat 100
-------- Menuepunkt 1.3.3 (Ebene 3)
---- Menuepunkt 1.4 (Ebene 2)
-- Menuepunkt 2 (Ebene 1)


Naja, wenn Du z.B. von Menuepunkt 1.3.2 das Elternelement der zweiten Ebene haben möchtest dann rufst Du einfach die Funktion getParentIdcatByLevel mit folgenden Parametern auf und erhälst die idcat des Menuepunktes 1.3.

Code: Alles auswählen

$idcatderzweitenebene = getParentIdcatByLevel(100, 2);
LG,
Christian
Beruflich: eComradeGroup und Media Atoll
Privat: Fantasybuch.net ;)
kloevekorn
Beiträge: 199
Registriert: Mo 31. Okt 2005, 15:26
Wohnort: Hamburg
Kontaktdaten:

Beitrag von kloevekorn »

Super, dann werde ich mal weiter experimentieren .... danke.
Gesperrt