私の状況は次のとおりです。コンテンツタイプセミナーがあり、フィールドA、B、Cがあります。ヘッダー、フッター、コンテンツ、サイドバー左の領域があります。セミナーのコンテンツ領域に表示したいフィールドがいくつかありますが、サイドバー左領域にもあります。
これを行うにはどうすればよいですか?これが以前にすでに回答されている場合はお詫びします。私は開発者であり、フック関数とプリプロセッサー関数に飛び込むことをためらっていません。 Viewsモジュールをインストールしましたが、使用していません(これが私の最初のDrupalサイトで、:Pがわからない場合))。
乾杯。
編集:これはDrupal 7用です。
ノードのコンテンツをページの異なる領域に追加する簡単な方法はありません。この問題に取り組む方法はいくつかあります。
非コーディング方法:ビューとブロック
ビューを作成する
(プラスあなたが望む追加設定)
次に、管理者ブロックページに移動します。新しく作成したビューブロックを、表示するリージョンに移動します。セミナーノードページにのみ表示されます。
すべての地域で繰り返す
theme_preprocess_region()を使用したコーディング方法:
コードは次のようになります
MYTHEME_preprocess_region(&$variables) {
if (isset($node) && ($node->type == 'seminar' )) {
//add new variable here.
}
}
これはDrupal 7の場合のみです。現在では、region.tpl.phpで使用できます。
Display Suite モジュールでこれを行うことができます。 Display Suite Extrasモジュールを有効にして、テーマリージョンをノードコンポーネントのターゲットとして公開する必要があります。これを行う方法についての情報は、Display Suiteドキュメントの ブロックにフィールドを追加 ページにあります。
同じ問題がありました。解決策は非常に簡単です。 Drupal 7では、FULLとTEASERだけでなく(最も古いバージョンからわかるように)独自のview_modeを定義できるという事実を基にすることができます。したがって、地域で使用する別のview_modeを定義します。例LEFTHAND。Drupalはコンテンツ領域に完全なview_modeを表示します。したがって、サイドバーの左側の領域にLEFTHANDを表示するにはDrupalと言う必要があります。
Template_preprocess_page()内
if ($vars['node']) {
$vars['page']['sidebar_left'][] = node_view($vars['node'], 'lefthand');
}
Node.tpl.phpに、左側ビューモードの新しいディスプレイを追加します
if ($view_mode == 'lefthand') {
// render content fields here
}
Display Suiteが必要以上に思える場合(素晴らしいモジュールですが、いくつかのフィールドを再配置する必要があるだけではやり過ぎかもしれません)この目的のためだけのモジュールがあります-> CCK Blocks =。
私はそれが「CCK」ブロックと呼ばれていることを知っていますが、Drupal 7(CCKの機能をコアにもたらしました)で動作します。
@Patrik Lucanの回答を少し変更しました。if ($vars['node'])
は、ノードではないページで問題を引き起こしていました。ブロックまたはビューページのあるカスタムフロントページ。
変更:
if (array_key_exists('node', $vars))
これで問題は解決したようです。
一方、このためのモジュールがあります。モジュールページから:
Field as Block は、現在のノードの1つ以上のフィールドをブロックに表示する簡単な方法を提供します。
このモジュールは、PanelsやDisplay Suiteなどのモジュールの軽量な代替手段を目指しています。または、ビューを使用して、1つのフィールドのみを取得するブロックを定義しています。