Drupal 7: разрешить доступ на домашнюю страницу только анонимным посетителям

#drupal-7

#drupal-7

Вопрос:

Я создаю систему администрирования на drupal 7. Я не разрешаю анонимным пользователям просматривать опубликованный контент (по понятным причинам), но я хотел бы разрешить им просматривать только одну страницу, домашнюю страницу, на которой есть приветственное сообщение и форма входа. Как я могу это сделать?

Ответ №1:

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

 mymodule_menu(){
  $items['homepage']=array(
    'title' => 'Home'
    'page callback' => 'mymodule_homepage',
    'access callback' => true,
    'type' => MENU CALLBACK,
  );
  $items['homepage/edit']=array(
    'title' => 'Edit Homepage'
    'page callback' => 'drupal_get_form',
    'page arguments' => array('mymodule_homepage_edit'),
    'access arguments' => array('administer site configuration'),
    'type' => MENU CALLBACK,
  );
}
function mymodule_homepage(){
  return variable_get('homepage_content',''); 
}
function mymodule_homepage_edit(){
  $form['body']=array(
    '#type' => 'textfield',
    '#title' => 'Body',
  );
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => 'Submit
  );
}
function mymodule_homepage_edit_submit($form, $form_state=array()){
  variable_set('homepage_content',$form_state['values']['body']);
}
  

вам нужен файл .info для модуля с drupal, без излишеств, достаточно понятный, если вы просто откроете его из другого модуля, чтобы посмотреть, как они выглядят.

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

Комментарии:

1. Я бы не знал, как создать модуль, но я попробую. Большое спасибо!

2. на самом деле это довольно просто, просто создайте папку с именем, которое вы хотели бы присвоить своему модулю… скажите «MySiteMod», затем создайте файл внутри этой папки с именем «MySiteMod.module», затем скопируйте приведенный выше код в этот файл между <?php ?> тегами, заменив все экземпляры «mymodule» на «MySiteMod», затем создайте еще один файл с именем «MySiteMod.info «, и, как я уже сказал, просто посмотрите на другой информационный файл модулей, чтобы увидеть, как они написаны, вам просто нужны первые несколько строк, которые определяют имя и номер версии и т.д.

Ответ №2:

Мне нравится ответ Трея, но вы можете сделать это еще проще.

 function mymodule_menu(){
  $items['homepage']=array(
    'title' => 'Home',
    'page callback' => 'mymodule_homepage',
    'access callback' => TRUE,
  );
}
function mymodule_homepage(){
  drupal_set_title(t('Some welcoming title'));
  return array();
}
  

Это дает вам пустую страницу для всех пользователей. Затем создайте блок, показываемый только анонимным пользователям и только на главной странице («»). При необходимости создайте другие блоки для других ролей. Таким образом, вам не нужна никакая специальная команда для ее редактирования.

Спасибо Trey за подтверждение того, что основного способа сделать это не существует. (Вы можете использовать модули node access или front page, но я не пробовал их, потому что они слишком легкие.)

Ответ №3:

Я думаю, что этот модуль может предоставить то, что вам нужно. С его помощью вы можете включить настройки доступа к контенту для каждого узла контента, так что вы можете настроить доступ для каждого узла контента.