Відповіді:
Ви можете використовувати variable_set()
для цього.
variable_set('site_frontpage', $value);
hook_install
або hook_update_N
тоді повинно бути добре.
Існує модуль ( Frontpage , який є одним із них, який я підтримував), який дозволяє встановлювати різні титульні сторінки для анонімних користувачів та аутентифікованих користувачів. Модуль дозволяє стороннім модулям змінювати сторінку, на яку користувачі замість цього перенаправлені, або змінювати структуру масиву, який використовується для візуалізації сторінки. Сторонні модулі дозволяють змінювати URL-адресу перенаправлення лише тоді, коли титульна сторінка для анонімного або автентифікованого не була встановлена в модулі Frontpage або коли сталася помилка під час завантаження вузла; Модуль, ймовірно, буде змінено в майбутньому, щоб сторонні модулі могли перенаправляти користувачів на певну сторінку, яку вони обрали.
В якості альтернативи ви можете створити спеціальний модуль, який, використовуючи код, аналогічний тому, який використовується Frontpage, перенаправляє користувачів на певну сторінку, спираючись на конкретні критерії.
Модуль повинен реалізовувати прив'язку_меню () та пов'язувати зворотний виклик меню, наприклад, http://example.com/frontpage ; зворотний виклик сторінки цього пункту меню повинен просто перевірити, чи підтверджена умова, а потім перенаправити користувачів на певну URL-адресу.
Скелет коду може бути чимось подібним до наступного:
/**
* Implements hook_menu().
*/
function mymodule_menu() {
$items = array();
$items['frontpage'] = array(
'page callback' => 'mymodule_frontpage_view',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
function mymodule_frontpage_view() {
// These variables can be useful to redirect the users
// to specific pages, basing on the language currently set for
// the content, or on the fact the user is logged in.
$langcode = $GLOBALS['language_content']->language;
$logged_in = user_is_logged_in();
if ($condition) {
drupal_goto($redirect);
}
}
Дуже гнучким рішенням буде використання панелей . Різні дисплеї можуть бути представлені на основі будь-яких критеріїв і керуватися через інтерфейс користувача.
Я виправив так:
/**
* Implements hook_page_alter.
* @param type $page
*/
function my_module_page_alter(&$page){
global $user;
$is_fron_page = drupal_is_front_page();
if($is_fron_page && $user->uid){
$redirect = 'users/'.$user->name.'/my-argument';
drupal_goto($redirect);
}
}
hook_page_alter
та застосувань drupal_is_front_page
для перенаправлення користувачів, використовуючи drupal_goto
, виходячи з певної умови (у цьому випадку $ user-> uid не має бути 0)
Модуль « Правила» також може бути використаний для встановлення фасадної сторінки «програмно».
Насправді правило, яке буде створене, буде варіантом відповіді на Redirect, який увійшов (автентифіковано) користувачів на іншу титульну сторінку, використовуючи правила або php-код .
І, можливо, комбінування його з модулем " Прапор" може, можливо, ще більше покращити роботу користувачів. Наприклад, для користувачів, які ввійшли в систему, щоб вказати, який із можливих фронтальних сторінок вони вважають своїм "улюбленим".
Якщо ви хочете програмно встановити це глобально, ви можете встановити змінну в settings.php:
$conf['site_frontpage'] = 'some/custom/path';
Я змінив вузол домашньої сторінки (для субдоменів), встановивши змінну в moll_url_outbound_alter ()
variable_set('site_frontpage', $value);
А потім переадресація:
$_GET['q'] = 'node/' . $domain_homepage_node_id;