Как на форуме изменить ссылку на авторизацию

Главные вкладки

Аватар пользователя Sennheiser Sennheiser 1 февраля 2019 в 10:31

Задача изменить ссылку авторизации для анонимов на форуме. Модуль Форум стандартный.

Вариант сделать нужный перевод не подходит, так как вместо данной ссылки нужно вставить div блоки, а друпал ругается, что такие теги запрещены.

В файле forum.module есть такая функция, в которой есть строки отвечающие за вывод таких ссылок (для авторизации и для добавления новой темы)

/**
 * Implements hook_menu_local_tasks_alter().
 */

function forum_menu_local_tasks_alter(&$data, $router_item, $root_path) {
  global $user;

  // Add action link to 'node/add/forum' on 'forum' sub-pages.
  if ($root_path == 'forum' || $root_path == 'forum/%') {
    $tid = (isset($router_item['page_arguments'][0]) ? $router_item['page_arguments'][0]->tid : 0);
    $forum_term = forum_forum_load($tid);
    if ($forum_term) {
      $links = array();
      // Loop through all bundles for forum taxonomy vocabulary field.
      $field = field_info_field('taxonomy_forums');
      foreach ($field['bundles']['node'] as $type) {
        if (node_access('create', $type)) {
          $links[$type] = array(
            '#theme' => 'menu_local_action',
            '#link' => array(
              'title' => t('Add new @node_type', array('@node_type' => node_type_get_name($type))),
              'href' => 'node/add/' . str_replace('_', '-', $type) . '/' . $forum_term->tid,
            ),
          );
        }
      }
      if (empty($links)) {
        // Authenticated user does not have access to create new topics.
        if ($user->uid) {
          $links['disallowed'] = array(
            '#theme' => 'menu_local_action',
            '#link' => array(
              'title' => t('You are not allowed to post new content in the forum.'),
            ),
          );
        }
        // Anonymous user does not have access to create new topics.
        else {
          $links['login'] = array(
            '#theme' => 'menu_local_action',
            '#link' => array(
              'title' => t('<a href="@login">Log in</a> to post new content in the forum.', array(
                '@login' => url('user/login', array('query' => drupal_get_destination())),
              )),
              'localized_options' => array('html' => TRUE),
            ),
          );
        }
      }
      $data['actions']['output'] = array_merge($data['actions']['output'], $links);
    }
  }
}

Я правильно понимаю что нужно добавить хук в собственный модуль? То есть добавить всю эту функцию изменив

'title' => t('<a href="@login">Log in</a> to post new content in the forum.', array .......

на нужную мне строку? или же можно хук короче сделать?

Комментарии

Аватар пользователя bumble bumble 1 февраля 2019 в 11:06

Песок мне на голову! Я не внимательно прочел описание.
Тогда - да, цепляем хук в собственном модуле, и нет - не копируем меняя, а, проверяя, выбираем нужный нам таск и меняем на необходимое значение.

Аватар пользователя Sennheiser Sennheiser 1 февраля 2019 в 14:02

нечего не могу придумать. просто сделал так:
в модуле сначала убрал выполнение функции function forum_menu_local_tasks_alter(&$data, $router_item, $root_path)

function MYMODULE_module_implements_alter(&$implementations, $hook) {
  if ($hook == 'menu_local_tasks_alter') {
    unset($implementations['forum']);
  }
}

а потом её же переопределил

function MYMODULE_menu_local_tasks_alter(&$data, $router_item, $root_path){
   
...

  }

так хоть правильно?