Seite 1 von 1
Modul beenden wenn If Bedinung erfüllt ist
Verfasst: So 24. Mai 2015, 15:14
von stefkey
Hallo zusammen,
ich habe in einem Modul vornerweg die Abfrage ob jemand eingeloggt ist. Wie kann ich es lösen das wenn die Bedingung erfüllt ist das Modul nicht weiter ausgeführt wird. Ich möchte nicht um den ganzen Modulcode eine if-Schleife legen daher muss ich ja so vorgehen, oder?
Code: Alles auswählen
if ($auth->auth["uid"] == "nobody")
{
echo irgendwas und dann Modul abbruch
}
weiterer Modul code...
Schöne Pfingsten Euch!
Re: Modul beenden wenn If Bedinung erfüllt ist
Verfasst: Mo 25. Mai 2015, 07:54
von xmurrix
Hallo stefkey,
Der Modulcode wird im globalen Kontext ausgeführt, da kannst du auch nicht wie in einer Funktion mit der return-Anweisung den weiteren Programmablauf im Modulcode unterbrechen. Das geht nur mit einer if-Bedingung...
Gruß
xmurrix
Re: Modul beenden wenn If Bedinung erfüllt ist
Verfasst: Mo 25. Mai 2015, 08:41
von Zuschauer
Es gibt aber dennoch eine Möglichkeit, nicht den gesamten Modulcode in der if-Bedingung zu setzen: eine Funktion.
Code: Alles auswählen
function irgendwas() {
# Modulcode
}
if ($auth->auth['uid'] != 'nobody') {
irgendwas();
}
Ob das so Sinn macht sei mal dahingestellt, denn der gesamte Code ist genauso im Modul und wird geparst.
Besser wäre vielleicht, die Funktion in eine externe Datei auszulagern und nur bei Bedarf (wenn User eingeloggt) einzubinden (Achtung: 4.8er Code).
Code: Alles auswählen
if ($auth->auth['uid'] != 'nobody') {
cInclude('frontend', 'includes/meineDatei.php');
irgendwas();
}
Ein weiterer Vorteil hiervon ist, dass das Modul sofort mehrfach einsetzbar ist (keine doppelte Funktionsdeklaration).
Gruß
René
Re: Modul beenden wenn If Bedinung erfüllt ist
Verfasst: Mo 25. Mai 2015, 09:56
von xmurrix
Zuschauer hat geschrieben:Es gibt aber dennoch eine Möglichkeit, nicht den gesamten Modulcode in der if-Bedingung zu setzen: eine Funktion.
Code: Alles auswählen
function irgendwas() ...[/quote]
Das stimmt, man kann das auch in einer Funktion machen.
Ich persönlich rate mittlerweile davon ab, hatte schon sehr oft den Fall, dass eine Seite auf einmal nicht geht und die User nicht wissen, warum das so ist. Nicht jeder CONTENIDO User kennt sich mit Details über das CMS oder PHP aus, sie sind dann überfordert, wenn es Probleme gibt.
Viele sich nicht nicht im klaren, dass der Modulcode im globalen Kontext ausgeführt wird. Die User verwenden Module mehrmals in einem Layout und da muss man mit Funktionen vorsichtig sein, da man sie in PHP nur einmal deklarieren kann...
Grüße
xmurrix
Re: Modul beenden wenn If Bedinung erfüllt ist
Verfasst: Mo 25. Mai 2015, 10:48
von Faar
xmurrix hat geschrieben:... und da muss man mit Funktionen vorsichtig sein, da man sie in PHP nur einmal deklarieren kann...
Gäbe es da nicht noch die Möglichkeit der Klasse, bei der man einfach ein neues Objekt im Modul instantiiert (solange es nicht Singleton ist)?
Re: Modul beenden wenn If Bedinung erfüllt ist
Verfasst: Mo 25. Mai 2015, 11:44
von xmurrix
Faar hat geschrieben:Gäbe es da nicht noch die Möglichkeit der Klasse, bei der man einfach ein neues Objekt im Modul instantiiert (solange es nicht Singleton ist)?
Kann man auch, oder wie Zuschauer beschrieben hat, kann man die Funktion in eine Datei auslagern und diese Datei einbinden. Singleton oder statische Klasse wäre auch möglich, wenn man die Vor- und Nachteile davon weiß...
Gruß
xmurrix
Re: Modul beenden wenn If Bedinung erfüllt ist
Verfasst: Mo 25. Mai 2015, 11:59
von Faar
xmurrix hat geschrieben:Kann man auch, oder wie Zuschauer beschrieben hat, kann man die Funktion in eine Datei auslagern und diese Datei einbinden.
Es wäre aus Sicht Vieler (und auch meiner) wahrscheinlich der einfachere und ein bewährter Weg, denn wenn die Funktionen erst einmal da sind, braucht man sie nur in eine Datei packen und diese mit include() einparken.
Der Nachteil dabei ist, man muss immer eine extra Datei mit sich herum schleppen, also Modul + include-Datei. Irgendwann passiert der Fehler bei vielen (wie ich sah), dass die Includes vergessen werden oder am falschen Ort liegen.
Daher kam ich auf die Idee der Klasse, die doch eigentlich auch zusammen mit dem Modulcode in der Modul-Datei enthalten sein könnte (if !is_object(class){class}), oder?
Singleton oder statische Klasse wäre auch möglich, wenn man die Vor- und Nachteile davon weiß...
Ja, stimmt.
Die DB-Klasse ist meistens eine Singleton, damit nur eine Instanz des DB-Zugangs läuft.
Die Vor- und Nachteile in diesem Fall kannst du uns vielleicht benennen?
Ich hab ein etwas ähnliches Problem mit den Functions in einem Modul und frag mich, ob ich sie auslagere oder eine Klasse baue.
Re: Modul beenden wenn If Bedinung erfüllt ist
Verfasst: Mo 25. Mai 2015, 16:57
von Oldperl
Servus,
- Funktion-Includes gehören ins Modul (was bei 4.9 auch problemlos möglich ist). Mit Hilfe der cModuleHandler-Klasse kann man inzwischen auch auf den Modulpfad zugreifen und die Dateien entsprechend includieren.
- Um doppelte Instanzierungen zu vermeiden bietet sich die Funktion function_exists() an. Oder man nimmt ein include_once zum includieren
Ein cInclude im includes-Verzeichnis des Mandanten sollte man bei der 4.9 vermeiden, das ist eher 4.8er Vorgehen. In der 4.9er würde ich versuchen alle zum Modul gehörende Sachen auch im Modulverzeichnis zu hinterlegen, so ist ein Modularchiv leichter zu schnüren.
Gruß aus Franken
Ortwin
Re: Modul beenden wenn If Bedinung erfüllt ist
Verfasst: Mi 27. Mai 2015, 23:45
von stefkey
Danke sehr für die Infos. Ich hatte einen Denkfehler und benötige diese if-Schleife gar nicht. Sorry vielmals!
Aber trotzdem sind die Infos hier interessant. Danke und Grüße, stefkey