ビューを使用してカスタムスライドショーを作成しようとしています。 ビュースライドショーモジュールを使用していないことに注意してください
私が達成する必要があるのは、コンテナー内の画像の相対URLをラップすることです。したがって、私のフィールドテンプレートは
/sites/default/files/background.jpg
私が抱えている問題は、URIにアクセスして生の値をいくつかのdivタグに書き込むことができるようにすることです。つまり、それが私が苦労している領域なので、すべてのdivコンテナーではなく、URLのみを書くことに焦点を当てています。それは後で来るでしょう。
画像については、タイトルと画像自体の2つのフィールドのみを持つ単純なコンテンツタイプがあります。探している画像を一覧表示するビューを作成しました。次に、ビュー内のフィールドテンプレートをカスタマイズします。これが私のコードです:
<?php
$node = node_load($row->nid);
$field_name = "field_image";
$delta = 0;
$field = field_get_items('node', $node, $field_name);
$output = field_view_value('node', $node, $field_name, $field[$delta]);
print ($output['#item']['uri']);
/* Everything below is for Debugging Purposes */
print "<br><br>";
print "Field: ";
print_r($field);
print "<br><br>";
print "Output: ";
print_r($output);
print "<br><br>";
?>
以下の出力を見ると、次のようなURIが表示されます。
public://public://sandy_beach_banner.jpg
これは正しいです。絶対ではなく相対リンクにする方法がわかったらすぐに、file_create_Url()を使用して実行します。
ただし、次のエラーメッセージが表示されます。
Notice: Undefined index: #item in include() (line 11 of
/var/www2/html/annex/sites/all/themes/mytheme/templates/views-
view-field--banner-slide-show--field-image.tpl.php)
ファイル参照の11行目
print ($output['#item']['uri']);
これは理解できません。正しく参照していないと、探しているURI値を取得できません。それで...これは私を非常に混乱させます。私がここで見つけた例に従うようにしています: Rendering Drupal 7 Fields The Right Way 私が知ることができることから、これはD8(Iそれは間違っているかもしれません。それと、これを正しい方法で行う方法を合法的に学びたいと思います。
ここで何かアドバイスをいただければ幸いです。
public://public://sandy_beach_banner.jpg
Field: Array ( [0] => Array ( [fid] => 5 [uid] => 1 [filename] => sandy_beach_banner.jpg [uri] => public://sandy_beach_banner.jpg [filemime] => image/jpeg [filesize] => 30663 [status] => 1 [timestamp] => 1444690263 [alt] => Sandy Beach [title] => Sandy Beach [width] => 800 [height] => 200 ) )
Output: Array ( [#theme] => image_formatter [#item] => Array ( [fid] => 5 [uid] => 1 [filename] => sandy_beach_banner.jpg [uri] => public://sandy_beach_banner.jpg [filemime] => image/jpeg [filesize] => 30663 [status] => 1 [timestamp] => 1444690263 [alt] => Sandy Beach [title] => Sandy Beach [width] => 800 [height] => 200 ) [#image_style] => [#path] => [#access] => 1 )
public://public://nyc_banner.jpg
Field: Array ( [0] => Array ( [fid] => 4 [uid] => 1 [filename] => nyc_banner.jpg [uri] => public://nyc_banner.jpg [filemime] => image/jpeg [filesize] => 480360 [status] => 1 [timestamp] => 1444690227 [alt] => NYC Banner [title] => NYC Banner [width] => 1200 [height] => 492 ) )
Output: Array ( [#theme] => image_formatter [#item] => Array ( [fid] => 4 [uid] => 1 [filename] => nyc_banner.jpg [uri] => public://nyc_banner.jpg [filemime] => image/jpeg [filesize] => 480360 [status] => 1 [timestamp] => 1444690227 [alt] => NYC Banner [title] => NYC Banner [width] => 1200 [height] => 492 ) [#image_style] => [#path] => [#access] => 1 )
public://public://hindu_banner.jpg
Field: Array ( [0] => Array ( [fid] => 3 [uid] => 1 [filename] => hindu_banner.jpg [uri] => public://hindu_banner.jpg [filemime] => image/jpeg [filesize] => 508630 [status] => 1 [timestamp] => 1444690189 [alt] => Hindu Banner [title] => Hindu Banner [width] => 2000 [height] => 560 ) )
Output: Array ( [#theme] => image_formatter [#item] => Array ( [fid] => 3 [uid] => 1 [filename] => hindu_banner.jpg [uri] => public://hindu_banner.jpg [filemime] => image/jpeg [filesize] => 508630 [status] => 1 [timestamp] => 1444690189 [alt] => Hindu Banner [title] => Hindu Banner [width] => 2000 [height] => 560 ) [#image_style] => [#path] => [#access] => 1 )
なんらかの理由で、ファイル(おそらく画像)のURLを取得し、それをドキュメントのマークアップに挿入するとします。たぶん、あなたはそれをスライドショーで使いたいので、出力を書き直す必要があるので、それをいくつかのdivタグ内に埋め込み、CSSのいくつかのクラスに割り当てることができます。
テンプレートファイルを変更したり、コードを1行書き込んだりせずに Viewsで実行できます。そして、このモジュールはDrupal 8(D7とは異なり))、箱から出してこれを行うことができます。
クレジットの期限が到来する場所でクレジットを与えると、この単純なソリューションを示したのはDrupal Relativity Data Modelの作成者である www.jay-epstien.com のジェイでした。このHOWTOを読んだ後、彼のサイトにアクセスすることをお勧めします。
このチュートリアルを書いたのは、日間を費やして調査し、同様の状況にある人の正気を守りたかったからです。 Stackexchange と Drupal API には、これを実現する方法を示す大量の投稿があります。私はこれらの指示に従ってテンプレートファイルを書き直し、それが機能する(私の元の質問)間、エラーを生成しましたが、答えはありませんでした。 URLフォーマッタモジュールを使用するように言う別の投稿があります。
「そのためのモジュールがあります」という方法論のサブスクライバーではないため、モジュールの使用は避けたいものです。また、そのURLフォーマッターにも注意してください。モジュールはD8互換ではないため、書き換える必要があります。このソリューションはそうである必要はありません。
Viewsモジュールがインストールされていて、目的のコンテンツを表示するためのビューを作成済みであるという前提で作業を進めています。これだけのチュートリアルはたくさんあるので、ここでは取り上げません。
フィールドには、任意のフォーマット、フォーマットされていないリスト、HTMLリスト、グリッドなどを使用できます。この例では、フォーマットされていないリストを使用します。ビューを最初から作成する場合は、[タイトル]フィールドがデフォルトとしてすでに設定されているはずです。下の図のようになります。
最初に行う必要がある最も重要なことは、ファイルエンティティとの関係を作成することです。ビュー表示の[詳細設定]タブで、関係を参照してください。 1つ追加しましょう。
この関係を要求する必要はないので、このチェックブロックを空白のままにしてください。 「ファイル」の識別子は問題ありませんが、参照しやすくなれば、これを別のものに変更できます。
別のフィールドを追加してみましょう。選択ダイアログボックスの[ファイル]フィルターを使用して、現在使用可能なすべての選択肢を表示します。パスを選択します。
次の画面は、すべての魔法が発生する場所です。通常、次のようなURIを取得します
public://sites/default/files/somepicture.jpg
必要に応じて、ここでは何も選択せずに試してみて、ビューのプレビューペインに何が表示されるかを確認してください。ただし、「ファイルストレージURIではなくダウンロードパスを表示する」の横のボックスをオンにすると、
http://www.foobar.com/sites/default/files/somepicture.jpg
これで、フィールドとリンクの出力を書き換えて、好きなようにスタイルを設定できます。その方法についての投稿やチュートリアルはたくさんあるので、ここでは説明しません。完了すると、ビューの表示は次のようになります。