Venant probablement à cela d'un trop grand point de vue Drupal 6 mais ...
Comment puis-je thème une image dans un style d'image donné lorsque cette image vit dans un dossier de module? Cela me rend fou et je sais que je manque juste quelque chose de simple.
Voici un exemple de code montrant ce que j'essaie de faire:
$file_uri = 'public://sites/all/modules/my_module/logo.jpg';
$data['logo'] = theme('image_style', array('style_name' => 'medium', 'path' => $file_uri));
Même si j'utilise file_build_uri (), je me retrouve avec un chemin vers un fichier qui n'existe pas. Si je déplace l'image vers le répertoire des fichiers et que je change le $ file_uri en «public: //logo.jpg», cela fonctionne très bien.
Dois-je copier l'image dans le répertoire des fichiers dans le cadre du code du module? Si oui, n'est-ce pas ridicule?
Qu'est-ce que je rate? Existe-t-il une documentation sur la façon de faire quelque chose comme ça? J'ai passé plus d'une heure à explorer la documentation Drupal et je suis complètement sec.
Réponses:
Malheureusement, c'est par conception. D'après la
theme_image_style()
description des paramètres acceptables par les documents:Je souligne.
Il semble que le système de style d'image ne fonctionne que dans le contexte du répertoire des fichiers publics (peut-être aussi privé, je ne suis pas sûr).
J'ai rencontré récemment une situation similaire et j'ai fini par devoir la coder moi-même (bien que j'aie beaucoup emprunté au module d'image de base).
la source
Je viens de découvrir cela et j'ai dû écrire le code pour gérer cela.
Cela clone efficacement
theme_image_style()
pour créer des dérivés d'image lors de l'exécution de la demande de page. La génération contourne les problèmes de sécurité qui autrement déclencheraient normalement un 404, mais cela signifie également une page plus lente la première fois que la page est visitée.J'utilise uniquement le schéma de fichier public, mais je m'attends à ce que cela échoue avec les styles basés sur le schéma de fichier privé.
la source
theme_image_style()
accepte un URI utilisant les wrappers de flux de PHP et non des chemins réels.input://
est un wrapper de flux PHP, tandis quepublic://
,private://
ettemporary://
sont des wrappers de flux de Drupal pour représenter lessites/default/files
dossiers privés et temporaires.Si vous avez certainement besoin d'utiliser un style d'image avec une image trouvée dans un module, vous pouvez vérifier le system_stream_wrapper module qui ajoute les
module://
,theme://
,profile://
etlibrary://
enveloppes de flux.Remarque: cela peut ne pas être pertinent pour la question actuelle, mais comme il a été mentionné dans d'autres articles, je voudrais également pointer vers le module remote_stream_wrapper qui ajoute la prise en charge de toute URL utilisant http: //, https: // ou feed: / / . Comme mentionné cependant, ces wrappers de flux sont en lecture seule et ne peuvent effectuer aucune opération d'écriture, mais je pense qu'ils pourraient être utilisés avec
image_style_url()
des fonctions connexes commetheme_image_style()
.la source