1

私の雇用主は、ウェブサイトの特定のページに 2 ページ機能があることを要求しています。これが意味することは、一部のデフォルト コンテンツは通常どおり node_view ページに表示されますが、リンクがクリックされると 2 番目の部分が表示されるはずです。

これを複数のノードで実行できれば簡単ですが、すべてのデータを 1 つのノードに保存し、2 つのページにまたがって表示する必要があります。

次のコードを一緒にハックしました。

function mymodule_node_view($node, $view_mode, $langcode){

$path = current_path();
$path_alias = drupal_lookup_path('alias',$path);

$links = array( 'test' => array('title'=>'my_link', 'query'=>'', 'href'=>"{$path_alias}/nextpage") );

$node->content['my_module'] = array(
    '#theme' => 'links__node__mymodule',
    '#links' => $links,
    '#attributes' => array('class' => array('links', 'inline')),
);
}

これにより、コンテンツ領域の上部にmy_linkというハイパーリンクが作成されます。これはすばらしいことです。

ハイパーリンクをクリックすると問題が発生します。http://example.org/homepage にいて、ハイパーリンクをクリックすると、 http://example.org/homepage/nextpageにリダイレクトされると予想されます。また、実際に使用していたノードの表示タブと編集タブを引き続き維持したいと考えています。ただし、Drupal は「ページが見つかりません」というエラーを正しく表示します。

興味深いのは、 http://example.org/node/1 を使用してhttp://example.org/node/1/nextpageにアクセスした場合、上記の問題は発生しませんが、URL はあまり説明的ではありません。

この問題を解決するには、hook_menuを拡張する必要があると確信していますが、実際のノード タイトルに至る分類用語の数を考慮する方法がわかりません。そのため、ノード タイトルと/nextpageの前に何%が必要になるか予測できません。ただし、/nextpageには、親ページの表示タブと編集タブを引き続き表示したいと考えています。

これは私にとってすべて未踏の領域です。

アップデート

分類法を含む完全なノードパス全体を返すという素晴らしい仕事をする次の関数を見つけました。

$path = current_path();
$path_alias = drupal_lookup_path('alias',$path);

私が知らないのは、hook_menu でこれを利用して、ノードの/nextpage動的に作成する方法です。

/nextpageを元の実際の Drupal ノードから完全に独立させたいわけではないことを覚えておいてください。/nextpage のときに、ノードのビュー、編集などのタブにアクセスできるようにしたいと考えています。

したがって、実質的に/nextpageは Drupal ノード ページの拡張にすぎません。

4

2 に答える 2

1

node_menu() 関数をチェックして、実装方法に関するリファレンスを取得します。

分類要件がよくわからないので、これでは不十分かもしれませんが、理解したとおりに進めます。

しかし、私の頭の上から、私は次のようなものに行きます:

function mymodule_menu() {
  $items['node/%node/nextpage'] = array(
    'title' => 'Next page',
    'type' => MENU_LOCAL_TASK, // Makes it a tab on node/%node-pages
    'page callback' => 'mymodule_node_page_view', // Your page display function
    'page arguments' => array(1), // First will be a node object, second will be whatever value is passed in the  url
    // You should rip access callback and access arguments from node_menu()
  );

  return $items;
}

それはあなたが求めているようなことをするはずです。

パネル/ページ (Chaos Tools も参照) またはおそらくビューでこれを行うことも可能であり、簡単であり、間違いなく推奨されます。ビューはこれらすべての機能を備えており、一般的にカスタム コードよりも Drupal の強みを活用するための優れた方法だからです。

更新しました

明確にするために、メニュー フックを簡略化しました。以下のページ ビュー機能を使用できるはずです。パネルを使用して node_view などをオーバーライドすると、より良いソリューションを作成できると私はまだ信じています。

メニューフックの MENU_LOCAL_TASK 部分は、これを View および Edit とともに別のタブに変換する必要があります。

function mymodule_node_page_view($node) {
    die("It works: ".$node->title);
}

それがより役立つことを願っています。

于 2012-11-13T21:01:42.137 に答える
1

それを行う簡単な方法があります。ビュー モジュールを使用します。

フィールド セクションで、表示するフィールドを選択します。そして、引数にnid.

次に、作成済みのノード ビューへのリンクを追加します。

最終結果http://mysite/views-page/[nid]

これが役に立てば幸いです...ムハンマド。

于 2012-11-14T07:43:13.313 に答える