Ergebnis 1 bis 12 von 12

Thema: eigene öffentliche Methode für ce_image.tpl

  1. #1
    Contao-Fan
    Registriert seit
    09.05.2011.
    Ort
    Hamburg
    Beiträge
    296

    Standard eigene öffentliche Methode für ce_image.tpl

    Hey Leute,
    wie progrmmier ich eine eigene Methode / Klasse in einem eigenen Modul,
    welche ich dann im Template ce_image.tpl aufrufen kann?

    Ich habe es schon mit dem getImage Hook versucht aber ich glaube das ist nicht das richtige und zum laufen habe ihn ihn auch nicht bekommen.

    Ist der Hook der richtige Weg oder muss ich auf eine andere Art eine eigene Methode so public setzen, damit ich sie wo anders wieder aufrufen kann?

    Vielen Dank,
    Robert

  2. #2
    Contao-Nutzer Avatar von easy
    Registriert seit
    17.03.2011.
    Ort
    Remagen
    Beiträge
    58

    Standard

    Hallo blue12,

    wenn Du irgendeine beliebige Funktion erstellen möchtest, dann kannst Du doch einfach ein Modul z.B. in einem eigenen Ordner unter Module rein stellen und dann benutzen.

    Beispiel unter ..system/modules/test/Test.php:
    Code:
    <?php if (!defined('TL_ROOT')) die('You can not access this file directly!');
    class Test extends Frontend
    {
        //
        static function doSomething() {
            echo "hallo Welt da draussen...!";
      }
    }
    ?>
    In diesem Fall könntest Du die Methode doSomething() wie folgt im Template aufrufen:
    Code:
    Test::doSomething();
    Hilft das weiter?

  3. #3
    Contao-Fan
    Registriert seit
    09.05.2011.
    Ort
    Hamburg
    Beiträge
    296

    Standard

    Hey easy,
    ja dein Codebeispiel ist super vielen Dank. Eine Frage bleibt für mich noch:
    Muss ich noch etwas in der config.php eintragen?

    So was in etwa:
    PHP-Code:
    $GLOBALS['TL_HOOKS'][][] = array('Test''doSomething'); 
    Bin mir nur nicht sicher ob es sich hier um einen HOOK handelt oder ob ich das überhaupt brauch ???

  4. #4
    Contao-Nutzer Avatar von easy
    Registriert seit
    17.03.2011.
    Ort
    Remagen
    Beiträge
    58

    Standard

    Hallo blue,

    hattest Du heute Nachtschicht?

    Also dieses Beispiel ist eine Hook-unabhängige Funktion. Muss also nicht derart deklariert werden. Hooks musst Du genau dann eintragen, wenn Du gezielt eine bestimmte Funktionalität von bestimmten Schnittstellen erweitern oder abändern möchtest.
    Beispielsweise, wenn Du den Benutzernamen eines neu angelegten Benutzers in der Mitgliederverwaltung identisch haben möchtest mit der angegeben E-Mailadresse, dann musst Du folgendes definieren:
    In der config.php Deines Modulverzeichnisses
    Code:
    // config.php
    $GLOBALS['TL_HOOKS']['createNewUser'][] = array('MyClass', 'myCreateNewUser');
    In deiner Klasse (hier MyClass.php)
    Code:
    class MyClass extends Frontend
    { 
    // MyClass.php
      public function myCreateNewUser($intId, $arr)
      {
       $arrUpd = array('login' => 1,
                       'username'  => $arr['email'],
                      ); 
       $this->Database->prepare("UPDATE tl_member %s WHERE id=?")
                      ->set($arrUpd)
                      ->execute($intId);
     }
    }
    Für nähere Beschreibungen zu den Hooks kannst Du dir auch mal http://www.contao.org/hooks-verwenden.html ansehen. Jeder Hook bekommt bestimmte Parameter mit, die Du weiter verarbeiten kannst.

    Im o.g. Beispiel wird einfach der Username gleich der schon angegebenen email gesetzt und mit login=1 die sofortige Anmeldung zugelassen. Mit dem Update wird der Datensatz in der Datenbank aktualisiert.

    Alles klar soweit?

    Gruß

    easy

  5. #5
    Contao-Fan
    Registriert seit
    09.05.2011.
    Ort
    Hamburg
    Beiträge
    296

    Standard

    Jab, denke schon.
    Das es kein HOOK ist, ist mir jetzt auch klar. Aber ich hätte eben nicht gedacht, das es so einfach ist die Klasse im Frontend zur Verfügung zu stellen.
    Bin davon ausgegangen das unbedingt eine config.php mit bestimmten Inhalt exesitieren muss.

    Vielen Dank
    Robert

  6. #6
    Contao-Fan
    Registriert seit
    09.05.2011.
    Ort
    Hamburg
    Beiträge
    296

    Standard

    Was ich jetzt aber nicht so richtig verstehe: wieso funktioniert diese Deklaration nicht:
    PHP-Code:
    Test $myVar = new Test(); 
    Ich müsste doch ein Object von der Klasse Test erstellen können, oder nicht?

  7. #7
    Contao-Nutzer Avatar von easy
    Registriert seit
    17.03.2011.
    Ort
    Remagen
    Beiträge
    58

    Standard

    Lass einfach mal den Typ Test weg.
    PHP ist kein Java
    $myVar = new Test();
    $myVar->callMethode...(...);

    Sollte so funktionieren.

  8. #8
    Contao-Fan
    Registriert seit
    09.05.2011.
    Ort
    Hamburg
    Beiträge
    296

    Standard

    leider nein!
    Ich habe jetzt in system->modules einen Ordner Namens test mit einer Datei Namens Test angelegt. Die hat folgenden Inhalt:

    PHP-Code:
    <?php if (!defined('TL_ROOT')) die('You cannot access this file directly!');
    class 
    Test extends Frontend
    {
        static function 
    doSomething() {
            echo 
    "hallo Welt da draussen...!";
      }
    }
    ?>
    Im Ordner templates habe ich das Template ce_image.tpl angepasst und darin rufe ich dan mit folgendem Code meine doSomething Methode auf:

    PHP-Code:
    <?php
            $myVar 
    = new Test();
            
    $myVar->doSomething();
    ?>
    Auf der Seite bekomme ich dann folgende Ausgabe:

    Code:
    Fatal error: Call to protected Frontend::__construct() from context 'Template' in \htdocs\contao\templates\ce_image.tpl on line 22
    Zeile 22 hat diesen Code:
    PHP-Code:
    $myVar = new Test(); 
    Ich habe keine Ahnung woran das liegt, du?

  9. #9
    Contao-Nutzer Avatar von easy
    Registriert seit
    17.03.2011.
    Ort
    Remagen
    Beiträge
    58

    Standard

    hi blue,

    Du hast die Funktion auf static stehen, damit kannst Du natürlich nur statisch arbeiten und keine Objekt kreieren.

    Der Aufruf wäre dann Test::doSomething();

    Oder Du änderst static in public und behältst den Aufruf wie Du ihn im Template eh schon hast.

  10. #10
    Contao-Fan
    Registriert seit
    09.05.2011.
    Ort
    Hamburg
    Beiträge
    296

    Computer

    Nein, an dem static lag es nicht.

    Meiner Klasse hatte ein Konstruktor gefehlt. Sagt ja aber eigentlich auch schon die Fehlermeldung ;-).

    Diese Zeilen mit in die Test.php und alles funktioniert wunderbar:
    PHP-Code:
    public function __construct(){} 
    Aber trotzdem vielen Danke! Jetzt kann ich wunderbar weitercoden

  11. #11
    Contao-Nutzer Avatar von easy
    Registriert seit
    17.03.2011.
    Ort
    Remagen
    Beiträge
    58

    Standard

    Ok, den Konstruktor ergänzen ist natürlich auch eine Möglichkeit.

    Also viel Spaß beim Coden

    Grüße

    easy

  12. #12
    Contao-Fan
    Registriert seit
    09.05.2011.
    Ort
    Hamburg
    Beiträge
    296

    Standard Zugriff auf Klassen-Namen in "gallery_default.tpl"

    Ich hab grad ein Problem mit den Templates "ce_gallery.tpl" und "gallery_default.tpl".
    Im "gallery_default.tpl" werden ja die Bilder zusammengebaut und in der "ce_gallery.tpl" dann zur fertigen Gallery.

    In "ce_gallery.tpl" kann ich mit <?php echo $this->class; ?> die Klassen ausgeben, welche ich im Backend in der Gallery eingetragen habe.
    Auf diese Klassen möchte ich auch im "gallery_default.tpl" zugreifen. Aber das geht nicht. Die Klassen stehen hier nicht zu Verfügung.

    Ich habe jetzt auch schon probiert über eine Globale Variable darauf zuzugreifen, in dem ich in "ce_gallery.tpl" vor dem Aufruf <?php echo $this->images; ?> folgendes geschrieben habe:
    PHP-Code:
    <?php $GLOBALS['myClasses'] = $this->class?>
    Aber in "gallery_default.tpl" kann ich darauf nicht zugreifen. Es scheint als ob erst "gallery_default.tpl" geparst wird und dann erst "ce_gallery.tpl".

    Also meine Frage: Wie komme ich in dem Template "gallery_default.tpl" an die Klassen-Namen, welche im Backend für die jeweilige Gallery extra eingetragen wurden ran?

    Hat jemand eine Idee? Ich weiß nicht mehr weiter :'(

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •