什么是用户类别?

时间:2010-02-23 03:28:30

标签: drupal drupal-modules

我想在用户编辑页面添加一个标签,即user/%/edit/foo,并使用twitter模块作为模型。在很多使用调试器进行扫描之后,我意识到我需要在我的模块中添加hook_user函数,以便菜单路由器路径的%user_category部分可以正常工作

它现在正如预期的那样运作,但我对我刚才所做的事情并没有真正的了解,也没有在任何地方找到好的解释。

任何人都可以向我解释它的含义吗?

3 个答案:

答案 0 :(得分:1)

如果给定一个不存在的类别(例如user / uid / edit / not_a_category),则user_category_loads失败,并且它将访问检查的类别传递给user / uid / edit / is_a_category,因此对这些类别的访问设置为false ,所以bam,不错的菜单:'(。

答案 1 :(得分:0)

使用%user_category时,表示使用该参数(uid)调用user_category_load函数。

该功能在用户模块中定义。这些函数用作验证,如果False它返回FALSE,它将导致404,但如果它返回其他东西,如用户对象,将传递给该URL的任何回调函数/形式。

在你的情况下,你可能已经使用了%user来代替那些更简单的user_load,而你不需要做所有额外的事情来制作{{1}传递。

摘要

所以user_category_load会做两件事。

  1. 检查类别是否存在,以便您无法执行user /%/ edit / foo。
  2. 缓存用户对象。

答案 2 :(得分: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,
    ));
  }
}

请注意,我在hook_user()中返回的'name'键与我的hook_menu()定义中的user/%user/category/edit之后的键相同。我认为这是关键。如果省略'load arguments'项目,那么您也会收到错误信息。

所以我相信用户类别是我的'privacy' - 菜单项定义路径中edit之后的位。

这是不必要的并发症吗?是的,所以看来。

编辑:我看到我的同事hefox打败我回答这个问题。如果没有福克斯的帮助,我就无法想象所有这些,这对福克斯来说是疯狂的道具。