如何在drupal中将按钮添加到用户个人资料页面

Posted

技术标签:

【中文标题】如何在drupal中将按钮添加到用户个人资料页面【英文标题】:How to add button to user profile page in drupal 【发布时间】:2014-09-21 20:44:50 【问题描述】:

我 3 天前开始使用 drupal(7),我有一个小任务:

我正在使用 Profile2 模块创建 2 类用户(候选人/雇主),我想在雇主个人资料的 wiew 页面中创建一个按钮。

我为此创建了一个新模块来测试是否是雇主简介:

function ab_candidate_app_profile2_view_alter($build) 

  $test = $build['field_company_name']['#object'];
  if(isset($build))
    if($test->type == 'employer_')

    // add the button here
    



感谢您的帮助

编辑:当我做 var_dump($build) 我得到下一个结果:

array (size=12)
  '#view_mode' => string 'account' (length=7)
  'field_company_name' => 
    array (size=16)
      '#theme' => string 'field' (length=5)
      '#weight' => int 0
      '#title' => string 'Name' (length=4)
      '#access' => boolean true
      '#label_display' => string 'above' (length=5)
      '#view_mode' => string 'account' (length=7)
      '#language' => string 'und' (length=3)
      '#field_name' => string 'field_company_name' (length=18)
      '#field_type' => string 'text' (length=4)
      '#field_translatable' => string '0' (length=1)
      '#entity_type' => string 'profile2' (length=8)
      '#bundle' => string 'employer_' (length=9)
      '#object' => 
        object(Profile)[56]
          public 'pid' => string '6' (length=1)
          public 'type' => string 'employer_' (length=9)
          public 'label' => string 'Employer ' (length=9)
          public 'uid' => string '10' (length=2)
          public 'created' => string '1411278976' (length=10)
          public 'changed' => string '1411278976' (length=10)
          protected 'entityType' => string 'profile2' (length=8)
          protected 'entityInfo' => 
            array (size=22)
              ...
          protected 'idKey' => string 'pid' (length=3)
          protected 'nameKey' => string 'pid' (length=3)
          protected 'statusKey' => string 'status' (length=6)
          protected 'defaultLabel' => boolean false
          public 'field_company_name' => 
            array (size=1)
              ...
          public 'field_logo' => 
            array (size=1)
              ...
          public 'field_company_description' => 
            array (size=1)
              ...
          public 'field_country' => 
            array (size=1)
              ...
          public 'rdf_mapping' => 
            array (size=0)
              ...
          public 'entity_view_prepared' => boolean true
      '#items' => 
        array (size=1)
          0 => 
            array (size=3)
              ...
      '#formatter' => string 'text_default' (length=12)
      0 => 
        array (size=1)
          '#markup' => string 'adel' (length=4)
  'field_logo' => 
    array (size=16)
      '#theme' => string 'field' (length=5)
      '#weight' => int 2
      '#title' => string 'Logo' (length=4)
      '#access' => boolean true
      '#label_display' => string 'above' (length=5)
      '#view_mode' => string 'account' (length=7)
      '#language' => string 'und' (length=3)
      '#field_name' => string 'field_logo' (length=10)
      '#field_type' => string 'image' (length=5)
      '#field_translatable' => string '0' (length=1)
      '#entity_type' => string 'profile2' (length=8)
      '#bundle' => string 'employer_' (length=9)
      '#object' => 
        object(Profile)[56]
          public 'pid' => string '6' (length=1)
          public 'type' => string 'employer_' (length=9)
          public 'label' => string 'Employer ' (length=9)
          public 'uid' => string '10' (length=2)
          public 'created' => string '1411278976' (length=10)
          public 'changed' => string '1411278976' (length=10)
          protected 'entityType' => string 'profile2' (length=8)
          protected 'entityInfo' => 
            array (size=22)
              ...
          protected 'idKey' => string 'pid' (length=3)
          protected 'nameKey' => string 'pid' (length=3)
          protected 'statusKey' => string 'status' (length=6)
          protected 'defaultLabel' => boolean false
          public 'field_company_name' => 
            array (size=1)
              ...
          public 'field_logo' => 
            array (size=1)
              ...
          public 'field_company_description' => 
            array (size=1)
              ...
          public 'field_country' => 
            array (size=1)
              ...
          public 'rdf_mapping' => 
            array (size=0)
              ...
          public 'entity_view_prepared' => boolean true
      '#items' => 
        array (size=1)
          0 => 
            array (size=13)
              ...
      '#formatter' => string 'image' (length=5)
      0 => 
        array (size=4)
          '#theme' => string 'image_formatter' (length=15)
          '#item' => 
            array (size=13)
              ...
          '#image_style' => string '' (length=0)
          '#path' => string '' (length=0)
  'field_company_description' => 
    array (size=16)
      '#theme' => string 'field' (length=5)
      '#weight' => int 3
      '#title' => string 'Description' (length=11)
      '#access' => boolean true
      '#label_display' => string 'above' (length=5)
      '#view_mode' => string 'account' (length=7)
      '#language' => string 'und' (length=3)
      '#field_name' => string 'field_company_description' (length=25)
      '#field_type' => string 'text_long' (length=9)
      '#field_translatable' => string '0' (length=1)
      '#entity_type' => string 'profile2' (length=8)
      '#bundle' => string 'employer_' (length=9)
      '#object' => 
        object(Profile)[56]
          public 'pid' => string '6' (length=1)
          public 'type' => string 'employer_' (length=9)
          public 'label' => string 'Employer ' (length=9)
          public 'uid' => string '10' (length=2)
          public 'created' => string '1411278976' (length=10)
          public 'changed' => string '1411278976' (length=10)
          protected 'entityType' => string 'profile2' (length=8)
          protected 'entityInfo' => 
            array (size=22)
              ...
          protected 'idKey' => string 'pid' (length=3)
          protected 'nameKey' => string 'pid' (length=3)
          protected 'statusKey' => string 'status' (length=6)
          protected 'defaultLabel' => boolean false
          public 'field_company_name' => 
            array (size=1)
              ...
          public 'field_logo' => 
            array (size=1)
              ...
          public 'field_company_description' => 
            array (size=1)
              ...
          public 'field_country' => 
            array (size=1)
              ...
          public 'rdf_mapping' => 
            array (size=0)
              ...
          public 'entity_view_prepared' => boolean true
      '#items' => 
        array (size=1)
          0 => 
            array (size=3)
              ...
      '#formatter' => string 'text_default' (length=12)
      0 => 
        array (size=1)
          '#markup' => string 'teeeeeeeeeeeeeeeeeeeest' (length=23)
  'field_country' => 
    array (size=16)
      '#theme' => string 'field' (length=5)
      '#weight' => int 4
      '#title' => string 'Country' (length=7)
      '#access' => boolean true
      '#label_display' => string 'above' (length=5)
      '#view_mode' => string 'account' (length=7)
      '#language' => string 'und' (length=3)
      '#field_name' => string 'field_country' (length=13)
      '#field_type' => string 'list_text' (length=9)
      '#field_translatable' => string '0' (length=1)
      '#entity_type' => string 'profile2' (length=8)
      '#bundle' => string 'employer_' (length=9)
      '#object' => 
        object(Profile)[56]
          public 'pid' => string '6' (length=1)
          public 'type' => string 'employer_' (length=9)
          public 'label' => string 'Employer ' (length=9)
          public 'uid' => string '10' (length=2)
          public 'created' => string '1411278976' (length=10)
          public 'changed' => string '1411278976' (length=10)
          protected 'entityType' => string 'profile2' (length=8)
          protected 'entityInfo' => 
            array (size=22)
              ...
          protected 'idKey' => string 'pid' (length=3)
          protected 'nameKey' => string 'pid' (length=3)
          protected 'statusKey' => string 'status' (length=6)
          protected 'defaultLabel' => boolean false
          public 'field_company_name' => 
            array (size=1)
              ...
          public 'field_logo' => 
            array (size=1)
              ...
          public 'field_company_description' => 
            array (size=1)
              ...
          public 'field_country' => 
            array (size=1)
              ...
          public 'rdf_mapping' => 
            array (size=0)
              ...
          public 'entity_view_prepared' => boolean true
      '#items' => 
        array (size=1)
          0 => 
            array (size=1)
              ...
      '#formatter' => string 'list_default' (length=12)
      0 => 
        array (size=1)
          '#markup' => string 'Malaysia (MY)' (length=13)
  '#pre_render' => 
    array (size=1)
      0 => string '_field_extra_fields_pre_render' (length=30)
  '#entity_type' => string 'profile2' (length=8)
  '#bundle' => string 'employer_' (length=9)
  '#theme' => string 'entity' (length=6)
  '#entity' => 
    object(Profile)[56]
      public 'pid' => string '6' (length=1)
      public 'type' => string 'employer_' (length=9)
      public 'label' => string 'Employer ' (length=9)
      public 'uid' => string '10' (length=2)
      public 'created' => string '1411278976' (length=10)
      public 'changed' => string '1411278976' (length=10)
      protected 'entityType' => string 'profile2' (length=8)
      protected 'entityInfo' => 
        array (size=22)
          'label' => string 'Profile' (length=7)
          'plural label' => string 'Profiles' (length=8)
          'description' => string 'Profile2 user profiles.' (length=23)
          'entity class' => string 'Profile' (length=7)
          'controller class' => string 'EntityAPIController' (length=19)
          'base table' => string 'profile' (length=7)
          'fieldable' => boolean true
          'view modes' => 
            array (size=1)
              ...
          'entity keys' => 
            array (size=4)
              ...
          'bundles' => 
            array (size=2)
              ...
          'bundle keys' => 
            array (size=1)
              ...
          'label callback' => string 'entity_class_label' (length=18)
          'uri callback' => string 'entity_class_uri' (length=16)
          'access callback' => string 'profile2_access' (length=15)
          'module' => string 'profile2' (length=8)
          'metadata controller class' => string 'Profile2MetadataController' (length=26)
          'static cache' => boolean true
          'field cache' => boolean true
          'load hook' => string 'profile2_load' (length=13)
          'translation' => 
            array (size=0)
              ...
          'schema_fields_sql' => 
            array (size=1)
              ...
          'configuration' => boolean false
      protected 'idKey' => string 'pid' (length=3)
      protected 'nameKey' => string 'pid' (length=3)
      protected 'statusKey' => string 'status' (length=6)
      protected 'defaultLabel' => boolean false
      public 'field_company_name' => 
        array (size=1)
          'und' => 
            array (size=1)
              ...
      public 'field_logo' => 
        array (size=1)
          'und' => 
            array (size=1)
              ...
      public 'field_company_description' => 
        array (size=1)
          'und' => 
            array (size=1)
              ...
      public 'field_country' => 
        array (size=1)
          'und' => 
            array (size=1)
              ...
      public 'rdf_mapping' => 
        array (size=0)
          empty
      public 'entity_view_prepared' => boolean true
  '#language' => string 'en' (length=2)
  '#page' => null

【问题讨论】:

【参考方案1】:

我通过使用以下代码覆盖 user-profile.tpl.php 来解决它:

<?php print render($user_profile); 

  if(isset($user_profile['profile_employer_']))
  $account_info=menu_get_object('user');
  $acount_id = $account_info->uid;

 // var_dump($account_info);die();

  echo '<a href="/jobPortal/Apply/'.$acount_id.'">Apply Now</a>';
  
  ?>

我在下一个路径中覆盖了这个文件:

C:\wamp\www\jobPortal\themes\bartik\templates\

【讨论】:

很高兴您找到了解决方案。但是,我真的建议保持 tpls 不受任何 php 代码处理的影响。我在使用这种方法时遇到了足够多的性能问题。【参考方案2】:

我假设您需要在配置文件显示上添加一个按钮,而不是特别是来自“视图”模块的“视图”。在这种情况下,您必须使用 hook_node_view

这是一个例子 https://www.drupal.org/node/1993368#comment-7406538

或在以下位置查看更详尽的答案 Drupal 7 hook_node_view add a form to the content of a node。您可以在表单中添加一个按钮并在显示时调用。

如果您使用“视图”模块中的视图,我建议您最好在代码中创建一个块并将其放置在特定页面上,而不是更改视图。更改后的视图可能很难维护。最好只保留它们以显示数据库内容而不是嵌入表单。

您仍然可能希望通过此线程上的 cmets 了解类似查询 https://drupal.stackexchange.com/questions/91186/how-do-i-embed-a-node-creation-form-inside-a-view

【讨论】:

以上是关于如何在drupal中将按钮添加到用户个人资料页面的主要内容,如果未能解决你的问题,请参考以下文章

在 Drupal 8 中将链接块添加到过滤器下方的视图页面

Drupal 7:视图 3:仅显示当前用户的个人资料信息

如何在没有面板的Views Drupal 7中将组ID作为上下文

如何在 wordpress 中将单选按钮添加到我的网站

Drupal 7 添加 PHP 到视图过滤器

如何在 Drupal 7 视图中使用当前用户作为相关字段?