Probablemente llegue a esto desde un punto de vista de Drupal 6 demasiado, pero ...
¿Cómo tema una imagen en un estilo de imagen dado cuando esa imagen vive en una carpeta de módulo? Esto me está volviendo loco y sé que solo me falta algo simple.
Aquí hay un código de ejemplo que muestra lo que estoy tratando de hacer:
$file_uri = 'public://sites/all/modules/my_module/logo.jpg';
$data['logo'] = theme('image_style', array('style_name' => 'medium', 'path' => $file_uri));
Incluso si uso file_build_uri (), termino con una ruta a un archivo que no existe. Si muevo la imagen al directorio de archivos y cambio $ file_uri a 'public: //logo.jpg', funciona bien.
¿Necesito copiar la imagen en el directorio de archivos como parte del código del módulo? Si es así, ¿no es esto ridículo?
¿Qué me estoy perdiendo? ¿Hay documentación sobre cómo hacer algo como esto? Pasé más de una hora extrayendo la documentación de Drupal y salí completamente seco.
Respuestas:
Lamentablemente eso es por diseño. De la
theme_image_style()
descripción de los documentos de los parámetros aceptables:El énfasis es mío.
Parece que el sistema de estilo de imagen solo funciona en el contexto del directorio de archivos públicos (tal vez también privado, no estoy seguro).
Me encontré con una situación similar recientemente y terminé teniendo que codificarlo yo mismo (aunque tomé prestado mucho del módulo de imagen central).
fuente
Acabo de encontrar esto y tuve que escribir el código para manejar esto.
Esto efectivamente clona
theme_image_style()
para crear derivados de imágenes durante la ejecución de la solicitud de página. La generación pasa por alto los problemas de seguridad que de otro modo normalmente desencadenarían un 404, pero eso también significa una página más lenta la primera vez que se visita la página.Solo estoy usando el esquema de archivo público, pero espero que esto falle con los estilos basados en el esquema de archivo privado.
fuente
theme_image_style()
acepta un URI utilizando envoltorios de flujo de PHP y no rutas reales.input://
es un contenedor de flujo de PHP, mientras quepublic://
,private://
ytemporary://
son contenedores de flujo de Drupal para representar lassites/default/files
carpetas privadas y temporales.Si definitivamente necesita utilizar un estilo de imagen con una imagen que se encuentra en un módulo, es posible que desee comprobar la system_stream_wrapper módulo que agrega los
module://
,theme://
,profile://
ylibrary://
envolturas de flujos.Aviso: puede ser irrelevante para la pregunta actual, pero como se mencionó en otras publicaciones, me gustaría señalar también el módulo remote_stream_wrapper que agrega soporte para cualquier URL que use http: //, https: // o feed: / / . Sin embargo, como se mencionó, estos envoltorios de flujo son de solo lectura y no pueden realizar ninguna operación de escritura, pero creo que podría usarse con
image_style_url()
funciones relacionadas comotheme_image_style()
.fuente