| PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Post your PHP questions here! |
 |
|

20-10-2010, 19:33
|
|
schischi
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 66
|
|
Menü - Link aktivieren
Hallo,
das Menü:
PHP-Code:
error_reporting(E_ALL);
$s = basename($_SERVER['SCRIPT_NAME']); //basename extrahiert den Namen einer Datei aus einem Pfad echo OMList($s); function OMList($site) { $site = str_replace('', '',$site);
$menu = 'language/de.csv'; $cr = chr(13).chr(10); $nav = '<ul class="listmenu">'.$cr; $li = 0; $dat = file($menu);
for($i=0; $i<count($dat); $i++) { $x = explode('|',trim($dat[$i])); if($x[0]) { $link = $x[0];
$s = $x[1]; $level = 0; while (strpos($link,'-') === 0) { $level++; $link = substr($link,1); } if($level < $li+2) { if($level <= $li && $i>0) { $nav .= '</li>'.$cr; } if($level > $li) { $li++; $nav .= '<ul>'.$cr; } while ($level < $li) { $li--; $nav .= str_repeat(' ', $li+1).'</ul></li>'.$cr; } $nav .= str_repeat(' ', $li+1);
$seite = $site; if($s == $seite) {
$ul = $li; while(($p = strripos($nav, '<ul>')) && $ul) { $ul--; $plink = strripos(substr($nav,1,$p),'<a href=');
$nav = substr($nav, 0, $p+3).' title="'.$link.'" class="active"'.substr($nav, $p+3); } $nav .= '<li class="active"><span>'.$link.'</span>'; } else { $nav .= '<li><a href="'; $nav .= ''. $s .'" title="'.$link.'">'.$link.'</a>'; } } } } $nav .= '</li>'.$cr; while ($li) { $li--; $nav .= str_repeat(' ', $li+1).'</ul></li>'.$cr; } $nav .= '</ul>'.$cr; return $nav; }
aktiviert mir momentan nur den Link, dieser angeklickt ist:
HTML-Code:
<ul class="listmenu">
<li>
<a href="xxx" title="xxx">xxx</a>
<ul title="xxx" class="active">
<li>
<a href="xxx" title="xxx">xxx</a></li>
<li class="active"><span>xxx</span></li>
</ul></li>
</ul>
wünschenswert wäre aber diese Form, dass die Oberkatergorie auch aktiviert ist:
HTML-Code:
<ul class="listmenu">
<li> <ul title="xxx" class="active">
<a href="xxx" title="xxx">xxx</a>
<li>
<a href="xxx" title="xxx">xxx</a></li>
<li class="active"><span>xxx</span></li>
</ul></li>
</ul>
bitte um Hilfe.
vielen Dank im voraus
schischi
|

20-10-2010, 20:14
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.188
|
|
Hast du eine Frage? Wo liegt dein Problem?
|

20-10-2010, 20:47
|
|
schischi
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 66
|
|
@tobiaZ Hab ich mich undeutlich ausgedrückt??
bei dem Menü, werden nur einzelne Links aktiviert, ich hätte gerne das auch
die Kategorie darüber aktiviert ist.
z. B.:
<aktiviert>Rockoper
Hamlet
<aktiviert>Faust
ist das verständlicher?
danke
|

20-10-2010, 20:52
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Hallo,
ich habe es zwar verstanden (TobiaZ sicherlich auch), aber es scheint, als verlangst du von deinen Helfern, sich durch deinen unkommentierten und unformatierten (Einrückungen!) Code zu quälen und dir darin den Fehler zu korrigieren. Das wird nicht passieren.
Wenn du konkretere Fragen stellst und etwas übersichtlicheren, nachvollziehbaren Code präsentierst, könnte das schon anders aussehen.
Gruß,
Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

20-10-2010, 20:57
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.188
|
|
Ack
|

20-10-2010, 23:55
|
|
schischi
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 66
|
|
@AmicaNoctis u. @tobiaZ entschuldigung für den schlecht formatierten code! ich hoffe, so sieht er leserlicher aus.
PHP-Code:
$s = basename($_SERVER['SCRIPT_NAME']); //basename extrahiert den Namen einer Datei aus einem Pfad echo OMList($s);
function OMList($site) { // wer oder was ist $site? $site = str_replace('.php','',$site); //csv datei mit den menuelinks $menu = 'language/de.csv'; $cr = chr(13).chr(10); $nav = '<ul class="listmenu">'.$cr; $li = 0; $dat = file($menu);
for($i=0; $i<count($dat); $i++) { $x = explode('|',trim($dat[$i])); if($x[0]) { $link = $x[0]; $s = $x[1]; $level = 0; while (strpos($link,'-') === 0) { $level++; $link = substr($link,1); // var_dump($link); gibt hier die Unterkategorien aus } if($level < $li+2) { if($level <= $li && $i>0) { $nav .= '</li>'.$cr; } if($level > $li) { $li++; $nav .= '<ul>'.$cr; } while ($level < $li) { $li--; $nav .= str_repeat(' ', $li+1).'</ul></li>'.$cr; } $nav .= str_repeat(' ', $li+1); if($s == $site) { $ul = $li; while(($p = strripos($nav, '<ul>')) && $ul) { $ul--; $plink = strripos(substr($nav,0,$p),'<a href='); $nav = substr($nav, 0, $p+3).' title="'.$link.'" class="active"'.substr($nav, $p+3); } $nav .= '<li class="active"><span>'.$link.'</span>'; } else { $nav .= '<li><a href="';
$nav .= ''. $s .'.php" title="'.$link.'">'.$link.'</a>'; // var_dump($s); gibt den href namen aus // var_dump($link); gibt den link namen aus } } } } $nav .= '</li>'.$cr; while ($li) { $li--; $nav .= str_repeat(' ', $li+1).'</ul></li>'.$cr; } $nav .= '</ul>'.$cr; return $nav; }
mit dem kommentieren hab ich noch Probleme, hoffe es ist entschuldigt!
Wie kann man nun das Script ändern, dass wenn eine Kategorie eine Unterkategorie vorweist beides aktiviert wird?
|

21-10-2010, 00:24
|
AmicaNoctis
 Moderatorin
|
|
Registriert seit: Jul 2009
Beiträge: 5.550
|
|
Wie sieht denn diese CSV-Datei aus? Ich entnehme dem Code, dass da irgendwie mit Bindestrichen gearbeitet wird, um die Tiefe der Levels zu kennzeichnen.
Aber auch das ist schon wieder so ein Punkt. Warum bist du nicht in der Lage, solche essentiellen Informationen von alleine darzulegen, statt uns hier sinnlos ins Blaue raten zu lassen?
Statt den Code zu präsentieren, wäre es sinnvoller, den Algorithmus dahinter zu erklären, dann kann man viel leichter Denkfehler darin ausmachen und eliminieren und natürlich vor allem erstmal das Prinzip erkennen, das sich dahinter verbirgt oder mal verbergen soll.
Es ist halt schwer, aus mittelschlechtem Code rauszulesen, wofür er da ist, vor allem ohne Kenntnis der Daten, auf denen er operiert. Hoffe, das ist jetzt angekommen.
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt? 
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke! 
|

21-10-2010, 04:20
|
|
schischi
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 66
|
|
@AmicaNoctis, das ist richtig es wird mit Spiegelstrich gearbeitet und sorry wegen den fehlenden Daten um es zu vereinfachen! werde mich bemühen in diesem Forum hilfreicher zu sein.
Jede Menüebene ist mit einem Spiegelstrich gekennzeichnet
Ebene 0 ist die Wurzel und hat keinen Spiegelstrich
- Ebene 1 hat einen (1) Spiegelstrich und ist die 1. Unterebene
Die csv:
Code:
Aktuell|aktuell.php
Home|home.php
Rockoper|javascript:void(0)
-Faust|faust.php
-Hamlet|hamlet.php
Geändert von schischi (21-10-2010 um 04:24 Uhr)
|

21-10-2010, 09:13
|
|
sallow2001
Registrierter Benutzer
|
|
Registriert seit: Oct 2010
Beiträge: 63
|
|
Hallo.
Ich habe mir die Mühe gemacht, mir den Code anzusehen, den CSS-Bereich zu erweitern (sonst sieht man nämlich gar nix) und auch eine CSV mit dem Menü habe ich erstellt.
Zuerst einmal funktioniert das so schon mal gar nicht, denn so wie die CSV aufgebaut ist, ist es nicht mit Deinem Skript "kompatibel". Durch die Zeile
PHP-Code:
$nav .= ''. $s .'.php" title="'.$link.'">'.$link.'</a>';
erhält der jew. Skriptname immer noch ein ".php" ans Ende gepappt, wodurch sich Namen wie faust.php.php und hamlet.php.php ergeben.
Also muss das ".php" weg.
Das reicht aber nicht, denn durch diese Änderung funktioniert
PHP-Code:
if($s == $site) {
nicht mehr, denn in $site steht nun der Skriptname ohne ".php". Deshalb hängen wir's an
PHP-Code:
if($s == $site . ".php") {
und das Skript funktioniert erst einmal so, wie Du es beschrieben hast.
Ich vermute mal, dass Deine CSV anders aufgebaut ist oder Dein Skript schon anders aussieht, als Du's hier beschrieben hast, denn ansonsten hättest Du schon viel früher gemerkt, dass etwas grundsätzlich fehlerhaft ist.
Wie dem auch sei.
*phew*
Nun aber zu Deinem eigentlichen Problem, denn das habe ich erst verstanden, als ich das Skript korrekt ausführen konnte und gesehen habe, was überhaupt passiert.
Das zeigt (uns da muss ich den MODs Recht geben), dass man zwar versuchen muss, den prüfenden Quellcode so klein wie möglich zu halten ("Auf den Punkt bringen!"), aber trotzdem alles mitliefern muss, damit das jew. Skript überhaupt startbar ist und der Tester/Helfer das sieht, was Du siehst.
So. Das Problem ist, dass bspw. beim Klick auf den Menüpunkt "Hamlet" der HTML-Code für die Kategorie (hier: "Rockoper") bereits erstellt wurde.
Die Schwierigkeit liegt also darin, nachträglich den Code zu ändern. Es gibt nun zwei Möglichkeiten, wie man's machen könnte:
1. Möglichkeit
An der Stelle, an der Du erkennst, dass Du eine Kategorie abarbeitest, fügst Du dem Link einen Platzhalter hinzu. (bspw. %CSS%)
Kommst Du nun in den Block, in dem
PHP-Code:
if($s == $site . ".php") {
gegriffen hat, ersetzt Du %CSS% durch die CSS-Anweisung, also bspw. class="active".
Am Ende des Skripts (idealerweise direkt vor der Ausgabe) ersetzt Du alle übrig gebliebenen Platzhalter durch "":
PHP-Code:
$nav = str_replace("%CSS%", "", $nav);
2. Möglichkeit
Du fängst in der Datei nicht oben an, sondern unten. Sobald Du erkennst, dass das aktuelle Skript das ist, das auch im Menü aktiviert ist, setzt Du Dir eine Markierung (bspw. $active_kat = TRUE) und fügst beim Erstellen der jew. Kategorie den bereits genannten CSS-Code ein, indem Du den Zustand von $active_kat abfragst. (Nicht vergessen, $active_kat wieder auf FALSE zu setzen!)
Ich hoffe, ich konnte Dir helfen. Du kannst ja darüber berichten, ob (und wie) Dein Menü läuft...
cya
|

21-10-2010, 14:04
|
|
schischi
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 66
|
|
@sallow2001, ein dickes Lob an dich, dass du dir soviel Mühe machst  .
ich hab das menü mal soweit gebracht um dies online(die seite selbst ist noch in process) zu stellen, dennoch hab ich das Problem mit dem aktivieren, hab aber auch noch nicht deine 2 Möglichkeiten angewendet!
Ist ja nur zum besseren Verständnis.
danke nochmal
schischi
Geändert von schischi (21-10-2010 um 17:54 Uhr)
|

21-10-2010, 14:11
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.188
|
|
Zitat:
|
dennoch hab ich das Problem mit dem aktivieren,
|
Welches könnte das nun schon wieder sein? *rat*
|

21-10-2010, 14:17
|
|
schischi
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 66
|
|
@TobiaZ immernoch das gleiche siehe Nachricht #3!
wusste nicht, dass man das immer wieder hinzuschreiben muss, da das Thema schon so heisst.
|

21-10-2010, 14:26
|
TobiaZ
 Moderator
|
|
Registriert seit: Jan 2001
Ort: MUC und MGL, Germany
Beiträge: 34.188
|
|
Nochmals: Wir lösen hier konkrete Probleme! sallow2001 hat sich viel mühe gegeben und dir eine recht anschauliche Lösung konkret auf dein Vorhaben geschneidert. Du kannst sie nicht umsetzen, das habe ich verstanden, woran du nun konkret scheiterst, was du bisher versucht hast, etc. kann ich leider nicht erkennen. Deshalb habe ich abermals konkret nachgefragt, woran du scheiterst.
Ich werd mich erstmal aus dem Aktiven ausklinken, wenn der Thread keine Fortschritte macht, wird er nachträglich nach Projekthilfe verschoben, dort kannst du auch erwarten, dass jemand den Code für dich schreibt.
|

21-10-2010, 17:49
|
|
schischi
Registrierter Benutzer
|
|
Registriert seit: Oct 2009
Beiträge: 66
|
|
Nun hab ich beim Urheber des Scriptes nachgefragt und dieser erlaubt mir leider nicht etwas am Code zu ändern, man tut mir das leid um swallow2001, der sich so viel Mühe gegeben hat. Ich bitte vielmals um Entschuldigung.
|

21-10-2010, 20:19
|
Kropff
  Administrator
|
|
Registriert seit: Mar 2002
Ort: Köln
Beiträge: 11.308
|
|
Zitat:
Zitat von schischi
Nun hab ich beim Urheber des Scriptes nachgefragt und dieser erlaubt mir leider nicht etwas am Code zu ändern, man tut mir das leid um swallow2001, der sich so viel Mühe gegeben hat. Ich bitte vielmals um Entschuldigung.
|
OffTopic: Darf man erfahren, wer das ist? Falls der mal hier Forum um Hilfe bittet.
Peter
__________________
Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
Meine Seite
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| Thema bewerten |
|
|
Forumregeln
|
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.
HTML-Code ist aus.
|
|
|
|
PHP News
|