Как «отобразить» ссылки меню на неавторизованный контент в Drupal 6?

StackOverflow https://stackoverflow.com/questions/1218879

  •  10-07-2019
  •  | 
  •  

Вопрос

Модуль меню Drupal 6 скрывает ссылки на контент, доступ к которому у текущего пользователя отсутствует. Это имеет смысл, но бывают случаи, когда вы хотите, чтобы ссылки отображались и переходили на страницу «вы не авторизованы для просмотра этого контента» (например, в маркетинговых целях).

Есть ли простой способ показать эти ссылки? Я понимаю, что предыдущие версии Drupal фактически требовали от вас загрузки модуля, чтобы скрыть ссылки на неавторизованные страницы!

Это было полезно?

Решение 7

Я нашел модуль, который на самом деле, кажется, обеспечивает необходимую мне функциональность:

http: // blog .davereid.net / содержание / с ограниченным содержанием-но-другому-другому-Друпал-узел доступа-модуль

Это действительно просто, он просто добавляет селектор на каждой странице создания узла, где вы можете выбрать, какие роли будут иметь к нему доступ. Любой, кто не будет по-прежнему видеть ссылку меню, и это приведет к пользовательской странице «Вы должны зарегистрироваться, чтобы просмотреть эту» страницу. Я установил его на тестовом сайте Drupal, и, похоже, он работает нормально; позор, я не нашел это пару недель назад!

Другие советы

Так было всегда (по крайней мере, с 4.7).

Вы не можете отобразить неавторизованные пункты меню из коробки. Там может быть специальный модуль, хотя ...

Что вы можете сделать, это позволить странице меню указывать на функцию, которая перенаправляет на страницу, на которую вы хотите, чтобы ваше меню указывало. Это не идеально во многих отношениях, но так как все могут получить доступ к функции, которая выполняет перенаправление, это должно работать. Вы можете просто поместить этот код в пользовательский модуль, который вы делаете.

Нет способа сделать это в Drupal по умолчанию, и я не знаю ни о каких добавленных модулях, обеспечивающих эту функциональность.

На ум приходят два решения, чтобы легко .

<Ол>
  • При минимальном кодировании нужно скрыть реальный пункт меню и сделать его невидимым, а затем сделать страницу с кодом PHP, который перенаправляет на нужный пункт меню, если у пользователя есть доступ, и показать какой-то другой текст для людей, которые нет. Затем просто создайте пункт меню, который указывает на ваш узел.

  • Включает больше кодирования, но, вероятно, оно будет более надежным. Просто создайте свой собственный базовый модуль с hook_menu , который имеет проверку доступа, противоположную реальной пункт меню вместе с небольшой функцией обратного вызова меню с текстом, который вы хотите показать непривилегированным пользователям.

  • Если вы хотите сделать это для многих пунктов меню, нужно найти более гибкое решение для правильного управления им.

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

    hook_view($node, $teaser = FALSE, $page = FALSE)
    

    вы можете отказаться от доступа к определенным узлам.

    надеюсь, что это полезно.

    В конце концов я сделал это немного по-другому, создав таксономию для " open " или "ограниченный" содержание, и поместите это в заголовок моей темы:

    <?php
    
    global $user;
    
    //if the user is not logged in, and the node is in taxonomy term "restricted"
    //redirect them to the login page
    foreach ($node->taxonomy as $tax){
      if ($tax->name == "Restricted" && !$user->uid){
        $query = 'destination=node/'.$node->nid;
        drupal_goto('please-login-continue',$query);  
      }
    }
    ?>
    

    / please-login - это страница, которую я создал, которая содержит все обычные формы входа / регистрации. Кажется, до сих пор у меня все нормально работало!

    Примечание: Если люди намеренно отключают перенаправление в своем браузере, они не будут перенаправлены, однако, когда я попытался в Opera с перенаправлением, отключил страницу, загруженную до точки, где перенаправление пыталось случиться, а потом ничего не делать - так что содержание в этом случае все еще ограничено.

    В последнее время, но я так и решил:

    /**
     * Implementation of hook_menu()
     */
    function mr_gm_menu() {
    
        $items = array();
    
        $items['x'] = array(
            'title' => 'X',        
            'page callback' => 'x_view',
            'access arguments' => array('access content'), 
            'type' => MENU_NORMAL_ITEM,
            'menu_name' => 'main-menu',
            'weight' => 10,
        );  
    
        return $items;
    }
    
    function x_view(){
    
      global $user;
    
      if ($user->uid):
        drupal_goto('node/add/X');
      else:
        drupal_goto('user');    
      endif;
    
      return;
    }
    
    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top