Seite 1 von 3

Locator Modul 1.0

Verfasst: Do 27. Nov 2003, 11:49
von Black Widow
Hi @ll!

Ich hab mal nen kleines (aber wie ich finde ganz nützliches) Modul geschrieben. Es zeigt den momentanen Standpunkt im Kategorienbaum an, also in der Art: Home/Punkt 1/Punkt 1.1 usw.
Dabei sind die Namen der Kategorien wieder Links darauf, um einfach wieder dorthin zurückzukommen!
Weiterhin kann man den Namen der Wurzel selber angeben oder, wie es bei den folgenden Kategorien auch ist, deren Kategorienamen anzeigen lassen.
Zuletzt lassen sich Ebenen angeben, die aus dem "Pfad" ausgeblendet werden sollen! Ich habe auf meiner Seite zum Beispiel eine Struktur:
Home
---Hauptnavigation
------Punkt 1
------Punkt 2
------...
---Servicenavigation
------Impressum
------AGB
------...
Dabei möcht ich z.B. die 2. Ebene ausblenden, da diese ja nur der Seitenorganisation dient und kein eigener Strukturpunkt ist, der auch angezeigt werden soll!

Hier ist der Code:

Output

Code: Alles auswählen

<?php
/****************************************************
** Contenido 4.4.x Modul
** OUTPUT
**
** Name:        Locator
** Autor:       Timo Goedel
** Version:     1.0
** Erstellt:    19.11.2003
** Modifiziert: 20.11.2003
*****************************************************/

$text = "Sie befinden sich hier: ";		//Dies ist der Text, der vor der Pfadausgabe dargestellt wird!
$rootName = "Home";						//Dies ist der Name, der für die Wurzel des Baumes ausgegeben wird.
										//Ist $rootName = "", dann wird der Kategoriename ausgegeben!
$filter = array();						//Alle Ebenen (von 1 (=Root) bis x) des Kategorienbaumes, die in
										//diesem Array eingetragen sind, werden bei der Ausgabe ausgeblendet!
										//z.B. $filter = array(1,3); => Dann wird die Wurzel und die zweite
										//Ebene darunter NICHT angezeigt!

$kategorien = array();
$pfad = array();
$db_Connect = new DB_Contenido;

$sql_kategorien = "SELECT a.idcat, a.parentid, b.name
				   FROM   ".$cfg["tab"]["cat"]." a,
						  ".$cfg["tab"]["cat_lang"]." b
				   WHERE  a.idcat = b.idcat AND
						  b.idlang = ".$lang." AND
						  a.idclient = ".$client."
				   ORDER BY a.idcat;";

//Alle Kategorien mit ihrer Elternkategorie und Namen im Array speichern!
$db_Connect->query($sql_kategorien);
while ($db_Connect->next_record())
{
	$kategorien[$db_Connect->f('idcat')] = array($db_Connect->f('parentid'), $db_Connect->f('name'));
}


//Pfad suchen (von 0 (=aktuelle Kategorie) bis x (=Root))!
$aktKat = $idcat;
do
{
	$pfad[] = $aktKat;
	$aktKat = $kategorien[$aktKat][0];
}
while ($aktKat != 0);


//Pfad mit Links ausgeben!
if ($rootName == "")
{
	$lastKat = $pfad[count($pfad)-1];
	$rootName = $kategorien[$lastKat][1];
}
echo ("<span class=\"Locator\">");
echo ($text);
if (!in_array(1, $filter))
	echo ("<a href=\"".$sess->url('front_content.php?idcat='.$pfad[count($pfad)-1])."\"onMouseover=\"status='".$rootName."';return true;\" onMouseout=\"status='';return true;\">".$rootName."</a>");

for ($i = count($pfad)-2; $i >= 0; $i--)
	if (!in_array(count($pfad)-$i, $filter))
	{
		$aktKatID = $pfad[$i];
		echo ("/<a href=\"".$sess->url('front_content.php?idcat='.$aktKatID)."\"onMouseover=\"status='".$kategorien[$aktKatID][1]."';return true;\" onMouseout=\"status='';return true;\">".$kategorien[$aktKatID][1]."</a>");
	}

echo ("</span>");
?>
Die Ausgabe befindet sich in einem <span>-Tag der Klasse "Locator". Somit kann das Design über CSS festgelegt werden, z.B. mit folgendem Selektor:

Code: Alles auswählen

.Locator {						font-family:Verdana, Arial;
								font-size:9px;
								color:#7B7B7B;}

.Locator a:link {				color:#7B7B7B;
								text-decoration:underline;}

.Locator a:visited {			color:#7B7B7B;
								text-decoration:underline;}

.Locator a:hover {				color:#0055AA;
								text-decoration:underline;}

.Locator a:active {				color:#0055AA;
								text-decoration:underline;}

.Locator a:focus {				color:#0055AA;
								text-decoration:underline;}
Ich hoffe, Ihr könnt es vielleicht gebrauchen! :lol:
Viele Grüße,

Black Widow

@die Administratoren: :P
Ich wollte das Modul auch auf die Contenido-Homepage uploaden, aber unter dem Pulldownmenü für die zu verwendende Contenido-Version ist 4.3b noch letzter Stand! Vielleicht könnt Ihr da gerade mal die 4.4er <option> hinzufügen! DANKE!

Verfasst: Fr 28. Nov 2003, 11:32
von gunwalt
Hi,

danke für das Modul. Gibt aber im Outpubereich eine Fehlermeldung an.

eval Code in line 53.

Guntram

Verfasst: Fr 28. Nov 2003, 12:13
von Black Widow
Hi!

Komisch, bei mir läufts. Schau mal, ob Du einen roten oder einen grünen Kreis angezeigt bekommst, wenn Du den Code im Backend eingefügt hast! Wenn er rot ist, ist es ein Kompilierungsfehler. Vielleicht ne Zeile vergessen zu kopieren oder so ...

Ach so ... und Du musst am Ende nach dem ?> mit einem ENTER abschließen!

Verfasst: Fr 28. Nov 2003, 13:04
von gunwalt
Hi,

wird anscheinend falsch kompiliert und erzeugt folgende Fehlermeldung. Auch neues Kopieren hat keinen Einfluss

Guntram

[28-Nov-2003 12:59:15] PHP Parse error: parse error, expecting `']'' in /kunden/imid-multimedia.de/_imid-multimedia/contenido/contenido/includes/functions.mod.php(155) : eval()'d code on line 53
[28-Nov-2003 12:59:23] PHP Parse error: parse error, expecting `']'' in /kunden/imid-multimedia.de/_imid-multimedia/contenido/contenido/includes/functions.mod.php(155) : eval()'d code on line 53
[28-Nov-2003 12:59:24] PHP Parse error: parse error in /kunden/imid-multimedia.de/_imid-multimedia/contenido/contenido/includes/functions.mod.php(155) : eval()'d code on line 10

Verfasst: Fr 28. Nov 2003, 13:41
von Black Widow
Also ich hab den Code eben mal hier aus dem Posting kopiert und bei mir eingefügt -> funktioniert!
Du hast aber den Code ins Output kopiert und nicht ins Input, oder? Und das CSS unten drunter (das mit dem .Locator) darf natürlich auch nicht mit in das Modul! Das musst Du in Deinem Layout mit einbinden!

Locator

Verfasst: Fr 28. Nov 2003, 14:43
von kuchi
Hi,

habe das Modul eingefügt. Wie kann ich es dahingehend verändern, daß die Hauptkategorie(Hauptnavigation) kein Link ist;

Meine Anzeige
Home|Home|...
|
|
/\Dies soll nicht als Link angezeigt werden.

Gruß kuchi :?:

Verfasst: Fr 28. Nov 2003, 14:58
von Black Widow
Du kannst im Code im Array $filter = array(); die Ebenen eintragen, die ausgeblendet werden sollen!
Wenn Du also die erste Ebene ausblenden willst (wie in deinem Fall), dann schreibst du da ne 1 rein, also $filter = array(1);
Für weitere Ebene, einfach dazuschreiben z.B. $filter = array(1,3,4); oder so ...

Gruß,

Black Widow

@gunwalt: Siehst Du, bei kuchi läufts, mußt Dich wahrscheinlich irgendwo verhaspelt haben!

Locator

Verfasst: Fr 28. Nov 2003, 15:10
von kuchi
Danke Dir , funktioniert!


Gruß kuchi

Verfasst: Di 2. Dez 2003, 16:00
von Black Widow
So, ich habe jetzt gemerkt, warum es bei gunwalt nicht funktionierte!
Aus einem mir unerklärlichem Grunde erlaubte Contenido 4.4.1 folgendes Arrayelement:

Code: Alles auswählen

$kategorien[$pfad[count($pfad)-1]][1]
...Contenido 4.4.2 aber nicht!?!?! :?:

Komischerweiser (obwohl sich doch die PHP-Version gar nicht ändert!!!) wird gerade diese Verschachtelung plötzlich als Systaxfehler erkannt!

Wenn ich genau diese Schachtelung einfach auflöse in:

Code: Alles auswählen

$aktKat = $pfad[count($pfad)-1];
$rootName = $kategorien[$aktKat][1];
... dann funktioniert es!?!?!

Kann mir irgendeiner erklären, warum das so ist???

Aber wie auch immer, das Modul funktioniert jetzt auch mit 4.4.2

danke

Verfasst: Sa 13. Dez 2003, 13:20
von project gonzo
super modul

Verfasst: Sa 13. Dez 2003, 14:11
von emergence

Verfasst: Sa 13. Dez 2003, 15:05
von Black Widow
@emergence:
Vielen Dank! Ich stöber ja oft genug durch Forum, aber das ist mir wohl entgangen ... :lol:

Re: Locator Modul 1.0

Verfasst: Sa 22. Mai 2004, 23:20
von anjin san
Betrifft Stildefinitionen dieses Beitrags:
Müsste es nicht heissen:
.Locator { font-family:Verdana, Arial;
font-size:9px;
color:#7B7B7B;}

.Locator a:link { color:#7B7B7B;
text-decoration:underline;}

.Locator a:visited { color:#7B7B7B;
text-decoration:underline;}

.Locator a:hover { color:#0055AA;
text-decoration:underline;}

.Locator a:active { color:#0055AA;
text-decoration:underline;}

.Locator a:focus { color:#0055AA;
text-decoration:underline;}

Verfasst: So 23. Mai 2004, 01:34
von Black Widow
Hi Anjin San,

öhhm, entweder bin ich blind, oder ich weiß es auch nicht ... Auf jeden Fall sehe ich keinen Unterschied zwischen Deinem gepostetem und meinem CSS?
Was hast Du denn geändert, bzw. was denkst Du denn sei falsch??

Gruß,
Black Widow

Verfasst: So 23. Mai 2004, 15:02
von anjin san
Hi,
Ups kleiner Fehler unterlaufen.
Habe wohl Fehler bei copy and paste gemacht.
Hier die richtige Syntax (laut gscheitem CSS Buch )
/* Brotkrumen Navigation */
.locator { color: #AE6B00;
font-family: Arial, Helvetica, sans-serif;
font-size:11px; }

A.locator:link {font-family:arial, helvetica, geneva, sans-serif;
font-size: 10px;
color:#7B7B7B;
font-weight: bold;
text-decoration:none;}

A.locator:visited {font-family:arial, helvetica, geneva, sans-serif;
color: #AE6B00;
font-size: 10px;
font-weight: bold;
text-decoration:none;}

A.locator:hover { font-family:arial, helvetica, geneva, sans-serif;
font-size: 10px;
font-weight: bold;
text-decoration:underline;
color: #AE6B00; }

A.locator:active font-family:arial, helvetica, geneva, sans-serif;
font-size: 10px;
font-weight: bold;
text-decoration:underline;
color: #AE6B00; }

A.locator:focus font-family:arial, helvetica, geneva, sans-serif;
font-size: 10px;
font-weight: bold;
text-decoration:underline;
color: #AE6B00; }
Statt locator.A heisst es A.locator

Die Navigation wurde bei mir ausserdem immer untereinander
dargestellt und nicht nebeneinander.
anstatt
zb.: Home / Ebene1 /ebene2
war es immer: Home /
Ebene 1 /
ebene2
Deshalb habe ich die Ausgabe des Scripts in eine Tabelle gelegt,
wie folgt:
echo ("<table height =\"25px\"><tr>");
echo ("<td class=\"locator\">");
echo ($text);
echo ("</td>");
if (!in_array(1, $filter))
echo ("<td ><a class=\"locator\" href=\"".$sess->url('front_content.php?idcat='.$pfad[count($pfad)-1])."\"onMouseover=\"status='".$rootName."';return true;\" onMouseout=\"status='';return true;\">".$rootName."</a></td>");
echo ("<td class=\"locator\">|</td>");
for ($i = count($pfad)-2; $i >= 0; $i--)
if (!in_array(count($pfad)-$i, $filter))
{
$aktKatID = $pfad[$i];
echo ("<td><a class=\"locator\" href=\"".$sess->url('front_content.php?idcat='.$aktKatID)."\"onMouseover=\"status='".$kategorien[$aktKatID][1]."';return true;\" onMouseout=\"status='';return true;\">".$kategorien[$aktKatID][1]."</a></td>");
}
echo ("<td class=\"locator\">|</td>");
echo ("</tr></table>");
?>
Da ich ziemlicher PHP Rookie bin hoffe ich, dass da nix falsch ist.
Funktionieren tuts soweit, bis auf die Ausnahme, dass ich das
Trennzeichen zwar zwischen 1. und 2. Ebene habe , aber nicht in der Unterebene.
Beispiel So siehts aus: Home | Ebene 1 | ebene2 unter2|