Probleme mit dynamischen Menü in php

  • #1
T

Tom_01

Guest
Hallo,

ich will meine Navigation von meiner Seite zentral in einer Datei verwalten.
Problem ist, dass meine php-kenntnisse eher gering sind.

hab so ein menü auf der seite gefunden. gefällt mir
auch sehr gut, nur komm ich mit der anleitung nicht so ganz klar.

hab das dort genannte array an meine navigation angepasst, aber was nun?

beschreibung ist hier zu finden, aber für mich nicht umsetzbar:

fragen:

- als was speichere ich das array ab? wie im beispiel als entries.inc ?

- wo füge ich folgenden code ein und welche zeichen fehlen unter umständen noch, weil bei mir bleibt alles weiß, wenn ich da
in die index einfüge
include('menu.php');
$menü = new VMenu;
// Hier wird die Instanz erzeugt.
$menü->value('entries', $eintrage);
// Hier wird das Array an die Klasse übergeben.

und das hier:
echo $menü->menu();


kann mir evtl. jemand behilflich sein, wie ich was in welche datei abspeichere?!

danke schon mal...
 
  • #2
Hallo,

liegt die menu.php mit in dem Verzeichnis wo die Datei ist, in der du das einbinden willst?

Statt $menü würde ich lieber eine Variable ohne Umlaute verwenden, z.B. $menu

echo $menü->menu();
hast du aber nicht in Anführungszeichen stehen?


Dein Menü-Array muß du der Variable zuweisen, die der Funktion value() übergeben wird, in deinem Beispiel ist es die Variable $eintrage, also z.B.:

Code:
<?php
$eintrage = array ( array (->href' =>->',->text' =>->Startseite',->title' =>->Zurück zur Startseite' ), array (->href' =>->vmenue',->text' =>-><strong class=vmenue>VMenü</strong>',->title' =>->Das <strong class=vmenue>VMenü</strong>, ein Script...', array (->href' =>->dokumentation',->text' =>->Dokumentation',->title' =>->Hier beschreibe ich,...', ), ),->href' =>->download',->text' =>->Download',->title' =>->Download der verschiedenen Versionen', ), ), ); //Beispiel-Menü aus der Dokumentation.

require('menu.php'); // Menü einbinden
$menu = new VMenu; // Hier wird die Instanz erzeugt.
$menu->value('entries', $eintrage); // Hier wird das Array an die Klasse übergeben.

echo $menu->menu(); // Hier wird das Menü ausgegebn
?>
 
  • #3
hi Björn,

danke schon mal für deine antwort.
also ich hab jetzt folgendes gemacht, da ich ja das menü zentral verwalten will.

das array hab ich in eine extra datei gelegt: menu.inc.php

in die index hab ich dann dies eingebaut:

<?
include('menu.php');
include('menu.inc.php');
$menu = new VMenu;
// Hier wird die Instanz erzeugt.
$menu->value('entries', $eintrage);
// Hier wird das Array an die Klasse übergeben.

echo $menu->menu();
?>

jetzt werden zumindest schon mal die links angezeigt, aber funktionieren noch nicht so ganz. muss ich nochmal schaun.
ich komme nur noch nicht so wirklich mit dem inhalt der menu.php klar. bei fragen würde ich gern nochmal auf dich zukommen.

bin zumindest schon mal ein großes stückchen weiter.

danke dafür :)
 
  • #4
hab nun schon ne weile probiert, aber irgendwas stimmt mit den pfaden nicht.

ich habe alle dateien in einem verzeichnis, also müsste ich doch eigentlich keine pfade angeben.
wenn ich allerdings über xamp die seite mir anzeigen lasse, so erscheint bei der index alles, auch
die links des menüs.

wenn ich jedoch über einen link drüber gehe, so will der die file eine ebene höher öffnen.
so sollte es sein:



und so siehts aus, wenn ich über den link startseite (oder andere) gehe:




hier nochmal ein kleiner ausschnitt vom array (muss ich den pfad von href ändern?):
<?php
$entries = array (
array (
'href' =>->index.php',
'text' =>->Startseite',
'title' =>->Zurück zur Startseite'
),
 
  • #5
das problem ist, wenn ich den pfad ändere mit /testdir/
dann haut gar nichts mehr hin, die CSS-file wird ignoriert, weil
der pfad ja auch nicht mehr stimmt. *arg*
 
  • #6
also für die erste menü-ebene hab ich das mit dem pfad hinbekommen. da ist in der menu.php die path-angabe gewesen.

jetzt such ich gerade die anweisung für die submenüs...ich würde mal nen code-teil posten, vielleicht seht ihr den fehler.

wie gesagt, alle dateien sind in einem verzeichnis untergebracht. wenn ich auf ein link klicke und die sublinks gehen auf, dann wird unten im browser der link so dargestellt, was natürlich nicht geht:

http:/localhost/verzeichnis/datei1.phpdatei2.php ....es sollte also nur datei2.php angezeigt werden. wie löscht man dort dir datei1.php?

vielleicht blickt ihr hier durch, ich hoffe der code reicht.
function menu($path = '', $first_run = true) { /**zwischen den zwei ' hab ich ein / entnommen
if (func_num_args()>2) {
$entries = func_get_arg(2);
}
else {
$entries = $this->entries;
}
$ul = $this->menu_container;
$li = $this->menu_entry;
$em = $this->menu_emphasize;
$self = $this->self;
$output =-><'.$ul.($first_run ?-> id='.$this->menu_id.'' :->').'>';
foreach ($entries as $key=>$entry) {
if (!is_integer($key)) {
continue;
}
if (empty($entry['href'])) {
$href = $path;
}
else {
$href = $path.$entry['href'].''; /**zwischen den zwei ' hab ich ein / entnommen
}
$length = strpos(substr($href, 1),'/');
$haskids = (isset($entry[0]) and
strpos($self,$href) !== false and
substr($self,0,$length) == substr($href,0,$length)
) ? true:false;
$output .=-><'.$li;
if ($haskids and !empty($this->is_open_class))
$output .=-> class='.$this->is_open_class.'';
$output .=->>';

if ($self == $href) {
$output .=-><'.$em.(empty($entry['title']) ?->' :-> title='.$entry['title'].'->).'>'.
$entry['text'].'</'.$em.'>';
}
else {
if (empty($entry['title'])) {
if ($haskids and !empty($this->is_open_emphasize))
$output .=-><'.$this->is_open_emphasize.'>';
$output .=-><a href='.$href.'>'.$entry['text'].'</a>';
if ($haskids and !empty($this->is_open_emphasize))
$output .=-></'.$this->is_open_emphasize.'>';
}
else {
if ($haskids and !empty($this->is_open_emphasize))
$output .=-><'.$this->is_open_emphasize.'>';
$output .=-><a href='.$href.' title='.$entry['title'].'>'.$entry['text'].'</a>';
if ($haskids and !empty($this->is_open_emphasize))
$output .=-></'.$this->is_open_emphasize.'>';
}
}
if (isset($entry[0]) and
strpos($self,$href) !== false and
substr($self,0,$length) == substr($href,0,$length)
) {
$output .= $this->menu($href, false, $entry);
}
$output .=-></'.$li.'>';
}
$output .=-></'.$ul.'>';
if ($first_run)
return $this->xmlformat($output);
return $output;
}
 
  • #7
Also wird ich das sehe ist hat jede Seite eine eigene Datei.
Kannst du nicht das Menü direkt in der Menu.php bauen?

Ich weis das der Sinn in PHP besteht dynamischen Code
zu bauen aber manchmal sind statische Inhalte einfacher.

Muss es denn wirklich ein Array sein?

Nun gut.
Wenn es so sein muss...

so würde ich es ungefähr machen wenn ich so ein Array im Array benutze:

Code:
<?php

$eintrage = array (
		array (->href' =>->/index.php', ->text' =>->Startseite', ->title' =>->Zurück zur Startseite' ),
		array (->href' =>->/testdir/vmenue.php', ->text' =>->VMenü', 	'title' =>->Das VMenü'),
		array (->href' =>->/dokumentation.php', ->text' =>->Dokumentation', ->title' =>->Hier beschreibe ich,...' )
			);

foreach($eintrage as $aeintrage) {
   echo <a href='.$aeintrage['href'].' title='.$aeintrage['title'].'>.$aeintrage['text'].</a><br/>\n;
 }

?>

Falls es dir aufgefallen ist habe ich im href immer ein / vor gesetzt das heist
das er immer vom Rootverzeichniss den Pfad nimmt.

z.B.

/index.php


/testdir/vmenue.php



wenn man nen Punkt nimmt oder Punkt und Strick weg lässt kommen andere Sachen raus wenn die Datei
vom anderen Verzeichniss included wird.

Wenn du z.B. im testdir bist würden sie so aussehen:

./index.php


./testdir/vmenue.php



MFG ZUO
 
  • #8
hi ZUO,

danke für die super erklärung. waren jedenfalls ein paar neue infos für mich dabei.
hab das natürlich gleich mal probiert und es funktioniert soweit. bis auf ein problem noch.

normalerweise wäre ein statisches menü die einfachste lösung, richtig. das problem ist nur,
dass ich bei einem link eine 2. ebene habe.

1. Link
2. Link
3. Link
3.1 Link
3.2 Link
4. Link

deswegen dachte ich, muss es was dynamisches sein. denn die unterlinks sollen ja nur angezeigt werden,
wenn man auf den 3. Link klickt bzw. einen der unterlinks.

das scheint mit deinem code leider noch nicht realisierbar zu sein.

in meinem array sieht das so aus (die datei heißt menu.inc.php):
<?php
$entries = array (
array ('href' =>->./index.php',->text' =>->Startseite',->title' =>->Zurück zur Startseite'),
array ('href' =>->./xxx.php',->text' =>->xxx',->title' =>->xxx'),
array ('href' =>->./xxxx.php',->text' =>->xxxx',->title' =>->xxxx'),
array ('href' =>->./x.php',->text' =>->x',->title' =>->x',
array ('href' =>->./x1.php',->text' =>->x1',->title' =>->x1',),
array ('href' =>->./x2.php',->text' =>->x2',->title' =>->x2',),
array ('href' =>->./x3.php',->text' =>->x3',->title' =>->x3',),
array ('href' =>->./x4.php',->text' =>->x4',->title' =>->x4',),
array ('href' =>->./x5.php',->text' =>->x5',->title' =>->x5',),
),
);
?>

in der index sieht das wie nach deiner angabe nun wie folgt aus:
<? include (menu.inc.php); ?>
<?php
foreach($entries as $aeintrage) {
echo <a href='.$aeintrage['href'].' title='.$aeintrage['title'].'>.$aeintrage['text'].</a><br/>\n;
}
?>


von der scriptseite, woher ich das menü habe, wurde folgender code angegeben. damit klappt das mit dem untermenü
soweit auch gut, es öffnet die gewollten links. allerding zeigt es im browser unten in der statusleiste den link so an:
[sprich die seite x.php dürfte dort nicht stehen und ich weiß nicht, wie ich die wegbekomme]

<?
include('menu.php');
include('menu.inc.php');
$menu = new VMenu;
// Hier wird die Instanz erzeugt.
$menu->value('entries', $entries);
// Hier wird das Array an die Klasse übergeben.
echo $menu->menu();
?>


die datei menu.php war ebenfalls schon vorgegeben und da steckt allerhand code drin.
die datei hab ich mal hier zum einsehen auf meinem server: (damit es lesbar ist, hab ich das mal als .txt abgespeichert)
ich denke mal, damit wird es ein wenig klarer, da hier der hauptteil des menüs steckt. allerding bin ich da mit zu viel laienhaften wissen ausgestattet, als dass ich daraus schlau werde.

danke trotzdem schon mal für die mühe. ich hoffe hier sieht noch jemand durch.

Tom
 
Thema:

Probleme mit dynamischen Menü in php

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben