【質問】ホームにて特定のカテゴリに属した記事のタイトルを表示させたい。

Events happening in the community are now at Drupal community events on www.drupal.org.
Anonymous's picture

ある制作会社でdrupalで作られたサイトを管理しています。
引き継ぎを行っていないため詳しい仕様がわからず、またdrupal自体の存在を知らなかったので四苦八苦しています。

■やりたいこと
drupalで制作したサイトのホーム(インデックス)に、「カテゴリA and カテゴリB」が付いた記事の中で最新1件を表示させたい(更新履歴的なものを想像していただければ大丈夫かと思います)

■わからないこと
そもそも全てわからないのですがやったことを記述してみます。

ホーム自体は「page-front.tpl.php」というphpで書き出しているみたいなのですが、そこで扱っている変数やらデータは「views-view-list--home-xxx.tpl.php」というファイルで管理されているみたいでした(ファイル名は忘れてください><)

中には、添付のソースが書いてあります。このソースは「ニュース」カテゴリというものをすべて出している処理みたいです。

これを応用すればいいのかなと思ったのですがこのソース内の$rowとかがどこから来ているのかわからず、データの引っ張り方もわからずで悩んでいます。

もしかしたら見当違いのことをしているかもしれませんが、
教えていただけないでしょうか?

よろしくお願いします。

AttachmentSize
php.txt358 bytes

Comments

blauerberg's picture

$rowなどは、viewsというモジュールの中で設定されていますので、ソースを追うのはかなり大変ですよ。
変数の中に何が入っているかは、sites/all/modules/views/themes/views-view.tpl.php のコメントに該当が書かれています。

すごくざっくりですが、仕組みとしては以下のような感じになっています。

  • viewsというモジュールで、コンテンツを絞り込むための条件を設定する
    ** 例えば、「カテゴリA and カテゴリB」が付いた記事の中で最新1件のみ .. など
  • 絞り込みに一致したデータが$rowsなどの変数に格納されるので、views-view-***.tpl.php で整形して表示する

なので、まずは「カテゴリA and カテゴリBが付いた記事の中で最新1件のみ」を取得するように
Viewsの設定を変更してみるのが良いと思います。この作業はコードを書かずに全てGUIから変更可能です。

これが出来れば、後はテンプレート(今回だと page-front.tpl.php がおそらく該当すると思います)を数行修正すれば目的の事が実現できると思います。

views-view-list--home-xxx.tpl

alitoshi.naka's picture

views-view-list--home-xxx.tpl.phpはhome-xxxというviewのlist表示させた際の表示テンプレートファイルです。

モジュールのviewsをチェックするとリストにhome-xxxというビューがあるはずなので、そのビューを編集します。

フィルタの設定項目で「カテゴリA and カテゴリB」を指定して、Basic settingsのItems per page:を1に設定すれば実現できると思いますよ。

blauerbergさんがおっしゃられているようにviewsモジュールのGUIで全て操作可能です。

miss

aki.star02's picture

miss

miss

aki.star02's picture

miss

早いご回答ありがとうございます! 現在ビューの設定で、カテ

aki.star02's picture

早いご回答ありがとうございます!

現在ビューの設定で、カテゴリの要素を出すことに成功しました。
なぜか指定したカテゴリが出てこないんですが・・・(笑

それをブロックでホームに設定しています。

ここでまた疑問点が出てきたのですが、吐き出されるソースを手動で設定したいのですが、「views-view-list--home-news.tpl.php」のように「views-view-list--home-test.tpl.php」みたいなファイルから変更できないでしょうか?

blauerberg's picture

目的が良く理解できなかったのですが、テンプレートファイル(tpl.php)のファイル名を変更したいという事でしょうか?

ありがとうございます。 目的としてはトップにカテゴリの記事

aki.star02's picture

ありがとうございます。

目的としてはトップにカテゴリの記事を表示させたい、です。

現在のテーマ階層が

tgeneName(親ディレクトリ)
の中に

[images]
[css]
[js]
[templetes]
というディレクトリと
views-view-list--home-test2.tpl.php
views-view-list--home-test.tpl.php
views-view-list--home-news.tpl.php

のようなファイル群。

templetesディレクトリの中に[page-front.tpl.php]があるという構造になっています。

既存でニュースというカテゴリを全て出力する「views-view-list--home-news.tpl.php」があります。

今回新しく「カテゴリA」を出力するブロックを設定しました。

このカテゴリAを制御する、いわば「views-view-list--home-カテゴリA.tpl.php」を作りたいと考えています。

今はビューで設定したものが出力されているのですが、その吐き出されているHTMLを編集できていません。

上記のような説明で伝わりますでしょうか?

よろしくお願いいたします。

blauerberg's picture

前回の私の質問は、直前のコメントの「ここでまた疑問点が~変更できないでしょうか?」に対する物だったのですが、書き方が悪くてすみません。

viewsが出力している部分のHTMLを編集したいという事ですね。
http://views-help.doc.logrus.com/help/views/style-settings を読んでみてください。

views-view-list--home-カテゴリA.t

aki.star02's picture

views-view-list--home-カテゴリA.tpl.phpというファイルを吐き出させて、そこを編集したい、と考えています。

ほかのブロック、たとえばニュースなどはviews-view-list--home-news.tpl.phpというファイルがあり、これを編集してカスタマイズできるみたいです。

これは可能でしょうか?

※追記
こちらできました。
ファイルを手動で作り、テーマのスキャンをして読み込ませることができました。

先ほどのサイトは翻訳して頑張ってみます!

blauerberg's picture

alitoshi.nakaさんの回答にあるように、views-view-list--xxx-yyy.tpl.php というファイル名はビューの定義に依存します。

views-view-list--home-news.tpl.php の場合、 「home」という名前のビューの「news」というディスプレイで設定したデータのテンプレートとして利用することができます。

ので、views-view-list--home-カテゴリA.tpl.phpというファイルのテンプレートを利用したい場合は、 「home」という名前のビューに「カテゴリA」というディスプレイをviewsの管理画面から作成してください。
(おそらく、マルチバイト文字は使えません)

出来ました!

aki.star02's picture

ありがとうございました。

お二人のアドバイスのおかげでやりたいことができました。
助かりました。

また何かあった際にはよろしくお願いします!!

追記で質問させてください。

aki.star02's picture

昨日はありがとうございました!
おかげさまでできたと思うのですが、少し実装するものが変わってしまいました。

昨日はカテゴリAとBに属している記事をブロック内に一件表示させるだけだったのですが、今回は1つのブロックの中に、

・カテゴリAとB
・カテゴリAとC
・カテゴリAとD
・カテゴリAとE
・カテゴリAとF

をそれぞれ一件ずつ表示させる、というものになってしまいました。

Viewsの設定で[ヘルプ フィルタ]という項目で表示させたい数だけ追加すると数は表示されるのですが、すべて同じカテゴリになってしまいます。

こういうことは技術的に可能なのでしょうか?

昨日と今日で申し訳ないのですが、わかる方がいましたらよろしくお願いします。

Viewのadd display

alitoshi.naka's picture

Viewのadd display でページかブロックを追加して、それぞれのフィルタをOverrideすることで対応できそうな気がします。

ありがとうございます。

aki.star02's picture

add displayでブロックでそれぞれカテゴリを作ったのですが、結局 Defaults で指定したものしか出ませんでした。

ブロックBとブロックCのを出すのができていません。

blauerberg's picture

おそらく、カテゴリAとBに属しているコンテンツは表示されていて、それがdefault displayに定義されていると思っています。

viewsで定義したブロックを表示する手法もいくつかあるのですが、現在、カテゴリAとBはどのようにして
表示していますか?そこが把握出来ればヒントが出せる気がします。

viewsで定義したブロックを表示する手法もいくつかあるの

aki.star02's picture

viewsで定義したブロックを表示する手法もいくつかあるのですが、現在、カテゴリAとBはどのようにして

どう返事をしたらいいのかが分からなかったので現状把握している状態をお伝えします。

今は

・ Defaults (元からあった)
・カテゴリAとカテゴリBを表示させるブロック(ブロック2とします)
・カテゴリAとカテゴリCを表示させるブロック(ブロック3とします)

というものをviewsの中の「Edit view home_xxxxxxxx」というページで設定しています。

ブロック2とブロック3はadd displayでブロックを作りました。

ブロック2とブロック3でそれぞれフィールド、フィルタを入力しています。
すると、Live previewという項目でプルダウンでそれぞれが出力されるのは確認できるのですが、保存を押して実際にページに表示されるのはDefaults で設定したもの、という状況です。

わかりやすく言うと、Defaults でたとえば関係ないカテゴリZを表示する、というフィルタを設定すると、ブロック2とブロック3の設定が反映されないのです。

よろしくお願いします。

blauerberg's picture

まず言葉を整理しましょう。
viewsでは、「ページ」や「ブロック」を定義できます(他にも種類がありますが省略)。

「ページ」を作成した場合は、URLを割り当てなければ表示できません。
また、「ブロック」を作成した場合は、特定の「リージョン」に「ブロック」を割り当てなければ表示されません。
(ブロックにはURLは振れません)

aki.star02さんが作成されている、Defaults、ブロック2、ブロック3は「ページ」として作成されていますか?
それとも「ブロック」として作成されていますか?

aki.star02さんが作成されている、Defaults

aki.star02's picture

aki.star02さんが作成されている、Defaults、ブロック2、ブロック3は「ページ」として作成されていますか?それとも「ブロック」として作成されていますか?

Defaultsはもともとありわからないのですが、おそらくブロックです。
ほかのブロック2,ブロック3はブロックで作りました。

結構説明が下手で伝わりにくいかもしれませんがよろしくお願いします。

blauerberg's picture

ブロックであれば、メニューからサイト構築 > ブロックに進んで、Defaultsがどこの「リージョン」に割り当てられているか確認してみてください。

また、ブロック2, 3はどこの「リージョン」にも割り当てられていないとおもいますので、Defaultsと同じところに割り当ててみてください。

ありがとうございます。 リージョンの設定をしたところ、表示

aki.star02's picture

ありがとうございます。
リージョンの設定をしたところ、表示されるはされるのですが、ブロックごとになってしまうという問題が発生しました。

今回やりたいこととしては、ブロック[test]という1つのブロックの中に


■test(見出し)
・カテゴリAとBに属する記事の中で最新のもの1件
・カテゴリAとCに属する記事の中で最新のもの1件
・カテゴリAとDに属する記事の中で最新のもの1件
・カテゴリAとEに属する記事の中で最新のもの1件
・カテゴリAとFに属する記事の中で最新のもの1件


という表示をさせたいと考えています。

画像添付ができないのがつらいのですが・・・
なので「Defaults」という元からあるブロックでそういう複数のカテゴリを扱えればいいのかなとは思ってはいます。

すいませんがよろしくお願いします(無理だったら無理とおっしゃっていただければと思います。

別のdisplayを作ってAttachment

qchan's picture

同じViewの編集ページの追加から「添付」と選んでください。
ここで

・カテゴリAとBに属する記事の中で最新のもの1件
・カテゴリAとCに属する記事の中で最新のもの1件
・カテゴリAとDに属する記事の中で最新のもの1件
・カテゴリAとEに属する記事の中で最新のもの1件
・カテゴリAとFに属する記事の中で最新のもの1件

それぞれのViewを作って「添付の設定」でブロックに付け足していくのはどうでしょうね。

blauerberg's picture

qchanさんが紹介してくれた方法、知りませんでした..

以前に、複数のviewsのブロックを同じ領域に表示する必要があった時は、insert_view
使いました。こちらを使った場合は、別のビューのブロックも混ぜる事ができます。
同じビューに限定しても良いなら、qchanさんが紹介してくれた方法の方が簡単ですね。

views field viewを

Seiji's picture

これだと、作るビューの数が二つで済みますし、今後の変更に耐えやすいかも知れません。

views field viewを使います。
http://drupal.org/project/views_field_view

これはviewをほかのviewのfieldとして使えるものです。

これで親viewでカテゴリC,D,E,Fのidを取得し、それらを子ビューに渡します。
子ビューでは、カテゴリAを固定のフィルターとし、カテゴリのidを更にcontextual filterに足します。後は、子ビューに最新一件だけ表示するようにすれば良いはずです。

出来ました!

aki.star02's picture

みなさんありがとうございました。

qchanさんの方法を、四苦八苦しながらですがなんとか形にすることができました。

今後のためにやったことをメモしておきます。

・xxxというビューを作成し、(Edit view home_xxxxxという編集画面)
・ Defaults というものが元からあるため、ブロックを追加
・ブロックに添付する形で、先ほど作りたかったカテゴリ別を作成(フィールドとフィルターの作成に手間取りました)
ブロックにはフィルターとかを指定しないのがいいのかな?

・保存後、サイト構築 > ブロックに「home_xxxxx」というブロックが作られているのでリージョンを指定。

これで何とかなりました。

でもhtml整形とかでややこしくなってますが何とかします。

みなさん本当にありがとうございました!

日本 コミュニティ: Drupal Japan User Group

Group organizers

Group categories

Group notifications

This group offers an RSS feed. Or subscribe to these personalized, sitewide feeds: