エンティティ参照を使用して、ブログの下にエンティティ参照タイプのフィールドを作成することにより、ブログタイプのノードをカスタムコンテンツタイプ「チャレンジ」の別のノードにリンクすることができました。すごい。これで、ブログが公開されると、リンクされたカスタムコンテンツタイプの一部(すべてではない)のフィールドもそこに表示されます。例として、私のカスタムコンテンツタイプには、title、body、image1、image2、sponsorなどのフィールド、フラグモジュールを使用するフラグ、およびその他のフィールドがあります。私が言及したいくつかのフィールドのみをブログに表示する必要があります(表示されるフラグなどはありません)。 SOブログの[ディスプレイの管理]で何をするかを表示するために[レンダリングエンティティ]を選択します。これにより、参照/リンクされたノードからすべてのフィールドが取得されます。ただし、一部ではないフィールドが必要です。私が行うことは、カスタムノード(blog.tpl.php)を記述することです。
_<?php
hide($content['title']);
hide($content['field_blog_pic']);
hide($content['field_challenge_name']);
hide($content['field_challenge_pic']);
hide($content['field_sponsor']);
hide($content['field_sponsor_logo']);
hide($content['field_sponsor_description']);
?>
_
次に、フィールドを1つずつレンダリングしてみました。ブログタイプのフィールドは問題ありませんが、print_render($content['field_challenge_name'])
を実行すると、参照されたノード(カスタムコンテンツタイプのチャレンジ)のすべてのフィールドが表示されます。参照されているノードを表示するためにいくつかのフィールドを選択するにはどうすればよいですか?.
それが役立つ場合は、ここに私のノードがあります--blog.tpl.php:
_ <div class ="in-blog-pic">
<?php
print render($content['field_blog_pic']);
?>
</div>
<div class ="in-blog-title">
<?php
print $title;
?>
</div>
<div class="in-blog-comment-count">
<?php
print $comment;
?>
</div>
<div class="in-blog-name-user">
<?php
print $name;
?>
</div>
<?php
/** $user = user_load($user->uid);
print theme_image_style(
array(
'path' => $user->picture->uri,
'attributes' => array(
'class' => 'in-blog-user'
)
)
);
*/
?>
<div class="in-blog-user-pic">
<?php
$user = user_load($uid);
print theme('user_picture', array('account' =>$user));
?>
</div>
<div class="in-blog-title-below">
<?php
print $title;
?>
</div>
<?php
hide($content['title']);
hide($content['field_blog_pic']);
hide($content['field_challenge_name']);
hide($content['field_challenge_pic']);
hide($content['field_sponsor']);
hide($content['field_sponsor_logo']);
hide($content['field_sponsor_description']);
hide($content['field_categories']);
?>
<div class="in-blog-body">
<?php
print render($content);
?>
</div>
<?php /*
<div class="in-blog-challenge-name">
<?php
print render($content['field_challenge_name']);
?>
</div>
*/?>
_
最後の数行を実行すると、参照されたノードのすべてのフィールドが表示されます
_<div class="in-blog-challenge-name">
<?php
print render($content['field_challenge_name']);
?>
</div>
?>
_
ですから、すべてのブラバリングの後、参照したいノード(ここでは、カスタムタイプ「チャレンジ」)の選択したフィールドを、参照しているノード(ここでは、ブログ)に印刷する方法を尋ねます...
よろしく
この問題には Display Suite を使用します。これを使用すると、参照するノードタイプに追加のビューモードを定義し、必要なフィールドのみを指定して、エンティティビューフィールドの表示を構成して、そのビューモードを使用できます。私が取り組んでいる現在のプロジェクトでこれを行っています。それは単なるチケットです。
同様の問題を解決するためにあなたの質問を見つけました-残りのコンテンツをすべてレンダリングする必要なく、参照されたノードから画像を取得したいと思います。すでに重いインストールに別のモジュールを追加せずにそれを実行したかったので、テンプレートファイルの代わりにカスタム表示モードでそれを実行しました。
Tokenモジュール-Drupal 7のコアになりました-「トークン」表示モードで特定のフィールドのカスタム書式を選択できるようにします。たとえば、画像を完全にリンクする場合は、 -独自のコンテンツタイプのサイズのバージョンですが、別のコンテンツタイプで参照し、元のコンテンツにリンクするように設定できます。この投稿を参照してください https://www.drupal.org/ node/1299662
また、参照されるコンテンツから単一のフィールドのみをレンダリングすることも簡単になります。
元のコンテンツタイプ(コンテンツの参照元のコンテンツタイプ)で[表示の管理]に移動し、新しい表示モードであるトークンを作成します。それはオプションのリストの一番下にあります-チェックボックスにチェックを入れてください:
そこから、表示設定を管理するための新しい場所を取得します。不要なものをすべて非表示にして、次のように構成します。
次に、参照を追加するコンテンツタイプに戻り、[ディスプレイの管理]をクリックします。 Node参照フィールドの表示設定で、[フォーマット]> [レンダリングされたコンテンツ]を選択します。[表示モード:トークン]を選択すると、必要に応じてスタイルを設定できる素敵な単一フィールドが表示されます。
別の方法は、モジュール エンティティビューモード を使用することです。これはDisplay Suiteの軽量な代替品であり、カスタムビューモードを作成できます。
プログラムでビューモードを作成する方法は次のとおりです このチュートリアル