Locator Modul 1.0

Black Widow
Beiträge: 174
Registriert: Mi 22. Okt 2003, 11:08
Kontaktdaten:

Locator Modul 1.0

Beitrag von Black Widow » Do 27. Nov 2003, 11:49

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!
Zuletzt geändert von Black Widow am Di 2. Dez 2003, 15:54, insgesamt 1-mal geändert.

gunwalt
Beiträge: 57
Registriert: Di 2. Sep 2003, 08:53
Wohnort: Erkrath
Kontaktdaten:

Beitrag von gunwalt » Fr 28. Nov 2003, 11:32

Hi,

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

eval Code in line 53.

Guntram
Netz: Contenido 4.42 läuft auf Apache/df-exts 1.1 (Unix) mod_ssl/2.8.15 OpenSSL/0.9.6k AuthPG/1.3 FrontPage/5.0.2.2510, MySQL server version 3.23.57-log, PHP 4.2.3 bei Domainfactory
Lokal: Contenido 4.42 läuft auf Apache/2.0.46 (Win32) mod_perl/1.99_10-dev Perl/v5.8.0 PHP/4.3.2 mod_ssl/2.0.46 OpenSSL/0.9.7b

Black Widow
Beiträge: 174
Registriert: Mi 22. Okt 2003, 11:08
Kontaktdaten:

Beitrag von Black Widow » Fr 28. Nov 2003, 12:13

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!

gunwalt
Beiträge: 57
Registriert: Di 2. Sep 2003, 08:53
Wohnort: Erkrath
Kontaktdaten:

Beitrag von gunwalt » Fr 28. Nov 2003, 13:04

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
Netz: Contenido 4.42 läuft auf Apache/df-exts 1.1 (Unix) mod_ssl/2.8.15 OpenSSL/0.9.6k AuthPG/1.3 FrontPage/5.0.2.2510, MySQL server version 3.23.57-log, PHP 4.2.3 bei Domainfactory
Lokal: Contenido 4.42 läuft auf Apache/2.0.46 (Win32) mod_perl/1.99_10-dev Perl/v5.8.0 PHP/4.3.2 mod_ssl/2.0.46 OpenSSL/0.9.7b

Black Widow
Beiträge: 174
Registriert: Mi 22. Okt 2003, 11:08
Kontaktdaten:

Beitrag von Black Widow » Fr 28. Nov 2003, 13:41

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!

kuchi
Beiträge: 222
Registriert: So 29. Jun 2003, 18:02
Wohnort: Neubrandenburg
Kontaktdaten:

Locator

Beitrag von kuchi » Fr 28. Nov 2003, 14:43

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 :?:

Black Widow
Beiträge: 174
Registriert: Mi 22. Okt 2003, 11:08
Kontaktdaten:

Beitrag von Black Widow » Fr 28. Nov 2003, 14:58

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!

kuchi
Beiträge: 222
Registriert: So 29. Jun 2003, 18:02
Wohnort: Neubrandenburg
Kontaktdaten:

Locator

Beitrag von kuchi » Fr 28. Nov 2003, 15:10

Danke Dir , funktioniert!


Gruß kuchi

Black Widow
Beiträge: 174
Registriert: Mi 22. Okt 2003, 11:08
Kontaktdaten:

Beitrag von Black Widow » Di 2. Dez 2003, 16:00

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

project gonzo
Beiträge: 115
Registriert: Di 25. Nov 2003, 16:47
Kontaktdaten:

danke

Beitrag von project gonzo » Sa 13. Dez 2003, 13:20

super modul

emergence
Beiträge: 10645
Registriert: Mo 28. Jul 2003, 12:49
Wohnort: Austria
Kontaktdaten:

Beitrag von emergence » Sa 13. Dez 2003, 14:11


Black Widow
Beiträge: 174
Registriert: Mi 22. Okt 2003, 11:08
Kontaktdaten:

Beitrag von Black Widow » Sa 13. Dez 2003, 15:05

@emergence:
Vielen Dank! Ich stöber ja oft genug durch Forum, aber das ist mir wohl entgangen ... :lol:

anjin san
Beiträge: 31
Registriert: Do 20. Mai 2004, 03:21
Kontaktdaten:

Re: Locator Modul 1.0

Beitrag von anjin san » Sa 22. Mai 2004, 23:20

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;}

Black Widow
Beiträge: 174
Registriert: Mi 22. Okt 2003, 11:08
Kontaktdaten:

Beitrag von Black Widow » So 23. Mai 2004, 01:34

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

anjin san
Beiträge: 31
Registriert: Do 20. Mai 2004, 03:21
Kontaktdaten:

Beitrag von anjin san » So 23. Mai 2004, 15:02

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|

Gesperrt