Hilfe - Suche - Mitglieder - Kalender
Vollansicht: Bah, immer beim zweiten aufruf PHP Error?
Forum Sefrengo.org > Allgemeine Foren > Entwicklung
saschapi
Ich versuche ein Modul zu schräuben, dass auf eine übergebene Variable testet und diese mit einem Textfeld vergleicht.
Beim ersten Mal funzt das auch prima, beim zweiten mal gibt es aber folgende Fehlermeldung.

CODE

Fatal error: Call to undefined function: type_output_text() in
/www/.....hierpfad....../cms/inc/frontend.php(250) : eval()'d code on line 1312


Offensichtlich (weil beim zweiten mal) ein Cache Problem. Woran liegt das?

Hier mein Moduloutput:

CODE
<CMSPHP>
$honkurl = <cms:mod type="text" id="1" title="Passwort" menuoptions="false" addslashes="true"/>;
if ($view != "edit" && $kpcode != $honkurl) {
$url = $HTTP_REFERER. "&wrongcode=true";

if ($pcode != $honkurl ) {
header("Location: $url");
} }



if($honkurl == '' && $view == "edit") {
echo "<div class=\"error\">Es ist kein Passwort definiert!!! Bitte geben Sie ein Passwort ein!</div>";

} elseif($honkurl != '' && $view == "edit") {
echo "<div class=\"ok center\">Passwort ist eingerichtet: \"".$honkurl."\"</div> ";
}
</CMSPHP>

<div class="center">
<cms:mod type = "typegroup" elements = "text[1]" title = "Kurspasswort eingeben" />
</div>


Sollte doch eigentlich alles stimmen sad.gif
Olaf
Soll das von außen zugänglich sein? Ich frag wegen Referrer, der könnte auch deaktiviert sein, nur falls du das nicht bedacht hast...
saschapi
Das wollte ich noch weiter abfangen. ich hake ja schon vorher... wink.gif Aber danke für den Hinweis. Erstmal muss ich aber das ganze überhaupt zum laufen bringen bevor es ans finetuning geht! wink.gif
bjoern
Du mischt gecachtes und ungecachtes PHP mit CMS:Tags. CMS:Tags sind nur im ungecachtem PHP möglich. Beim ersten Skriptaufruf wird die Seite in den Cache geschrieben: Dort sind die Funktionen, die von den CMS:tags benötigt werden noch vorhanden. Kommt die Seite aus dem Cache sind die Funktionen nicht mehr da und es gibt den gezeigten Fehler.

Einfachste und böseste Möglichkeit: Cachecontrolmodul auf der Seite benutzen, mit Cachezeit von 0.
saschapi
ZITAT(bjoern @ Mon. 2. July 2007, 12:44) *
Einfachste und böseste Möglichkeit: Cachecontrolmodul auf der Seite benutzen, mit Cachezeit von 0.



Wieso ist das so böse? huh.gif
bjoern
Weil Du den Cache schreibst und dann gleich wieder löscht, was ja eigentlich nicht im Sinne des Erfinders ist, geht aber.

Andere Möglichkeit wäre, gecachte Inhalte in "dynamisches" PHP rüberzuretten. Das Kontaktformular oder das Contentflex machen das zum Beispiel so. Das setzt ein wenig Programmierung voraus, hatte ich gestern keine Zeit das zu erklären, heute aber schon. smile.gif

Guck Dir einfach folgendes Beispiel an. Kopier es einfach in die Modulfrontendausgabe.

QUELLTEXT
<CMSPHP:CACHE>
//Alle Variablen, die nur innerhalb des gecachten PHPs sichtbar sind, auch für dynamisches PHP zur Verfügung stellen

//Auf cms:tags kann nur innerhalb von gecachten PHP zugegriffen werden
$elements['wysiwyg2:1']    = <cms:mod type="wysiwyg2"   id="1" addslashes="true" />;
$elements['wysiwyg2:2']    = <cms:mod type="wysiwyg2"   id="2" addslashes="true" />;

//innerhalb von gecachten PHP wird ein <CMSPHP> Tag erzeugt. Darin wiederum werden die CMS:tag
//Variablen ausgegeben.
echo '<CMSPHP>';
if (is_array($elements)) {
foreach($elements AS $k => $v){
    echo '$mvars["'.$k.'"] = "'. addslashes($v) .'";'."\n";
}}
echo '</CMSPHP>';
</CMSPHP:CACHE>

<CMSPHP>
//Die CMS:tag Variablen wurden in dynamisches PHP getette und können nun ausgegeben werden.
echo $mvars['wysiwyg2:1'];
echo '<hr />';
echo $mvars['wysiwyg2:2'];
</CMSPHP>


Das klinkt jetzt vielleicht ein wenig kompliziert, ist aber eigentlich recht simpel. Du musst Dir vor Augen halten, das innerhalb von Sefrengo PHP immer 2 mal ausgeführt wird. Zuerst wird das <CMSPHP:CACHE> ausgeführt. Die daraus resultierende Ausgabe wandert in den Cache. Unser oberes Beispiel sieht dann nach der ersten Ausführung im Cache so aus:

QUELLTEXT
<CMSPHP>
$mvars["wysiwyg2:1"] = "Inhalt von dem, was der Redakteur im wysiwyg2:1 eingegeben hat.";
$mvars["wysiwyg2:2"] = "Inhalt von dem, was der Redakteur im wysiwyg2:2 eingegeben hat.";
</CMSPHP>

<CMSPHP>
echo $mvars['wysiwyg2:1'];
echo '<hr />';
echo $mvars['wysiwyg2:2'];
</CMSPHP>


Sobald die Inhalte dann bei einem Seitenaufruf aus dem Cache entnommen werden, wird <CMSPHP> Teil ausgeführt und die Ausgabe im Frontend sieht dann folgendermassen aus:

QUELLTEXT
Inhalt von dem, was der Redakteur im wysiwyg2:1 eingegeben hat.
<hr />
Inhalt von dem, was der Redakteur im wysiwyg2:2 eingegeben hat.
saschapi
Björn ist der geilste! wink.gif

Supi. Funzt.

Außerdem ist das mal eine echt gute erklärung der Problematik! Werde das heut Abend mal ins Wiki posten. smile.gif
bjoern
Kommunikationswissenschaftler können sich doch am Besten artikulieren. tongue.gif Das mit dem Wiki finde ich eine sehr gute Idee. smile.gif
saschapi
Ist drin. Habe allerdings weniger Kommunikationswissenschaftlich gearbeitet, sonder neinfach viel von deiner guten Erklärung kopiert wink.gif
Dieses ist eine vereinfachte Darstellung unseres Foreninhaltes. Um die detaillierte Vollansicht mit Formatierung und Bildern zu betrachten, bitte hier klicken.
Invision Power Board © 2001-2024 Invision Power Services, Inc.