Hallo,
ich benutze ein CMS-Prozessor(XML Content Verarbeitung) als Framework für mein eigenes CMS (nextCMS, mehr unter http://www.hardcoding.net und http://sourceforge.net/projects/nextcms) und habe ein Problem:
In diesem CMS gibt es Extensions, Unterklassen der Klasse Extension. z.B. erzeugt der Aufruf in einem Template:
{ReDirect(type="action" )}
dass die Funktion getCode($paramList) Klasse ReDirect mit der Variable type=action verarbeitet wird:
Ich habe ein Formular welches als $_POST['ext'] = 'LogIn' übergibt. In der Datei login.php steht folgendes:
Also ein Login Forumular übergibt UserName, UserPassword und ext=LogIn an die Seite ReDirect in welcher die Klasse ReDirect mehrmals benutzt wird:
Wenn ich nur den ersten Aufruf im Template "{ReDirect(type="action" )}" habe, funktioniert alles doAction() aus class.LogIn wird ausgeführt. Wenn ich aber mehrere habe kommt der Fehler:
Fatal error: Cannot redeclare class login in c:\foxserv\www\...\nextcms\extensions\zuendwuerfel\login.php on line 2
Klar so ein Fehler kommt, wenn man include statt include_once benutzt. Aber in der Klasse welche die Klasse Extension und somit die Extension LogIn aufruft steht ja include_once:
Ich weiß es hört sich ein wenig kompliziert an, aber vielleicht weiß ja jemand ne Lösung.
Grüße und thx im Vorraus!
ich benutze ein CMS-Prozessor(XML Content Verarbeitung) als Framework für mein eigenes CMS (nextCMS, mehr unter http://www.hardcoding.net und http://sourceforge.net/projects/nextcms) und habe ein Problem:
In diesem CMS gibt es Extensions, Unterklassen der Klasse Extension. z.B. erzeugt der Aufruf in einem Template:
{ReDirect(type="action" )}
dass die Funktion getCode($paramList) Klasse ReDirect mit der Variable type=action verarbeitet wird:
Code:
<?php class ReDirect extends Extension { function getCode($paramList) { #Klasse einbinden if(!$ext) { include strtolower($_POST['ext']).'.php'; $ext = new $_POST['ext'](); } switch($paramList['type']) { case 'action': return $ext->doAction(); break; case 'url': return $ext->getURL(); break; case 'text': return $ext->getText(); break; } } } ?>
Code:
<?php class LogIn extends Extension { function getCode($paramList) { #LogIn Forumular if(!$_SESSION['UserAccess']) { #Template LogIn einbinden (da nicht verfügbar): $returncode = ' <form action="redirect.html" method="post"> <b>LogIn Name: </b><input type="text" name="UserName"><br> <b>Passwort: </b><input type="password" name="UserPassword"> <input type="hidden" name="ext" value="LogIn"><br> <input type="submit" value="Let me in!"> </form>'; } #User eingeloggt, Status anzeigen elseif($_SESSION['access']) { $returncode = ' <b>'.$_SESSION['UserName'].'</b><br> eingeloggt. <a href=" ">Ausloggen</a>'; } return $returncode; } function doAction() { #Userdaten der Session hinzufügen $_SESSION['UserName'] = $_POST['UserName']; $_SESSION['UserPassword'] = md5($_POST['UserPassword']); unset($_POST['UserName']); unset($_POST['UserPassword']); #tmp $UserName = $_SESSION['UserName']; $UserPassword = $_SESSION['UserPassword']; #DB Verbindung herstellen #Zugangsinformationen laden include 'config.php'; #db Klasse laden include 'db.php'; #Klasse und Verbindung initieren $db = new db($sqlhost,$sqluser,$sqlpassword,$sqldb); #Query $result=$db->query_first("SELECT UserID FROM users WHERE UserName='$UserName' && UserPassword='$UserPassword'"); #Überprüfen if($result['UserID']) { #Access in Session setzen $_SESSION['UserAccess'] = true; return 'okay'; } } function getURL() { #Gibt die Folge-URL aus #Verbesserung: {this_url} return './'; } function getText() { #Gibt eine Message aus return 'Vielen Dank '.$_SESSION['UserName'].', sie wurden eingeloggt!'; } } ?>
Code:
{Session}[B] {ReDirect(type="action" )} [/B] <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//DE"> <html> <head> <title>{sitetitle} - {title}</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"> <meta http-equiv="refresh" content="5;URL=[B] {ReDirect(type="url" )}[/B] "> </head> <body bgcolor="#BBB5AA"> <table width="100%" height="100%"> <tr valign="middle" align="center"> <td><b>[B] {ReDirect(type="text" )}[/B] </b><br> <a href="[B] {ReDirect(type="url" )}[/B] ">Falls Sie nicht gleich weitergeleitet werden, klicken Sie bitte hier...</a></td> </tr> </table> </body> </html>
Wenn ich nur den ersten Aufruf im Template "{ReDirect(type="action" )}" habe, funktioniert alles doAction() aus class.LogIn wird ausgeführt. Wenn ich aber mehrere habe kommt der Fehler:
Fatal error: Cannot redeclare class login in c:\foxserv\www\...\nextcms\extensions\zuendwuerfel\login.php on line 2
Klar so ein Fehler kommt, wenn man include statt include_once benutzt. Aber in der Klasse welche die Klasse Extension und somit die Extension LogIn aufruft steht ja include_once:
Code:
function loadExtension($name) { global $document_root, $settings; if (isset($settings->EXTENSIONS[$name])) $extension = $settings->EXTENSIONS[$name]; if (isset($extension)) { if (!file_exists($this->document_root . $extension)) printError("Die Extension-Datei '$extension' existiert nicht."); require_once($this->document_root . $extension); eval("\$ext_instance = new $name(\$this);"); return $ext_instance; } }
Ich weiß es hört sich ein wenig kompliziert an, aber vielleicht weiß ja jemand ne Lösung.
Grüße und thx im Vorraus!
Kommentar