Supportnet Computer
Planet of Tech

Supportnet / Forum / Skripte(PHP,ASP,Perl...)

Dynamisches Menü ordnen





Frage

Hallo ich möchte durch PHP ein dynamisches Menü generieren lassen. Eigentlich ganz einfach, eine Mysql Tabelle mit Namen und Ziel und daraus einfach generieren. Die Links sollen aber nun geordnet sein, ich dachte man könnte noch eine Spalte "position" machen und diese dann ordnen. Jetzt kommt aber mein Problem, wenn ich zwischen zwei vorhandene Links einen neuen erstellen will oder einfach einen vorhandenen Link über einen anderen bereits vorhandenen stellen will, muss ich dann ja irgendwie die werte in der Positionsspalte verändern, kann mir vllt. jemand sagen wie man das genau machen kann? Oder ob es eine Seite dazu gibt, wo ein Tutorial steht? Danke Luke

Antwort 1 von Nessus

Hi,

dein Ansatz ist schon richtig, du machst auf diese Spalte dann einen einfachen order by asc, oder desc.
Du mußt lediglich Lücken dazwischen lassen.
Ich mache das immer in 10er Schritten, dann kannst du Sortieren ohne Ende.

Nessus

Antwort 2 von luke

hi
danke für die antwort
jetzt mal angenommen folgende liste
    home
->id10
    a
->id20
    b
->id30

jetzt muss ich doch, wenn ich home unter a haben will die id 10 auf mindestens 20 erhöhen und die 20 am besten mit irgendwas subtrahieren.
wie schaut das denn?
kann man irgendwie ermitteln, wo die nächste id ist?
oder wie sieht das ganze praktisch aus?

Antwort 3 von Nessus

Du denkst zu kompliziert.
Du vergibst in 10 er Schritten die ID. Machst in deinem SQL-Statement einen Order by spalte asc, bzw. desc und gut ist.
Die ID kannst du mit Mysqladmin super ändern.

Nessus

Antwort 4 von Nessus

Hier ein kleiner Codeschnipsel:


<?
require("./dbconn.inc.php");
@mysql_connect($host,$user,$password)
   or die("Abbruch: Verbindung zu ´$host´"
         ." konnte nicht hergestellt werden.");
@mysql_select_db($database)
   or die("Abbruch: Datenbank ´$database´ konnte nicht"
         ." selektiert werden.<br><br>MySQL sagt: ".mysql_error());
$query = "SELECT * FROM navigation WHERE (`navigation`.`anzeigen` =1) ORDER BY `navigation`.`ort` ASC";
$result = @mysql_query($query);
while ($row = mysql_fetch_array($result))
{

$text = $row["text"];
$url= $row["url"];
$ballontip= $row["ballontip"];
echo "<tr><td  width=\"170\" ><a title= \"$ballontip\" href=\"$url\"  target=\"haupt\" >$text</a></td></tr>";
}
?>



CREATE TABLE `navigation` (
`id` int(2) NOT NULL auto_increment,
`ort` int(2) NOT NULL default ´0´,
`text` text NOT NULL,
`ballontip` text NOT NULL,
`url` varchar(150) NOT NULL default ´´,
`anzeigen` int(1) NOT NULL default ´0´,
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=18 ;


Die Spalte "anzeigen" solltest du auf Typ ENUM stellen, da hier nur 1 für Anzeigen steht, oder 0 für verbergen.
In der Spalte "ort" stehen dann die ID`s für die Reihenfolge.

HTH

Nessus

Antwort 5 von luke

hallo
stimmt, ich sehe ja wie du es meinst,
aber ich wollte mir eine browserbasierende administreation (also ein eigenes programm) machen, da ist das dann alles "automatisiert".
da wird das ganze schwerer ;)

Antwort 6 von Nessus

Zitat:
aber ich wollte mir eine browserbasierende administreation (also ein eigenes programm) machen, da ist das dann alles "automatisiert".
da wird das ganze schwerer ;)


hmmmm, kann es sein, das du einige Sachen nicht verstanden hast?
Du hast den DB-Aufbau, den Output, was fehlt ist der Input und das kannst du Lösen wie du willst.
Inwiefern automatisieren?
Du mußt sicherlich Hand an die Anordnung legen, da geht nichts automatisch und ob du dir ein webbasiertes Tool bastelst oder Tools wie PHPmyAdmin nimmst dürfte fast egal sein, beide greifen auf die Tabelle zu.

Nessus

Antwort 7 von luke

ich habe das schon verstanden, keine sorge ;)
die sache mit den 10er-schritten will ich nochmal genau wissen.
wenn ich einen neuen link adde muss dieser ja 10 "punkte" weiter sein, als der link davor.
wie kann ich die letzte "zahl" und damit die n eue zahl ermitteln?

lluke

Antwort 8 von luke

hat sich erledigt, es klappt :)

Antwort 9 von Nessus

Und wie hast du das jetzt gelöst?

Nessus

Antwort 10 von luke

genau wie du gesagt hast ;)

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: