Posted by Anonymous on March 12, 2013 at 3:01am
ある制作会社でdrupalで作られたサイトを管理しています。
引き継ぎを行っていないため詳しい仕様がわからず、またdrupal自体の存在を知らなかったので四苦八苦しています。
■やりたいこと
drupalで制作したサイトのホーム(インデックス)に、「カテゴリA and カテゴリB」が付いた記事の中で最新1件を表示させたい(更新履歴的なものを想像していただければ大丈夫かと思います)
■わからないこと
そもそも全てわからないのですがやったことを記述してみます。
ホーム自体は「page-front.tpl.php」というphpで書き出しているみたいなのですが、そこで扱っている変数やらデータは「views-view-list--home-xxx.tpl.php」というファイルで管理されているみたいでした(ファイル名は忘れてください><)
中には、添付のソースが書いてあります。このソースは「ニュース」カテゴリというものをすべて出している処理みたいです。
これを応用すればいいのかなと思ったのですがこのソース内の$rowとかがどこから来ているのかわからず、データの引っ張り方もわからずで悩んでいます。
もしかしたら見当違いのことをしているかもしれませんが、
教えていただけないでしょうか?
よろしくお願いします。
| Attachment | Size |
|---|---|
| php.txt | 358 bytes |
Comments
$rowなどは、viewsというモジュールの中で設定されて
$rowなどは、viewsというモジュールの中で設定されていますので、ソースを追うのはかなり大変ですよ。
変数の中に何が入っているかは、sites/all/modules/views/themes/views-view.tpl.php のコメントに該当が書かれています。
すごくざっくりですが、仕組みとしては以下のような感じになっています。
** 例えば、「カテゴリA and カテゴリB」が付いた記事の中で最新1件のみ .. など
なので、まずは「カテゴリA and カテゴリBが付いた記事の中で最新1件のみ」を取得するように
Viewsの設定を変更してみるのが良いと思います。この作業はコードを書かずに全てGUIから変更可能です。
これが出来れば、後はテンプレート(今回だと page-front.tpl.php がおそらく該当すると思います)を数行修正すれば目的の事が実現できると思います。
views-view-list--home-xxx.tpl
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
miss
miss
miss
早いご回答ありがとうございます! 現在ビューの設定で、カテ
早いご回答ありがとうございます!
現在ビューの設定で、カテゴリの要素を出すことに成功しました。
なぜか指定したカテゴリが出てこないんですが・・・(笑
それをブロックでホームに設定しています。
ここでまた疑問点が出てきたのですが、吐き出されるソースを手動で設定したいのですが、「views-view-list--home-news.tpl.php」のように「views-view-list--home-test.tpl.php」みたいなファイルから変更できないでしょうか?
目的が良く理解できなかったのですが、テンプレートファイル(
目的が良く理解できなかったのですが、テンプレートファイル(tpl.php)のファイル名を変更したいという事でしょうか?
ありがとうございます。 目的としてはトップにカテゴリの記事
ありがとうございます。
目的としてはトップにカテゴリの記事を表示させたい、です。
現在のテーマ階層が
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を編集できていません。
上記のような説明で伝わりますでしょうか?
よろしくお願いいたします。
前回の私の質問は、直前のコメントの「ここでまた疑問点が~変
前回の私の質問は、直前のコメントの「ここでまた疑問点が~変更できないでしょうか?」に対する物だったのですが、書き方が悪くてすみません。
viewsが出力している部分のHTMLを編集したいという事ですね。
http://views-help.doc.logrus.com/help/views/style-settings を読んでみてください。
views-view-list--home-カテゴリA.t
views-view-list--home-カテゴリA.tpl.phpというファイルを吐き出させて、そこを編集したい、と考えています。
ほかのブロック、たとえばニュースなどはviews-view-list--home-news.tpl.phpというファイルがあり、これを編集してカスタマイズできるみたいです。
これは可能でしょうか?
※追記
こちらできました。
ファイルを手動で作り、テーマのスキャンをして読み込ませることができました。
先ほどのサイトは翻訳して頑張ってみます!
alitoshi.nakaさんの回答にあるように、view
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の管理画面から作成してください。
(おそらく、マルチバイト文字は使えません)
出来ました!
ありがとうございました。
お二人のアドバイスのおかげでやりたいことができました。
助かりました。
また何かあった際にはよろしくお願いします!!
追記で質問させてください。
昨日はありがとうございました!
おかげさまでできたと思うのですが、少し実装するものが変わってしまいました。
昨日はカテゴリAとBに属している記事をブロック内に一件表示させるだけだったのですが、今回は1つのブロックの中に、
・カテゴリAとB
・カテゴリAとC
・カテゴリAとD
・カテゴリAとE
・カテゴリAとF
をそれぞれ一件ずつ表示させる、というものになってしまいました。
Viewsの設定で[ヘルプ フィルタ]という項目で表示させたい数だけ追加すると数は表示されるのですが、すべて同じカテゴリになってしまいます。
こういうことは技術的に可能なのでしょうか?
昨日と今日で申し訳ないのですが、わかる方がいましたらよろしくお願いします。
Viewのadd display
Viewのadd display でページかブロックを追加して、それぞれのフィルタをOverrideすることで対応できそうな気がします。
ありがとうございます。
add displayでブロックでそれぞれカテゴリを作ったのですが、結局 Defaults で指定したものしか出ませんでした。
ブロックBとブロックCのを出すのができていません。
おそらく、カテゴリAとBに属しているコンテンツは表示されて
おそらく、カテゴリAとBに属しているコンテンツは表示されていて、それがdefault displayに定義されていると思っています。
viewsで定義したブロックを表示する手法もいくつかあるのですが、現在、カテゴリAとBはどのようにして
表示していますか?そこが把握出来ればヒントが出せる気がします。
viewsで定義したブロックを表示する手法もいくつかあるの
どう返事をしたらいいのかが分からなかったので現状把握している状態をお伝えします。
今は
・ 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の設定が反映されないのです。
よろしくお願いします。
まず言葉を整理しましょう。 viewsでは、「ページ」や「
まず言葉を整理しましょう。
viewsでは、「ページ」や「ブロック」を定義できます(他にも種類がありますが省略)。
「ページ」を作成した場合は、URLを割り当てなければ表示できません。
また、「ブロック」を作成した場合は、特定の「リージョン」に「ブロック」を割り当てなければ表示されません。
(ブロックにはURLは振れません)
aki.star02さんが作成されている、Defaults、ブロック2、ブロック3は「ページ」として作成されていますか?
それとも「ブロック」として作成されていますか?
aki.star02さんが作成されている、Defaults
Defaultsはもともとありわからないのですが、おそらくブロックです。
ほかのブロック2,ブロック3はブロックで作りました。
結構説明が下手で伝わりにくいかもしれませんがよろしくお願いします。
ブロックであれば、メニューからサイト構築 >
ブロックであれば、メニューからサイト構築 > ブロックに進んで、Defaultsがどこの「リージョン」に割り当てられているか確認してみてください。
また、ブロック2, 3はどこの「リージョン」にも割り当てられていないとおもいますので、Defaultsと同じところに割り当ててみてください。
ありがとうございます。 リージョンの設定をしたところ、表示
ありがとうございます。
リージョンの設定をしたところ、表示されるはされるのですが、ブロックごとになってしまうという問題が発生しました。
今回やりたいこととしては、ブロック[test]という1つのブロックの中に
■test(見出し)
・カテゴリAとBに属する記事の中で最新のもの1件
・カテゴリAとCに属する記事の中で最新のもの1件
・カテゴリAとDに属する記事の中で最新のもの1件
・カテゴリAとEに属する記事の中で最新のもの1件
・カテゴリAとFに属する記事の中で最新のもの1件
という表示をさせたいと考えています。
画像添付ができないのがつらいのですが・・・
なので「Defaults」という元からあるブロックでそういう複数のカテゴリを扱えればいいのかなとは思ってはいます。
すいませんがよろしくお願いします(無理だったら無理とおっしゃっていただければと思います。
別のdisplayを作ってAttachment
同じViewの編集ページの追加から「添付」と選んでください。
ここで
・カテゴリAとBに属する記事の中で最新のもの1件
・カテゴリAとCに属する記事の中で最新のもの1件
・カテゴリAとDに属する記事の中で最新のもの1件
・カテゴリAとEに属する記事の中で最新のもの1件
・カテゴリAとFに属する記事の中で最新のもの1件
それぞれのViewを作って「添付の設定」でブロックに付け足していくのはどうでしょうね。
qchanさんが紹介してくれた方法、知りませんでした..
qchanさんが紹介してくれた方法、知りませんでした..
以前に、複数のviewsのブロックを同じ領域に表示する必要があった時は、insert_view を
使いました。こちらを使った場合は、別のビューのブロックも混ぜる事ができます。
同じビューに限定しても良いなら、qchanさんが紹介してくれた方法の方が簡単ですね。
views field viewを
これだと、作るビューの数が二つで済みますし、今後の変更に耐えやすいかも知れません。
views field viewを使います。
http://drupal.org/project/views_field_view
これはviewをほかのviewのfieldとして使えるものです。
これで親viewでカテゴリC,D,E,Fのidを取得し、それらを子ビューに渡します。
子ビューでは、カテゴリAを固定のフィルターとし、カテゴリのidを更にcontextual filterに足します。後は、子ビューに最新一件だけ表示するようにすれば良いはずです。
出来ました!
みなさんありがとうございました。
qchanさんの方法を、四苦八苦しながらですがなんとか形にすることができました。
今後のためにやったことをメモしておきます。
・xxxというビューを作成し、(Edit view home_xxxxxという編集画面)
・ Defaults というものが元からあるため、ブロックを追加
・ブロックに添付する形で、先ほど作りたかったカテゴリ別を作成(フィールドとフィルターの作成に手間取りました)
ブロックにはフィルターとかを指定しないのがいいのかな?
・保存後、サイト構築 > ブロックに「home_xxxxx」というブロックが作られているのでリージョンを指定。
これで何とかなりました。
でもhtml整形とかでややこしくなってますが何とかします。
みなさん本当にありがとうございました!