3

ユーザー編集ページにタブを追加したいと思いuser/%/edit/foo、モデルとして twitter モジュールを使用していました。デバッガーを使用して多くのことを調べ、ステップスルーした後、メニュー ルーター パスhook_userの一部が機能するようにモジュールに関数を追加する必要があることに気付きました。%user_category

現在は期待どおりに機能していますが、何をしたのかよくわかりませんし、適切な説明がどこにも見つかりませんでした。

誰が私にそれが何であるかを説明できますか?

4

3 に答える 3

1

user/uid/edit/not_a_category で発生する、存在しないカテゴリが指定された場合、user_category_loads は失敗し、user/uid/edit/is_a_category へのアクセス チェックのためにそのカテゴリを渡すため、それらへのアクセスは false に設定されるため、bam 、おかしなメニュー :'(.

于 2011-02-04T19:58:42.273 に答える
0

使用すると、関数がその引数 (uid) で呼び出される%user_categoryことを意味します。user_category_load

関数はユーザー モジュールで定義されます。これらの関数は検証として機能し、False が FALSE を返す場合は 404 になりますが、ユーザー オブジェクトなどの何かを返す場合は、その URL に対して実行されるコールバック関数/フォームに渡されます。

あなたの場合、おそらくより単純なuser_load%userを呼び出す代わりに使用することができ、合格するためにすべての余分なことをする必要はありませんでした。user_category_load

概要

user_category_load二つのこともそうです。

  1. user/%/edit/foo を実行できないように、カテゴリが存在することを確認してください。
  2. ユーザー オブジェクトをキャッシュします。
于 2010-02-23T12:00:57.927 に答える
0

多くの試行錯誤の後、次のuser/%/editようなコードを使用して、ページをパスの子として機能させることができました。

<?php
/**
 * Implementation of hook_menu().
 */
function noc_profile_privacy_menu() {
  return array(
    'user/%user_category/edit/privacy' => array(
      'title' => 'Portfolio privacy',
      'page callback' => 'drupal_get_form',
      'page arguments' => array('noc_profile_privacy_form', 1),
      'access callback' => 'content_profile_page_access',
      'access arguments' => array('profile', 1),
      'type' => MENU_LOCAL_TASK,
      'load arguments' => array('%map', '%index'),
    ),
  );
}

/**
 * Implementation of hook_user().
 */
function noc_profile_privacy_user($op, &$edit, &$account, $category = NULL) {
  if ($op === 'categories') {
    return array(array(
      'name' => 'privacy',
      'title' => t('Profile privacy'),
      'weight' => 0,
    ));
  }
}

'name'hook_user() で返されるキーは、hook_menu() 定義の後に続くキーと同じであることに注意してくださいuser/%user/category/edit。それが鍵だと思います。項目を省略した場合も'load arguments'、正確にその値でエラーが発生します。

したがって、ユーザー カテゴリとは、私の場合、メニュー項目定義のパスの'privacy'少し後ろにあると思います。edit

これは不要な合併症ですか?はい、そのようです。

編集: 同僚の hefox がこの質問への返信で私を殴ったのを見ました。フォックスの助けがなければ、このすべてを理解することはできなかったでしょう。

于 2011-02-04T23:48:16.183 に答える