Ergebnis 1 bis 9 von 9

Thema: [ow_randomnews] - kein Teaserbild sichtbar

  1. #1
    Contao-Nutzer
    Registriert seit
    14.06.2016.
    Beiträge
    39

    Standard [ow_randomnews] - kein Teaserbild sichtbar

    Ich versuche gerade die Erweiterung ow_randomnews mit Contao 3.5.27 zu verwenden.

    Nachrichtentitel und Teasertext werden im Frontend angezeigt, das Teaserbild jedoch nicht.

    In den TemplateVars ist [image] leer. Hier sollte eigentlich das <img> Tag erscheinen.

    Was muss angepasst werden, damit Das Bild ebenfalls sichtbar ist?

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

    Support Contao

    Standard

    Untersuche mal im Template, welche Variablen dort alle zur Verfügung stehen.
    PHP-Code:
    <?php
    $this
    ->showTemplateVars();
    ?>
    Wenn du nur eine UUID zur Verfügung hast, dann kannst du die Eigenschaften des Bildes aus der Tabelle tl_files mit einem FilesModel herausfinden.
    PHP-Code:
    echo \FilesModel::findByUuid($dieUUIDVariable)->path
    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-Nutzer
    Registriert seit
    14.06.2016.
    Beiträge
    39

    Standard

    Vielen Dank für die Hilfe!
    Leider steht keine UUID in den Variablen zur Verfügung.

    Ich vermute, dass irgendwo hier die Variable " $this->Template->image" nicht befüllt wird.
    Die Variable "$objImage->path" ist ebenfalls leer.

    Auszug aus der ow_randomnews.php:

    protected function compile() {

    $objRandomNewsID = $this->Database->prepare("SELECT ow_randomnews, ow_randomnews_showteaser, ow_randomnews_showimage, ow_randomnews_showtitle FROM tl_module WHERE id = ?")
    ->execute($this->id);

    $newsarchiv = deserialize($objRandomNewsID->ow_randomnews);
    shuffle($newsarchiv);

    $objNews = $this->Database->prepare("SELECT id, headline, teaser, addImage, singleSRC, size, caption FROM tl_news WHERE pid = ? AND published = 1 ORDER BY RAND()")
    ->execute($newsarchiv);

    if ($objNews->addImage == 1 && $objRandomNewsID->ow_randomnews_showimage == 1)
    {
    $objImage = $this->Database->prepare("SELECT path FROM tl_files WHERE id = ?")
    ->execute($objNews->singleSRC);

    if ($objNews->size != '')
    {
    $size = deserialize($objNews->size);
    $image = $this->generateImage($this->getImage($objImage->path, $size[0], $size[1], $size[2]), $objNews->caption);
    }

    $this->Template->image = '{{news_open::'.$objNews->id.'}}'.$image.'{{link_close}}';
    $this->Template->caption = $objNews->caption;
    }

    $this->Template->title = ($objRandomNewsID->ow_randomnews_showtitle == 1) ? '{{news_open::'.$objNews->id.'}}'.$objNews->headline.'{{link_close}}' : '';
    $this->Template->teaser = ($objRandomNewsID->ow_randomnews_showteaser == 1) ? $objNews->teaser : '';

    }
    Geändert von bco (30.05.2017 um 15:49 Uhr)

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

    Support Contao

    Standard

    PHP-Code hier im Forum bitte in den PHP-Wrapper setzen.

    Wenn nichts vom dem Bild vorhanden ist, kannst du es im Template mit einem NewsModel holen.
    PHP-Code:
    // ungetestet
    $teaserImageUuid = \NewsModel::findByPk($this->id)->singleSRC// nicht sicher bei $this->id, muss die ID der News sein
    echo \FilesModel::findByUuid(teaserImageUuid)->path
    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

  5. #5
    Contao-Nutzer
    Registriert seit
    14.06.2016.
    Beiträge
    39

    Standard

    Super! Vielen Dank! Das hat mir schon sehr geholfen.

    PHP-Code:
    protected function compile() {

            
    $objRandomNewsID $this->Database->prepare("SELECT ow_randomnews, ow_randomnews_showteaser, ow_randomnews_showimage, ow_randomnews_showtitle FROM tl_module WHERE id = ?")
                ->
    execute($this->id);

            
    $newsarchiv deserialize($objRandomNewsID->ow_randomnews);
            
    shuffle($newsarchiv);

            
    $objNews $this->Database->prepare("SELECT id, headline, teaser, addImage, singleSRC, size, caption FROM tl_news WHERE pid = ? AND published = 1 ORDER BY RAND() LIMIT 1")
                ->
    execute($newsarchiv);

            if (
    $objNews->addImage == && $objRandomNewsID->ow_randomnews_showimage == 1)
            {
                
    $objImage $this->Database->prepare("SELECT path FROM tl_files WHERE id = ?")
                    ->
    execute($objNews->singleSRC);

                if (
    $objNews->size != '')
                {
                    
    $size deserialize($objNews->size);
                    
                    
    $teaserImageUuid = \NewsModel::findByPk($objNews->id)->singleSRC;
                    
    $imagePath = \FilesModel::findByUuid($teaserImageUuid)->path;                
                    
    $image $this->generateImage($this->getImage($imagePath$size[0], $size[1], $size[2]), $objNews->caption);
                    
                }

                
    $this->Template->image '{{news_open::'.$objNews->id.'}}'.$image.'{{link_close}}';
                
    $this->Template->caption $objNews->caption;
            }    
            

            
    $this->Template->title = ($objRandomNewsID->ow_randomnews_showtitle == 1) ? '{{news_open::'.$objNews->id.'}}'.$objNews->headline.'{{link_close}}' '';
            
    $this->Template->teaser = ($objRandomNewsID->ow_randomnews_showteaser == 1) ? $objNews->teaser '';


    Das Bild wird nun angezeigt.

    Was mir jetzt noch fehlt ist ein zentrales DCA-Feld für die Bildgröße im Modul "Zufallsnachricht".
    Genauso wie im Modul "Nachrichtenliste" soll es hier die Möglichkeit geben, eine Bildgröße vor einzustellen.
    Die Bildgröße soll NICHT aus der News selbst bezogen werden.

    Die Bildgröße müsste dann wiederum in der "ow_randomnews.php" Datei ausgelesen und verarbeitet werden.

    Hat jemand eine Idee, wie das am einfachsten zu lösen ist?

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

    Support Contao

    Standard

    Bist du dabei diese Erweiterung aufzubohren? Villeicht kann man da auch mal den Entwickler fragen, ob er die Erweiterung mal updatet.

    Wenn du das nicht im Template machst, sondern direkt in der Erweiterung, dann kannst du das auch etwas anders machen. Erzeuge hier anstatt eines Database-Object direkt ein FilesModel.
    PHP-Code:
    // alt
          
    $objImage $this->Database->prepare("SELECT path FROM tl_files WHERE id = ?")
            ->
    execute($objNews->singleSRC);
    // neu
    $objImage = \FilesModel::findByUuid($objNews->singleSRC); 
    Diese von Contao verkleinerten Bilder kannst du mit \Image::get() erstellen https://github.com/contao/core/blob/....php#L940-L952

    Wie man ein neues Feld für die BE-Eingabemasken erstellt findest du irgendwo in den Docs oder dem Cookbook. https://docs.contao.org/books/cookbo...om-fields.html (gerade gefunden).
    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

  7. #7
    Alter Contao-Hase Avatar von Messa
    Registriert seit
    19.01.2011.
    Ort
    Vorarlberg, Österreich
    Beiträge
    1.423

    Standard

    So macht das Contao (DCA)

    https://github.com/contao/core/blob/...ntent.php#L244

    So sieht das im Core aus.

    PHP-Code:
    'size' => array
            (
                
    'label'                   => &$GLOBALS['TL_LANG']['tl_content']['size'],
                
    'exclude'                 => true,
                
    'inputType'               => 'imageSize',
                
    'options'                 => System::getImageSizes(),
                
    'reference'               => &$GLOBALS['TL_LANG']['MSC'],
                
    'eval'                    => array('rgxp'=>'natural''includeBlankOption'=>true'nospace'=>true'helpwizard'=>true'tl_class'=>'w50'),
                
    'sql'                     => "varchar(64) NOT NULL default ''"
            
    ), 
    Ausgabe:

    PHP-Code:
    <?php if ($image $this->getImageObject($this->image$this->size)): ?>
        <?php $this->insert('picture_default'$image->picture?>
    <?php 
    endif ?>
    Geändert von Messa (30.05.2017 um 20:40 Uhr)
    Full Service Agentur - Grafikdesign, Screendesign, Webdesign, Webentwicklung, SEO, Weiterbildung, persönliches Coaching
    http://www.matthiasgmeiner.com

  8. #8
    Contao-Nutzer
    Registriert seit
    14.06.2016.
    Beiträge
    39

    Standard

    @Messa

    Vielen Dank! Das funktioniert schon ganz gut. :-)

    Jetzt brauche ich nur noch den passenden Aufruf in der "ow_randomnews.php" Datei, der daraus das fertige <img> Tag zusammensetzt, inclusive Alt-Tag aus den Metadaten und sämtlicher Pixeldichten/Skalierungsfaktoren.

    Wie würde das dann aussehen?

  9. #9
    Contao-Nutzer
    Registriert seit
    14.06.2016.
    Beiträge
    39

    Standard

    Danke für die Tipps!
    Ich habe mir die nötigen Infos aus der ModulRandomImage.php besorgt.
    Jetzt funktioniert es auch mit den Bildgrößen :-)

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
  •