BlackBoard » Design, Programmierung & Entwicklung » Webdesign » (X)HTML Dynamisches Menü für PHP Seite gesucht » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Neues Thema erstellen Antwort erstellen
Zum Ende der Seite springen Dynamisches Menü für PHP Seite gesucht
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Rudolf Rudolf ist männlich
BlackBoarder


Dabei seit: 16.09.2003
Beiträge: 958

Dynamisches Menü für PHP Seite gesucht       Zum Anfang der Seite springen

Hi Leute,

ich brauche mal eure Hilfe. Ich möchte eine Webseite in XHTML programmieren. Da ich zu faul bin mich mit Webdesignprogrammen zu beschäftigen, möchte ich die Seite mit einem normalen Texteditor programmieren. Aus diesem Grund sollte die Programmierung der Seite so einfach wie möglich gestaltet werden. Aus diesem Grund möchte ich die Seite folgendermaßen aufbauen.

Ich möchte ein PHP Script erstellen, das zuerst einen oberen Bereich der Seite lädt. Anschließend wird ein Menü geladen, dann der Lesebereich der Seite und am Ende das Ende der Seite.

Folgende Überlegung habe ich angestellt. So könnte das Script ausschauen

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:

include "anfang.php";  

$ext = ".php";  
$page[] = "seite1"; 
$page[] = "seite2";  

switch($_GET['inc']) 
{ 	
case $page[1]: include $page[1].$ext; break; 	
default: include $page[0].$ext; break; 
}  

include "ende.php";



Der Link lautet damit index.php?inc=seite2. Damit wird seite2.php gelanden. Alles andere lädt seite1.php

Das Script reicht aus, wenn du mit einem statischen Menü leben möchtest. Ich möchte aber eine Seite haben, worauf sich das Menü verändert und beim Klick auf eine Hauptkategorie Menüunterpunkte angezeigt werden wie z.B. auf http://www.solon.com/cw/de/kunden/

Kann mir jmd n Stichwort sagen womit man ein Script für mein Vorhaben finden kann oder mir direkt n Code zuwerfen?
01.03.2009 19:17 Rudolf ist offline E-Mail an Rudolf senden Homepage von Rudolf Beiträge von Rudolf suchen
Zirias Zirias ist männlich
BlackBoarder


images/avatars/avatar-450.jpg

Dabei seit: 11.09.2002
Beiträge: 1.217
Herkunft: /dev/urandom

      Zum Anfang der Seite springen

Würd ich in ein paar Klassen kapseln, hab gerade heute sowas gemacht:

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
  ,----------.     ,----------.
  | mainMenu |     | menuItem |
  `----------'     `----------'
         1 |        /\     /\
           |        --     --
           |        /       \
         * |       /         \
        ,--------------.  ,-------------.
        | mainMenuItem |  | subMenuItem |
        `--------------'  `-------------'
              | 1              * |
              |                  |
              | 0,1              |
        ,---------.              |
        | subMenu |--------------'
        `---------' 1


Jede Klasse hat eine "render()" Methode, aufgerufen wird die von mainMenu (gibt es nur ein Objekt), und jede render()-Methode ruft die render() Methoden ihrer Kinder auf.

Dem Konstruktor von "mainMenu" wird die aktuelle Seite und Unterseite übergeben, er kann entsprechend das Menü passend aufbauen (mit auf- oder zugeklappten subMenus und passenden active-Flags für die "menuItem" Objekte)

__________________
palmen-it.de
GCS/MU d+(++) s+: a C++ UL++++ P+++$ L+++ !E W+++ N+ o? K? w++$ !O M-- V?
PS+ PE++ Y+ PGP++ t !5 X- R- tv b+ DI++ D+ G e++ h r y+

Dieser Beitrag wurde 2 mal editiert, zum letzten Mal von Zirias: 01.03.2009 20:59.

01.03.2009 20:56 Zirias ist offline Homepage von Zirias Beiträge von Zirias suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

Ich pack jetzt mal das Visitor Pattern aus Augenzwinkern

code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
class Menu
{
  var $ entry="";
  var $submenu = array();
  menu($entry){$this->entry = entry;}
  function accept($visitor)
 {
  $visitor->visit(*this);
  }
  function insertSubmenu($menu){...}
}

class Visitor
{
   abstract function visit($guest);
}

class MenuPrinter extends Visitor
{
  var $level =0;
  function visit($guest)
  {
    $this->level++;
    printMenu($guest,$this->level);//da wird das Menu ausgegeben. Wahlweise kann level 0 auch root sein, und somit unsichtbar. (if(level > 0))
    foreach($guest->submenu as $m)
      $m->accept($visitor);
    $this->level--;
   }


Dann ganz einfach das Menü aufbauen:

code:
1:
2:
3:
4:
5:
$main = new Menu("Main");
for(int i =0; i <10; i++)
$main->insertSubmenu(new Menu("sub"+$i);
$printer = new MenuPrinter();
$main->accept($printer); 


Somit braucht man die Klasse nicht mit Funktionalität überladen, und lässt sich durch weitere Besucher einfach erweitern.

phlox

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
01.03.2009 22:30 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
LX LX ist männlich
El Comandante en Jefe


images/avatars/avatar-2290.gif

Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx

Achtung       Zum Anfang der Seite springen

Warum nicht ein schnödes geschachteltes Array, in dem man den Menübaum abbildet und dann abhängig vom aktuell aktiven Menüpunkt die Unterpunkte anzeigt oder eben auch nicht?

Wenn man es richtig™ machen will, dann müsste man für eine beliebig tief geschachtelte Baumstruktur ein Nested Set bemühen, aber so wie das hier klingt wären das Kanonen auf Spatzen.

__________________
JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard

"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

01.03.2009 23:57 LX ist offline E-Mail an LX senden Homepage von LX Beiträge von LX suchen
Zirias Zirias ist männlich
BlackBoarder


images/avatars/avatar-450.jpg

Dabei seit: 11.09.2002
Beiträge: 1.217
Herkunft: /dev/urandom

      Zum Anfang der Seite springen

LX, in MEINEM Fall hätte das nicht gereicht, weil auch der aktuall aktive Unterpunkt hervorgehoben sein sollte. Ob man natürlich die Render-Logik dann wirklich in die Klassen reinnimmt, oder die Klassen nichts weiter sind als Datenstrukturen in einem Array, das ist irgendwo Geschmackssache. Ich fand es ganz schön, wenn sich jedes Element selbst ausgeben kann smile

Dieb genauen Anforderungen von Exelmes kenne ich ja nicht, mir schien aber auch eher etwas einfaches gefordert zu sein, also hab ich halt mal gepostet, was ich mir sowies gerade aus den Fingern gesaugt hatte.

__________________
palmen-it.de
GCS/MU d+(++) s+: a C++ UL++++ P+++$ L+++ !E W+++ N+ o? K? w++$ !O M-- V?
PS+ PE++ Y+ PGP++ t !5 X- R- tv b+ DI++ D+ G e++ h r y+
02.03.2009 09:09 Zirias ist offline Homepage von Zirias Beiträge von Zirias suchen
Rudolf Rudolf ist männlich
BlackBoarder


Dabei seit: 16.09.2003
Beiträge: 958

Themenstarter Thema begonnen von Rudolf
      Zum Anfang der Seite springen

Zitat:
Original von LX
Warum nicht ein schnödes geschachteltes Array, in dem man den Menübaum abbildet und dann abhängig vom aktuell aktiven Menüpunkt die Unterpunkte anzeigt oder eben auch nicht?

Wenn man es richtig™ machen will, dann müsste man für eine beliebig tief geschachtelte Baumstruktur ein Nested Set bemühen, aber so wie das hier klingt wären das Kanonen auf Spatzen.


Also daran habe ich auch schon gedacht. Da stellt sich mir folgende Fragen.

1.Wie weißt das Script welche Menüstruktur es anzeigen soll

2.Weil die Antwort auf Frage 1. höchstwahrscheinlich irgendetwas mit ?a=link lauten wird, frage ich mich wie man das Script so schreibt, dass die Links wie www.example.de/cat1/cat2 aussehen. Ich weiß, dass es da ein modul für gibt, das Joomla auch beherrscht. Und da ich nicht weiß, ob mein Webspace sowas kann, frage ich mich, ob man es so hinbekommt, ohne den Server zu konfigurieren.

Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Rudolf: 03.03.2009 01:42.

03.03.2009 01:41 Rudolf ist offline E-Mail an Rudolf senden Homepage von Rudolf Beiträge von Rudolf suchen
LX LX ist männlich
El Comandante en Jefe


images/avatars/avatar-2290.gif

Dabei seit: 25.11.2001
Beiträge: 5.372
Herkunft: Berliner Bronx

Achtung       Zum Anfang der Seite springen

1. Wenn das Skript weiß, welche Seite es anzeigen soll, wird es ja nicht so schwer sein auch daraus zu lesen, an welcher Stelle im Menü man sich befindet.

2. mod_rewrite ist das Zauberwort, das sollte selbst auf normalem Webspace funktionieren.

__________________
JS-Games.de - Misled Scripting Skills Gone Mad | Meine Filmkritiken | Urban Photography
Kommt mal in den IRC-Channel: irc.eu.freenode.net | Port 6667 | #blackboard

"Ever tried. Ever failed. No matter.
Try again. Fail again. Fail better."
- Samuel Beckett

03.03.2009 02:08 LX ist offline E-Mail an LX senden Homepage von LX Beiträge von LX suchen
Zirias Zirias ist männlich
BlackBoarder


images/avatars/avatar-450.jpg

Dabei seit: 11.09.2002
Beiträge: 1.217
Herkunft: /dev/urandom

      Zum Anfang der Seite springen

Zitat:
Original von LX
2. mod_rewrite ist das Zauberwort, das sollte selbst auf normalem Webspace funktionieren.


Das geht zwar, ist aber IMHO eher eine Notlösung, da es dann plötzlich "interne" URLs gibt, die immer noch die von der Semantik her falschen Query-Parameter haben.

Besser ist es, direkt den cgi REQUEST_URI auszuwerten (in PHP z.B. über $_SERVER). Wenn der Webserver beim Abstieg durch die virtuellen Pfade einen Script-Handler findet, bricht er dort ab und führt ihn aus, der Rest des Pfads bleibt erhalten. Daraus ergeben sich dann URLs wie
http://example.com/foo.php/page1/
Das sollte eigentlich auf jedem normal konfigurierten Server mit PHP gehen.

Wenn einen das ".php" dabei noch stört, kann man auch den PHP-Handler gezielt mit "AddHandler" anderen Files geben, das wird dann aber wahrscheinlich nicht bei vom Provider konfigurierten Apache in .htaccess gehen.

__________________
palmen-it.de
GCS/MU d+(++) s+: a C++ UL++++ P+++$ L+++ !E W+++ N+ o? K? w++$ !O M-- V?
PS+ PE++ Y+ PGP++ t !5 X- R- tv b+ DI++ D+ G e++ h r y+
03.03.2009 09:06 Zirias ist offline Homepage von Zirias Beiträge von Zirias suchen
Rudolf Rudolf ist männlich
BlackBoarder


Dabei seit: 16.09.2003
Beiträge: 958

Themenstarter Thema begonnen von Rudolf
      Zum Anfang der Seite springen

Der Addhandler sorgt nur dafür, dass eine index.php gelanden wird, falls der Apache nicht sowieso nach einer solchen Datei im / sucht. Wie hilft mir das die Datei index.php bei der Übergabe von Veriable auszublenden?

Und ich verstehe noch nicht ganz, was du mit $_SERVER['REQUEST_URI'] möchtest. Das gibt doch nur das aktuelle Verzeichnis aus, wo sich die aufgerufene Datei befindet.

Bitte um Aufklärung.

Oder bin ich in der Annahme richtig, dass die Variablen wie page1 als echte Verzeichnisse im Webserver liegen und das Script nach solchen Daten sucht?

EDIT

So Leute, ich habe nun folgendes entwickelt

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:

<?php
if (!empty($_GET['inc'])) 
{ 
  $inc$_GET['inc']; 
  $array explode("/",$inc);
  $page$array[0];
  $child $array[1];
  $ext ".php";
}
else $inc"null";
?>
<li><a href="/">Home</a></li>
<li><a href="/?inc=haupt1/">Haupt1</a></li>
<?php if($page=="haupt1") { ?>
<ul>
  <li><a href="/?inc=haupt1/unter11">unter11</a></li>
  <li><a href="/?inc=haupt1/unter22">unter22</a></li>
 </ul>
<?php ?>
<li><a href="/?inc=haupt2/">Haupt2</a></li>    
<?php if($page=="haupt2") { ?>
<ul>
  <li><a href="/?inc=haupt2/unter21">unter21</a></li>
  <li><a href="/?inc=haupt2/unter22">unter22</a></li>
</ul>
<?php ?>


Die Idee dahinter ist halt, dass, wenn ich schon ?inc= verwende, dass die Zuordnung nach / erfolgt. Also haupt1/unter1 z.B.

Und beim Klick auf ein Untermenü soll natürlich eine Datei includiert werden, die im Lesebereich angezeigt wird. Den Script dafür habe ich noch nicht entwickelt.

Vielleicht habt ihr eine gescheitere Codelösung für mich, da mir alles etwas suboptimal vorkommt.

Edit:

Ich habe das Problem anders gelöst. Ist schon ok, aber da stellt sich mir eine andere Frage.

Ich habe eine Arry in dieser Form definiert:

php:
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
variable[]="seite1"variable[]="seite2"variable[]="seite3";  

und möchte sie in Form von     
switch($_GET['inc'])   
{     
case $variable[0]: include variable[0]; break;     
case $variable[1]: include variable[1]; break;     
case $variable[2]: include variable[2]; break;   
}

abrufen.

wenn die Array größer wird, ist es von Vorteil eine Schleife zu erstellen, die so lange ausgeführt wird bis alle case Fälle durchgegangen werden. Also in dem Beispiel von 0 bis 2x. Gibts da ne Lösung und wie lautet sie?

Dieser Beitrag wurde 5 mal editiert, zum letzten Mal von Rudolf: 06.03.2009 07:50.

06.03.2009 05:30 Rudolf ist offline E-Mail an Rudolf senden Homepage von Rudolf Beiträge von Rudolf suchen
phlox81 phlox81 ist männlich
Bote des Lichts und Moderator


images/avatars/avatar-2264.jpg

Dabei seit: 19.10.2002
Beiträge: 3.028
Herkunft: Irgendwo im Nirgendwo

      Zum Anfang der Seite springen

Zitat:
Original von Exelmes
Die Idee dahinter ist halt, dass, wenn ich schon ?inc= verwende, dass die Zuordnung nach / erfolgt. Also haupt1/unter1 z.B.

Und beim Klick auf ein Untermenü soll natürlich eine Datei includiert werden, die im Lesebereich angezeigt wird. Den Script dafür habe ich noch nicht entwickelt.


Hm, du solltest da evtl einfach nur die ID des Menüeintrages angeben, das lässt sich dann relativ leicht auswerten.

__________________
Intelligenz ist eine Illusion des Menschen

phlox81.de | codenode.de
06.03.2009 10:01 phlox81 ist offline E-Mail an phlox81 senden Homepage von phlox81 Beiträge von phlox81 suchen
Baumstruktur | Brettstruktur
Gehe zu:
Neues Thema erstellen Antwort erstellen
BlackBoard » Design, Programmierung & Entwicklung » Webdesign » (X)HTML Dynamisches Menü für PHP Seite gesucht

Forensoftware: Burning Board 2.3.6, entwickelt von WoltLab GmbH