web-dev-qa-db-ja.com

分類法の用語/語彙ページのテーマ設定と上書き

Booksコンテンツタイプでのみ使用される分類用語(著者)があります。私が達成したいのは、HTMLマークアップをカスタマイズできるファイル(taxonomy-term--authors.tpl.php)を作成することです。

  1. 現在、私がファイルを作成するとき、指定された用語を含む本の出力を変更する代わりに、より静的なマークアップしかできません。

  2. また、mytheme_preprocess_page()を使用してテンプレートの提案を試みましたが、コンテンツをファイルに追加すると、期待どおりにレンダリングされません。ヘッダー/フッターのスタイルやその他のものは含まれません。

私もビューモジュールを使用してみましたが、動作は最初のポイント1と同様です。

3
bogtan

Hook_menu_alter()を使用してメニュー呼び出しをインターセプトし、コンテンツがカスタム関数によって生成されるようにすることで、分類/用語/ IDページを完全に制御できます。

これにより、分類用語ページを完全にカスタマイズできます。特定の語彙(「作成者」)を確認し、その語彙用にカスタム生成されたページを作成し、他の語彙はそのままにすることができます。

ビューモードとテンプレートを使用して、結果の表示方法を細かく制御できます。

提供されたモジュールは必要ありません。

カスタムモジュールで使用する例を次に示します。カスタムコンテンツは、Drupals EntityFieldQuery を使用して生成されます。これは、コンテンツのリストを生成するための遅延した堅牢な方法だからです。 。

/**
 * * Implements hook_menu_alter(). 
 */
function YOURMODULE_menu_alter(&$menu) {
  if (isset($menu['taxonomy/term/%taxonomy_term'])) {
    $menu['taxonomy/term/%taxonomy_term']['page callback'] = 'YOURMODULE_taxonomy_term_page';
    $menu['taxonomy/term/%taxonomy_term']['access arguments'] = array(2);
  }
}

/**
 * Callback function for taxonomy/term/%taxonomy_term. 
 * 
 * @param $taxonomy_term object
 * @return * Themed page for a taxonomy term, specific to the term's vocabulary. 
 */
function YOURMODULE_taxonomy_term_page($term) {
  $voc = taxonomy_vocabulary_load($term->vid);
  switch ($voc->machine_name) {

    case 'SOMEVOCUBALARY':

      // here you generate the actual content of the page
      // could be done e.g. with an entityfieldquery as follows

      $query = new EntityFieldQuery();
      $query->entityCondition('entity_type', 'node')
              ->fieldCondition('field_gallery', 'tid', $term->tid)
              ->propertyOrderBy('sticky', 'DESC')
              ->propertyCondition('status', 1);
      $result = $query->execute();
      if (!empty($result['node'])) {
        $build['content']['nodes'] = node_view_multiple(node_load_multiple(array_keys($result['node'])), 'teaser'); // output the node teasers. you can control the markup of the 'teaser' view mode with a template in the theme folder
      } else {
        $build['content']['status']['#markup'] = t('No results found for term ID !tid.', array('!tid' => $term->tid));
      }
      return $build;

    // If the term page is for an other vocabulary then use Drupal's default taxonomy page 
    default: 
      module_load_include('inc', 'taxonomy', 'taxonomy.pages');
      return taxonomy_term_page($term);
  }
}
2
batigolix

このコードを試してください:

/**
 * Implements hook_preprocess_taxonomy_term().
 */
function YOURTHEME_preprocess_taxonomy_term(&$variables) {
  if ($variables->vid == YOUR_VOCABULARY_ID) {
    $variables['theme_hook_suggestions'][] = 'taxonomy_term__authors';
  }
}
1
Aram Boyajyan

Taxonomy Views Integrator 、またはその機能 パッチバージョン を使用できます。

Yoursite.com/admin/structure/taxonomy/yourtaxonomyvocabulary/editに移動し、すべての語彙のビューとビュー表示を選択します。

0
idflorin

各用語には、taxonomy/term/TERM_IDのリンクがあり、用語ページで語彙ベースのテーマ(HTMLマークアップのカスタマイズ)が必要な場合は、「Taxonomy Views Integrator」モジュールを使用できます。

特定の語彙編集ページで、ビューテンプレートを選択できます。そして、そのビューテンプレートでは、カスタマイズhtmlを記述して、taxonomy/term/TERM_IDのあるページにテーマを設定できます。

0
Shivank