menü/submenü wird nicht angezeigt

egokyniker

Grünschnabel
Ich möchte gerne einen weiteren menüpunkt erstellen, aber leider kriege ich das nicht ganz hin.

Es geht um Zeile 386-412
Ich wollte als menüpunkt Einstellungen und submenü Studienfächer haben, sie stehen schon da, aber beim anlicken erscheinen sehr viele errors
die dazugehörigen lib dateien befinden sich im ordner und die entsprechenden dateien im template ordner



PHP:
<?php

/** @brief Wandelt die rekursive Darstellung eines Menues in eine flache um
*
* Smarty kann keine Rekursionen, deswegen muss das Menue erst "flach" werden,
* bevor es an Smarty uebergeben werden kann. Gleichzeitig wird auch
* ausgelesen, was im Seiteninneren zu sehen ist und welche Funktionen
* die Daten aus der Datenbank holen.
*
* @param $page  URL der angeforderten Seite
* @param $inputArray  Das verschachtelte Menue
* @param $path  Der momentane Pfad
* @param $currentMenu  Das aktuelle flache Menue als Referenz
* @param $count  Anzahl der Eintraege im currentMenu als Referenz
* @param $activeEntry  Eintrag der angefordert wurde als Referenz
* @param $activeEntryList Eintraege der geoeffneten Eintraege
*/
function menue_serializeMenue($page, $inputArray, $path, &$currentMenu, &$count, &$activeEntry, &$activeEntryList)
{
  foreach($inputArray as $entry) {
  $currentMenu[$count]['name'] = $entry['name'];
   $currentMenu[$count]['shortcut_to'] = $entry['shortcut_to'];
  $currentMenu[$count]['inhalt'] = $entry['inhalt'];
  $currentMenu[$count]['nichtimmenue'] = $entry['nichtimmenue'];
  $currentMenu[$count]['preparefunktion'] = $entry['preparefunktion'];
  $currentMenu[$count]['prepareparameter'] = $entry['prepareparameter'];
  $currentMenu[$count]['lib'] = $entry['lib'];
  $currentMenu[$count]['title'] = $entry['title'];
  $currentMenu[$count]['offen'] = $entry['offen'];
 
  if (!empty($entry['link'])) {
  $currentMenu[$count]['link'] = $path.$entry['link'].'/';
  }
 
  $count++;
 
  if (substr($page, 0, strlen($path.$entry['link']) + 1) == $path.$entry['link'].'/' && isset($entry['link'])) {
  //Eintrag auf Aktiv setzen
  $currentMenu[$count - 1]['offen']=true;
  array_push($activeEntryList, $currentMenu[$count - 1]);
  $activeEntry = $entry;
  $isopen = 1;
  } else {
  $isopen=0;
  }
 
  // Untermenuepunkte oeffnen
  if ((isset($entry['submenue']) && count($entry['submenue']) > 0) && ((array_key_exists('offen', $entry) && $entry['offen']) || $isopen == 1))
  {
  $currentMenu[$count - 1]['type'] = 'menue-start';
  menue_serializeMenue($page, $entry['submenue'], $path.$entry['link'].'/', $currentMenu, $count, $activeEntry, $activeEntryList);
  $currentMenu[$count] = array('name' => '',
  'link' => '',
  'title' => '',
  'template' => '',
  'ladenfunktion' => '',
  'ladenparameter' => array(),
  'lib' => '',
  'type' => 'menue-ende',
  'submenue'=> null,
  'offen' => false,
  'shortcut_to' => null,
  'inhalt' => '',
  'nichtimmenue' => false,
  'preparefunktion' => '',
  'prepareparameter' => '');
  $count++;
  }
  }//foreach
}

/**
* @brief Erzeugt das Menue, lädt Bibliotheken und Unterfunktionen sowie Ausgabe an Browser
*
* Erzeugt das Menue in "flacher" Form für Smarty mit hilfe der serializeMenue() Funktion,
* lädt eine 404 Seite falls die URL falsch ist, leitet auf eine Seite weiter falls ein
* redirect eingetragen ist im aktiven Menuepunkt. Ansonsten wird das Template geladen (oder
* ein die() ausgegeben). Dann die zugehürige Library geladen und die init-Funktion laut
* Menue gestartet. Dann noch das main.tpl an Smarty, fertig!
*/
function menue_entry($dbh, &$smarty)
{
  global $root_url, $index_link, $global_startzeit;
  $url = $_SERVER['REQUEST_URI'];
  $root = $root_url.$index_link.'/';

  $page = ltrim(substr($url, strpos($url, $index_link) + strlen($index_link)), '/');
 
  $smarty->assign('tabelle', 'studenten'.substr($page, 0, strpos($page, '/')));

  $menue = menue_erzeugeHauptmenue($dbh);

  $count=0;
  unset($activeEntry);

  $finalmenu = array();
  $activeEntryList=array();
  menue_serializeMenue($root.$page, $menue, $root, $finalmenu, $count, $activeEntry, $activeEntryList);

  //aktiven Entry als aktiv markieren:
  $count = count($finalmenu);
  $lastopen = 0;
  for($i = 0; $i < $count; $i++)
  {
  if ($finalmenu[$i]['offen']) {
  $lastopen = $i;
  }
  }
  $finalmenu[$lastopen]['aktiv'] = 1;
  $smarty->assign('Menue',$finalmenu);
  $smarty->assign('menue_vorhanden', count($finalmenu)>0);
  $smarty->assign('NVleiste',$activeEntryList);
  $smarty->assign('html_title',$activeEntry['name']);

  //So, auch wirklich da, wo gemeint, oder auf einer Unterseite (nur bei nicht-dyn. Inhalt!)
  $url = rtrim($_SERVER['REQUEST_URI'],'/');

  // Zeigt 404 Seite an, wenn URL falsch
  if( (@strpos($url,$activeEntry['link'])!=strlen($url)-strlen($activeEntry['link'])) && $activeEntry['ladenfunktion']=='')
  {
  $smarty->caching = true;
  @header('HTTP/1.1 404 File Not Found');
  $smarty->assign('innentemplate','404.tpl');
  $smarty->assign('laufzeit', hilfe_getmicrotime() - $global_startzeit);
  $smarty->display('main.tpl','404.tpl');
  return;
  }

  //evtl redirect:
  if(isset($activeEntry['redirect_to']))
  {
  header('Location: '.$activeEntry['redirect_to']);
  return;
  }

  //Template setzen:
  if (isset($activeEntry['template']))
  {
  $smarty->assign('innentemplate',$activeEntry['template']);
  $smarty->assign('innentemplate_inhalt',$activeEntry['inhalt']);
  }
  else
  {
  //Ein Template _muss_ gesetzt sein!
  die('interner Fehler: Kein Template im Menüeintrag');
  }

  //nun Prepare-Fuktionen aufrufen:
  foreach($activeEntryList as $entry)
  {
  if(!empty($entry['preparefunktion'])) {
  require_once($entry['lib']);
  if (!is_callable($entry['preparefunktion'])) {
  throw new Exception('Division by zero.', E_MENU_PREPFUNC_UNCALLABLE);
  }
  $entry['preparefunktion']($entry['prepareparameter'], $smarty);
  }
  }

  //evtl. lib-Datei importieren:
  if(isset($activeEntry['ladenfunktion']))
  {
  //require_once($root_dir.$activeEntry['lib']);
  require_once($activeEntry['lib']);
  //Parameter 'urlparams' setzen:
  $params = @substr($root.$_SERVER['REQUEST_URI'], strpos($root.$_SERVER['REQUEST_URI'], $activeEntry['link'])+strlen($activeEntry['link'])+1);
  $activeEntry['ladenparameter'] = array_merge($activeEntry['ladenparameter'], array('urlparams'=>$params));
  $activeEntry['ladenfunktion']($dbh, $activeEntry['ladenparameter'],$smarty);
 
  //Wir rufen eine dyn. Funktion auf, also nicht cachen!
  $smarty->caching = false;
 
  //Das auch den anderen mitteilen...
  @header('Expires: Mon, 26 Jul 1997 05:00:00 GMT');
  @header('Last-Modified: '.gmdate("D, d M Y H:i:s").' GMT');
  @header('Cache-Control: no-store, no-cache, must-revalidate');
  @header('Cache-Control: post-check=0, pre-check=0',false);
  @header('Pragma: no-cache');
 
  //Zeit messen:
  $smarty->assign('laufzeit',hilfe_getmicrotime() - $global_startzeit);
 
  //Übrige Variablen zuweisen:
  global $udata;
  $smarty->assign('entry_username',$udata['username']);
  $smarty->assign('entry_angemeldet','ja');
  $smarty->display('main.tpl');
  }
  else
  {
  //sonst: nicht-dynamisch, also cachen
  //(zum Debuggen ist es einfacher so ;-)  ); Nach Debuggen auf true setzen!
  $smarty->caching = false;
  $smarty->assign('laufzeit',hilfe_getmicrotime() - $global_startzeit);
  //als ID das innentemplate verwenden; die Seite ist damit eindeutig bestimmt
  $smarty->display('main.tpl',$activeEntry['template']);
  }
}

/**
* @brief Erzeugt das Untermenü für eine Klausur
*
* @param $klausurid Die KlausurID
*/
function menue_erzeugeKlausurmenue($dbh, $klausurid)
{
  $result = array();

  $klausur = klausur_lesenId($dbh, $klausurid);


  //Untermenü von Studentenkartei
  $submenue = array();

  if ($klausur['changes'] == 0)
  {
  $eintrag = array('name' => 'Neuer Eintrag',
  'link' => 'neu',
  'title' => 'neuen Studenten eintragen',
  'template' => 'kartei.tpl',
  'ladenfunktion' => 'kartei__laden',
  'ladenparameter' => array('neu' => true, 'klausurid' => $klausur['id']),
  'lib' => 'lib_kartei.php',
  'offen' => false,
  'shortcut_to' => null,
  'inhalt' => '',
  'nichtimmenue' => false,
  'preparefunktion' => '',
  'prepareparameter' => ''
  );
  array_push($submenue, $eintrag);

/*  $eintrag = array('name' => 'Exportieren',
  'link' => 'export',
  'title' => 'Daten exportieren',
  'template' => 'export.tpl',
  'ladenfunktion' => 'exportieren__laden',
  'ladenparameter' => array('klausurid' => $klausur['id']),
  'lib' => 'lib_imexport.php');
  array_push($submenue, $eintrag);

  $eintrag = array('name' => 'Importieren',
  'link' => 'import',
  'title' => 'Daten importieren',
  'template' => 'import.tpl',
  'ladenfunktion' => 'importieren__laden',
  'ladenparameter' => array('klausurid' => $klausur['id']),
  'lib' => 'lib_imexport.php');
  array_push($submenue, $eintrag);*/
  }
  $eintrag = array('name' => 'Studentenkartei',
  'link' => 'kartei',
  'title' => 'Studentenkartei',
  'template' => 'kartei.tpl',
  'ladenfunktion' => 'kartei__laden',
  'ladenparameter' => array('changes' => $klausur['changes'], 'klausurid' => $klausur['id']),
  'lib' => 'lib_kartei.php',
  'submenue'=> $submenue,
  'offen' => false,
  'shortcut_to' => null,
  'inhalt' => '',
  'nichtimmenue' => false,
  'preparefunktion' => '',
  'prepareparameter' => '');
  array_push($result, $eintrag);

/* $eintrag = array('name' => 'Platzkarten',
  'link' => 'platzkarten',
  'title' => 'Platzkarten für Hörsaaleinteilung erzeugen',
  'template' => 'platzkarten.tpl',
  'ladenfunktion' => 'platzkarten__laden',
  'ladenparameter' => array('klausurid' => $klausur['id']),
  'lib' => 'lib_platzkarten.php',
  'offen' => false,
  'shortcut_to' => null,
  'inhalt' => '',
  'nichtimmenue' => false,
  'preparefunktion' => '',
  'prepareparameter' => '');
  array_push($result, $eintrag); */

  $eintrag = array('name' => 'Listen',
  'link' => 'listen',
  'title' => 'Listen erzeugen',
  'template' => 'listen.tpl',
  'ladenfunktion' => 'listen__laden',
  'ladenparameter' => array('klausurid' => $klausur['id']),
  'lib' => 'lib_listen.php',
  'offen' => false,
  'shortcut_to' => null,
  'inhalt' => '',
  'nichtimmenue' => false,
  'preparefunktion' => '',
  'prepareparameter' => '');
  array_push($result, $eintrag);

  $eintrag = array('name' => 'freie Liste',
  'link' => 'freieliste',
  'title' => 'freie Liste erzeugen',
  'template' => 'freieliste.tpl',
  'ladenfunktion' => 'listen__laden',
  'ladenparameter' => array('klausurid' => $klausur['id']),
  'lib' => 'lib_listen.php',
  'offen' => false,
  'shortcut_to' => null,
  'inhalt' => '',
  'nichtimmenue' => false,
  'preparefunktion' => '',
  'prepareparameter' => '');
  array_push($result, $eintrag);

  $eintrag = array('name' => 'Statistiken erstellen',
  'link' => 'statistik',
  'title' => 'Statistiken erstellen',
  'template' => 'statistik.tpl',
  'ladenfunktion' => 'statistik__laden',
  'ladenparameter' => array('klausurid' => $klausur['id']),
  'lib' => 'lib_statistik.php',
  'offen' => false,
  'shortcut_to' => null,
  'inhalt' => '',
  'nichtimmenue' => false,
  'preparefunktion' => '',
  'prepareparameter' => '');
  array_push($result, $eintrag);

  return $result;
}

/**
* @brief Erzeugt das komplette Menue
*
* Hierbei werden alle Klausuren angesehen und für jede Klausur ein Menüeintrag
* erzeugt und das entsprechende Untermenü angehängt.
* Desweiteren wird das Administrative Menü erzeugt.
*/
function menue_erzeugeHauptmenue($dbh)
{
  global $root_url_seite;

  $result = array();

  //alle Klausuren laden:
  $klausuren = klausur_alleLesen($dbh);


  if (!empty($klausuren))
  while (list($k, $v) = each($klausuren))
  {
  $eintrag = array('name' => $v['name'],
  'link' => $v['id'],
  'title' => $v['name'],
  'template' => 'klausur.tpl',
  'ladenfunktion' => 'klausur__laden',
  'ladenparameter' => array('id' => $v['id']),
  'lib' => 'lib_klausur.php',
  'submenue' => menue_erzeugeKlausurmenue($dbh, $v['id']),
  'offen' => false,
  'shortcut_to' => null,
  'inhalt' => '',
  'nichtimmenue' => false,
  'preparefunktion' => '',
  'prepareparameter' => '');
  array_push($result, $eintrag);
  }

  $eintrag = array('name' => '--',
  'link' => '',
  'title' => '',
  'template' => '',
  'ladenfunktion' => '',
  'ladenparameter' => array(),
  'lib' => '',
  'offen' => false,
  'shortcut_to' => null,
  'inhalt' => '',
  'nichtimmenue' => false,
  'preparefunktion' => '',
  'prepareparameter' => '');
  array_push($result, $eintrag);




//Einstellungen:
 
  $submenue = array();
  $eintrag = array('name' => 'Studienfächer',
  'link' => 'faecher',
  'title' => 'Studienfachliste bearbeiten',
  'template' => 'faecher.tpl',
  'ladenfunktion' => 'faecher_laden',
  'ladenparameter' => array(),
  'lib' => 'lib_faecher.php');
  array_push($submenue, $eintrag);
   
  $eintrag = array('name' => 'Einstellungen',
  'link' => 'einstellungen',
  'title' => 'globale Einstellungen ändern',
  'template' => 'einstellungen.tpl',
  'ladenfunktion' => 'einstellungen_laden',
  'ladenparameter' => array(),
  'lib' => 'lib_einstellungen.php',
      'offen' => false,
  'shortcut_to' => null,
  'inhalt' => '',
  'nichtimmenue' => false,
  'preparefunktion' => '',
  'prepareparameter' => '',
  'submenue' => $submenue);
  array_push($result, $eintrag);
 


  $eintrag = array('name' => 'Neue Klausur',
  'link' => 'neueklausur',
  'title' => 'Neue Klausur anlegen',
  'template' => 'neue_klausur.tpl',
  'ladenfunktion' => 'klausur__laden',
  'ladenparameter' => array(),
  'lib' => 'lib_klausur.php',
  'offen' => false,
  'shortcut_to' => null,
  'inhalt' => '',
  'nichtimmenue' => false,
  'preparefunktion' => '',
  'prepareparameter' => '');
  array_push($result, $eintrag);

  $eintrag = array('name' => 'Benutzer',
  'link' => 'benutzer',
  'title' => 'Benutzer dieses Web-Systems einsehen und verwalten',
  'template' => 'benutzer.tpl',
  'ladenfunktion' => 'benutzer__laden',
  'ladenparameter' => array(),
  'lib' => 'lib_benutzer.php',
  'offen' => false,
  'shortcut_to' => null,
  'inhalt' => '',
  'nichtimmenue' => false,
  'preparefunktion' => '',
  'prepareparameter' => '');
  array_push($result, $eintrag);

  $eintrag = array('name' => 'Exportieren',
  'link' => 'export',
  'title' => 'Klausuren exportieren',
  'template' => 'export.tpl',
  'ladenfunktion' => 'exportieren__laden',
  'ladenparameter' => array(),
  'lib' => 'lib_imexport.php',
  'offen' => false,
  'shortcut_to' => null,
  'inhalt' => '',
  'nichtimmenue' => false,
  'preparefunktion' => '',
  'prepareparameter' => '');
  array_push($result, $eintrag);

  $eintrag = array('name' => 'Zugangskontrolle',
  'link' => 'zugang',
  'title' => 'Adressen fuer den Zugang verwalten',
  'template' => 'zugang.tpl',
  'ladenfunktion' => 'zugang__laden',
  'ladenparameter' => array(),
  'lib' => 'lib_zugang.php',
  'offen' => false,
  'shortcut_to' => null,
  'inhalt' => '',
  'nichtimmenue' => false,
  'preparefunktion' => '',
  'prepareparameter' => '');
  array_push($result, $eintrag);

  $eintrag = array('name' => 'Home',
  'link' => 'home',
  'title' => 'home',
  'template' => 'home.tpl',
  'ladenfunktion' => 'home__laden',
  'ladenparameter' => array(),
  'lib' => 'lib_home.php',
  'nichtimmenue' => true,
  'offen' => false,
  'shortcut_to' => null,
  'inhalt' => '',
  'nichtimmenue' => false,
  'preparefunktion' => '',
  'prepareparameter' => '');
  array_push($result, $eintrag);
 
  return $result; 
}
 
OT: Du hast leider eine unmögliche Art, Threads zu erstellen. :-\ Das kann man echt nicht anders ausdrücken. Bitte gib dir damit einfach mal mehr Mühe. Wir können es auch nicht ändern, dass du da fremden Code übernehmen musstest. Es kann nicht sein, uns einfach mal ~500 Zeilen Code hinzuklatschen mit „da geht was nicht“ als so ziemlich einzigem Kommentar.
 
Zurück