ce_player mit mm_attr_file kombinieren
Hallo ich würde gerne mit dem Attribut-Typ "Datei" ("file") nicht eine Bilddatei auswählen können, sondern eine Audio-Datei, die dann mit dem content element "Video/Audio" (template: ce_player) ausgegeben wird. So die grobe Theorie.
Ich habe nun ein neues Template aufgrund "mm_attr_file" erstellt (und "mm_attr_file_audio") genannt. Inhalt:
PHP-Code:
<?php if (is_array($this->src)): ?>
<ul class="file<?= $this->additional_class ?>">
<?php foreach($this->src as $arrFile):
$strTitle = ($arrFile['title']) ? $arrFile['title'] : (($arrFile['alt']) ? $arrFile['alt'] : $arrFile['file']);
$strAlt = ($arrFile['caption']) ? $arrFile['caption'] : '';
?>
<li class="<?= $arrFile['class'] ?>">
<?php if ($this->isVideo): ?>
<video<?= $this->size ?><?php if ($this->poster): ?> poster="<?= $this->poster ?>" preload="none"<?php endif; ?><?php if ($this->autoplay): ?> autoplay<?php endif; ?> controls>
<?php foreach ($this->files as $file): ?>
<source type="<?= $file->mime ?>" src="<?= $file->path ?>" title="<?= $file->title ?>">
<?php endforeach; ?>
</video>
<?php else: ?>
<audio<?= $this->size ?> preload="none"<?php if ($this->autoplay): ?> autoplay<?php endif; ?> controls>
<?php foreach ($this->files as $file): ?>
<source type="<?= $file->mime ?>" src="<?= $file->path ?>" title="<?= $file->title ?>">
<?php endforeach; ?>
</audio>
<?php endif; ?>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
Das ergibt zwar die Ausgabe des Players, aber dem ist keine Quelle zugewiesen (im Quelltext ist leer: src="").
Wie bekomme ich im Template die Quelldatei, die ich im Attribut Datei ausgewählt habe, in den Player?
Übrigens, wenn ich die Quelldatei zu Testzwecken hart ins Template reinschreibe
PHP-Code:
src="https://meineurl.com/files/audio.mp3"
wird diese zwar im Quellcode korrekt ausgegeben und kann über den Inspektor auch in einem neuen Tab geöffnet und nativ im Browser abgespielt werden, aber nicht im Player auf der Homepage...
Im Endeffekt soll natürlich auch das Array resp. ul und li entfernt werden. Aber das ist im Moment nicht so wichtig.
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo zonky
Danke dir. Das sieht sehr vielversprechend aus. Leider funzt das nicht. Von mir aus müsste noch diese Zeile ausgetauscht werden (anstatt url, file):
PHP-Code:
src="<?= $arrFile['file'] ?>"
Aber auch das funzt nicht.
Das ist das ausgegebene HTML, wenn man "Quellcode anschauen" macht:
HTML-Code:
<div class="field liedaudio">
<div class="label">Audio:</div>
<div class="value"> <!-- DEBUG START
<pre>
Array
(
[0] => Array
(
[file] => files/inhalte/liedersammlung/audio/victor-torriani_ob-ich-will-oder-nicht.mp3
[mtime] => 1516800680
[alt] => Victor-torriani ob-ich-will-oder-nicht
[caption] =>
[title] => victor-torriani_ob-ich-will-oder-nicht.mp3
[metafile] => Array
(
[title] =>
[link] =>
[caption] =>
)
[icon] => assets/contao/images/iconAUDIO.gif
[extension] => mp3
[size] => 512016
[sizetext] => (500,02 KiB)
[url] => liedersammlung-detailseite/victor-torriani-ob-ich-will-oder-nicht.html?file=files%2Finhalte%2Fliedersammlung%2Faudio%2Fvictor-torriani_ob-ich-will-oder-nicht.mp3&fileKey=662583301f0a07ded5ee3733e9765254
[isGdImage] =>
[isSvgImage] =>
[class] => first last even
)
)
</pre>
DEBUG ENDE -->
<!-- indexer::stop -->
<div class=" first last even
<audio preload="none" controls>
<source type="audio/mpeg" src="files/inhalte/liedersammlung/audio/victor-torriani_ob-ich-will-oder-nicht.mp3" title="victor-torriani_ob-ich-will-oder-nicht.mp3">
</audio>
</div>
<!-- indexer::continue -->
</div>
</div>
Das scheint ja korrekt zu sein. Aber da ist nicht mal ein audio-Element auf der Webseite zu sehen:
Anhang 20524
Da ist auch kein CSS, das die Darstellung verhindern würde. Habe das hiermit geprüft:
HTML-Code:
<div class="
<audio preload=" none"="" controls="" style="
display: block;
overflow: visible;
height: 40px;
width: 200px;
opacity: 1;
">
Wenn ich im Template nur das audio-tag mit statisch eingetragener source eintrage, funzt das:
PHP-Code:
<audio preload="none" controls>
<source type="audio/mpeg" src="files/inhalte/liedersammlung/audio/victor-torriani_ob-ich-will-oder-nicht.mp3">
</audio>
Anhang 20525
ojeoje :/
Tutorial Anleitung mm_attr_file für Audio
Gerne möchte ich mit euch die Lösung teilen, wie man im Metamodels eine Audio-Datei auswählen und als Player im Frontend abspielen kann:
Eine neue Template-Datei unter Templates anlegen:
mm_attr_file_audio.html5
Inhalt der Datei:
PHP-Code:
<?php if (is_array($this->src)):
$arrFile = $this->src['0'];
$strTitle = ($arrFile['title']) ? $arrFile['title'] : (($arrFile['alt']) ? $arrFile['alt'] : $arrFile['file']);
?>
<!-- indexer::stop -->
<div class="<?= $arrFile['class'] ?>">
<audio preload="none" controls>
<source type="audio/mpeg" src="<?= $arrFile['file'] ?>" title="<?= $strTitle ?>">
</audio>
</div>
<!-- indexer::continue -->
<?php endif; ?>
Mit folgenden zusätzlichen Zeilen am Anfang der Datei könnt ihr die bestehenden Variablen und deren Werte des Metamodels im Quelltext ausgeben lassen:
PHP-Code:
<?php
echo "<!-- DEBUG START \n";
echo "<pre>\n";
print_r($this->src);
echo "</pre>\n";
echo "\n DEBUG ENDE -->";
?>
Nur für Testzwecke drinnen lassen!
Dann im Metamodels
ein Attribut: Datei [file] erstellen.
In den Rendereinstellungen muss das vorhin erstellte Attribut Audio [file] hinzugefügt werden. Bearbeitet dann dieses Attribut und unter dem Dropdown „Angepasstes Template für die Ausgabe“ das mm_attr_file_audio.html5 auswählen.
Nochmals herzlichen Dank an zonky für seine Hilfe!