Ergebnis 1 bis 7 von 7

Thema: [gelöst] DCA singleSRC in Template ausgeben

  1. #1
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard [gelöst] DCA singleSRC in Template ausgeben

    Hallo zusammen,

    ich habe mich dran gewagt und versucht ein Modul zu schreiben, welches als Inhaltselement ausgegeben werden soll.

    • DCAs erstellt (ptabel, ctable)
    • BE_MOD erstellt, welches die Eingabe regelt
    • TL_CTE erstellt, welches die Auswahl ermöglicht
    • Modul erstellt (Datenbankabfrage) erstellt
    • autoloader.php (sind alle Klassen/Templates drin)
    • Template erstellt, welches nun die Ausgabe zeigen soll

    Im Backend scheine ich alles richtig gemacht zu haben, hier kann man Archive anlegen und diese mit Inhalten befüllen. Gerne würde ich auch ein Bild, welches über den fileTree gewählt wird haben. Lässt sich im Backend auch wunderbar auswählen und wird korrekt angezeigt. Es werden mir im Template auch alle Werte entsprechen meiner Ausgabe ausgegeben. Nur eben das singleSRC (also Bild) gibt mir die UUID zurück.

    Meine Datenbankabfrage sieht so aus:
    PHP-Code:
    <?php

    class MyClass extends ContentElement
    {
        
    /**
         * Template
         * @var string
         */
        
    protected $strTemplate "ce_mein_modul";

        
    /**
         * Compile the current element
         */
        
    protected function compile()
        {

            
    $time time();

            
    $objMeins Database::getInstance()
                -> 
    prepare('SELECT s.*, a.title AS "archiv"
                             FROM tl_mein_modul_element s
                             INNER JOIN mein_modul a
                             ON a.id=s.pid
                             WHERE s.pid=?
                             ORDER BY s.sorting'
    )
                -> 
    execute($this->mein_modul_auswahl);

                
    $this->Template->meine_elemente $objMeins->fetchAllAssoc();

        }
    }
    Im Template ce_mein_modul.html5 dann:

    PHP-Code:
    <?php foreach ($this->meine_elemente as $element): ?>
            <?php echo $element['singleSRC']; ?>
    <?php 
    endforeach; ?>
    Wie gesagt, ich erhalte die UUID, also habe ich folgendes versucht im Template:

    PHP-Code:
    <?php foreach ($this->meine_elemente as $element): ?>

    <?php
    $objFile 
    = \FilesModel::findByPk($this->singleSRC);
    echo 
    $objFile->path;
    ?>

    <?php echo $element['singleSRC']; ?>
    <?php 
    endforeach; ?>
    Problem:

    ich erhalte immer den gleichen Pfad von einem Bild, dass ich garnicht ausgewählt habe. Ansonsten werden aber alle anderen Datenbankfelder korrekt zur im BE ausgegeben.

    Jemand eine Idee?
    Geändert von ttcdummy (31.12.2014 um 16:42 Uhr)

  2. #2
    Contao-Urgestein Avatar von do_while
    Registriert seit
    15.06.2009.
    Ort
    Berlin | Deutschland
    Beiträge
    3.614
    Partner-ID
    1081
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Ich denke findByPk() ist dort falsch, wenn Du die UUID als Kriterium nimmst, solltest Du auch findByUuid() aufrufen.

    Warum setzt Du den Pfad nicht gleich noch im Modul um:

    PHP-Code:
    $this->Template->meine_elemente $objMeins->row(); 
    $this->Template->meine_elemente['singleSRC'] = \FilesModel::findByUuid($objMeins->singleSRC)->path

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

    Standard

    \FilesModel::findById würde auch funktionieren (das unterstützt die normale ID und auch die UUID). findByUuid ist natürlich effizienter, wenn man dort keine Backwards Compatibility braucht.

  4. #4
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard

    Erstmal danke für die Antworten.

    Leider hat das nicht funktioniert. Die Ausgabe sieht immer noch wie folgt aus:
    Code:
    �� �{���0����\
    Ich habe jetzt folgendes im Code stehen:

    SlideshowHeader.php:
    PHP-Code:
    <?php

    class SlideshowHeader extends ContentElement
    {
        
    /**
         * Template
         * @var string
         */
        
    protected $strTemplate "ce_slideshow_header";

        
    /**
         * Compile the current element
         */
        
    protected function compile()
        {

            
    $objSlideshow Database::getInstance()
                -> 
    prepare('SELECT s.*, a.title AS "archiv"
                             FROM tl_slideshow_header_field s
                             INNER JOIN tl_slideshow_header a
                             ON a.id=s.pid
                             WHERE s.pid=?
                             ORDER BY s.sorting'
    )
                -> 
    execute($this->slideshow_header_auswahl);

                while (
    $objSlideshow->next())
                {
                    
    $this->Template->slideshow $objSlideshow->row();  
                    
    $this->Template->slideshow['singleSRC'] = \FilesModel::findByUuid($objSlideshow->singleSRC)->path
                }

                
    // $this->Template->slideshow = $objSlideshow->fetchAllAssoc();

        
    }
    }
    Und das Template ce_slideshow_header.html5:

    PHP-Code:
    <div class="<?php echo $this->class?> ce_text block"<?php echo $this->cssID?><?php if ($this->style): ?> style="<?php echo $this->style?>"<?php endif; ?>>

    <pre><?php // var_dump($this)?></pre>

    <?php echo $this->slideshow['singleSRC']; ?>

    <?php /* foreach ($this->slideshow as $slideshow_element): ?>
            <?php echo $slideshow_element['singleSRC']; ?>
    <?php endforeach; */ 
    ?>

    </div>
    Ich verstehe es einfach nicht :-/

  5. #5
    Contao-Nutzer Avatar von ttcdummy
    Registriert seit
    02.03.2014.
    Beiträge
    213
    User beschenken
    Wunschliste

    Standard

    Ich hab es!

    SlideshowHeader.php:

    PHP-Code:
    <?php

    class SlideshowHeader extends ContentElement
    {
        
    /**
         * Template
         * @var string
         */
        
    protected $strTemplate "ce_slideshow_header";

        
    /**
         * Compile the current element
         */
        
    protected function compile()
        {

            
    $time time();

            
    $objSlideshow Database::getInstance()
                -> 
    prepare('SELECT s.*, a.title AS "archiv"
                             FROM tl_slideshow_header_field s
                             INNER JOIN tl_slideshow_header a
                             ON a.id=s.pid
                             WHERE s.pid=?
                             AND s.published=?
                             ORDER BY s.sorting'
    )
                -> 
    execute($this->slideshow_header_auswahl1);

                
    $this->Template->slideshow $objSlideshow->fetchAllAssoc();

        }
    }
    ce_slideshow_header.html5:

    PHP-Code:
    <?php foreach ($this->slideshow as $slideshow_element): ?>
        <img src="<?php echo \FilesModel::findByUuid($slideshow_element['singleSRC'])->path?>" alt="">
    <?php endforeach; ?>

  6. #6
    Contao-Fan
    Registriert seit
    12.01.2011.
    Beiträge
    322

    Standard

    Hallo zusammen,

    ich habe das gleiche Problem wie ob beschrieben, aber komme mit der Lösung von oben Neider nicht weiter.

    Ich benutze 3.5.21 und habe eine Content Erweiterung erstellt. Ich nutze für diese das SingelSCR aus tl_contet und bekomme auch nur folgende Zeichen: "s_Z\?{?t?5?u>". Wenn ich in die DB schauen, ist das Bild sauber abgelegt.

    Ich habe folgende Sachen probiert:

    Code:
     <img src="<?php echo \FilesModel::findByUuid($this->singleSRC)->path; ?>" alt="">
    Und:

    Code:
    <?php $this->insert('picture_default', $this->picture); ?>
    Bei letztem wird nur einer leere omg Tag erstellt.

    Wo liegt hier mein Fehler, damit ich das Bild sauber mit dem "imgsize" Attribute laden kann?

    Danke euch

  7. #7
    Contao-Nutzer
    Registriert seit
    24.04.2017.
    Beiträge
    1

    Standard

    Hi bongartz120,

    Du hast anscheinend was vergessen. Die Lösung wäre:

    Code:
    <img src="<?php echo \FilesModel::findByUuid($this->arrData['singleSRC'])->path; ?>" title="<?php echo $this->arrData['title']; ?> alt="<?php echo $this->arrData['alt']; ?>">
    title und alt Text natürlich nur, wenn dort auch was enthalten ist. Anscheinend hast Du nur das arrData vergessen.

    Getestet mit der Version 3.5.26. Ohne etwas am Template zu manipulieren. Rein mit der Standardausgabe. Ich hoffe es hilft!

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
  •