[PHP] Navigations-Generierung

MarcDK

Banned
Registriert
Mai 2001
Beiträge
3.559
Tja, also ich bin nicht der immer der fitteste wenn es ums programmieren geht.

So kommt es nun, dass ich eine Navigation in php basteln will.

Hier mein echt schelchter Code aber er funktioniert:

PHP:
 <?
 switch ($id) {
 		case news:
 		$page="news.php";
 		$news="id=\"current\"";
 		break;
 
 		case downloads:
 		$page="downloads.php";
 		$downloads="id=\"current\"";
 		break;
 
 		case gallery:
 		$page="gallery.php";
 		$gallery="id=\"current\"";
 		break;
 
 		case information:
 		$page="info.php";
 		$information="id=\"current\"";
 		break;
 
 		default:
 		$page="news.php";
 		$news="id=\"current\"";
 		break;
 }
 
 
 		    	echo "<li><a $news href=\"index.php?id=news\">News</a></li> \n";
 		    	echo "<li><a $gallery href=\"index.php?id=gallery\">Gallery</a></li> \n";
 		    	echo "<li><a $downloads href=\"index.php?id=downloads\">Downloads</a></li> \n";
 		    	echo "<li><a $information href=\"index.php?id=information\">Information</a></li> \n";
 
 ?>

So, jeder Programmierer wüde wohl sagen: Mein Gott, wie umständlich.

So, wäre vielleicht jmd so nett und würde mir sagen, wie man das ganze irgendwie "schöner" lösen kann?

Irgendwie mit einer Funktion oder so?
 
Re: [php] Navigations-Generierung

Was machst du mit dem "current"? Das wird mir gerade nicht ganz klar.
So würde ich das spontan machen.
PHP:
<?php 
if(isset($_GET['id'])) {
 switch($_GET['id'])
	{
	default: 
		include "inc/default.php";
	break;

	case news:
		include "inc/news.php";
	break;    
	
	case downloads:        
		include "inc/downloads.php";
	break;
	
	case info:
		include "inc/information.php";
	break;
	
	 }         
	} 
	else 
	{       
	include "inc/default.php";    
    }

?>
 
Re: [php] Navigations-Generierung

Vorneweg: Gewöhn dir an, Strings in ' oder " zu setzen.

PHP:
$includes = array(
  'news' => array('News','news.php'),
  'downloads' => array('Downloads','downloads.php'),
  'gallery' => array('Gallery','gallery.php'),
  'information' => array('Informationen','info.php')
);

$pages = array_keys($includes);
$pageid = (isset($_GET['id']))?strtolower($_GET['id']):'news';
$pageid = (in_array($pageid,$pages))?$pageid:'news';

foreach ($includes as $thispage => $thispageinfo)
  echo '<li><a href="index.php?id='.$thispage.(($pageid==$thispage)?'" id="current">':'">').$thispageinfo[0]."</a></li> \n";

include ($includes[$pageid][1]);
 
Zuletzt bearbeitet:
Re: [php] Navigations-Generierung

Hi Prophet. =)


"current" ist nur für die CSS-Klasse, damit das item in der Liste ge-high-lighted wird.

Der taucht bei deinem Code auch irgendwie nicht auf.

KannsT Du deinen Code irgendwie mal erlären, damit ich weiß was Du da machst? =)

Aber schon mal danke für die HilfE!
 
Re: [php] Navigations-Generierung

Hi Life!

Ok, das sieht schon mal cooler aus aber kannst Du mir auch in etwas näher bringen was Du dir dabei gedacht hast un dwie du drauf gekommen bist un dwarum na die switch schleife weg lässt?
 
Re: [php] Navigations-Generierung

MarcDK schrieb:
Hi Marc


MarcDK schrieb:
Ok, das sieht schon mal cooler aus
hehe :)


MarcDK schrieb:
aber kannst Du mir auch in etwas näher bringen was Du dir dabei gedacht hast
Nicht viel, ich code aus Instinkt und nicht so sehr mit intensivem Grübeln :)


MarcDK schrieb:
un dwie du drauf gekommen bist
Naja, drei Jahre Erfahrung ;) (oder ist PHP 4.0.5 schon vier Jahre alt?! O_o)


MarcDK schrieb:
un dwarum na die switch schleife weg lässt?
Die Daten sind in einem Hash gespeichert, ich greife direkt mit der pageid darauf zu und bekomme den entsprechenden Datensatz. Deswegen kann ich den switch-Block weglassen.

-------------------------------------------------

PHP:
$includes = array(
  'news' => array('News','news.php'),
  'downloads' => array('Downloads','downloads.php'),
  'gallery' => array('Gallery','gallery.php'),
  'information' => array('Informationen','info.php')
);

$pages = array_keys($includes);
$pageid = (isset($_GET['id']))?strtolower($_GET['id']):'news';
$pageid = (in_array($pageid,$pages))?$pageid:'news';
Dieser Teil ist in etwa das, was bei dir die switch-Abfrage war.



PHP:
foreach ($includes as $thispage => $thispageinfo)
  echo '<li><a href="index.php?id='.$thispage.(($pageid==$thispage)?'" id="current">':'">').$thispageinfo[0]."</a></li> \n";
Das hier ist die zusammengefasste Version von deinen vier Link-echos unten im Code.

PHP:
include ($includes[$pageid][1]);
Das wofür du bi dir $pagegesetzt hast.
 
Zuletzt bearbeitet:
Re: [php] Navigations-Generierung

Ich glaub ich brauch nix mehr erklären der Code von </Life> ist doch nen bissel besser :) Im Prinzip is meiner nicht viel anders als dein eigentlicher außer der umschließenden Abfrage ob "id" per $_GET gesetzt ist. Bei Aufruf wird dann eben included. Für kleinere Projekte reicht das völlig aus wenn man mehr Kontrolle will dann würde ich den Code von </Life> empfehlen.
 
Re: [php] Navigations-Generierung

Ok, was ist diese $_GET Variable?
 
Re: [php] Navigations-Generierung

Dankeschön, </Life!>

Und @ Prophet:

Du wolltest doch mal das Gallery-Script haben, was ich verändert und XHTML-kompatibel gemacht habe?

Willst Du es haben? Dann kannst Du mir vielleicht auch eine Frage dazu beantworten. =)
 
Zuletzt bearbeitet:
Re: [php] Navigations-Generierung

falls jemand wert auf oop legen sollte, hätte ich da auch noch was


linktable.class.php: schrieb:
PHP:
<?php

class linktable {

	var $_name = array();
	var $_target = array();
	var $_desc = array();
	var $_file = array();

	var $_default= -1;
	var $_case = false;
	var $_ref = '';
	var $_pre = '';
	var $_suf = '';

	function linktable($casesensitive, $getref, $pre, $suf) {
		$this->_case = $casesensitive;
		$this->_ref = $getref;
		$this->_pre = $pre;
		$this->_suf = $suf;
	}

	function addlink($name, $desc, $file, $default=false, $target='_self') {
		$this->_name[]= ($this->_case)?$name:strtolower($name);
		$this->_desc[]= $desc;
		$this->_file[]= $file;
		$this->_target[]= $target;

		if ($default) {
			$this->_default= count($this->_name)-1;
		}
	}

	function echo_linktable(&$getvar, $include=true) {

		if (isset($getvar[$this->_ref])) {

			if (!$this->_case) {
				$getvar[$this->_ref] = strtolower($getvar[$this->_ref]);
			}

			$id = (in_array($getvar[$this->_ref], $this->_name))?array_search($getvar[$this->_ref], $this->_name):$this->_default;
		}
		else {
			$id = $this->_default;
		}


		for($i=0; $i<count($this->_name); $i++) {
			echo $this->_pre.'<a href="'.$_SERVER['PHP_SELF'].'?'.$this->_ref.'='.$this->_name[$i].'" target="'.$this->_target[$i].'"'.(($id==$i)?' id="current">':'>').$this->_desc[$i].'</a>'.$this->_suf;
		}

		if ( $include ) {
			if (file_exists(dirname(__FILE__).'/'.$this->_file[$id])) {
				include($this->_file[$id]);
			}
			else {
				echo "file not found.";
			}
		}

	}

}

?>

index.php: schrieb:
PHP:
<?php

include('linktable.class.php');

if ($includes = new linktable(false, 'id', '<li>', '</li>'."\n")) {
	$includes->addlink('news', 'News', 'news.php', true);
	$includes->addlink('downloads', 'Downloads', 'downloads.php');
	$includes->addlink('gallery', 'Gallery', 'gallery.php');
	$includes->addlink('information', 'Informationen', 'info.php');

	$includes->echo_linktable($_GET);
}
else {
	echo "this should not happen.";
}

?>

viel code für kleine probleme ;)
 
Zuletzt bearbeitet:
Re: [php] Navigations-Generierung

MarcDK schrieb:
Dankeschön, Life!

Und @ Prophet:

Du wolltest doch mal das Gallery-Script haben, was ich verändert und XHTML-kompatibel gemacht habe?

Willst Du es haben? Dann kannst Du mir vielleicht auch eine Frage dazu beantworten. =)

Ja nur her damit, meld dich per ICQ oder PN. :cool_alt:
 
Re: [php] Navigations-Generierung

MarcDK schrieb:
Dankeschön, Life!
Bitte bitte.

Und lass mir nächstes Mal doch bitte wenigstens das / davor ;) Das ist wichtig, das drht nämlich den Sinn genau um: ;)

<life> Beginn des Lebens
</life> Ende des Lebens.. ;)
 
ok, ich habe noch eine Frage:

Ich habe das ganze Script mal hier eingebaut:

http://www.vorsicht-dreharbeiten.de/

Wie ihr sehen könnt, klappt das super! Aber da der Menüpunkt "Gallery" auf /gallery

verlinkt und das gallery-script praktisch nur den Header samt Navigation und nachher footer includiert fällt er immer auf "News" zurück.

Wie kann ich das abfragen, dass "Picture" angewählt bleibt?
 
Setz bevor du den Header includest $_GET['id']='gallery';
 
Du bist mein Held des Tages!

Ok, jetzt erklär mir bitte, warum das funktioniert. Ich habe die Variable $_GET noch nicht ganz verstanden!
 
Get stellt das Gegenstück zu Post da! Alles was per Get übertragen wird ist auf 1024 Bytes begrenzt da es im Header uncodiert übertragen wird. Bei Post sollten die Daten im Body übertragen werden. $_Get ist nun eine superglobale Variable welche im gesamten Script Sichtbar ist.
 
The Prophet schrieb:
da es im Header uncodiert übertragen wird
uncodiert stimmt aber nicht, da es ja URL-codiert wird :rolleyes:
darum sollte man auch, falls Sonderzeichen übertragen werden können, mit decode() den übergebenen Wert zurückwandeln
 
stimmt *hättedochnachsehensollen* ;)
 
Zurück
Oben