Dynamisches Menue

Alles, was PHP betrifft, kann hier besprochen werden.

Dynamisches Menue

Postby juergen&lx » 27. December 2005 23:59

Moin moin,

ich bin gerade am knispeln, wie man ein dyn. Menue aus einer DB erstellt. Dabei fallen ja Seiten weg, andere kommen hinzu; und eine Reihenfolge (welche auch immer) sollte auch eingehalten werden.
Dazu habe ich vorab nachstehende Tabelle aufgebaut.
Code: Select all
# phpMyAdmin SQL Dump
# version 2.5.7-pl1
# http://www.phpmyadmin.net
#
# Host: localhost
# Erstellungszeit: 27. Dezember 2005 um 17:11
# Server Version: 4.0.21
# PHP-Version: 5.0.1
#
# Datenbank: `test`
#

# --------------------------------------------------------

#
# Tabellenstruktur für Tabelle `hp_menu`
#

CREATE TABLE `hp_menu` (
  `hp_btn_name` varchar(50) NOT NULL default '',
  `hp_link` varchar(50) NOT NULL default '',
  `hp_text_btn` enum('yes','no') NOT NULL default 'yes',
  `hp_icon1` varchar(255) default NULL,
  `hp_level` smallint(6) NOT NULL default '0',
  `hp_prior_hp_name` varchar(50) NOT NULL default '',
  `comment` varchar(255) default NULL,
  PRIMARY KEY  (`hp_prior_hp_name`,`hp_btn_name`)
) TYPE=MyISAM;

#
# COMMENTS FOR TABLE `hp_menu`:
#   `comment`
#       `HelpText`
#   `hp_btn_name`
#       `Bezeichnung des Buttons`
#   `hp_icon1`
#       `if hp_text_btn = no`
#   `hp_level`
#       `0=Top/Main, 1,2,3.. Sublevel`
#   `hp_link`
#       `welche Seite gehört dazu`
#   `hp_prior_hp_name`
#       `für die Reihenfolge. Darf nicht leer sein`
#   `hp_txt_btn`
#       `'NO' wenn GraphicsButtons`
#

#
# RELATIONS FOR TABLE `hp_menu`:
#   `hp_prior_hp_name`
#       `hp_menu` -> `hp_btn_name`
#

#
# Daten für Tabelle `hp_menu`
#

INSERT INTO `hp_menu` (`hp_btn_name`, `hp_link`, `hp_text_btn`, `hp_icon1`, `hp_level`, `hp_prior_hp_name`, `comment`) VALUES ('Home', 'home.php', 'yes', NULL, 0, 'NULL', 'Homepage-Button'),
('Wir über uns', 'wir_ueber_uns', 'yes', NULL, 0, 'Home', 'Persönliche Angaben'),
('Vorstand', 'vorstand', 'yes', NULL, 1, 'Wir über uns', 'Text Vorstand'),
('Seite1', 'Seite 1', 'yes', NULL, 0, 'Home', 'Seite 1'),
('Seite 2', 'Seite 2', 'yes', NULL, 0, 'Seite1', 'Seite 2');
Das Feld 'hp_prior_hp_name' ist dabei der vorherige ButtonName.
Man könnte jetzt ein Array erzeugen, in dem alle aktiven Buttons vorhanden sind, aber ein Verschieben der Position eines Buttons ist ausgesprochen schwierig.
Mit welcher Philosophie kann man hier arbeiten? :?:
Es führen ja bekanntlich viele Wege zu Ziel
Ich habe hier eine Hilfstabelle angelegt mit nur einem SET-Feld, welches mit
Code: Select all
 $sql = 'ALTER TABLE `hp_menu_table` CHANGE `hp_menu_table` `hp_menu_fld` SET( \'Home\', \'Seite 1\', \'Seite 2\', \'Seite 3\', \'Wir über uns\', \'Vorstand\') NOT NULL ';
aktualisiert wird. Hat jemand eine bessere :idea:

Jürgen
juergen&lx
 
Posts: 154
Joined: 18. February 2004 21:36
Location: in einem Dorf am Rande des Strombergs
Operating System: Linux

Postby KingCrunch » 29. December 2005 03:14

Klingt alles ungünstig kompliziert.

Wie wärs mit einer Prioritisierung: Laufenende Nummer, je höher, desto "weiter weg" (unten/rechts, je nach Ausrichtung der Navigation). Dann kannste schon beim Auslesen mit "ORDER BY prio" (oder was auch immer) sortieren.
Nicht jeder Fehler ist ein Bug ...
KingCrunch
 
Posts: 1724
Joined: 26. November 2005 19:25

Postby juergen&lx » 29. December 2005 07:47

Hi KingCrunch,
Klingt alles ungünstig kompliziert.
stimmt .
Über ein Array krieg ich so was hin:
Code: Select all
  <dl id="navi">
   <dt><a href="index.php">Home</dt>
   <dt><a href="1.php">Wir &uuml;ber uns</a></dt>
   <dt><a href="2.php">Wer wir sind</a></dt>
   <dt><a href="21.php">&nbsp;&nbsp;Vorstand</a></dt>
   <dt><a href="211.php">&nbsp;&nbsp;&nbsp;&nbsp;Seite 1</a></dt>
   <dt><a href="212.php">&nbsp;&nbsp;&nbsp;&nbsp;Seite 2</a></dt>
   <dt><a href="3.php">Punkt 3</a></dt>
   <dt><a href="4.php">Punkt 4</a></dt>
   <dt><a href="5.php">Punkt 5</a></dt>
   <dt><a href="51.php">&nbsp;&nbsp;Punkt5.1</a></dt>
   <dt><a href="511.php">&nbsp;&nbsp;&nbsp;&nbsp;Schritt 1</a></dt>
   <dt><a href="512.php">&nbsp;&nbsp;&nbsp;&nbsp;Schritt 2</a></dt>
   <dt><a href="513.php">&nbsp;&nbsp;&nbsp;&nbsp;Schritt 3</a></dt>
   <dt><a href="514.php">&nbsp;&nbsp;&nbsp;&nbsp;Schritt 3+</a></dt>
   <dt><a href="515.php">&nbsp;&nbsp;&nbsp;&nbsp;Schritt 4</a></dt>
   <dt><a href="52.php">&nbsp;&nbsp;Punkt 5.2</a></dt>
   <dt><a href="6.php">Punkt 6</a></dt>
   <dt><a href="7.php">Punkt 7</a></dt>
   <dt><a href="8.php">Punkt 8</a></dt>
   <dt><a href="9.php">Punkt 9</a></dt>
   <dt><a href="impressum.php">Impressum</a></dt>
  </dl>
Wenn ich das Array zu Fuß ändere, dann sieht es so aus:
Code: Select all
  <dl id="navi">
   <dt><a href="index.php">Home</dt>
   <dt><a href="1.php">Wir &uuml;ber uns</a></dt>
   <dt><a href="2.php">Wer wir sind</a></dt>
   <dt><a href="21.php">&nbsp;&nbsp;Vorstand</a></dt>
   <dt><a href="211.php">&nbsp;&nbsp;&nbsp;&nbsp;Seite 1</a></dt>
   <dt><a href="212.php">&nbsp;&nbsp;&nbsp;&nbsp;Seite 2</a></dt>
   <dt><a href="3.php">Punkt 3</a></dt>
   <dt><a href="4.php">Punkt 4</a></dt>
   <dt><a href="6.php">Punkt 6</a></dt>
   <dt><a href="7.php">Punkt 7</a></dt>
   <dt><a href="5.php">Punkt 5</a></dt>
   <dt><a href="51.php">&nbsp;&nbsp;Punkt5.1</a></dt>
   <dt><a href="511.php">&nbsp;&nbsp;&nbsp;&nbsp;Schritt 1</a></dt>
   <dt><a href="512.php">&nbsp;&nbsp;&nbsp;&nbsp;Schritt 2</a></dt>
   <dt><a href="513.php">&nbsp;&nbsp;&nbsp;&nbsp;Schritt 3</a></dt>
   <dt><a href="514.php">&nbsp;&nbsp;&nbsp;&nbsp;Schritt 3+</a></dt>
   <dt><a href="515.php">&nbsp;&nbsp;&nbsp;&nbsp;Schritt 4</a></dt>
   <dt><a href="52.php">&nbsp;&nbsp;Punkt 5.2</a></dt>
   <dt><a href="8.php">Punkt 8</a></dt>
   <dt><a href="9.php">Punkt 9</a></dt>
   <dt><a href="impressum.php">Impressum</a></dt>
  </dl>

Jürgen
juergen&lx
 
Posts: 154
Joined: 18. February 2004 21:36
Location: in einem Dorf am Rande des Strombergs
Operating System: Linux

Postby jakimo72 » 02. January 2006 19:34

Ich würde in die Tabelle noch einen numerischen Primärschlüssel oder eine GUID einfügen. Dann kann hp_prior_hp_name entfallen und dafür auf die
hp_prior_hp_id verwiesen werden. Im einfachsten Fall erfolgt auch die
Sortierung innerhalb einer Ebene nach dieser Zahl.
Nur dadurch kann man einen Menüpunkt umbenennen, ohne das es
Auswirkungen auf andere Menüpunkte hat. Auch eine Übersetzung der
Menüpunkte wäre dann möglich.
User avatar
jakimo72
 
Posts: 151
Joined: 07. February 2005 13:25
Location: Hamburg-Barmbek


Return to PHP

Who is online

Users browsing this forum: No registered users and 17 guests