Ответы:
Вы можете использовать variable_set()
для этого.
variable_set('site_frontpage', $value);
hook_install
или hook_update_N
тогда должно быть хорошо.
Существует модуль ( Frontpage , который я поддерживал), который позволяет устанавливать разные титульные страницы для анонимных пользователей и аутентифицированных пользователей. Модуль позволяет сторонним модулям изменять страницу, на которую вместо этого перенаправляются пользователи, или изменять структурный массив, используемый для отображения страницы. Сторонним модулям разрешается изменять URL-адрес перенаправления только в том случае, если в модуле Frontpage не была задана титульная страница для анонимного или аутентифицированного или когда произошла ошибка во время загрузки узла; модуль, вероятно, будет изменен в будущем, чтобы сторонние модули могли перенаправлять пользователей на определенную страницу, которую они выбирают.
В качестве альтернативы вы можете создать собственный модуль, который, используя код, похожий на тот, который используется Frontpage, перенаправляет пользователей на определенную страницу, основываясь на определенных критериях.
Модуль должен реализовывать hook_menu () и связывать обратный вызов меню, например, с 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';
Я изменил узел домашней страницы (на поддоменах), установив переменную в hook_url_outbound_alter ()
variable_set('site_frontpage', $value);
И затем перенаправление:
$_GET['q'] = 'node/' . $domain_homepage_node_id;