0

小さな予約システムを作成中です。プロジェクターなど、予約可能なタイプのノードを作成できます。通常の表示のカレンダー ビューがあります。ノード参照の引数を追加しましたが、ページ コールバックの定義に問題があります。誰かが私を助けることができますか?

ここで、さまざまなノードのメニュー項目を作成したいと考えています

function your_module_menu() {
$nodeid //semantic, node is loaded right
    $items['reservate/nodeid/$year-w$week'] = array( // semantic, url is built right
        'title' => t('Your Module Name'),
        'description' => t('Menu's description.'),
        'page callback' => 'page_callback_funtion',
        'page arguments' => array('page callback arguments'),
        'access callback' => 'your_module_access',           // the function that validates access based on the user's role(s).
        'access arguments' => array(array(role1', 'role2')), // list of roles authorized - note nested array.
        'type' => MENU_NORMAL_ITEM,
    );
    return $items;
}

@編集

わかりました、多分私はよく説明しませんでした:)。予約可能な content type: unit があります。作成したユニットごとに、メニュー項目を生成したいと考えています (ノードの保存または更新時にメニューを再構築できます)。メニューは、url の引数としてノード ID (ユニット) を使用して、ビューにリンクする必要があります。

4

3 に答える 3

1

何をしようとしているのか正確にはわかりませんが、カスタム モジュールで定義する新しいページではなく、メニュー項目を作成することが目標である場合は、Drupal のメニュー システムを使用する必要があります。サイトに存在する任意の URL を指すメニュー項目を作成できます。
ノードの場合、これはノードの編集/作成フォームで直接実行できるため、特に簡単です。

Drupal はメニューをキャッシュするため、ユーザー ID などの動的な部分を含むメニュー項目を作成することはできません。そのようなことをしたい場合は、ユーザーを動的 URL にリダイレクトする共通のコールバックを作成する必要があります。ユーザーに基づいてコンテンツを表示します。

アップデート

ノードが作成または削除されるたびにメニュー システムを再構築する必要はありませんが、これはあまりスケーラブルではありません。代わりに、新しいメニュー項目を で作成し、hook_nodeapi削除時に削除することができます。

于 2010-09-21T08:22:47.403 に答える
1

私の理解が正しければ、「ユニット」タイプの新しいコンテンツ ノードが追加されるたびに、メニュー項目を自動的に作成しようとしています。それが正しければ、モジュール Rules と PHP の小さなスニペットを使用して、コンテンツ作成などのさまざまなシステム イベントでカスタム メニュー項目を作成することをお勧めします。このトピックについて私が書いたチュートリアルが役に立つかもしれません:

http://jan.tomka.name/blog/programmatically-creating-menu-items-drupal

アイデアは簡単です: ノードの作成または削除時に実行されるアクションのルール モジュールでルールを設定し、実際にメニュー項目を操作するために googletorp が言及した Drupal API 呼び出しを使用します。

于 2011-01-17T01:08:54.150 に答える
0

私はそれを行うための非常に簡単な方法を見つけました.いくつかのフィルターでリンクを作成するビューブロックを作成しました.

シンプルでまさに私が必要としていたものでしたが、なぜもっと早くそれを考え出さなかったのか理解できないようです

于 2010-10-06T08:46:30.590 に答える