web-dev-qa-db-ja.com

アップロードされた画像がないときにデフォルトの画像を表示する

ユーザーがアップロードした画像のサムネイル付きのビューがあります。ユーザーが画像をアップロードしなかった場合に備えて、サムネイルの代わりに表示されるデフォルトの画像を設定したいと思います。それは可能ですか?助言をいただければ幸いです。

3
Vonder

ビューでは、「空のフィールドの動作を設定できます。そのため、ハードコードされた画像が存在しない場合はそこに配置できます。コンテンツタイプ自体に、存在しない場合はデフォルトの画像を設定できます。そのフィールドに設定します。

4
Jimajamma

これは、コンテンツタイプ>画像フィールド>フィールド設定を編集するときに実行できます。そこで、デフォルトの画像をアップロードできます。この画像はビューに表示されます。

5
jeroen

Drupal 7:ティーザーにデフォルトのアイコンを表示しますが、完全なビューではなく表示します。最終的に私はこの解決策を思いつきました:

  1. コンテンツタイプのフィールドを編集し、プレースホルダー画像をフィールドのデフォルト画像として設定します。
  2. これで、サムネイルのないティーザーにプレースホルダー画像が表示されます。しかし、それは完全なノードビューにも表示されますが、これは望ましくありません。
  3. 私のテーマのtemplate.phpにtemplate_preprocess_node()を実装しました。このフックの中で、ノードのタイプをチェックして、変更したいノードの1つであるかどうかを確認します。次に、表示モードをチェックして、「完全」に設定されていることを確認します。次に、最後にフィールドの内容をチェックして、デフォルトの画像が含まれているかどうかを確認します。その場合、Drupal hide()関数を使用してフィールドを非表示にします。

少し試行錯誤しましたが、ここに私の作業コードがあります。私は3つの異なるコンテンツタイプを調べています。私のフィールドは「field_hero_shot」という名前で、私のプレースホルダー画像は「placeholder.png」という名前です。もちろん、コンテンツタイプとフィールド名に合わせてこれらを調整する必要があります。

 function mytheme_preprocess_node(&$variables) {

  // For Press room news types, hide the default thumbnail placeholder 
  // image in the full display mode.  

  // turn on for debugging: dpm($variables);

  if (isset($variables['type']) && 
        ( ($variables['type'] == 'company_update')
          || ($variables['type'] == 'media_clipping')
          || ($variables['type'] == 'news_release')
        ) &&
       isset($variables['view_mode']) && ($variables['view_mode'] == 'full')) {

      // then it's a press room type and it is in full display mode!

      // See if the Hero Shot field contains "placeholder.png".       
      if (isset($variables['field_hero_shot'][0]['filename']) 
            && ($variables['field_hero_shot'][0]['filename'] == 'placeholder.png')) {

         // If so that's the default image and we should hide it!        
         hide($variables['content']['field_hero_shot'][0]);
      } 
    }
}
1