Webstatt.org - Community seit 2006 - 2012 (2024?)

Lösung für Menü-Problem

Avatar user-289
25.02.2007 17:35

Hallo,
auf meiner Seite habe ich eine "active-funktion", welche durch verschiedene GETs jeweils eine Datei included, in welcher jeweils die verschiedenen Menüpunkte hervorgehoben sind. Ich hoffe man versteht das soweit lächeln

Nun will ich ein Script schreiben, welches je nach dem, was für eine Seite im content included wird, automatisch und ohne GET eine bestimmte datei im menü included.

das sind bis jett meine arrays für die Seiten:
<?php

$content = array(); //Includes für den Content
$content['news'] = "news.php";
$content['gbook'] = "gbook.php";
$content['gbook_insert'] = "gbook_insert.php";
$content['gbook_submit'] = "gbook_submit.php";

$header = array(); //Includes für den Header
$header['news_h'] = "news_h.php";
$header['gbook_h'] = "gbook_h.php";

$menu = array(); //Includes für das Menü
$menu['defau'] = "def.php";
$menu['profi'] = "profi.php";
$menu['about'] = "about.php";
$menu['gbook'] = "gbook.php";
$menu['galle'] = "galle.php";
$menu['links'] = "links.php";
$menu['impre'] = "impre.php";

?>


Wenn jetzt also "gbook", "gbook_insert" oder "gbook_submit"included wird soll automatisch auch die datei "gbook" ins menü included werden.


Wie mache ich das am besten? Ich denke mal sowas in der richtung, dass ich für jede Menüsektion ein array mache, in welche ich die dazugehörigen seiten schreibe.
Dann müsste irgendwie geprüft werden, wie das array heisst, in dem sich die aktive seite befindet.

Keine ahnung, ob das ein guter ansatz ist oder ob die gesamgte idee nicht leichter umzusetzen wäre. ich hoffe jedenfalls dass ihr das problem versteht Fettes Grinsen :rolleyes:

Achja, included wird bis jetzt so:
    if(isset($_GET['menu']) AND isset($menu[$_GET['menu']])) {
include "menu/".$menu[$_GET['menu']];
} else {
include "menu/".$menu['defau'];
}

Interesse? meine Referenzen. hier!!!
Avatar user-271
25.02.2007 18:09

du könntest es mit dem zugehörigem Key in eine Datenbank schreiben, dann lässt es sich leichter verwalten...aber ich versteh, aber sonst ist der Ansatz gut Fettes Grinsenich

mist...jetzt hab ich erst, den titel gelsen....arg ignorier den Post *g*
aber das mit DB und key ist nicht schlecht zwinkern da kannste, dann auch den Key für den Content speichern Fettes Grinsen bzw. key für menu

#!/bin/bash
traurig){ neutral:& };:
Avatar user-289
25.02.2007 21:10

Original von user-271
du könntest es mit dem zugehörigem Key in eine Datenbank schreiben, dann lässt es sich leichter verwalten...aber ich versteh, aber sonst ist der Ansatz gut Fettes Grinsenich

mist...jetzt hab ich erst, den titel gelsen....arg ignorier den Post *g*
aber das mit DB und key ist nicht schlecht zwinkern da kannste, dann auch den Key für den Content speichern Fettes Grinsen bzw. key für menu

Ich versteh dich nicht Fettes Grinsen Das "problem" ist wie ich es am besten umsetze, und wie meinst soll ich das in die db schreiben?

Interesse? meine Referenzen. hier!!!
user-220
25.02.2007 21:22

Mhh, die einzelnen Navigations Punkte in eine extra DB zu setzen - wäre wohl am Sinnvollsten und am einfachsten zu Verwalten bei Änderungen & co.

Avatar user-271
25.02.2007 22:05

datenbank mit:

GETKEY | contentLink | menuLink |


das ist eigentlich alles, was ich gesagt hab Fettes Grinsen

#!/bin/bash
traurig){ neutral:& };:
Avatar user-289
25.02.2007 22:11

Mh, gute Idee

Wie mache ich nochmal am besten eine Abfrage, ob ein Eintrag in einer db vorhanden ist?!

Interesse? meine Referenzen. hier!!!
Avatar user-271
25.02.2007 22:19

http://de3.php.net/manual/de/function.mysql-num-rows.php

soas zum beispiel ;D

#!/bin/bash
traurig){ neutral:& };:
Avatar user-289
25.02.2007 22:24

ist es allgemein besser, immer beim query durch eine variable wie in dem beispiel zu connecten oder kann ich den connect auch einfach am anfang des scripts ausführen?

Interesse? meine Referenzen. hier!!!
Avatar user-271
25.02.2007 22:28

also ich setz ein connect am anfang des scripts....kommt drauf an, ob man es öfters baucht Fettes Grinsen aber dann muss man nicht immer connecten und closen zwinkern

#!/bin/bash
traurig){ neutral:& };:
Avatar user-289
26.02.2007 13:15

Wie closed man denn?^^ Ist das notwendig?

Interesse? meine Referenzen. hier!!!
Avatar user-162
26.02.2007 15:05

mysql_close($id); <-- so vielleichtFettes Grinsen?

Perfection is not when there’s nothing to add, but when there’s nothing to take away swisscheek.com/magazine
Avatar user-289
26.02.2007 17:00

Original von user-162
mysql_close($id); <-- so vielleichtFettes Grinsen?

Ja keine Ahnung^^, das php-tutorial hat mir das nicht beigebracht^^

Interesse? meine Referenzen. hier!!!
user-220
26.02.2007 19:01

Wäre es nicht vllt. noch von Vorteil, wenn er Sub Links einordnen kann? zwinkern Ich mein ja nur =)

Avatar user-289
26.02.2007 22:33

Original von user-220
Wäre es nicht vllt. noch von Vorteil, wenn er Sub Links einordnen kann? zwinkern Ich mein ja nur =)

Kapier ichmal wieder nicht^^


Neues problem:

Das ist meine index.php, in welche die drei verschiedenen Seiten (content, menü und header(kommt auch noch in die mysql-tabelle)) included werden sollen:
<?php
error_reporting(E_ALL);

include "inc/config.php";

if(get_magic_quotes_gpc()) {
array_stripslashes($_GET);
array_stripslashes($_POST);
array_stripslashes($_COOKIE);
}

include "inc/pages.php";
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>

<head>
<title>Helms heisse Homepage</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

<link rel="stylesheet" type="text/css" href="styles/style.css" />
<link rel="stylesheet" type="text/css" href="styles/gbook.css" />

<script type="text/javascript" src="scripts/scripts.js"></script>

</head>

<body>
<?php
include "header/".$row['headerlink'];
;?>

<p id="anmelden">
<a href="">Registrieren!</a>
</p>

<p id="suchen">SUCHEN</p>
<form action="" method="post">
<p id="gosearch">
<input type="text" name="search" id="searchtext" />
<a href="#" id="searchsubmit" onclick='senden()'>Go Search!</a>
</p>
</form>

<div id="content">
<form action="" method="post">
<p id="loginbg">
user-129utzername:<input type="text" name="user" class="login" />
Passwort:<input type="password" name="pass" class="login" />
<input type="image" src="img/content/form/empty_submit.gif" id="loginsubmit" />
</p>
</form>
<div id="contentbg">
<div id="contentbox">
<?php
include "content/".$row['contentlink'];
;?>

</div>
</div>
</div>

<?php
include "menu/".$row['menulink'];
;?>

<p style="clear: left;"></p>

</body>

</html>

Durch die "pages.php" wird das (nichtfertige) Script für die Seiten in die "index.php" included. Dieses sieht bis jetzt so aus:
<?php   
if(isset($_GET['section'])) {
@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Es konnte keine Verbindung aufgebaut werden./n Fehler:".mysql_error());
mysql_select_db(MYSQL_BASE) OR die("Datenbank nicht gefunden. Fehler: ".mysql_error());

sql = "SELECT
contentlink,
menulink,
headerlink
FROM
pages
WHERE
getvariable = '".$_GET['section']."'";
$result = mysql_query($sql) OR die(mysql_error());
$num_rows = mysql_num_rows($result);
$row = mysql_fetch_assoc($result);

} else {
include "menu/".$menu['defau'];
}
?>
(das else noch nicht beachten, dies habe ich noch nicht angeglichen, denn es ist bestandteil meiner jetzigen Fragelächeln


Das Script muss also irgendwie so umgeformt/konzipiert werden, dass es möglich ist, an den 3 Stellen wo die includes in der index.php stehen eine alternative Datei zu includen, falls das GET_[section] nicht übergeben wurde. Ausserdem muss mithilfe des "$num_rows = mysql_num_rows($result);" eine weitere Bedingung geschaffen werde, welche alternative dateien included, falss der Datensatz nicht in der db vorhanden ist.


Ich hoffe das ist zu verstehen :O Fettes Grinsen

Interesse? meine Referenzen. hier!!!
user-220
27.02.2007 19:56

schonmal mit switch versucht?, dort kannst es leichter handhaben mit default zwinkern

Avatar user-289
02.03.2007 15:01

Original von user-220
schonmal mit switch versucht?, dort kannst es leichter handhaben mit default zwinkern


Wo genau meinst du was mit switch zu versuchen ist?

Edit: Ahh, bei den includes?

Mhh aber wie genau?!

Edit: Mit switch hab ich den Sinn nicht ganz verstaden wiso ich es einsetzen könnte, villeicht erläutersts mir nochmal jemand.

Hab nun das hier:

<?php
error_reporting(E_ALL);

include "inc/config.php";

if(get_magic_quotes_gpc()) {
array_stripslashes($_GET);
array_stripslashes($_POST);
array_stripslashes($_COOKIE);
}

@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Es konnte keine Verbindung aufgebaut werden./n Fehler:".mysql_error());
mysql_select_db(MYSQL_BASE) OR die("Datenbank nicht gefunden. Fehler: ".mysql_error());

$sql = "SELECT
contentlink,
menuelink,
headerlink
FROM
pages
WHERE
getvariable = '".$_GET['section']."'";
$result = mysql_query($sql) OR die(mysql_error());
$num_rows = mysql_num_rows($result);
$row = mysql_fetch_assoc($result);
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>

<head>
<title>Helms heisse Homepage</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

<link rel="stylesheet" type="text/css" href="styles/style.css" />
<link rel="stylesheet" type="text/css" href="styles/gbook.css" />

<script type="text/javascript" src="scripts/scripts.js"></script>

</head>

<body>
<?php
if($num_rows == true) {
include "header/".$row['headerlink'];
} else {
include "header/news_h.php";
}
;?>

<p id="anmelden">
<a href="">Registrieren!</a>
</p>

<p id="suchen">SUCHEN</p>
<form action="" method="post">
<p id="gosearch">
<input type="text" name="search" id="searchtext" />
<a href="#" id="searchsubmit" onclick='senden()'>Go Search!</a>
</p>
</form>

<div id="content">
<form action="" method="post">
<p id="loginbg">
user-129utzername:<input type="text" name="user" class="login" />
Passwort:<input type="password" name="pass" class="login" />
<input type="image" src="img/content/form/empty_submit.gif" id="loginsubmit" />
</p>
</form>
<div id="contentbg">
<div id="contentbox">
<?php
if($num_rows == true) {
include "content/".$row['contentlink'];
} else {
include "errors/content404.php";
}
;?>

</div>
</div>
</div>

<?php
if($num_rows == true) {
include "menu/".$row['menuelink'];
} else {
include "menu/def.php";
}
;?>

<p style="clear: left;"></p>

</body>

</html>


Fehlt immernoch die Abfrage ob $_GET['section'] gesetzt ist. wie mache ich das nun am besten?!

Interesse? meine Referenzen. hier!!!
Avatar user-289
04.03.2007 17:17

*push*

Interesse? meine Referenzen. hier!!!
Avatar user-236
04.03.2007 22:27

Hallo,

auch wenn ich das nicht in die datenbank schreiben würde, hier mal ein kleiner ansatz.

erst einmal würde ich versuchen ein bisschen ordnung reinzubrinden, d.h. den ganzen code so gut wie möglich schon vor dem html code anbringen.


ich geh mal davon aus, es sollte so funktionieren. bei einem klick auf einen link im menü wird der entsprechende content und header geladen. hinterlegen möchtest du nur den pfad zu den dateien.

die tabelle sieht so aus:

id | name | header | content | menu | error

id = fortlaufend
name = link name (brauchst du ja um inhalt zu laden)
header = pfad zum header file (warum auch immer)
content = pfaf zum content file

macht es sinn den pfad der dateien so zu hinterlegen und den include der error files trotzdem direkt in die index.php zu schreiben?? naja egal..

so, an irgendeiner stelle hast du ja die hauptnavigation, mit der du den content laden möchtest.

hier in etwa die ausgabe der haupt navigation

for($i....){

hier navi aus geben

zum verlinken nimmst du die id aus der tabelle, z.B.

<a href='index.php?link= $result['id']'> Link Name 1 </>

}

Klick jetzt jemand auf den Link, d.h.

if(isset($link)){

jetzt neuer query, der nur den inhalt holt

SELECT .... FROM table WHERE id = $_GET['link'];

}

in dem array hast du dann einen eintrag mit dem pfad zum content etc.

$content_path = $result['content'];
$header_path = $result['header'];

das war jetzt fast alles oben definiert..in dem template selbst musst du nur noch include. is schon ne halbe anleitung, damit kommst bestimmt klar zwinkern

signature in progress
Avatar user-289
04.03.2007 22:57

Mh ich versteh das nicht ganz, aber du verstehst mein prob glaub ich auch nicht ganz. Also nochmal von anfang an.


Meine Page ist diese: http://t-sdesign.de/preview/helmpage/

Es gibt drei Sachen, die zu includen sind.

1. Den Header, da sich darin eine Subnavi befindet.
2. Das Menü, da sich je nach "aufenthaltsort" ein anderer Menüpunkt hervorheben soll.
3. Den Content.


Die 6 Menüpunkte sind festgelegt. Bei einem klick darauf kommt man jeweils auf die Startseiten der 6 Punkte. Also hat jeder Menüpunkt einen solchen Link: index.php?section=gbook

Gleichzeitig wird im Menü eine andere Datei geladen, welche einen anderen Menüpunkt hervorhebt.

Ausserdem wird der Header mit der Subnavi geladen. Die Links darin sehen dann genauso aus wie im normalen Menü, nur dass sie andere Seiten aufrufen: zB. index.php?section=gbook_insert


Also baut sich die Mysqul tabelle wie folgt auf:

| Section fürs $_GET | Menulink | Contentlink | Headerlink |


Mein Script soll also:

1. Prüfen, ob eine Section übergeben wurde. Falls nicht -> Starseite, Startmenü, Startheader öffnen.

2. Prüfen, ob eine übergebene Section in der DB vorhanden ist. Falss nicht -> Errorseite, Startmenü, Startheader öffnen.

3. Wenn eine Section übergeben wurde und die Section in der DB vorhanden ist, so soll an den 3 verschiedenen Stellen (siehe letzter Post) jeweils der zugehörige Contentlink, Headerlink und Menulink included werden. Ist einer dieser Links ungültig, so soll an der betroffenen Stelle eine Errorseite included werden.


Versteht man das?! Fettes Grinsen Wenn nicht nochmal nachfragen, brauche nun dringend eine Lösung :rolleyes:

Interesse? meine Referenzen. hier!!!
Avatar user-236
05.03.2007 16:37

damit gibtst du dir ja im grunde selbst die antwort. ich versteht immer noch nicht für was denn die datenbank, das ist doch der bloße overkill. oder hast du vor damit ne user statisitik aufzustellen.. .?naja egal.

1.)

if(!isset($_GET['section'])) {
$section = $_GET['section'];
include startseite, header, content
}
else {

siehe 2.)
}


wenn du schon prüfen möchtest ob die "section" in der datenbank ist, dann würd ich auch die seiten aus der datenbank ausgeben, ansonsten in etwa so..


2.)

$query = "SELECT section FROM table WHERE section ='". $section."' ";
$result = mysql_query($query);

if(mysql_num_rows($result)==1){

$include = $result['section'];
} else {

Errorseite, Startmenü, Startheader öffnen.

}


die lösung hast du doch schon oder? pass den code an und gut is zwinkern

gruß, user-236

signature in progress
Avatar user-289
06.03.2007 13:47

Ja, das ist mir klar, das hab ich auch schon, Problem ist, wie ich das am elegantesten hier

<?php
error_reporting(E_ALL);

include "inc/config.php";

if(get_magic_quotes_gpc()) {
array_stripslashes($_GET);
array_stripslashes($_POST);
array_stripslashes($_COOKIE);
}

@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Es konnte keine Verbindung aufgebaut werden./n Fehler:".mysql_error());
mysql_select_db(MYSQL_BASE) OR die("Datenbank nicht gefunden. Fehler: ".mysql_error());

$sql = "SELECT
contentlink,
menuelink,
headerlink
FROM
pages
WHERE
getvariable = '".$_GET['section']."'";
$result = mysql_query($sql) OR die(mysql_error());
$num_rows = mysql_num_rows($result);
$row = mysql_fetch_assoc($result);
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>

<head>
<title>Helms heisse Homepage</title>
<meta http-equiv="content-type" content="text/html; charset=iso-8859-1" />

<link rel="stylesheet" type="text/css" href="styles/style.css" />
<link rel="stylesheet" type="text/css" href="styles/gbook.css" />

<script type="text/javascript" src="scripts/scripts.js"></script>

</head>

<body>
<?php
if($num_rows == true) {
include "header/".$row['headerlink'];
} else {
include "header/news_h.php";
}
;?>

<p id="anmelden">
<a href="">Registrieren!</a>
</p>

<p id="suchen">SUCHEN</p>
<form action="" method="post">
<p id="gosearch">
<input type="text" name="search" id="searchtext" />
<a href="#" id="searchsubmit" onclick='senden()'>Go Search!</a>
</p>
</form>

<div id="content">
<form action="" method="post">
<p id="loginbg">
user-129utzername:<input type="text" name="user" class="login" />
Passwort:<input type="password" name="pass" class="login" />
<input type="image" src="img/content/form/empty_submit.gif" id="loginsubmit" />
</p>
</form>
<div id="contentbg">
<div id="contentbox">
<?php
if($num_rows == true) {
include "content/".$row['contentlink'];
} else {
include "errors/content404.php";
}
;?>

</div>
</div>
</div>

<?php
if($num_rows == true) {
include "menu/".$row['menuelink'];
} else {
include "menu/def.php";
}
;?>

<p style="clear: left;"></p>

</body>

</html>

einbaue. die verschiedenen Dateien müssen ja an 3 stellen included werden, und da ist mein problem, wie ich das hinbekomme, wenn ich vorher noch eine isset($_GET...) abfrage mache, die dann an den 3 stellen eine default datei included... mit ellenlangen echos, wo der ganze html code drin steht wärs kein porblem, aber gibts nicht noch ne bessere kurze variante?!

Edit: achja, nochwas ist komisch: in dem code oben wird das $row['menuelink'] ganz unten nicht von der tabelle ausgegeben (ohne fehlermeldung). mache ich es weiter nach oben im code klappt es... woran liegt dsa?

Interesse? meine Referenzen. hier!!!
Avatar user-289
07.03.2007 19:13

push

Interesse? meine Referenzen. hier!!!