Ergebnis 1 bis 5 von 5

Thema: Elementtyp 'Inhaltelement' -> Include-Einstellungen -> Bezogenes Inhaltselemt

  1. #1
    Contao-Nutzer
    Registriert seit
    08.06.2010.
    Beiträge
    11

    Standard Elementtyp 'Inhaltelement' -> Include-Einstellungen -> Bezogenes Inhaltselemt

    Hi,

    ich habe mir eine DCA, ähnlich der Contao-Artikel-DCA erstellt, die als ctable 'tl_content' zugeteilt bekommen hat. Nun kann ich an den Objekten des DCA's, über das Backend, auch problemlos Contao-Content-Element erstellen und bearbeiten.
    Ich wollte nun, mittels des im Titel angegeben Inhaltselementes, auf ein bereits existierendes Inhaltselement meiner DCA-Objekte verweisen, um so eine Kopie des Content-Elementes unter einem anderen Objekt einzubinden. Leider werden die Content-Element, die meinen DCA-Objekten zugeordnet, sind nicht in der Auswahl 'Bezogenes Inhaltselemt' angeboten. Elemente der Contao-Artikel werden gelistet.

    Hat jemand einen Tipp, welche Konfiguration ich noch machen muss um die Referenzierung zu ermöglichen? Oder hat vielleicht jemand ein Tutorial oder einen Link zu einer Dokumentation dieses Inhalts-Elementes?

    MfG

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

    Standard

    Sieh' dir einfach das DCA von tl_content an. Die Elemten, die du dort verfügbar hast, werden mit einem ganz normalen options_callback geholt. Du könntest das tl_content DCA dahingehend ändern, dass stattdessen eine Funktion von dir aufgerufen wird.

  3. #3
    Contao-Nutzer
    Registriert seit
    08.06.2010.
    Beiträge
    11

    Standard

    Danke für deine Antwort.

    Meinst du folgende Callback-Methode, die sich unter ['fields']['type'] befindet?
    PHP-Code:
        'options_callback'        => array('tl_content''getContentElements'
    Alle Funktionen die ich mir in tl_content.php angeschaut haben, geben die Content-Elemente an sich zurück. Alos das Objekt nicht die Instanz, wenn ich das richtig sehe.

    Aber wie kommen die angelegten Content-Elment-Instanzen (Contao eigene Content-Elemente, wie zB Text und Auflistung) in folgende Liste?
    ce_inlcude_01.png

    Konnte keinen Hinweis dazu in tl_content finden oder habe ihn schlicht weg übersehen.

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

    Standard

    Nein, das Feld heißt "cteAlias". Sieh' dir den options_callback davon an.

  5. #5
    Contao-Nutzer
    Registriert seit
    08.06.2010.
    Beiträge
    11

    Standard

    Danke Spooky,

    genau das war es was ich gesucht habe. Habe es angepasst und es funktioniert. (Beschränkt auf die Content Elemente meines Modules nicht global Alle. Global alle Content Elemente zu ermitteln sollte mit einer kleinen Anpassung aber auch möglich sein.)

    Für alle die es Interessiert, kurz was ich gemacht habe.
    tl_content in meinem Modul:
    PHP-Code:
     /**
      * Dynamically add parent table and set getAlias-Function to find CE's in this module
      */
    if (\Input::get('do') == 'j***-j***') {
        
    $GLOBALS['TL_DCA']['tl_content']['config']['ptable'] = 'tl_j***_j***';
        
    $GLOBALS['TL_DCA']['tl_content']['fields']['cteAlias']['options_callback'] = array('J***J***Backend''getAlias');

    Dann in die Klasse 'J***J***Backend':
    PHP-Code:
       /**
         * Get all content elements and return them as array (content element alias)
         *
         * @return array
         */
        
    public function getAlias() {
            
    $parentIds = array();
            
    $alias = array();

            if (!
    $this->User->isAdmin) {
                foreach (
    $this->User->pagemounts as $id) {
                    
    $parentIds[] = $id;
                    
    $parentIds array_merge($parentIds$this->Database->getChildRecords($id'tl_j***_j***_category'));
                }

                if (empty(
    $parentIds)) {
                    return 
    $alias;
                }

                
    $contentElements $this->Database->prepare("SELECT c.id, c.pid, c.type, (CASE c.type WHEN 'module' THEN m.name WHEN 'form' THEN f.title WHEN 'table' THEN c.summary ELSE c.headline END) AS headline, c.text, a.title FROM tl_content c LEFT JOIN tl_j***_j*** a ON a.id=c.pid LEFT JOIN tl_module m ON m.id=c.module LEFT JOIN tl_form f on f.id=c.form WHERE a.pid IN("implode(','array_map('intval'array_unique($parentIds))) .") AND (c.ptable='tl_***_***' OR c.ptable='') AND c.id!=? ORDER BY a.title, c.sorting")->execute(\Input::get('id'));
            } else {
                
    $contentElements $this->Database->prepare("SELECT c.id, c.pid, c.type, (CASE c.type WHEN 'module' THEN m.name WHEN 'form' THEN f.title WHEN 'table' THEN c.summary ELSE c.headline END) AS headline, c.text, a.title FROM tl_content c LEFT JOIN tl_j***_j*** a ON a.id=c.pid LEFT JOIN tl_module m ON m.id=c.module LEFT JOIN tl_form f on f.id=c.form WHERE (c.ptable='tl_j***_j***' OR c.ptable='') AND c.id!=? ORDER BY a.title, c.sorting")->execute(\Input::get('id'));
            }

            while (
    $contentElements->next()) {
                    
    $headlineArray deserialize($contentElements->headlinetrue);

                    if (isset(
    $headlineArray['value'])) {
                        
    $headline = \StringUtil::substr($headlineArray['value'], 32);
                    } else {
                        
    $headline = \StringUtil::substr(preg_replace('/[\n\r\t]+/'' '$headlineArray[0]), 32);
                    }

                    
    $text = \StringUtil::substr(strip_tags(preg_replace('/[\n\r\t]+/'' '$contentElements->text)), 32);
                    
    $strText $GLOBALS['TL_LANG']['CTE'][$contentElements->type][0] . ' (';

                    if (
    $headline != '') {
                        
    $strText .= $headline ', ';
                    } elseif (
    $text != '') {
                        
    $strText .= $text ', ';
                    }

                    
    $key $contentElements->title ' (ID ' $contentElements->pid ')';
                    
    $alias[$key][$contentElements->id] = $strText 'ID ' $contentElements->id ')';
            }

            return 
    $alias;
        } 
    Vielleicht hilft es ja jemanden.

    PS: Ich muss leider ein paar Namen unkenntlich machen, daher die ***. Bitte beachtet das beim übernehmen. ^^
    Geändert von Kinger (10.03.2016 um 16:25 Uhr)

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
  •