Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.
Seiten: 1
#1 21. Juni 2013 19:16
- cardhu
- hat von CMS/ms gehört
- Registriert: 15. Mai 2013
- Beiträge: 8
[GELÖST] functionen in UDT verwenden error
Hallo ich möchte gerne die function hallo() { echo 'HALLO'; } in einem UDT verwenden bekomme aber immer nur folgende Fehlermeldung.
Fatal error: Call to undefined function hallo() in ....
Geht das generell nicht oder mache ich was falsch?
Offline
#2 23. Juni 2013 02:58
- Andynium
- Moderator
- Ort: Dohna / SN / Deutschland
- Registriert: 13. September 2010
- Beiträge: 7.018
- Webseite
Re: [GELÖST] functionen in UDT verwenden error
Vermutlich hast du da im Workflow und / oder Verständnis einen kleinen Fehler .
Entweder du aktiviert die Verwendung von php in der config
$config['use_smarty_php_tags'] = true;
dann kannst du
{php}echo 'HALLO';{/php}
verwenden.
Oder du erstellst dir einen benutzerdefinierten Tag (Administration > Erweiterungen Benutzerdefinierter Tag) mit dem Inhalt
echo 'HALLO';
und dem Namen hallo. Dann lässt sich der Tag über {hallo} aufrufen.
Offline
#3 23. Juni 2013 19:11
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: [GELÖST] functionen in UDT verwenden error
Ein kleiner Exkurs zu UDTs:
Ein UDT braucht keine
function meineFunktion() {
}
Dieser Teil ist bereits mit umgesetzt. Es ist jedoch problemlos möglich, zusätzliche Funktionen einzubauen. Die so eingebaute Funktion muss jedoch im UDT explizit aufgerufen werden. Beispiel:
function meinHallo() {
echo "hallo";
}
meinHallo();
Einem UDT können diverse Parameter übergeben werden. Alle Parameter welche im Smartytag eingefügt werden, sind als $params[] verfügbar. Beispiel (UDT Name = "meinHallo"):
{meinHallo text="hallo du" size="10" div=true class="hallo"}
im UDT ruft man diese Parameter nun wie folgt auf:
$text = isset($params['text']) ? $params['text'] : '';
$size = isset($params['size']) ? $params['size'] : '';
$div = isset($params['div']) ? $params['div'] : '';
$class= isset($params['class']) ? $params['class'] : '';
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#4 23. Juni 2013 20:08
- Cherry
- arbeitet mit CMS/ms
- Registriert: 15. Dezember 2010
- Beiträge: 529
Re: [GELÖST] functionen in UDT verwenden error
OffTopic:
Danke für diese Zusammenfassung
Offline
#5 25. Juni 2013 14:51
- kampkrusty
- Server-Pate
- Registriert: 03. April 2011
- Beiträge: 263
Re: [GELÖST] functionen in UDT verwenden error
@nockenfell
danke für die Zusammenfassung. Kannst du dazu nochmal ein praxisnahes Beispiel geben?
ff-jena-mitte.de
Offline
#6 25. Juni 2013 15:18
- nockenfell
- Moderator
- Ort: Gontenschwil, Schweiz
- Registriert: 09. November 2010
- Beiträge: 2.934
- Webseite
Re: [GELÖST] functionen in UDT verwenden error
Undokumentiert:
if ($params["pfad"] == "") echo "kein Bildpfad ausgefüllt.";
else {
if ($params["anzahl"] == "") $params["anzahl"] = 2;
if (substr($params["pfad"],0,1) != "/") $params["pfad"] = "/".$params["pfad"];
if (substr($params["pfad"],-1) != "/") $params["pfad"] .= "/";
$bilderdir = $_SERVER["DOCUMENT_ROOT"].$params["pfad"];
$extList = array();
$extList['gif'] = "image/gif";
$extList['jpg'] = "image/jpeg";
$extList['jpeg'] = "image/jpeg";
$extList['png'] = "image/png";
$img = null;
// Dateien aus dem bilderdir in ein Array lesen
$bilderfileList = array();
$handle2 = opendir($bilderdir);
while ( false !== ( $file2 = readdir($handle2) ) )
{
$file_info2 = pathinfo($file2);
if (isset( $extList[ strtolower( $file_info2['extension'] ) ] ) and strpos($file2,"humb_") == 0 and strpos($file_info2['filename'],"_thumb") != False )
{
$bilderfileList[] = $file2;
}
}
closedir($handle2);
if (count($bilderfileList) == 0)
echo "Der angegebene Ordner ".$params["pfad"]." enthält keine Bilder";
else {
// Reihenfolge der Arrays zufällig mischen
shuffle($bilderfileList);
for ($i=0;$i<$params["anzahl"];++$i) {
$url = str_replace("_thumb","",$params["pfad"].$bilderfileList[$i]);
$pathinfo = pathinfo($url);
$titel = str_replace("_"," ",$pathinfo["filename"]);
$groesse=getimagesize($bilderdir.$bilderfileList[$i]);
echo "<p><div class='captionborder' style='width:".$groesse[0]."px'><a href=\"".$url."\"><img src=\"".$params["pfad"].$bilderfileList[$i]."\" alt=\"".$titel."\" /></a></div></p>\r\n";
}
}
}
Damit werden Bilder aus einem Ordner ausgegeben. Ein Beispiel das ich noch rumliegen hatte. Mittlerweile setze ich UDT eher selten ein und baue mir die Dinge dich ich brauche in das Modul ToolBox ein.
[dieser Beitrag wurde mit 100% recycled bits geschrieben]
Mein Blog / Diverse Links rund um CMS Made Simple
Module: btAdminer, ToolBox
Offline
#7 25. Juni 2013 15:22
- kampkrusty
- Server-Pate
- Registriert: 03. April 2011
- Beiträge: 263
Re: [GELÖST] functionen in UDT verwenden error
Ok, danke.
ff-jena-mitte.de
Offline
#8 29. Juni 2013 18:17
- cardhu
- hat von CMS/ms gehört
- Registriert: 15. Mai 2013
- Beiträge: 8
Re: [GELÖST] functionen in UDT verwenden error
Hallo,
erst mal entschuldigung das ich mich jetzt erst melde.
Also das habe ich versucht einen UDT {test} angelegt mit folgenden Inhalt:
function meinHallo() {
$ausgabe = 'hallo';
return $ausgabe;
}
echo 'Hier wird das '.meinHallo().' ausgegeben';
Wenn ich das in eine Seite mit {test} einbinde kommt aber kein "hallo" und garnichts, auch keine Fehlermeldung.
Also kann man anscheinend keine function() im UDT verwenden schade.
Offline
#9 29. Juni 2013 18:50
- NaN
- Moderator
- Ort: Halle (Saale)
- Registriert: 09. November 2010
- Beiträge: 4.437
Re: [GELÖST] functionen in UDT verwenden error
Wenn ich das in eine Seite mit {test} einbinde kommt aber kein "hallo" und garnichts, auch keine Fehlermeldung.
Ist denn die Ausgabe von Fehlermeldungen aktiviert?
(Siehe "Generelle Vorgehensweise bei Fehlersuche")
Also kann man anscheinend keine function() im UDT verwenden schade.
Doch kann man. Bei allen Infos, die hier gegeben wurden, wurde eines vergessen:
Funktionen kann man nur ein einziges Mal deklarieren. UDTs können aber mehrfach verwendet werden. Bei jedem Aufruf wird der PHP-Code des UDTs erneut ausgeführt. D.h. die Funktion wird jedes Mal erneut deklariert. Das führt zu einem fatalen Fehler. Das bedeutet, wenn man Funktionen in UDTs verwenden will, muss man diese in eine if-Bedingung einschließen, die prüft, ob die Funktion bereits vorhanden ist.
z.B.
if(!function_exists('meinHallo')) {
function meinHallo() {
$ausgabe = 'hallo';
return $ausgabe;
}
}
echo 'Hier wird das '.meinHallo().' ausgegeben';
Es macht aber nicht viel Sinn, Funktionen in UDTs zu packen. UDTs sind Funktionen. Wenn es komplexer wird, und weitere Funktionen nötig sind, dann würde ich eher ein Plugin schreiben.
Module: GBFilePicker, AdvancedContent
Sicherheit: Beispiel .htaccess-Datei
CMSms 1.12 unter PHP 7:
cmsms-1.12.3.zip (inoffiziell - komplett inkl. Installer)
CMSms 1.12 unter PHP 8:
cmsms-1.12.4.zip (inoffiziell - komplett inkl. Installer)
Offline
#10 30. Juni 2013 13:47
- cardhu
- hat von CMS/ms gehört
- Registriert: 15. Mai 2013
- Beiträge: 8
Re: [GELÖST] functionen in UDT verwenden error
Hallo vielen Dank,
also ich verwende das UDT nur einmal auf der Seite.
Auch der Vorschlag mit der If Abfrage funktioniert nicht. Ich mche jetzt ein PlugIn aus dem UDT, wobei das ja eigentlich auch nur funktionen sind.
Mhh na mal sehen sonst wirds halt wieder Spagetticode (Back to the Roots) :-)
Offline
#11 30. Juni 2013 14:12
- cardhu
- hat von CMS/ms gehört
- Registriert: 15. Mai 2013
- Beiträge: 8
Re: [GELÖST] functionen in UDT verwenden error
Hallo sorry für die Mühe,
ich habe eine mehrsprachige Seite und hab das {test} in eine Seite eingebunden die ich nicht aufgerufen habe.
Natürlich geht das
Thema erledigt
Offline
Seiten: 1