web-dev-qa-db-ja.com

ビューを使用して、分類用語に基づいてコンテンツを表示しますか?

大学の学部のサイトで学部プロフィールシステムを作成しました。すべての教員は、専門分野(教育または研究のいずれか)に関する用語でタグ付けされています。私が必要とするのは、特定の教員のページから専門分野を取り上げ、それらの分野で同様に働く他の教員を表示するビューを作成することです。 (ただし、これらの領域のみ)

これまでに行ったのは、すべての教員のコンテンツタイプのすべての用語を表示したいビューですが、表示されている特定のページに基づいて何らかの方法でビューをフィルタリングする必要があります。ここに私が持っているものがあります:

http://sustainable.unt.edu/irene-klaver

これが私が必要とするものの例です: http://sustainability.asu.edu/people/persbio.php?pid=188

教員ノードはカスタムコンテンツタイプ(CCK)です。ビューはImagecache/Imagefieldを使用してサムネイルを使用します。これらの用語には、特にこの目的のために、分類法で独自の語彙があります。 Drupal 6.を使用しています。

これはDrupalでは発生しない可能性があり、node-faculty.tpl.phpファイルにカスタムphpコードを作成する必要があると、数人から言われました。上記のASUサイトの開発者はDrupalを使用していないため、実際にはあまり役に立ちませんでした。誰かがこれに似た機能を以前に必要としなかったとは信じられません...誰かが私を正しい方向に向けることができれば、私はそれを大いに感謝します!

ありがとう!

3
NCocco

答えを見つけました!わーい!

わかりましたので、WAYをもっと知っている人の助けを借りてそれを理解しましたPHP私よりも下にいて、実際に私を実際に見せることができます)。 :)あなたはあなたのサイトのテーマを編集する必要がありますが、CSSでかなり簡単にできるので、私は実際にはこの方法の方が好きです。 (鈍い斧はもうありません)

まず、コンテンツノードタイプのテンプレートファイルを作成します(私はmine node-faculty.tpl.phpと呼びます)。次に、このコードをテンプレートファイルに直接追加して、ビューを呼び出します。

<?php  

foreach( $node->taxonomy as $tid ) {  
print views_embed_view('faculty_expertise_test2', 'default', $tid->tid);  
}  
?>

そしてそれは働く。ふew!わかりました、しかし私はあなたなしではそれを行うことができませんでした。あなたが私に得た限りでは、他の誰かがフィニッシュラインを通じて私を助けました。 :)

0
NCocco

Drupalビューはこれを簡単に行うことができます:)

  1. ビューを作成して「example」と呼び、この例では、Node Title in the Fieldsと入力します。

  2. 引数を追加します。ここで[分類:用語ID]を選択します。

  3. 「引数が存在しない場合に取るアクション:」で、「デフォルトの引数を提供する」を選択します。

  4. そこで、「Taxonomy Term ID from URL」を選択し、「Load default argument from node page、thats good for related関連するtaxonomy block」をクリックします。必要に応じて、「Limit terms by」をクリックして特定の語彙に限定することもできます。語彙」とあなたが欲しいものをクリックしてください。

  5. 「ブロック表示」を作成し、すべてを保存します。

  6. サイト構築/ブロック管理ページに移動して、「ビュー:例」を探し、それをテーマの領域に配置します。

これで、すべてが順調に進んでいる場合、そのブロックが表示され、表示されているノードと同じ分類用語を持つすべてのノードのタイトルが表示されます。もちろん、おそらくこのブロックを特定のページにのみ表示する必要がありますが、ブロックUIでも表示できます。そしてもちろん、おそらくノードのタイトルなどよりももっと凝ったものにしたくなるでしょうが、そこでは特定のノードなどにフィールドを含めます。

添加:

これは、D6とViews3を使用した分類用語のid引数でここに表示されるものです。

enter image description here

醜い解決策:

ビューだけを使用してこれに対する解決策があると確信していましたが、私はそれを私の生涯にわたって理解することはできません。 Grrrr、誰かが言ってくれるといいのですがDuh、これがあなたのやり方ですしかし、PHP入力フィルタを有効にしている場合は、次のようなブロックを作成できます。カスタムモジュールを作成する代わりにこれを行います。PHP入力フィルターは醜いです。私がよく使う鈍い斧で殺す必要がありますが、ここに行きます:

これをブロック本体として、ブロックUIを介して新しいブロックを追加します。

<?php

$node=menu_get_object();

if (isset($node->type) && $node->type=='Faculty') {

  $vid = db_result(db_query('SELECT vid FROM {vocabulary} WHERE name = "Expertise"'));

  if (!empty($node->taxonomy)) {
    foreach($node->taxonomy as $term) {
      if ($term->vid == $vid) {
         print '<div class="expertise-name">' . $term->name . '</div>';
         print '<div class="experts">' . views_embed_view('faculty_expertise_test2', 'default', $term->tid) . '</div>';
      }
    }
  }

}

?>

PHPコードを入力フィルターとして選択していることを確認してください。ブロックの説明とタイトルを選択し、ブロックを保存します。任意の領域に配置します。クロスフィンガーと何が起こるか確認してください:)基本的にこれすべてこれは、表示されたノードでExpertiseボキャブラリーのすべての分類用語をループしてから、その引数を使用してビューを呼び出します。私はあなたの例からすべてを正しく大文字化していると思いますが、カスタマイズする重要なことはノードタイプ、ボキャブラリー、ビューであるFaculty、Expertise、faculty_expertise_test2です。すべてが機能する場合は、CSSをお好みで行う必要があります。お役に立てれば!

PS私はこの見解が教員自身を返す可能性が最も高いことに気づきましたが、それは別の日に処理することができます:)

3
Jimajamma