Ergebnis 1 bis 11 von 11

Thema: Mimetype einer Datei im Template ermitteln

  1. #1
    Contao-Fan Avatar von ph!L
    Registriert seit
    04.11.2009.
    Ort
    Internet
    Beiträge
    462

    Standard Mimetype einer Datei im Template ermitteln

    Ich versuche gerade den Minetype einer Datei zu ermitteln um mir einen eigenen RSCE Video Player daraus zu bauen.

    Folgendes habe ich getan:

    Ich hole mir die UUID jeder Datei aus $this->video

    PHP-Code:
    <?php foreach ($this->video as $uuid) {
        
    $objFile = \FilesModel::findByUuid($uuid);
    Wenn ich das jetzt dumpe, gibt es aber gar keinen Mimetype, auf den ich zugreifen könnte:

    Code:
    Contao\FilesModel {#1024 ?
      #arrData: array:19 [?
        "id" => 464
        "pid" => b"þ\x0FÊl@a\x11ïµ°Ga\x10-±ñ"
        "tstamp" => 1720797519
        "uuid" => b"\x04˜±ú@b\x11ïµ°Ga\x10-±ñ"
        "type" => "file"
        "path" => "files/media/video/hero/1080p/PGB Hero 4.mp4"
        "extension" => "mp4"
        "hash" => "2bf3789c2a02b66fe7ab311975c15c1d"
        "lastModified" => null
        "found" => "1"
        "name" => "PGB Hero 4.mp4"
        "importantPartX" => 0.0
        "importantPartY" => 0.0
        "importantPartWidth" => 0.0
        "importantPartHeight" => 0.0
        "meta" => null
        "ic_hide" => ""
        "ic_href" => ""
        "ic_copyright" => ""
      ]
    Versuche ich mit der in der Doku zu findenen Funktion getMimeType den Mimetype auszulesen erhalte ich den Fehler "Attempted to call an undefined method named "getMimeType" of class "Contao\FilesModel"."

    PHP-Code:
    $mime $objFile->getMimeType() 
    Was mache ich falsch?

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

    Standard

    getMimeType() ist eine Funktion von Contao\File, nicht Contao\FilesModel. Oder du nimmst Symfony\Component\Mime\MimeTypes.
    » sponsor me via GitHub or Revolut

  3. #3
    Contao-Fan Avatar von ph!L
    Registriert seit
    04.11.2009.
    Ort
    Internet
    Beiträge
    462

    Standard

    Sowas hatte ich mir schon gedacht Ich versuche mich mal dran

  4. #4
    Contao-Fan Avatar von ph!L
    Registriert seit
    04.11.2009.
    Ort
    Internet
    Beiträge
    462

    Standard

    Stehe leider auf dem Schlauch. In der Doku steht
    Please note, the legacy classes \Contao\File, \Contao\Folder, \Contao\FilesModel and \Contao\Dbafs still work, but aren’t covered here.
    Eine andere Doku finde ich aber nicht.

    Hab dann versucht logisch zu ersetzen und habe
    PHP-Code:
    $mime =     \File::getMimeType($objFile); 
    versucht. Ergebnis: Call to protected method Contao\File::getMimeType() from scope Contao\Template

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

    Standard

    Sieh dir nächstes mal den Code von Contao\File direkt an, dann siehst du, dass das keine statische Methode ist (und auch nicht public).
    PHP-Code:
    use Contao\File;

    $mimeType = (new File($projectRelativeFilepath))->mime
    » sponsor me via GitHub or Revolut

  6. #6
    Contao-Fan Avatar von ph!L
    Registriert seit
    04.11.2009.
    Ort
    Internet
    Beiträge
    462

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Sieh dir nächstes mal den Code von Contao\File direkt an
    Wo? Ich finde ja eben gar keine Doku dazu :-(

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

    Standard

    Zitat Zitat von ph!L Beitrag anzeigen
    Wo?
    Na in deiner Contao Installation, wo sonst?


    Zitat Zitat von ph!L Beitrag anzeigen
    Ich finde ja eben gar keine Doku dazu :-(
    In der Dokumentation steht ja nicht der gesamte Source Code, den hast du selbst.
    » sponsor me via GitHub or Revolut

  8. #8
    Alter Contao-Hase
    Registriert seit
    24.02.2021.
    Beiträge
    1.490
    Partner-ID
    11715
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von ph!L Beitrag anzeigen
    Wo? Ich finde ja eben gar keine Doku dazu :-(
    Zitat Zitat von Spooky Beitrag anzeigen
    Na in deiner Contao Installation, wo sonst?
    In der Dokumentation steht ja nicht der gesamte Source Code, den hast du selbst.
    @ph!L wenn du es geschafft hast, (sehr) gerne hier im Forum posten und erklären oder sofort eine Anleitung als PR in der Doku <3
    Die nächste Person, welche dasselbe Problem hat, wird dir danken <3

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

    Standard

    Für Contao\File würde ich aber nicht zu viel Energie reinstecken, da gibt es kaum relevante Funktionen mehr (und die, die es gibt, werden über kurz oder lang auch woanders hin wandern).
    » sponsor me via GitHub or Revolut

  10. #10
    Alter Contao-Hase
    Registriert seit
    24.02.2021.
    Beiträge
    1.490
    Partner-ID
    11715
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hmm, eine Doku mit Symfony\Component\Mime\MimeTypes fände ich hier im Forum zu dem Problem aber passend

  11. #11
    Contao-Fan Avatar von ph!L
    Registriert seit
    04.11.2009.
    Ort
    Internet
    Beiträge
    462

    Standard

    Ich weiß nicht, ob es der eleganteste Weg ist, aber ich hab mir jetzt einen eigenen Twig Filter gebaut, der mir den Mimetype im Template ausgibt.

    PHP-Code:
    <?php

    // src/Twig/AppExtension.php

    namespace App\Twig;

    use 
    Contao\FilesModel;
    use 
    Twig\Extension\AbstractExtension;
    use 
    Twig\TwigFilter;

    class 
    AppExtension extends AbstractExtension
    {
       public function 
    getFilters(): array
       {
           return [
               new 
    TwigFilter('contao_get_mime_type', [$this'getMimeType']),
           ];
       }

       public function 
    getMimeType($uuid)
       {
           
    $fileModel FilesModel::findByUuid($uuid);
           if (
    $fileModel && $fileModel->path) {
               
    $mimeType mime_content_type($fileModel->path); // Ermittelt den MIME-Typ
               
    return $mimeType ?: null;
           }
           return 
    null;
       }
    }
    Ich habe das direkt mit einem Filter verbunden, der mir den Pfad einer UUID ausgibt:
    PHP-Code:
    <?php

    // src/Twig/AppExtension.php

    namespace App\Twig;

    use 
    Contao\FilesModel;
    use 
    Twig\Extension\AbstractExtension;
    use 
    Twig\TwigFilter;

    class 
    AppExtension extends AbstractExtension
    {
       public function 
    getFilters(): array
       {
           return [
               new 
    TwigFilter('contao_find_file_by_uuid', [$this'findFileByUuid']), // Gib den Pfad einer UUID aus
               
    new TwigFilter('contao_get_mime_type', [$this'getMimeType']), // Gib den Mime Type einer UUID aus
           
    ];
       }

       public function 
    findFileByUuid($uuid)
       {
           
    $fileModel FilesModel::findByUuid($uuid);
           return 
    $fileModel $fileModel->path null;
       }

       public function 
    getMimeType($uuid)
       {
           
    $fileModel FilesModel::findByUuid($uuid);
           if (
    $fileModel && $fileModel->path) {
               
    $mimeType mime_content_type($fileModel->path);
               return 
    $mimeType ?: null;
           }
           return 
    null;
       }
    }
    Danke an Bernhard, der in Slack den entscheidenden Hinweis gab!

    Dank dieser Filter kann ich nun <video> Tags mit <source> Tags ausgeben, die sowohl mp4 als auch webm unterstützen:

    HTML-Code:
    <figure class="video_container">
      <video autoplay muted loop style="width:100%">
        {% for uuid in video %}
    	{% set filePath = uuid | contao_find_file_by_uuid %}
    	{% set mimeType = uuid | contao_get_mime_type %}
    	<source type="{{ mimeType }}" src="{{ filePath }}">
        {% endfor %}
      </video>                           
    </figure>

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •