カスタム_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エイリアスなどを使用している可能性がありますか?
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フレンドリーな永続的なリダイレクトを作成できます。
Panels でこれを確実に行うには、デフォルトのノード表示オーバーライドにバリアントを追加し、「コンテンツタイプ= my_content_type」の選択ルールを追加します。
また、CToolsの一部であるPanelsの依存関係であるPage Managerを使用して、これを設定することもできますが、頭上からそれを行う方法がわかりません。
Node Oneは Learning Page Manager and Panels に優れたスクリーンキャストがあります。