Prawdopodobnie dochodzi do tego ze zbyt dużego punktu widzenia Drupala 6, ale ...
Jak utworzyć motyw obrazu w danym stylu obrazu, gdy ten obraz znajduje się w folderze modułu? To doprowadza mnie do szału i wiem, że brakuje mi czegoś prostego.
Oto przykładowy kod pokazujący, co próbuję zrobić:
$file_uri = 'public://sites/all/modules/my_module/logo.jpg';
$data['logo'] = theme('image_style', array('style_name' => 'medium', 'path' => $file_uri));
Nawet jeśli użyję file_build_uri (), to skończę ze ścieżką do pliku, który nie istnieje. Jeśli przeniosę obraz do katalogu plików i zmienię $ file_uri na 'public: //logo.jpg', to działa dobrze.
Czy muszę skopiować obraz do katalogu plików jako część kodu modułu? Jeśli tak, czy to nie jest śmieszne?
czego mi brakuje? Czy istnieje dokumentacja, jak to zrobić? Spędziłem ponad godzinę przeglądając dokumentację Drupala i całkowicie wyszedłem.
Odpowiedzi:
Niestety jest to zgodne z projektem. Z
theme_image_style()
opisu dopuszczalnych parametrów doktorów:Podkreśl moje.
Wygląda na to, że system stylów obrazów działa tylko w kontekście katalogu plików publicznych (być może również prywatnych, nie jestem pewien).
Niedawno spotkałem się z podobną sytuacją i ostatecznie musiałem sam ją kodować (chociaż dużo pożyczyłem od głównego modułu obrazu).
źródło
Właśnie się z tym spotkałem i musiałem napisać kod, aby sobie z tym poradzić.
To skutecznie klonuje,
theme_image_style()
aby utworzyć pochodne obrazu podczas wykonywania żądania strony. Generacja omija problemy z bezpieczeństwem, które normalnie wywoływałyby błąd 404, ale oznacza to również wolniejszą stronę przy pierwszej wizycie.Używam tylko publicznego schematu pliku, ale spodziewam się, że to się nie powiedzie ze stylami opartymi na schemacie pliku prywatnego.
źródło
theme_image_style()
akceptuje URI przy użyciu owijania strumieni PHP, a nie rzeczywistych ścieżek.input://
PHP jest strumień wrapper, natomiastpublic://
,private://
itemporary://
to Drupal owijarki stream za reprezentowaniesites/default/files
, foldery prywatne i tymczasowe.Jeśli na pewno trzeba użyć styl obrazu z obrazu znalezionego w module, może chcesz sprawdzić system_stream_wrapper moduł, który dodaje
module://
,theme://
,profile://
ilibrary://
owijarki strumieniowych.Uwaga: Może to być nieistotne dla bieżącego pytania, ale ponieważ zostało wspomniane w innych postach, chciałbym również wskazać moduł remote_stream_wrapper , który dodaje obsługę dowolnego adresu URL za pomocą http: //, https: // lub feed: / / . Jak już wspomniano, te opakowania strumieniowe są tylko do odczytu i nie mogą wykonywać żadnych operacji zapisu, ale uważam, że można ich używać z
image_style_url()
powiązanymi funkcjami, takimi jaktheme_image_style()
.źródło