Как «отобразить» ссылки меню на неавторизованный контент в Drupal 6? - PullRequest
3 голосов
/ 02 августа 2009

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

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

Ответы [ 7 ]

1 голос
/ 16 декабря 2010

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

<?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 с перенаправлением, отключил страницу, загруженную до точки, где пыталось перенаправить и затем ничего после этого - так что содержание в этом случае все еще ограничено.

1 голос
/ 14 февраля 2011

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

/**
 * 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;
}
1 голос
/ 04 августа 2009

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

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

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

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

1 голос
/ 04 августа 2009

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

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

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

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

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

1 голос
/ 03 августа 2009

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

1 голос
/ 02 августа 2009

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

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

0 голосов
/ 06 августа 2009

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

http://blog.davereid.net/content/restricted-content-yet-another-different-drupal-node-access-module

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

...