web-dev-qa-db-ja.com

ページレンダーアレイの分類用語のパスを変更するにはどうすればよいですか?

ノードページに表示される前に用語のパスを変更しようとしています。私はtemplate.phpでこの前処理関数を使用しています:

function bartik_preprocess_node(&$variables) {
    $variables['field_photo_topic']['0']['taxonomy_term']->uri['path'] = 'photo/test';
}

パスは変更されません、何が欠けていますか?これはdpm出力です:

enter image description here

5
uwe

この質問は、photo /%とvideo /%がビューである場合に最適です。分類/用語/%をトピック/%にマップし、パスtopic /%/%で単一のビューを作成することをお勧めします。ここで、1つの引数はコンテンツタイプで、もう1つの引数は分類用語です。ただし、2つのビュー(または1つのビューに2つのページ)を作成して、それぞれが独自のパスを持つパスを使用することもできます。

しかし、あなたの主な質問に移ります。レンダー配列の項目を変更するのは簡単ですが、何をいつ変更する必要があるかを理解するのが難しい場合があります。参照に利用できる情報のシャドウコピーが時々存在するのは、レンダー配列の一般的な問題です。これらのコピーは実際のページの作成に使用されるアイテムのコピーに過ぎないため、これらのコピーを変更してもページのレンダリングには影響しません。あなたの質問のコードの問題は、それがターゲットリンクのコピーを変更していたことです。ページのレンダリングに影響を与えるために変更する必要があるマスター情報は、データ構造の別の場所に表示されます。 「コンテンツ」アイテム内に表示されるコピーを調整する必要があります。

次に、同様のコンテンツタイプで機能するコードをいくつか示します。

function MYTHEME_preprocess_node(&$vars) {
  if (array_key_exists('content', $vars)) {
    $content = &$vars['content'];
      if (array_key_exists('field_photo_topic', $content)) {
        foreach ($content['field_photo_topic']['#items'] as $index => $info) {
          $tid = $info['tid'];
          $content['field_photo_topic'][$index]['#href'] = 'photos/' . $tid;
        }
      }
  }
}

ここから、pathautoを使用して、写真/%を写真+分類用語ビューの適切なURLにマップできます。

9
greg_1_anderson

Hook_entity_info_alter()に基づいてこのソリューションを見つけました: http://erikwebb.net/blog/changing-url-all-taxonomy-terms 。基本的に:

function YOUR_MODULE_entity_info_alter(&$entity_info) {
    $entity_info['taxonomy_term']['uri callback'] = 'YOUR_MODULE_taxonomy_term_uri';
}

そして

function YOUR_MODULE_taxonomy_term_uri($term) {
    return array('path' => 'your/custom/path/' . $term->tid);
}
9
jackocnr

ノードの用語のブロックを作成するビューを作成してみませんか?コンテキストフィルターを使用して、ノードに関連付けられた用語を取得し、それらの用語を表示できます。次に、ビューを使用して、用語IDフィールドと用語名フィールドを呼び出し、カスタムURLに移動するように用語を書き換えます。

<a href="custom/path/[tid]">[term_name]</a>
2
Aaron Ortega

分類法のPathautoパターンを検討しましたか?モジュールをインストールして構成すると、用語ごとに個別のURLを上書きすることもできます。これは、システム的にははるかに健全です。

他の投稿を読んだら、コンテンツタイプ(写真、ビデオ)について、Pathautoパターンセクションに入力することをお勧めします。

photo/[term:url:path]

video/[term:url:path]

次に、すべてのエンティティのパターンを再構築し、それが機能するかどうかを確認します。それでも問題が解決しない場合は、具体的に何を指定してください。問題を十分に理解していない可能性があるためです。

1
Artur