【问题标题】:Access user fields on nodes in Drupal 7访问 Drupal 7 中节点上的用户字段
【发布时间】:2011-12-12 19:34:23
【问题描述】:

我在我的用户注册表单中添加了一些自定义字段。即名字和姓氏。

注册用户可以写文章,我已经为这些文章创建了一个内容类型和一个节点--article.tpl.php。

我想做的是在文章标题下方呈现用户注册表单中的两个字段(名字,姓氏)。我似乎无法访问这些数据。 我想要用户提供的特定名称,而不是登录时提供的用户名。这可能是完全随机的。

有什么想法可以在 node.tpl 上呈现这些字段吗?

干杯。

【问题讨论】:

    标签: drupal drupal-7


    【解决方案1】:

    请记住,您可以根据用户的 uid 加载任何用户的个人资料数据,因此您可以使用 user_load($authors_uid) 而不是 user_load($authors_uid)

    更具体地说,这是我使用的一个通用的、通用的函数,它收集名字和姓氏用户字段并返回它们,并用空格分隔。根据我的用户的请求,返回是大写的,但你明白了。我仍在将我的 D6 转换为 D7,因此可能不需要语言检查。如果我发现不是,我将编辑此回复。

    /**
     * This will return the user's name (first last in caps)
     * @uses user_load()
     * @param int $user_id optional user id to look for
     * @return string
     */
    function get_user_name($user_id = 0) {
      global $user;
      $active_user = user_load((($user_id > 0)? $user_id : $user->uid));
      $first_name = $active_user->field_firstname[(($active_user->language == '')? 'und' :    $active_user->language)][0]['value'];
      $last_name = $active_user->field_lastname[(($active_user->language == '')? 'und' : $active_user->language)][0]['value'];    
      return strtoupper($first_name . ' ' . $last_name);
    }
    

    【讨论】:

      【解决方案2】:

      当用户登录 Drupal 时,会加载该用户,以便您可以在请求期间访问“用户名”和“电子邮件”等字段。但是,默认情况下不会加载您定义的自定义字段。

      您可以做的是在您的主题中实现预处理功能。也就是说,在您的主题文件夹中创建/编辑文件“template.php”,并添加以下代码:

      function [mythemename]_preprocess_node(&$vars, $hook) {
      
        global $user;
        $account = user_load($user->uid);
      
        $vars['firstname'] = $account['path']['to']['field'];
        $vars['lastname'] = $account['path']['to']['field'];
      
      }
      

      现在发生的情况是,每次 Drupal 将要显示一个节点时,它都会通过您的函数运行所有节点变量(例如 $title 和 $content),以便您可以更改您需要的内容。但是,您也可以添加更多变量。因此,我们要做的是获取请求的用户(可能是匿名的,'uid' 设置为 0)并加载该用户的帐户,该帐户包含您定义的所有字段。

      请注意,我不记得这些字段是如何存储在您的帐户中的。你需要查一下。

      【讨论】:

      • 他们可能在$account->field_firstname[$account->language][0]['value'];
      • 这个答案解释了如何访问当前登录用户的字段,但最初的问题是询问如何显示作者的字段。
      猜你喜欢
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-06
      • 2014-01-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多