【问题标题】:Drupal - How to change the default view/edit operation Name of a content typeDrupal - 如何更改内容类型的默认视图/编辑操作名称
【发布时间】:2012-05-06 02:40:55
【问题描述】:

我正在使用 drupal 7。首先请参考我的屏幕截图以了解我在说什么。 http://www.karya.gisla.in/scr.png

假设我的内容类型是文章。当我们创建文章时,对于经过身份验证的用户,节点显示主要选项卡,即:查看和编辑。我只想更改/编辑它说:查看文章和编辑文章。

注意:仅适用于特定的内容类型。即其他内容类型说页面将默认显示:查看和编辑。

任何想法如何实现这一点。

任何帮助将不胜感激。

【问题讨论】:

    标签: php drupal drupal-6 drupal-7 drupal-modules


    【解决方案1】:

    以下代码可以解决问题。将其粘贴到您的主题 template.php 中并将 YOURTHEMENAME 更改为...您的主题名称。 也许在这个函数中使用 dpm($vars) 来查看 $vars 中的信息种类。这应该可以帮助您下​​次更快地进入主题。

    [编辑:] 感谢本指出这一点! 这是一个更新的版本:

    function YOURTHEMENAME_preprocess_page(&$vars) {
      if ($vars['node']->type == 'article') {
        foreach($vars['tabs']['#primary'] AS $index => $tab) {
          if($tab['#link']['title'] == t('View')) {
            $vars['tabs']['#primary'][$index]['#link']['title'] = t('View Article');
          }
    
          if($tab['#link']['title'] == t('Edit')) {
            $vars['tabs']['#primary'][$index]['#link']['title'] = t('Edit Article');
          }
        }
      }
    }
    

    玩得开心,马丁

    【讨论】:

    • 这假设没有模块在查看或编辑之前添加链接(因此更改键 01)意味着其他选项卡可能会被覆盖。
    • 谢谢。它的工作。 @ben-swinburne:你是对的,但现在我没有这样的模块。
    【解决方案2】:

    String Overrides Module 可能会有所帮助,但我不确定它是否可以处理角色。

    【讨论】:

      【解决方案3】:

      您可以将以下函数放入主题的模板文件中,并将YOURTHEME替换为主题名称以更改选项卡链接。

      $nodes 是一个多维数组,其中第一级键是您希望替换选项卡的内容类型,第二级键值组合分别是路径和替换模式。将替换模式设置为 '' 将删除选项卡。

      /**
       * Implements hook_menu_local_tasks_alter().
       */
       function YOURTHEME_menu_local_tasks_alter(&$data, $router_item, $root_path) {
          $nodes = array(
              'article'   =>  array(
                  'node/%/view'   =>  'View Article',
                  'node/%/edit'   =>  'Edit Article'
              )
          );
      
          foreach ($router_item['page_arguments'] as $key => $argument) {
              if (is_object($argument) && array_key_exists( $router_item['page_arguments'][$key]->type, $nodes )) {
                  foreach( $nodes[$router_item['page_arguments'][$key]->type] as $path => $new_title ) {
                      foreach ($data['tabs'][0]['output'] as $key => $value) {
                          if ($value['#link']['path'] == $path) {
                              if( !$new_title ) {
                                  unset($data['tabs'][0]['output'][$key]);
                              } else {
                                  $data['tabs'][0]['output'][$key]['#link']['title'] = $new_title;
                              }
                          }
                      }
                  }
              }
          }
      }
      

      【讨论】:

      • 您好,请您特别解释一下您的代码 foreach 循环。正如您在下面的评论中所说的“假设在查看或编辑之前没有模块添加链接”。我很想实施它。但请稍微解释一下代码,以免我忘记它。
      【解决方案4】:

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-23
      相关资源
      最近更新 更多