[phpBB Debug] PHP Warning: in file [ROOT]/ext/tas2580/seourls/event/listener.php on line 213: Undefined array key "FORUM_NAME"
Select distinct und Titel aus medienpool auslesen - REDAXO Forum
Hallo,

Wir haben in letzter Zeit festgestellt, dass die Kommunikation via Slack viel schneller und zielführender ist als ein Beitrag im Forum. Aufgrund der neuen und besseren Möglichkeiten der Kommunikation haben wir uns entschlossen das Forum nur noch als Archiv zur Verfügung zu stellen. Somit bleibt es weiterhin möglich hier nach Lösungen zu suchen. Neue Beiträge können nicht mehr erstellt werden.

Wir empfehlen, für deine Fragen/Probleme Slack zu nutzen. Dort sind viele kompetente Benutzer aktiv und beantworten jegliche Fragen, gerne auch von REDAXO-Anfängern! Slack wird von uns sehr intensiv und meistens "rund um die Uhr" benutzt :-)
Selbst einladen kannst Du dich hier: https://redaxo.org/slack/
Fanello
Beiträge: 336
Registriert: 24. Mai 2006, 14:01
Wohnort: Riedt (Schweiz)

Select distinct und Titel aus medienpool auslesen

29. Apr 2016, 11:25

Liebe Redaxo-Gemeinde

Ich habe mit yform eine Produkte-Datenbank erstellt. Zu jedem Produkt kann man 1 oder mehrere PDF's hinzufügen. Nun mache ich zusätzlich eine Seite, auf der alle diese PDF's nochmals aufgelistet werden, also quasi eine Download-Übersicht. Weil das selbe PDF teilweise mehreren Produkten zugewiesen wird, setzte ich für die DB-Abfrage DISTINCT ein.

Code: Alles auswählen

<?php
$db_table = "rex_products";
$sql = rex_sql::factory();
$sql->setDebug(false);
$sql->setQuery("SELECT DISTINCT product_download FROM $db_table ");

if($sql->getRows()) {
    while($sql->hasNext()) {
        $dateiliste = explode(',', $sql->getValue('product_download')); 
            echo '<p>';
            foreach ($dateiliste as $file) {
            $media = rex_media::get($file);
            if($media) {    
                echo '<a class="mbr-download__link" target="_blank" href="media/'.$file.'"><i class="fa fa-file-pdf-o" aria-hidden="true"></i> '.$file.'</a><br>';
            }
        }
        echo '</p>';
    $sql->next();
    }
}    
?>
Das funktioniert soweit sehr gut, alle PDF's werden nur 1x aufgelistet. Jetzt ist es unschön, dass der FIlename angezeigt wird und nicht den Title aus dem Medienpool. Hierzu wollte ich nun einfach

Code: Alles auswählen

$title = $media->getTitle(); 

hinzufügen.
Somit würde der Code dann so aussehen:

Code: Alles auswählen

<?php
$db_table = "rex_products";
$sql = rex_sql::factory();
$sql->setDebug(false);
$sql->setQuery("SELECT DISTINCT product_download FROM $db_table ");

if($sql->getRows()) {
    while($sql->hasNext()) {
        $dateiliste = explode(',', $sql->getValue('product_download')); 
            echo '<p>';
            foreach ($dateiliste as $file) {
            $media = rex_media::get($file);

            $title = $media->getTitle(); 

            if($media) {    
                echo '<a class="mbr-download__link" target="_blank" href="media/'.$file.'"><i class="fa fa-file-pdf-o" aria-hidden="true"></i> '.$title.'</a><br>';
            }
        }
        echo '</p>';
    $sql->next();
    }
}    
?>
Leider erscheint aber beim Aufruf der Seite dieser Fehler:
"ErrorException" thrown in rex:///module/25/output on line 15
Fatal error: Call to a member function getTitle() on null


Dieser Teil müsste aber korrekt sein, oder?

Code: Alles auswählen

$title = $media->getTitle(); 

Fanello
Beiträge: 336
Registriert: 24. Mai 2006, 14:01
Wohnort: Riedt (Schweiz)

Re: Select distinct und Titel aus medienpool auslesen

29. Apr 2016, 14:04

Habs gefunden...

Code: Alles auswählen

<?php
$db_table = "rex_products";
$sql = rex_sql::factory();
$sql->setDebug(false);
$sql->setQuery("SELECT DISTINCT product_download FROM $db_table ");

if($sql->getRows()) {
    while($sql->hasNext()) {
        $dateiliste = explode(',', $sql->getValue('product_download'));
            echo '<p>';
            foreach ($dateiliste as $file) {
            $media = rex_media::get($file);
            if($media) {   

   $title = $media->getTitle();

                echo '<a class="mbr-download__link" target="_blank" href="media/'.$file.'"><i class="fa fa-file-pdf-o" aria-hidden="true"></i> '.$title.'</a><br>';
            }
        }
        echo '</p>';
    $sql->next();
    }
}   
?>
Der Code

Code: Alles auswählen

   $title = $media->getTitle();
muss innerhalb der if($media)-Schleife sein, nicht ausserhalb.

Benutzeravatar
Thomas.Blum
Entwickler
Beiträge: 5063
Registriert: 24. Aug 2004, 22:11
Wohnort: Dresden
Kontaktdaten: Website

Re: Select distinct und Titel aus medienpool auslesen

3. Mai 2016, 07:52

Hej,

du könntest dann hinter dem if noch ein elseif dranhängen.

Code: Alles auswählen

if($media instanceof rex_media) {

} elseif (rex::isBackend()) {
    echo rex_view::warning('Diese Datei ist nicht mehr im Medienpool: ' . $file);
}
vg Thomas

Zurück zu „Module/Aktionen [R5]“