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

Select distinct und Titel aus medienpool auslesen

Verfasst: 29. Apr 2016, 11:25
von Fanello
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(); 

Re: Select distinct und Titel aus medienpool auslesen

Verfasst: 29. Apr 2016, 14:04
von Fanello
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.

Re: Select distinct und Titel aus medienpool auslesen

Verfasst: 3. Mai 2016, 07:52
von Thomas.Blum
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