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!
 
          
 "Cannot redeclare class" trotz include_once
									
									
									"Cannot redeclare class" trotz include_once
								 Moderator
 Moderator
Kommentar