Wahrscheinlich aus einer zu Drupal 6-Sicht, aber ...
Wie kann ich ein Bild in einem bestimmten Bildstil thematisieren, wenn sich dieses Bild in einem Modulordner befindet? Das macht mich verrückt und ich weiß, dass mir nur etwas Einfaches fehlt.
Hier ist ein Beispielcode, der zeigt, was ich versuche:
$file_uri = 'public://sites/all/modules/my_module/logo.jpg';
$data['logo'] = theme('image_style', array('style_name' => 'medium', 'path' => $file_uri));
Selbst wenn ich file_build_uri () verwende, erhalte ich einen Pfad zu einer Datei, die nicht existiert. Wenn ich das Bild in das Dateiverzeichnis verschiebe und $ file_uri in 'public: //logo.jpg' ändere, funktioniert es einwandfrei.
Muss ich das Bild als Teil des Modulcodes in das Dateiverzeichnis kopieren? Wenn ja, ist das nicht lächerlich?
Was vermisse ich? Gibt es eine Dokumentation dazu? Ich habe über eine Stunde damit verbracht, die Drupal-Dokumentation abzubauen, und bin völlig trocken aufgetaucht.
Antworten:
Leider ist das beabsichtigt. Aus der
theme_image_style()
Beschreibung der akzeptablen Parameter in den Dokumenten:Hervorhebung von mir.
Es scheint, dass das Bildstilsystem nur im Kontext des Verzeichnisses für öffentliche Dateien funktioniert (möglicherweise auch privat, ich bin mir nicht sicher).
Ich bin kürzlich in eine ähnliche Situation geraten und musste sie schließlich selbst codieren (obwohl ich viel vom Kern-Image-Modul ausgeliehen habe).
quelle
Ich bin gerade darauf gestoßen und musste den Code schreiben, um damit umzugehen.
Dies klont effektiv
theme_image_style()
, um Bildableitungen während der Ausführung der Seitenanforderung zu erstellen. Die Generierung umgeht die Sicherheitsprobleme, die normalerweise einen 404 auslösen würden. Dies bedeutet jedoch auch eine langsamere Seite beim ersten Besuch der Seite.Ich verwende nur das öffentliche Dateischema, aber ich würde erwarten, dass dies bei den auf privaten Dateischemas basierenden Stilen fehlschlägt.
quelle
theme_image_style()
akzeptiert einen URI unter Verwendung der Stream-Wrapper von PHP und nicht realer Pfade.input://
ist ein Stream - Wrapper von PHP, währendpublic://
,private://
undtemporary://
Drupal Stream Wrapper sind für die Darstellung dersites/default/files
privaten und temporären Ordner.Wenn Sie auf jeden Fall ein Bild Stil mit einem Bild in einem Modul gefunden verwenden müssen, können Sie das überprüfen system_stream_wrapper - Modul , das den hinzufügt
module://
,theme://
,profile://
undlibrary://
Stream - Wrapper.Hinweis: Es mag für die aktuelle Frage irrelevant sein, aber da es in anderen Beiträgen erwähnt wurde, möchte ich auch auf das Modul remote_stream_wrapper verweisen, das Unterstützung für jede URL mit http: //, https: // oder feed: / hinzufügt / . Wie bereits erwähnt, sind diese Stream-Wrapper schreibgeschützt und können keine Schreibvorgänge ausführen. Ich glaube jedoch, dass sie mit
image_style_url()
und verwandten Funktionen wie verwendet werden könnentheme_image_style()
.quelle