Seite 1 von 2

Modul Hauptnavigation --> Problem

Verfasst: Mi 11. Aug 2004, 12:38
von alpi
Hi,

Ich habe ein kleines Problem mit der Hauptnavigation.

Ich habe eine Vereins-Seite, wo es zwei Jugenden und insgesamt drei Mannschaften gibt.

Mein Menü sieht ungefähr so aus:

Code: Alles auswählen

Bei der C-Jugend Seite:

Mannschaften
Mannschaften ->1. Mannschaft ->
Mannschaften ->1. Mannschaft ->Trainer
Mannschaften ->1. Mannschaft ->Torjägerliste
Mannschaften ->1. Mannschaft ->.......
Mannschaften ->1. Mannschaft ->.....

Mannschaften ->2. Mannschaft ->Trainer
Mannschaften ->2. Mannschaft ->Torjägerliste
Mannschaften ->2. Mannschaft ->........
Mannschaften ->2. Mannschaft ->......

Code: Alles auswählen

Bei der B-Jugend Page, gibt es nur eine Mannschaft:

Mannschaften
Mannschaften ->1. Mannschaft ->
Mannschaften ->1. Mannschaft ->Trainer
Mannschaften ->1. Mannschaft ->Torjägerliste
Mannschaften ->1. Mannschaft ->.......
Mannschaften ->1. Mannschaft ->.....

ich übergebe die Jugend immer über eine Session: $jugend
da steht dann entweder "c" oder "b" drin. Um die jugend zu wechseln, hab ich es so gemacht, dass man nur oben in der Adresse jugend=c bzw. jugend=b hinschreiben muss und das wird dann in die session gespeichert.

meine frage ist jetzt:

wie modifiziere ich das Modul Hauptnavigation, sodass bei C-Jugend erste und zweite Mannschaft angezeit wird und bei der B-Jugend page nur die 1. Mannschaft angezeigtz wird, oder dass bei der B-Jugend page sogar der Punkt "Mannschaften" wegfällt und der in "Mannschaft" umbenannt wird und dann shcon die unterpunkte wie "Trainer" und "Torjägerlistew" und sos weiter kommen.
also so:

Code: Alles auswählen

B-Jugend:
Mannschaft ->Trainer
Mannschaft ->Torjägerliste
Mannschaft ->.....(noch ein paar mehr unterkategorien)  
Mannschaft ->....(und noch mehr)

Vielleicht geht das ganze, indem ich eine spalte in irgendeiner Tabelle hinzufüge? Wo dann vielleicht "0" für beide "1" nur für C-Jugend und "2" nur für B-Jugend stehen würde.

Zb. "Kontakt" und "Impressum" und sowas alles, würde dann "0" haben.
Die "1. Mannschaft" würde auch "0" haben, weil es ja bei beiden kommen muss.
Die "2. Mannschaft" würde nur "1" haben, weil es ja nur bei der C-Jugernd angezeit werden soll

Verfasst: Fr 13. Aug 2004, 10:33
von emergence
versteh ich nicht ganz...

da müsstest du einzelnen kategorien eigenschaften zuweisen, damit die hauptnavigation weiss wann sie etwas anzeigen soll...

du speicherst in der session nur den wert b oder c
hmm... die hauptnavigation kann nicht wissen welche kategorie b oder c ist...

auf die schnelle ist das in der 4.4.x serie nicht machbar, ohne das du gröbere umbauarbeit im contenido core vornimmst...
in der 4.5.x serie gibts etwas was man entsprechend dafür hernehmen kann...
hab mich gerade mit etwas ähnlichem beschäftigt...
-> http://www.contenido.de/forum/viewtopic.php?t=5252

die andere möglichkeit einen zweiten kategoriebaum... und die einzelnen artikel mehrfach den kategorien zuweisen...

Verfasst: Fr 13. Aug 2004, 12:18
von alpi
ähhm.......kannst du mir sagen, wo das bei der 4.5 ist? Kann man da also bestimmte KAtegorien ausschaltet, falls ein bestimmter parameter übergeben wurde?
in meinem fall, wenn Jugend=b ist, blendet er die 2. Mannschaft aus?

und ich verstehe irgendwie deine andere möglichkeit nicht

Verfasst: Fr 13. Aug 2004, 13:28
von emergence
siehe das andere posting...
habe momentan keine 4.5.2alpha version installiert um nachsehen zu können, ob es schon verwendbar ist...
lt. timo ist es im cvs_head drinnen -> http://www.contenido.de/snapshots/
wäre möglich das dies noch in die 4.5.3 version einfliesen wird...

Verfasst: Fr 13. Aug 2004, 14:14
von alpi
ahh....ich glaube jetzt zab ich es verstanden.

ich flöße der Datenbank die infortmationen in die con_properties und dann weiß ich ja, je nachdem, ob da jetzt 0 (für beides), 1 (für C-Jugend) oder 2 (für B-Jugend) drin steht, ob er die entsprechende Kategorie anzeigt.

wie muss ich das in die Datenbank schreiben? so?.....

Code: Alles auswählen

cInclude ("classes", "class.properties.php");
$properties = new PropertyCollection();
$properties->setValue("idcat", $idcat, "visual", "jugend", "$jugend");
stimmt der ansatz so in etwa?
Wenn ja, wie müsste ich dann die Hauptnavigation ändern, sodass er wenn die jugend 1 ist, die zweite mannschaft nicht anzeigt?

Verfasst: Sa 14. Aug 2004, 09:54
von emergence
ich nehm mal ein beispiel aus dem aktuellen snapshot...

dort ist es zb nicht nötig
cInclude ("classes", "class.properties.php");
einzufügen, da es bei class.genericdb.php am beginn erledigt wird...

okay, sagen wir du hast 3 kategorien
idcat 10 , 20 , 30

du definierst auf irgendeiner seite 1 mal zb im layout oder im backend
<?
$properties = new PropertyCollection();
$properties->setValue("idcat", 10, "type", "jugend", "0");
$properties->setValue("idcat", 20, "type", "jugend", "1");
$properties->setValue("idcat", 30, "type", "jugend", "2");
?>

damit sind mal deine werte gesetzt...

die werte kannst du wieder auslesen mit zb:
$properties = new PropertyCollection();
$typestatus = $properties->getValue("idcat", $idcat, "type", "jugend");
echo $typestatus;

sollte für eine kategorie ein wert gesetzt sein, kannst du mit dem im modul weiter arbeiten....

entweder baust du diese abfrage beim array ein der erzeugt wird... oder bei der ausgabe des html....

Verfasst: So 15. Aug 2004, 14:15
von alpi
so, ersma danke für deine hilfe, ich habs jetzt soweit.

nur wie date ich jetzt auf die 4.5.2 up? gibts da irgendwo dokumentationen zu?

Verfasst: So 15. Aug 2004, 15:17
von emergence
alpi hat geschrieben:so, ersma danke für deine hilfe, ich habs jetzt soweit.
bitte...
alpi hat geschrieben:nur wie date ich jetzt auf die 4.5.2 up? gibts da irgendwo dokumentationen zu?
eine anleitung ? lies dir die readme.txt durch...

bevor du ein update machst solltest du es mit einer cleanen installation machen und dir die entsprechende funktionalität ansehen...

eine integration in die 4.4.x serie müsste eigentlich auch möglich sein...
-> class.properties.php einfach in deinen classes ordner kopieren...

und im modul mittels

cInclude ("classes", "class.properties.php");

einbinden....


nächster schritt:
cfg_sql.inc.php die zeile

Code: Alles auswählen

$cfg["tab"]["properties"]					   = $cfg['sql']['sqlprefix']."_properties";
hinzufügen....

dann brauchst du eigentlich nur mehr die entsprechende tabelle in der db... und die erhälts du wenn du in deiner upgrade.php folgendes hinzufügst...

Code: Alles auswählen

dbUpgradeTable($prefix."_properties", 'idproperty', 'int(10)', '', 'PRI', '0', '','');
dbUpgradeTable($prefix."_properties", 'idclient', 'int(10)', '', '', '0', '','');
dbUpgradeTable($prefix."_properties", 'itemtype', 'varchar(32)', '', '', '', '','');
dbUpgradeTable($prefix."_properties", 'itemid', 'varchar(255)', '', '', '', '','');
dbUpgradeTable($prefix."_properties", 'type', 'varchar(32)', '', '', '', '','');
dbUpgradeTable($prefix."_properties", 'name', 'varchar(32)', '', '', '', '','');
dbUpgradeTable($prefix."_properties", 'value', 'text', '', '', '', '','');
dbUpgradeTable($prefix."_properties", 'author', 'varchar(32)', '', '', '', '','');
dbUpgradeTable($prefix."_properties", 'created', 'datetime', '', '', '0000-00-00 00:00:00', '','');
dbUpgradeTable($prefix."_properties", 'modified', 'datetime', '', '', '0000-00-00 00:00:00', '','');
dbUpgradeTable($prefix."_properties", 'modifiedby', 'varchar(32)', '', '', '', '','');
nun brauchst du via setup nur mehr die option upgrade durchführen, und die tabelle sollte entsprechend in deiner db mit angelegt werden...

das schlimmst was dabei passieren könnte ist, dass die class.properties.php nicht richtig mit der genericdb zusammen arbeitet...

ein austauschen der class.genericdb.php empfehle ich keinesfalls bei der 4.4.x serie...

wie auch immer egal was du machst -> vorher alles sichern...
und
use on your own risk...

Verfasst: So 15. Aug 2004, 16:29
von alpi
ich habe alles so gemacht wie beschrieben. wenn ich jetzt jedoch mein frontend aufrufe, wird kein inhalt mehr angezeit.

im errorlog steht:

Code: Alles auswählen

[15-Aug-2004 17:18:19] PHP Fatal error:  Call to undefined function:  _setitemclass() in .....\class.properties.php on line 78
und in der class properties steht:

Code: Alles auswählen

class PropertyCollection extends ItemCollection
{
	var $client;
	
	/**
     * Constructor Function
     * @param none
     */
	function PropertyCollection ()
	{
		global $cfg, $client;
		
		$this->client = $client;
		
		parent::ItemCollection($cfg["tab"]["properties"], "idproperty");
		
		$this->_setItemClass("PropertyItem");  //####### <--- HIER is Zeile 78
	}

....... und so weiter .......
im Modul hauptnavigation habe ich folgendes:

Code: Alles auswählen

echo '<table cellspacing="0" cellpadding="0" border="0">';

foreach ($navitems as $key => $data) {

//cInclude ("classes", "class.properties.php");   //diese Zeile habe ich in der front_content.php
$properties = new PropertyCollection();
$typestatus = $properties->getValue("idcat", "$data[idcat]", "type", "jugend"); 
//$typestatus = 1;
if ($typestatus != 1)
{

}
else
{

    /* 1. Navigations Ebene */
    $tpl->reset();
    $tpl->set('d', 'NAME',  $data['name']);
    $tpl->set('d', 'TARGET', $data['target']);

     ....... und so weiter .......

}  else zu ende

Verfasst: So 15. Aug 2004, 16:33
von alpi
ich bins nochmal

ich habe gerade bei der 4.5 in der genericdb die funktion gefunden:

Code: Alles auswählen

    * _setItemClass: private method to set the accompanying item object.
	 * 
	 * @param string $classname specifies the classname
	 * @return none
     */		
	function _setItemClass ($classname)
	{
		if (class_exists($classname))
		{
			$this->_itemClass = $classname;
			$this->_itemClassInstance = new $classname;
		} else { 
			cWarning(__FILE__, __LINE__, "Could not instanciate class [$classname] for use with _setItemClass in class ".get_class($this));
		}
	}
kann ich die vielleicht einfach in die genericdb von der 4.4 kopieren?

Verfasst: So 15. Aug 2004, 16:37
von alpi
ähhm.......ich habs gerade gemacht. jetzt funzt alles. der Inhalt wird auch wieder angezeit und der Eintrag im Errorlog is auch nicht mehr da.

Is das so in Ordnung, oder kann das noch andere Auswirkungen haben?

Verfasst: So 15. Aug 2004, 16:42
von emergence
machs anders

-> $this->_setItemClass("PropertyItem");

nimm das mal raus....

Verfasst: So 15. Aug 2004, 16:43
von emergence
alpi hat geschrieben:Is das so in Ordnung, oder kann das noch andere Auswirkungen haben?
müsste okay sein...

happy testing...

Verfasst: So 15. Aug 2004, 16:57
von alpi
hab noch ne frage......was gibt er denn zurück wenn kein datensatz in der con_properties existiert?
und wie müsste die if-abfrage heißen? er soll nämlich jede Kategorie anzeigen, die nicht in der con_properties steht + die Datensätze für die entsprechende jugend.

Code: Alles auswählen

$properties = new PropertyCollection();
$typestatus = $properties->getValue("idcat", "$data[idcat]", "type", "jugend"); 
if ($typestatus != $jugend OR $typestatus == "0" OR $typestatus != false)
{

}
else
{

    /* 1. Navigations Ebene */
    $tpl->reset();
    $tpl->set('d', 'NAME',  $data['name']);
    $tpl->set('d', 'TARGET', $data['target']);
    .........blablabalbalbal

}  //else zu ende
in $jugend steht 0;1 oder 2.

Verfasst: So 15. Aug 2004, 17:14
von emergence
alpi hat geschrieben:hab noch ne frage......was gibt er denn zurück wenn kein datensatz in der con_properties existiert?
standard mäßig liefert getValue wenn nichts gefunden wird false zurück...
siehe class.properties.php
->
function getValue ($itemtype, $itemid, $type, $name, $default = false)
du kannst selbst auch den wert definieren der zurückgeliefert werden soll, wenn nichts gefunden wird.

zB:
$typestatus = $properties->getValue("idcat", "$data[idcat]", "type", "jugend", "0");
wird nichts gefunden hätte $typestatus den wert 0

die if abfrage wäre dann
if ($typestatus == 0) -> zeigt alle an die nicht definiert sind....

mit einem elseif würde ich die weitere behandlung vornehmen....
alles in eine zeile zu schreiben ist immer etwas kompliziert und fehleranfällig...

in der jeweiligen else if würde ich dann

if ($typestatus == $jugend) {
bla bla verwenden....
}

da kann dann fast nichts schief gehen...