Du bist nicht angemeldet. Der Zugriff auf einige Boards wurde daher deaktiviert.

#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 wink.

Entweder du aktiviert die Verwendung von php in der config

$config['use_smarty_php_tags'] = true;

dann kannst du

verwenden.

Oder du erstellst dir einen benutzerdefinierten Tag (Administration > Erweiterungen Benutzerdefinierter Tag) mit dem Inhalt

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

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. ops

Natürlich geht das


Thema erledigt

Offline