Views2のviewをページの中の任意の位置に表示できたらいいですね。Panelsモジュールを使っても、こういうことはできそうですが、Panelsがなくても簡単にできてしまいます。
用途としては、例えばフロントページに任意のviewを複数表示させ、サイト内で起こっていることをユーザに効率よく伝えることなどが考えられます。テーマ側でブロックを作成しなくても、テーマのpage-front.tpl.phpやnode.tpl.phpファイルにコードを挿入するだけで同じことができてしまいます。
肝心の方法ですが、以下のページなどを参考にさせていただきました。Drupal5.xでの方法にも若干触れられているので、5.xのユーザは参考にしてください。
http://pedroposada.com/blog/embed-views-2-nodes.html (英語)
*記事の中のリンク先にもさまざまな方法があるので、そちらもチェック。
http://www.pixelclever.com/how-programmatically-insert-a-view-drupal-6 (英語)
*JQuery Menuモジュールなどの作者、Aaron Hawkinsさんのサイト。
私が実際に利用している方法を書きますと、node.tpl.phpのviewを表示させたい位置に、上記のpedroposada.comを参考に以下のコード挿入しました。
<?php print views_embed_view($view_name, $display_id, $arg1, $arg2); ?>
*$view_nameをご自分のView nameに変更してください。
*2番目のパラメターの$display_idは少々わかりにくいかもしれません。上記のpixelclever.comのページで説明されているように、Viewsのエクスポートで画面で
$handler = $view->new_display('page', 'Page', 'page_1');
のようなコードを探し、括弧の中の3番目の値、つまりこの場合page_1を$display_idとして使用します。ご自分の作成されたviewに合わせて変更してください。
2009年10月20日 追記: page.tpl.php(或いはpage-[custom].tpl.php)に上記のスニペットを挿入すると、管理権限を持ったユーザにだけ表示される管理用のhover linksがマウスをホバーしなくても表示されるようになります。昨日CocoaSpaceのフロントページを変更しましたが、Viewをエンベッドしたときにようやく気づきました。admin/build/views/toolsで『Do not show hover links over views』という項目にチェックを入れれば常時表示されなくなりますが、必要なときにマウス・ホバーしてもリンクが表示されなくなってしまいます。そこでdrupal.orgで解決法を調べていたら、次のページがありました。
Drupalがページを表示する際、CSSファイルを読み込んだ後にpage.tpl.phpを読み込むため、Viewsに必要なCSSファイルを読み込まずにページが表示されるようです。ですので、使用しているテーマのtemplate.phpにコメント#10のようなコードを加えることで解決します。
Viewsのhover linksは本来、マウスをホバーしたときにだけ表示されます。(申し訳ありません。マウスのカーソルが表示されていません。)
必要なCSSファイルがロードされていないため、リンクが常に表示されています。
なお、同じページにエンベッドしていないViewがあれば、必要なCSSが既に読み込まれているため、この問題は発生しないようです。
2009年12月30日 追記: 上の方法より良い方法を見つけました。非常に簡単なもので、今までなぜ試してみなかったのかと思うような方法です。drupal.orgの下記のページが参考になります。
How to call VR block manually? | drupal.org
STEP 1: まず、ご使用のテーマのtemplate.phpファイルに下のコードを追加します。
function THEMENAME_preprocess_page(&$vars) {
$vars['my_embedded_view'] = views_embed_view('view_name', 'default');
$vars['scripts'] = drupal_get_js(); // This rebuilds the scripts variable with those added by the view
}
ご使用のテーマのtemplate.phpに既にtemplate_preprocess_page()があったら、その一番最後に追記してください。
STEP 2: 次に、page.tpl.php(或いはpage-[custom].tpl.php)のViewをエンベッドしたい場所に、
<?php print $my_embedded_view ?>
を挿入します。
STEP 3: admin/settings/performanceでキャッシュをクリアしてから、実際のページで成功したか確認してください。
コメントを追加