デフォルトでは、Drupal 7にはサムネイル、中、大の3種類の画像スタイルが同梱されています。
たとえば、画像フィールド(「画像」と呼ばれるフィールド名と仮定します)を使用して画像ファイル(
‘abc.jpg’)をアップロードします。 “Article”ノードを作成している間、画像ファイルはアップロードされて
“sites/default/files/field/image/abc.jpg”に保存され、このアップロードされたファイルのレコードは
“file_managed “テーブル。
その時までに、 “abc.jpg”の中規模および大規模スタイルのバージョンはまだ作成されていません。
「Article」ノードのティーザーは、メディアスタイルのイメージフィールドを表示します。
次に、そのノードのティーザービューモードに初めて移動します。 “abc.jpg”のメディア版が生成され、
“sites/default/files/styles/medium/public/field/image/abc.jpg”に置かれます。
デフォルトのビューは、「大きな」スタイルを使用してイメージを表示するように設定されています。
デフォルトビューを使用してノードを表示し、 “abc.jpg”の大きなバージョンが
“sites/default/files/styles/large/public/field/image/abc.jpg”に作成されます。
基本的に、画像のアップロードは非常にスマートです。画像がアップロードされると、Drupalはその画像の異なるスタイルのバージョンをすべて作成することはありません。
Drupalは、最初にその特定のイメージスタイルを使用してビューを参照するときにイメージのスタイルを作成します。
どのファンクション/フックがスタイル付きイメージのファイルを作成していますか?
スタイルに基づいたイメージURLを生成する関数は、 theme(
‘image_style’)/theme_image_formatter/7 “rel =” nofollow
“>テーマ( ‘image_formatter’)を作成し、 image_field_formatter_view()hook_field_formatter_viewの実装です()では、フィールドフォーマッタで、そのフィールドを含むエンティティのビュー内のフィールドの内容を出力するフックです。
イメージは、そのURLにアクセスすると生成されます。私は次のコードを試した:
theme("image_formatter", array("image_style" => "thumbnail", "item" => array("uri" => "test.png", "title" => "Image title", "alt" => "Alternative text")));
私が得た出力は以下の通りです:
画像_メニュー( )を使用すると、次の行が見つかります。
$directory_path = file_stream_wrapper_get_instance_by_scheme('public')->getDirectoryPath();
$items[$directory_path . '/styles/%image_style'] = array(
'title' => 'Generate image style',
'page callback' => 'image_style_deliver',
'page arguments' => array(count(explode('/', $directory_path)) + 1),
'access callback' => TRUE,
'type' => MENU_CALLBACK,
);
image_style_deliver() is the function that
generates the image.