Ankündigung

Einklappen
Keine Ankündigung bisher.

Download-Link für geschützte Dateien generieren

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Download-Link für geschützte Dateien generieren

    Hallo,

    ich habe ein Attribut Dateiauswahl mit der Option "Als Download ausgeben" eingerichtet. Das ist auch notwendig, weil die Dateien in einem geschützten Ordner liegen.
    Im Frontend soll in einer Liste nun der Link dazu ausgegeben werden.

    Mit <?php echo $entry->field('enclosures')->html(); ?> erfolgt die Ausgabe korrekt über das Attribut-Template "CE_Files" mit href="?file="
    Dieser passt sich beim Filtern auch entsprechend an und wird an den URL-Parameter des Filters angehängt.

    Da ich den Link-Block erweitern möchte, brauche ich aber nur den Link.

    Mit <?php echo \FilesModel::findByUuid($entry->field('enclosures')->value())->path; ?> komme ich zwar an den Pfad der Datei, mir fehlt hier aber das korrekte "?file=".

    Wie komme ich an den korrekten Link mit Download-Parameter?

    Über das Attribut habe ich es auch schon versucht, kenne aber den Wert nicht.

    <?php echo $this->field('myField')->attribute()->title; ?>

  • #2
    Ich weiss zwar nicht was ?file= für ein Parameter ist, aber den Pfad ermittelt man so: http://forum.premium-contao-themes.c...=1428#post1428
    http://www.premium-contao-themes.com

    Kommentar


    • #3
      Damit bekomme ich den Pfad zu der Datei. Das ist richtig und mir auch bekannt.
      Die Datei ist aber in einem geschützten Ordner. Daher lässt sie sich korrekterweise so nicht öffnen.

      Der Parameter ?file= wird bei Deinem Attribut-Template ce_files beim Link ergänzt, wenn man als Attribut-Option "Als Download ausgeben" gewählt hat. Dieser wird auch beim Contao eigenen Inhaltselement "Download" gesetzt. Nur damit lassen sich geschützte Dateien im Frontend ausgeben.

      Wie hast Du es denn beim Attribut-Template ce_files gemacht?

      Kommentar


      • #4
        CE durchläuft hier Contaos Download Elemente und nutzt quasi dessen Basis. Das Attribut Template gibt im Grunde ein abgearbeitetes Standard Contao Download Element zurück.

        Mhh... geschützte Ordner lassen trotzdem einen Download zu. Das klingt nach Sicherheitslücke.
        http://www.premium-contao-themes.com

        Kommentar


        • #5
          Zitat von Tim Beitrag anzeigen
          CE durchläuft hier Contaos Download Elemente und nutzt quasi dessen Basis. Das Attribut Template gibt im Grunde ein abgearbeitetes Standard Contao Download Element zurück.

          Mhh... geschützte Ordner lassen trotzdem einen Download zu. Das klingt nach Sicherheitslücke.
          Wenn es im Attribut als "Download" angegeben ist und dein Template Contaos Download Element durchläuft, dann ist doch alles richtig. Ich sehe hier keine Sicherheitslücke.

          Die Frage ist nur, wie kann ich in mein Template den Link aus deinem ce_files einbinden?

          Kommentar


          • #6
            Was ist heisst denn "mein Template". Was für ein Template hast du denn? CE, CC oder ganz was anderes?
            http://www.premium-contao-themes.com

            Kommentar


            • #7
              Zitat von Tim Beitrag anzeigen
              Was ist heisst denn "mein Template". Was für ein Template hast du denn? CE, CC oder ganz was anderes?
              Sorry! Hast Du Deine Glaskugel heute nicht dabei? ;-)

              CC

              Kommentar


              • #8
                Ok, aber du hast doch eigentlich eigentlich alles richtig oben bereits?!

                Wie komme ich an den korrekten Link mit Download-Parameter?
                Den musste dir halt selbst zusammen bauen,wenn du nicht auf Standards setzen magst und mit ->html() ausgeben willst (das Attribute-Template kannst du auch abändern)

                Ich würde es so machen (innerhalb foreach Schleife im CC Liste Template).

                PHP-Code:
                <a href="{{env::request}}?file=<?php echo \FilesModel::findByUuid($entry->field('enclosures')->value())->path?>">Klick mich</a>
                http://www.premium-contao-themes.com

                Kommentar


                • #9
                  Zitat von Tim Beitrag anzeigen
                  Ok, aber du hast doch eigentlich eigentlich alles richtig oben bereits?!


                  Den musste dir halt selbst zusammen bauen,wenn du nicht auf Standards setzen magst und mit ->html() ausgeben willst (das Attribute-Template kannst du auch abändern)

                  Ich würde es so machen (innerhalb foreach Schleife im CC Liste Template).

                  PHP-Code:
                  <a href="{{env::request}}?file=<?php echo \FilesModel::findByUuid($entry->field('enclosures')->value())->path?>">Klick mich</a>

                  So habe ich das auch schon gemacht. Das Problem: Beim Filtern ändert sich der Request und damit stimmt der Link nicht mehr. Der wird nicht angehangen! Hast Du noch eine andere Idee?

                  Kommt man über das Attribut daran?
                  <?php echo $this->field('myField')->attribute()->WERT; ?>

                  Wie kann man denn die Attribut-Templates ändern? Ich konnte dazu nichts finden.

                  Kommentar


                  • #10
                    Dann setz doch einfach eine fixe Url ein oder ein inserttag auf die aktuelle Seiten id ala link_url::MEIN-ID, Alternative ist richtig mit der Environment Klasse von Contao zu arbeiten. Braucht es hier aber eigentlich nicht.

                    Wie kann man denn die Attribut-Templates ändern? Ich konnte dazu nichts finden.
                    In den Einstellungen des Attributes kann man das Template ändern. Du kannst dir darin mit einem php debugger oder Contao showTemplateVars Methode alle Variablen ausgeben lassen. Das geht mit allen Templates. In der Regel ist es dort $this->value.

                    Den Aufruf, den du tätigst gibt einen Wert aus dem Attribut-Datensatz. Hier dokumentiert: http://forum.premium-contao-themes.c...late-variablen
                    http://www.premium-contao-themes.com

                    Kommentar


                    • #11
                      Zitat von Tim Beitrag anzeigen

                      Ich würde es so machen (innerhalb foreach Schleife im CC Liste Template).

                      PHP-Code:
                      <a href="{{env::request}}?file=<?php echo \FilesModel::findByUuid($entry->field('enclosures')->value())->path?>">Klick mich</a>
                      Ich habe gerade festgestellt, das selbst das ungefiltert nur funktioniert, wenn die HTML-Ausgabe des Attributs zusätzlich mit im Template ist:
                      <?php echo $entry->field('enclosures')->html(); ?>

                      Das ist aber schon bei Contao so. Dort muss man auch das CE Downloads zusätzlich einbinden.

                      Kommentar


                      • #12
                        Naja, Ich weiss ja nicht was genau du hier in dem Feld hast. Dies ist jedenfalls ein Beispiel die Ausgabe für EIN nicht multiples Element. Wenn das eine Mehrfachauswahl ist, muss das alles in eine foreach Schleife, da Contaos FilesModel hier eine Collection zurück geben wird. Und für jedes Files Model in der Collection muss dann der Link via ->path abgefragt werden.

                        ps. Im Attribute Template kommt man mit $this->rawValue an die rohen Werte. Je nach Element ist dies hier ein binärer Wert (wenn z.B. ein Ordner gewählt ist) oder ein Array aus Werten.
                        Zuletzt geändert von Tim; 09.08.2017, 14:18.
                        http://www.premium-contao-themes.com

                        Kommentar


                        • #13
                          Ich habe jetzt noch ein wenig probiert. Leider komme ich immer nur an den direkten Pfad.

                          Eine Lösung wäre die Erweiterung contao_inserttag_download. Diese generiert den Link wie benötigt.
                          Allerdings benötige ich dazu die UUID der Datei.

                          Könntest Du mir bitte nochmal helfen? Wie kann ich die UUID beim Attribut Dateiauswahl im CC-Template ermitteln?

                          Kommentar


                          • #14
                            Zitat von Pandroid Beitrag anzeigen


                            Könntest Du mir bitte nochmal helfen? Wie kann ich die UUID beim Attribut Dateiauswahl im CC-Template ermitteln?
                            Hat sich erledigt! Die Erweiterung kann auch mit dem Dateipfad arbeiten. UUID ist also nicht notwendig.

                            Kommentar

                            Lädt...
                            X