web-dev-qa-db-ja.com

ノードをそのカスタムビューにリダイレクトする

カスタム_content-type_のview "myview"を作成しました。

今私が欲しい:その_content-type_のノードは自動的にそのビューページにリダイレクトされます。

たとえば、ユーザーが http:// my-drupal-site/node/4 と入力し、そのノードが目的の_content-type_である場合、次のようにリダイレクトする必要があります http:// my-drupal-site/myview/4

私にできること:

私が今できることは、テーマのtemplate_preprocess_node()関数に次の行を書き込むことです。

_function myCustomTheme_preprocess_node(&$variables) {
    $arg1 = (int) arg(1);
    $isArg1Int = (is_int($arg1) && $arg1) ? (true) : (false);

    if (isset($variables['node']->type) && $isArg1Int) {
        if ($variables['node']->type == "MY-DESIRED-CONTENT-TYPE") {
            // REDIRECT!
            drupal_goto('myview/' . $variables['node']->nid);
        }
    }
}
_

それは純粋なハードコードであり、私はそれが好きではありません。エレガントな解決策はありますか、URLエイリアスなどを使用している可能性がありますか?

3
Shafiul

Patrickが提案するようにPanelsを使用できますが、Panelsは多くのリソースを必要とし、この単純なケースでのみ使用するのは少し無駄です。

これにはさまざまなアプローチがあり、ノードの完全なビューに反応することができます。

/**
 * Implements hook_node_view().
 */
function hook_node_view($node, $view_mode, $langcode) {
  if ($node->type == 'type' && $view_mode == 'full' && arg(0) == 'node') {
    drupal_goto('url/' . $node->nid);
  }
}

ノードが正しいタイプであり、フルビューで表示され、URLがnode/...、これはノードが標準的な方法で表示されることに限定する必要があります。

これを行う別の方法は、リダイレクトモジュールを使用するか、タイプのすべてのノードのビューへのリダイレクトをセットアップするのと同じようなものです。このアプローチの弱点は、パスのエイリアスである可能性があります。しかし、そうすれば、よりSEOフレンドリーな永続的なリダイレクトを作成できます。

5
googletorp

Panels でこれを確実に行うには、デフォルトのノード表示オーバーライドにバリアントを追加し、「コンテンツタイプ= my_content_type」の選択ルールを追加します。

また、CToolsの一部であるPanelsの依存関係であるPage Managerを使用して、これを設定することもできますが、頭上からそれを行う方法がわかりません。

Node Oneは Learning Page Manager and Panels に優れたスクリーンキャストがあります。

2
Patrick Kenny