Ergebnis 1 bis 10 von 10

Thema: FE-Modul mit Parametern einbinden

  1. #1
    Contao-Nutzer
    Registriert seit
    25.09.2016.
    Beiträge
    13

    Standard FE-Modul mit Parametern einbinden

    Hallo Leute,
    ich bin neu in der Contao Entwicklung und bitte hier um Hilfe bei einem Problem, zu dem ich leider per Google nichts gefunden habe.
    (Möglicherweise habe ich hier auch einen falschen Denkansatz).
    Ich habe zum Einstieg das Screencast-Beispiel durchgemacht und anschließend für meine Belange angepasst.
    Das funktioniert soweit alles wie gewollt, aber jetzt hätte ich eine Anforderung, zu der mir beim besten Willen keine Lösung einfällt:
    Zum Screencast-Modul kann ja eine beliebige Menge an Screencasts (DCA-Datensätze) angelegt werden.

    Ich möchte nun dem Seitendesigner die Möglichkeit bieten, diese Datensätze gefiltert anzuzeigen, also z.B. beim Einbinden des Moduls auf einer Seite kann er direkt angeben: nur den Screencast mit der DCA-ID 5 anzeigen.
    An anderer Stelle möchte er vielleicht auch nochmal Screencast einbinden, aber dann mit DCA-ID 7 etc.

    Dazu wäre es aus meiner Sicht (wie gesagt, ich bin neu hier und denke vielleicht falsch) notwendig, im Modul-Assistent, also wo ich bestimme, welches Modul ich einbinden möchte, einen zusätzlichen Parameter angeben zu können, z.B. ein Textfeld, in das man dann eine Liste von IDs o.ä. eingeben kann.
    Den Parameter könnte ich dann in der Compile-Funktion aufnehmen und die SQL-Suche entsprechend anpassen.

    Meine Frage:
    - Ist es möglich, den Modul-Einbindeassistent zu erweitern, so dass ein zusätzlicher Parameter möglich wird?
    - Denke ich völlig falsch?

    Danke für jede Hilfe und jeden Tip

  2. #2
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Puh, ich verstehe überhaupt nichts. Screencast-Beispiel, Screencast-Modul, Screencasts (DCA-Datensätze), Modul-Assistent - noch nie gehört.

    Vielleicht kannst du mal entsprechende Links zeigen, wovon du da sprichst. Oder vielleicht noch besser mit einfachen Worten erklären, was du mit Contao machen möchtest.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  3. #3
    Contao-Urgestein Avatar von Samson1964
    Registriert seit
    05.11.2012.
    Ort
    Berlin
    Beiträge
    2.809

    Standard

    Zitat Zitat von umdenker Beitrag anzeigen
    Ich möchte nun dem Seitendesigner die Möglichkeit bieten, diese Datensätze gefiltert anzuzeigen, also z.B. beim Einbinden des Moduls auf einer Seite kann er direkt angeben: nur den Screencast mit der DCA-ID 5 anzeigen.
    An anderer Stelle möchte er vielleicht auch nochmal Screencast einbinden, aber dann mit DCA-ID 7 etc.
    Das wäre für mich ein Inhaltselement. D.h. Du legst eine dca/tl_content.php an und fügst der ein Optionsfeld hinzu. Die Optionen sind Deine vorhandenen Screencasts. Die holst Du Dir entweder als foreignkey in Dein Feld (falls das hier geht) oder mit einer Datenbankabfrage.

    dca/tl_content.php:
    PHP-Code:
    $GLOBALS['TL_DCA']['tl_content']['palettes']['screencast'] = '{type_legend},type,headline;{screencast_legend},screencasts;{protected_legend:hide},protected;{expert_legend:hide},guest,cssID,space;{invisible_legend:hide},invisible,start,stop';

    $GLOBALS['TL_DCA']['tl_content']['fields']['screencasts'] = array
    (
        
    'label'                => &$GLOBALS['TL_LANG']['tl_content']['screencasts'],
        
    'exclude'              => true,
        
    'options_callback'     => array('tl_content_screencasts''getScreencasts'),
        
    'inputType'            => 'checkboxWizard',
        
    'eval'                 => array('mandatory'=>true'multiple'=>true'class'=>'clr'),
        
    'sql'                  => "blob NULL"
    );

    class 
    tl_content_screencasts extends Backend
    {
        public function 
    getScreencasts(DataContainer $dc)
        {

            
    // Screencasts laden und zuordnen
            
    $objArchive $this->Database->prepare("SELECT id, title FROM tl_screencasts")
                                             ->
    execute();
            
    $Archiv = array();
                    while(
    $objArchive->next())
            {
                
    $Archiv[$objArchive->id] = $objArchive->title;
            }
            
            return 
    $Archiv;

        }


    Die Variablen und die SQL-Abfrage müssen natürlich an Deine Bedürfnisse angepaßt werden. Jetzt muß das neue Inhaltselement noch bekannt gemacht werden:

    config/config.php:
    PHP-Code:
    $GLOBALS['TL_CTE']['includes']['screencasts'] = 'screencastClass'
    config/autoload.php:
    PHP-Code:
    ClassLoader::addClasses(array
    (
        
    // Classes
        
    'screencastClass' => 'system/modules/screencasts/classes/Screencasts.php',
    )); 
    Soweit das Backend, wo der Redakteur das Inhaltselement auswählen und die zu verwendenden Screencasts anklicken kann. Jetzt fehlt noch die Ausgabeklasse:

    classes/Screencasts.php:
    PHP-Code:
    class screencastClass extends \ContentElement
    {

        
    /**
         * Template
         * @var string
         */
        
    protected $strTemplate 'ce_screencast';

        
    /**
         * Generate the module
         */
        
    protected function compile()
        {
            
    // Array mit Screencast-ID's  
            
    $screencastlist unserialize($this->screencasts);

            if(
    is_array($screencastlist))
            {
                
    // Screencasts laden
                
    $screencastArr = array();
                foreach(
    $screencastlist as $screencast_id)
                {
                    
    // Screencastdetails laden
                    
    $objScreencast $this->Database->prepare("SELECT * FROM tl_screencasts WHERE id=?")
                                              ->
    execute($screencast_id);
                    
    // Hier kannst Du das Objekt $objScreencast für das Array $screencastArr für das Template aufbereiten,
                    // das Du im Template dann in einer Schleife durchläufst. Den Code spare ich mir.
                
    }
            }
            
    $this->Template = new \FrontendTemplate($this->strTemplate);
            
    $this->Template->Screencasts $screencastArr;

        }


    Das Template ce_screencast mußt Du natürlich auch anlegen und in der autoload.php registrieren.

    P.S. Ich hoffe, ich habe keine Fehler in den Code eingebaut. Habe mir das aus einer eigenen Erweiterung kopiert und angepaßt.
    Viele Grüße
    Frank

    Seit Mai 2013 Fan von Contao
    Webmaster vom Deutschen Schachbund und Berliner Schachverband
    Mein Blog: Schachbulle
    Meine Erweiterungen bei GitHub
    Meine Videos auf YouTube: Playlist zur Contao-Programmierung/Einrichtung

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    35.553
    Partner-ID
    10107

    Standard

    Zitat Zitat von Andreas Beitrag anzeigen
    Screencast-Beispiel, Screencast-Modul, Screencasts (DCA-Datensätze), Modul-Assistent - noch nie gehört.
    Er meint das hier: https://de.contaowiki.org/C3:_Tutori...il:_Grundlagen (und fortfolgend) - https://www.youtube.com/watch?v=WeN5...hrHisMYapPxOnt

  5. #5
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ah, ok, danke Spooky.

    Du kannst in der dca/tl_screencast.php einfach ein neues Feld dafür hinzufügen. Da wo die 4 Felder id, tstamp, title und url bereits definiert sind.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  6. #6
    Contao-Nutzer
    Registriert seit
    25.09.2016.
    Beiträge
    13

    Standard

    Erstmal absolut herzlichen Dank für Deine Mühe Samson1964,
    ich glaube das Inhaltselement, wenn ich es denn zum Laufen bekomme, löst mein Problem sehr gut.
    Ich habe Deinen Code jetzt zum Testen im ursprünglichen Screencast-Modul eingebaut, aber ich bekomme die Screencasts im Inhaltselement nicht angeboten.
    Irgendwo mache ich noch einen Fehler, bzw. fehlt mir das nötige Wissen - aber mit Deiner guten Vorarbeit werde ich mich jetzt weiter reinwerkeln.
    Mir fehlt momentan noch das Verständnis für die Ablaufstruktur der Module: was wird wann aufgerufen, etc.
    Naja, ich steh ja erst am Anfang ...

    Herzlichen Dank!

  7. #7
    Contao-Nutzer
    Registriert seit
    25.09.2016.
    Beiträge
    13

    Standard

    Zitat Zitat von Andreas Beitrag anzeigen
    Du kannst in der dca/tl_screencast.php einfach ein neues Feld dafür hinzufügen. Da wo die 4 Felder id, tstamp, title und url bereits definiert sind.
    Danke für die Anregung.
    Aber das würde doch nur die Screencast-Details erweitern, oder liege ich falsch?
    Mein Problem ist, dass ich nicht die Screencasts selber erweitern möchte, sondern einen Filter bei der Einbindung des Moduls realisieren will.
    Normalerweise werden vom Screencast-Modul an der Stelle, an der es eingebunden wird, immer alle Screencasts aufgelistet, die angelegt sind.
    Ich möchte dem Redakteur nun ermöglichen, bereits beim Einbinden des Moduls einen Filter zu schalten, so dass nur eine Teilmenge der Screencasts angezeigt wird.
    Also z.B. so:
    Neues Element -> Modul -> Screencast
    und hier hätte ich jetzt gerne noch die Möglichkeit z.B. eine ID für den gewünschten Screencast vorzugeben.
    Ich hoffe, ich habe mich jetzt etwas verständlicher ausgedückt.

  8. #8
    Wandelndes Contao-Lexikon Avatar von BugBuster
    Registriert seit
    15.06.2009.
    Ort
    Berlin
    Beiträge
    10.553
    User beschenken
    Wunschliste

    Standard

    Dazu müsstest du die dca/tl_module.php erweitern und natürlich das Frontend Modul selber.
    Grüße, BugBuster
    "view source" is your guide.
    Danke an alle Amazon Wunschlisten Erfüller

  9. #9
    Contao-Nutzer
    Registriert seit
    25.09.2016.
    Beiträge
    13

    Standard gelöst

    Erstmal danke für Eure Hilfe!

    Ich habe jetzt eine machbare Lösung gefunden, die Erweiterung von tl_module.php, von BugBuster vorgeschlagen, löst meine Anforderung für den Moment.
    Wenn ich mich besser eingearbeitet habe, werde ich noch versuchen, die Version von Samson1964 zu realisieren.

    Danke Euch

  10. #10
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.706
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von umdenker Beitrag anzeigen
    Aber das würde doch nur die Screencast-Details erweitern, oder liege ich falsch?
    Ja, du bist da doch im FE-Modul und wenn dort ein Feld wäre: zeige Screencasts '12,13,14', dann hast du diese Anweisung ja in deiner compile-Methode und kannst vor der Ausgabe danach filtern.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

Aktive Benutzer

Aktive Benutzer

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

Berechtigungen

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