Untermenü bei php

tschifeif

Grünschnabel
Hallo liebe Community ;)
erstmal achtung anfänger also bitte habt geduld mit mir ;)

ich habe mir vor einiger Zeit zusammen mit einem Kumpel eine Homepage gebastelt (bzw er hat gebastelt und ich zugeschaut ;-) )
jetzt stehe ich vor folgendem problem:

Ich möchte ein Untermenü das erst erschein wenn ich auf den übergeordneten Menüpunkt klicke.

Das Layout habe ich über ein CSS file gemacht, die Menüpunkte werden über die index.php mittels switch zugewiesen.


PHP:
<?php

include('include.php');

switch($SECTION)
{
   
case 'start':
		eval("\$content = \"".showtpl("start.html")."\";"); 
	break;

case 'projekte':
		eval("\$content = \"".showtpl("projekte.html")."\";"); 
	break;
        ....


die index.html ist folgendermaßen aufgebaut

HTML:
<head>
    ....   
 <title>ABC</title>
    <meta http-equiv="Content-Script-Type" content="text/javascript" />
    <meta http-equiv="Content-Style-Type" content="text/css" />
    <link rel="stylesheet" type="text/css" href="./css/main.css" />
    <link rel="stylesheet" type="text/css" href="./css/message.css" />
     
		<script type="text/javascript" src="./jsfunctions.js">
		</script>
     </head>
  <body onload="initialize();">
 
		...
      
   <tr>
        <td id="navi_main">
          <div class="link_main"><a href="./index.php?section=start">Start</p2></a></div>
          <div class="link_main"><a href="./index.php?section=projekte">Projekte</a></div>
                       Hier soll nach klick auf Projekte das Untermenü erscheinen******!
           <div class="link_main"><a href="./index.php?section=kontakt">Kontakt</a></div>
                  ...


ich habe in den letzten tagen google viel bemüht aber leider keine Lösung gefunden die zu meinem Aufbau passt und hoffe jetzt auf euch ;)
Wie muss ich den Code verändern wenn ich bei Projekte die Untermenüs
- Pläne
- Rendering
haben möchte? Vielen Dank

bevor jetzt K898ommentare kommen über dynamische Menüs und andere Spielereien: Mir ist bewusst das man das professioneller machen kann als ich aber für meine bedürftnisse reicht es so wie es bisher ist völlig aus

ich habe es schon so probiert
case 'projekte':
eval("\$content = \"".showtpl("projekte.html")."\";");
include('links.php');
break;

und die links.php
<?php
echo'
<ul>
<li><a>plaene</a></li>
<li><a>rendering 2</a></li>
</ul>

';?>
so definiert... aber die zeigt es dann ganz oben an und nicht unter dem entsprechenden Menüpunkt ;)
wie gesagt...blutiger anfänger...bastel halt an der vorlage rum...lerning by doing/trying ^^
 
Moin Moin,

ohne jetzt deinen ganzen Seitenaufbau durcheinander zu bringen geht es meiner Meinung nach mit einer kleinen Hilfe folgendermaßen:

HTML:
<head>
    ....   
 <title>ABC</title>
    <meta http-equiv="Content-Script-Type" content="text/javascript" />
    <meta http-equiv="Content-Style-Type" content="text/css" />
    <link rel="stylesheet" type="text/css" href="./css/main.css" />
    <link rel="stylesheet" type="text/css" href="./css/message.css" />
     
		<script type="text/javascript" src="./jsfunctions.js">
		</script>
     </head>
  <body onload="initialize();">
 
		...
   
   <tr>
        <td id="navi_main">
          <div class="link_main"><a rel="nofollow" href="./index.php?section=start">Start</p2></a></div>
          <div class="link_main"><a rel="nofollow" href="./index.php?section=projekte">Projekte</a></div>
                       <?php echo $x['projekte']; ?>
           <div class="link_main"><a rel="nofollow" href="./index.php?section=kontakt">Kontakt</a></div>
                  ...


PHP:
<?php

include('include.php');
$x = array();   

switch($SECTION)
{
   
case 'start':
		eval("\$content = \"".showtpl("start.html")."\";"); 
	break;

case 'projekte':
		eval("\$content = \"".showtpl("projekte.html")."\";"); 
                $x['projekte'] = '<div class="link_untermenue"><a rel="nofollow" href="#">Pl&auml;ne</a></div>
                                          <div class="link_untermenue"><a rel="nofollow" href="#">Rendering</a></div>';
	break;
        ....

Nachteil an dieser Variante: die index.html muss in index.php umbenannt werden, ebenso bei jeder Verlinkung.. Ist generell sehr unsauber, weil Programmierung und Anzeige nicht getrennt sind, also sollte man möglichst verhindern, wenn mehrere Leute da durchsteigen müssen.

Achja, sollte klar sein, dass der PHP-Code abgerufen werden muss _bevor_ die HTML-Linkliste abgerufen wird. Aber so hattest du das glaube ich auch.

MfG, Lost1994
 
erstmal vielen vielen Dank Lost1994 ;-)

habe die änderungen mal soweit eingearbeitet (meintest du mit index.html in index.php unbennen schlicht die dateiendung zu ändern? oder muss ich da auch den code ändern und <?php und andere Sachen enfügen? wenn ja was genau muss ich ändern/oder ist es dir lieber ich poste die ganze index.hmtl?)
ob dein ratschlag wirklich funktioniert habe ich dank folgender Fehlermeldung noch nicht herausfinden können:

Warning: file(./tpl/index.html) [function.file]: failed to open stream: No such file or directory in C:\xampp\htdocs\inc\functions.php on line 5

Warning: implode() [function.implode]: Invalid arguments passed in C:\xampp\htdocs\inc\functions.php on line 5

zwar beschreibt die Meldung recht gut wo und was der Fehler ist, aber wie functions.php genau funktioniert ist für mich leider völlig undurchschaubar ;)


PHP:
<?php

function showtpl($tpl, $path="tpl") 
{
  $tpl = implode("", file("./".$path."/".$tpl));   <- LINE 5
  $tpl = str_replace("\"","\\\"",$tpl);
  return $tpl;
}

?>

LG Tschifeif
 
Da war kein File....
Lass dir mal mit
Code:
var_dump("./".$path."/".$tpl);
den Pfad vor dem implode() ausgeben und überprüfe ob er gültig ist.

Die Funktion ist mir sowieso suspekt. Zuerst ist $tpl ein Dateiname. Anschliessend Dateiinhalt bei dem die Zeilenumbrüche entfernt wurden. Zum Schluss werden in diesem Inhalt noch alle " durch \" ersetzt (und das von Hand - wo es doch PHP-Funktionen dafür gibt).

Ich weiss, hilft dir nicht weiter. Aber so sollte eine solche Funktion aussehen
PHP:
/**
 * liest den Inhalt einer Datei aus und entfertn alle Zeilenumbrüche
 * @param	String		Name der Datei
 * @param	String		Optional: Pfad des Ordners
 * @return	String
 */
function showTpl($tpl, $path="tpl"){
	$filePath = "./{$path}/{$tpl}";

	if(!file_exists($filePath)) throw new Exception("File {$filePath} not exists");

	$text = implode('', file($filePath));
	return addslashes($text);
}
 
hey yaslaw
wie bereits erwähnt ist php für mich ein ganz unbekannstes Pflaster deswegen hoffe ich ich hab dich richtig verstanden und das var_dump("./".$path."/".$tpl); in eine php datei kopiert und diese dann ausgeführt.
Dann kommt Fehlermeldung
Parse error: syntax error, unexpected '[' in C:\xampp\htdocs\inc\pfad.php on line 2
sry falls das jetzt eine ganz dumme frage ist ;)
 
ah danke für den link ;) jetzt hab ich auch geblickt wie ich es machen sollte ;)
Ausgabe ist dann: string(16) "./tpl/start.html" string(16) "./tpl/index.html"
daraufhin hab ich das dortige index.hmtl in index.php geändert.
Aber leider ist er immernoch unzufrieden

Notice: Undefined index: section in C:\xampp\htdocs\inc\vars.php on line 8

Parse error: syntax error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in C:\xampp\htdocs\index.php(42) : eval()'d code on line 38

passenden codeschnipsel:
1. Fehlermeldung
PHP:
$path = "http://".$_SERVER['HTTP_HOST'].rtrim(dirname($_SERVER['PHP_SELF']),'/\\')."/index.php?section=";
global $path;

if((!$_GET['section']) OR ($_GET['section'] == ""))
{
	$SECTION = 'start';                  <-- Line 8 (verweist dann auf meinen Willokmmenstext html file)
}
else
{
	$SECTION = $_GET['section'];
}
    
$MESSAGE = "";

?>

2. Fehlermeldung
PHP:
<?php

include('include.php');
$x = array();  

switch($SECTION)
{
  case 'start':
		eval("\$content = \"".showtpl("start.html")."\";"); 
	break;
  
  ...
	
	case 'projekte':
		eval("\$content = \"".showtpl("projekte.html")."\";");
          $x['projekte'] = 
          '<div class="link_untermenue"><a rel="nofollow" href="/tpl/plaene.html">Pl&auml;ne</a></div>
           <div class="link_untermenue"><a rel="nofollow" href="/tpl/rendering">Rendering</a></div>';
    break; 

...
	
	default:
		$MESSAGE['error'][] = 'not_found';
	break;
}

eval("print(\"".showtpl("index.php")."\");");  <-- LINE 42

?>
ist jetzt ein bisschen verwirrend weil es eine index.php (ehemals index.html) im Ordner der einzelnen Fensterinhalte gibt und die "normale" index.php
Besten Dank im Voraus
 
Zuletzt bearbeitet:
Warum hast du auf .php gewechselt?

Die retlichen Medlungen sund Kraut und Rüben quer durcheinander.

Seh ich das richtig, es wird einen PHP-Datei ausgelesen und dann mit eval() ausgeführt? Was soll das bringen? Du kannst sie doch direkt mit include() ausführen.
 
Lost1994 meinte ich müsste das sonst ginge das mit den untermenüs nicht weil das ja ein php befehl ist...
ja da geb ich dir völllig recht ;) bis grad hieß sie halt noch html ( aber der <?php echo $x['projekte']; ?> Befehl macht sie doch zur php oder?)
das war und ist ja das eigentliche Grundproblem (davor hat alles wunderbar funktioniert)
 
Zuletzt bearbeitet:
In deinem ersten Beitrag greifst du auf start.html zu. Dann schreibst du von index.html und jetzt solls index.php sein.
Sorry, ich habe gerade den absolut Nulldurchblick was du da zusammengebastelt hast.
 
Zurück