Вероятно, это происходит с точки зрения Drupal 6, но ...
Как создать тему для изображения в заданном стиле, если оно находится в папке модуля? Это сводит меня с ума, и я знаю, что мне просто не хватает чего-то простого.
Вот пример кода, показывающий, что я пытаюсь сделать:
$file_uri = 'public://sites/all/modules/my_module/logo.jpg';
$data['logo'] = theme('image_style', array('style_name' => 'medium', 'path' => $file_uri));
Даже если я использую file_build_uri (), я получаю путь к файлу, который не существует. Если я переместу изображение в каталог files и изменим $ file_uri на public: //logo.jpg, все будет работать нормально.
Нужно ли копировать изображение в каталог файлов как часть кода модуля? Если так, разве это не смешно?
Что мне не хватает? Есть ли документация о том, как сделать что-то подобное? Я потратил более часа на разработку документации по Drupal и вышел полностью сухим.
Ответы:
К сожалению, это по замыслу. Из
theme_image_style()
описания документов допустимых параметров:Акцент мой.
Кажется, что система стилей изображения работает только в контексте каталога публичных файлов (может быть, тоже частного, я не уверен).
Недавно я столкнулся с подобной ситуацией, и в итоге мне пришлось самому ее кодировать (хотя я много позаимствовал из модуля образа ядра).
источник
Я только столкнулся с этим и должен был написать код, чтобы справиться с этим.
Это эффективно клонирует
theme_image_style()
для создания производных изображений во время выполнения запроса страницы. Поколение обходит проблемы безопасности, которые в противном случае обычно вызывали бы 404, но это также означает, что страница медленнее при первом посещении страницы.Я использую только схему открытого файла, но я ожидаю, что это не удастся со стилями, основанными на схеме частного файла.
источник
theme_image_style()
принимает URI с использованием потоковых оболочек PHP, а не реальных путей.input://
является РНР потока обертка, в то время какpublic://
,private://
иtemporary://
являются потоковыми упаковщиками в Drupal для представленияsites/default/files
, частные и временных папок.Если вам обязательно нужно использовать стиль изображения с изображением найденного в модуле, вы можете проверить system_stream_wrapper модуль , который складывает
module://
,theme://
,profile://
иlibrary://
поток обертки.Обратите внимание: это может не относиться к текущему вопросу, но, поскольку он упоминался в других публикациях, я хотел бы также указать на модуль remote_stream_wrapper, который добавляет поддержку любого URL-адреса с использованием http: //, https: // или feed: / / . Как уже упоминалось, эти потоковые оболочки доступны только для чтения и не могут выполнять никаких операций записи, но я считаю, что их можно использовать с
image_style_url()
такими функциями, какtheme_image_style()
.источник