Provavelmente chegando a esse ponto de vista do Drupal 6, mas ...
Como tema uma imagem em um determinado estilo de imagem quando ela fica em uma pasta de módulo? Isso está me deixando maluco e sei que estou perdendo algo simples.
Aqui está um exemplo de código mostrando o que estou tentando fazer:
$file_uri = 'public://sites/all/modules/my_module/logo.jpg';
$data['logo'] = theme('image_style', array('style_name' => 'medium', 'path' => $file_uri));
Mesmo se eu usar file_build_uri (), acabarei com um caminho para um arquivo que não existe. Se eu mover a imagem para o diretório de arquivos e alterar o $ file_uri para 'public: //logo.jpg', funcionará perfeitamente.
Preciso copiar a imagem no diretório de arquivos como parte do código do módulo? Se sim, isso não é ridículo?
o que estou perdendo? Existe documentação sobre como fazer algo assim? Passei mais de uma hora pesquisando a documentação do Drupal e fiquei completamente seco.
Respostas:
Infelizmente isso é por design. A partir da
theme_image_style()
descrição dos documentos dos parâmetros aceitáveis:Ênfase minha.
Parece que o sistema de estilo de imagem só funciona no contexto do diretório de arquivos públicos (talvez privado também, não tenho certeza).
Eu me deparei com uma situação semelhante recentemente e acabei tendo que codificá-la eu mesmo (embora tenha emprestado muito do módulo de imagem principal).
fonte
Acabei de descobrir isso e tive que escrever o código para lidar com isso.
Isso efetivamente clona
theme_image_style()
para criar derivadas de imagem durante a execução da solicitação de página. A geração ignora os problemas de segurança que normalmente acionariam um 404, mas isso também significa uma página mais lenta na primeira vez que a página é visitada.Estou usando apenas o esquema de arquivo público, mas espero que isso falhe com os estilos baseados no esquema de arquivo privado.
fonte
theme_image_style()
aceita um URI usando wrappers de fluxo do PHP e caminhos não reais.input://
é um wrapper de fluxo do PHPpublic://
,private://
etemporary://
são os wrappers do Drupal para representar assites/default/files
pastas privadas e temporárias.Se você definitivamente precisa usar um estilo de imagem com uma imagem encontrada em um módulo, você pode querer verificar o system_stream_wrapper módulo que adiciona as
module://
,theme://
,profile://
elibrary://
wrappers de fluxo.Aviso: Pode ser irrelevante para a pergunta atual, mas como foi mencionado em outras postagens, eu também gostaria de apontar para o módulo remote_stream_wrapper que adiciona suporte para qualquer URL usando http: //, https: // ou feed: / / . Como mencionado, porém, esses wrappers de fluxo são somente leitura e não podem executar nenhuma operação de gravação, mas acredito que poderia ser usado com
image_style_url()
funções relacionadas comotheme_image_style()
.fonte