Réponses:
Vous pouvez l'utiliser variable_set()
pour cela.
variable_set('site_frontpage', $value);
hook_install
ou hook_update_N
ensuite devrait être bien.
Il existe un module ( Frontpage , qui est celui que j'ai maintenu) qui permet de définir une page d'accueil différente pour les utilisateurs anonymes et les utilisateurs authentifiés. Le module permet à des modules tiers de modifier la page vers laquelle les utilisateurs sont redirigés ou de modifier le tableau de structure utilisé pour rendre la page. Les modules tiers sont autorisés à modifier l'URL de redirection uniquement lorsque la page d'accueil pour anonyme ou authentifié n'a pas été définie dans le module Frontpage, ou lorsqu'une erreur s'est produite lors du chargement du nœud; le module sera probablement modifié à l'avenir pour permettre aux modules tiers de rediriger les utilisateurs vers une page spécifique qu'ils sélectionnent.
Comme alternative, vous pouvez créer un module personnalisé qui, en utilisant un code similaire à celui utilisé par Frontpage, redirige les utilisateurs vers une page spécifique, en fonction de critères spécifiques.
Le module doit implémenter hook_menu () et associer un rappel de menu à, par exemple, http://example.com/frontpage ; le rappel de page de cet élément de menu doit simplement vérifier qu'une condition est vérifiée, puis rediriger les utilisateurs vers une URL spécifique.
Le squelette de code pourrait être quelque chose de semblable au suivant:
/**
* 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);
}
}
Une solution très flexible serait d'utiliser des panneaux . Différents affichages peuvent être présentés en fonction de tous les critères et sont contrôlés via une interface utilisateur.
J'ai corrigé comme ceci:
/**
* 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
et utilise drupal_is_front_page
pour rediriger les utilisateurs, en utilisant drupal_goto
, en fonction de certaines conditions (dans ce cas $ user-> uid ne doit pas être 0)
Le module Rules peut également être utilisé pour définir la page d'accueil "par programme".
La règle à créer serait une variante de la réponse lors de la redirection des utilisateurs connectés (authentifiés) vers une page d'accueil différente à l'aide de règles ou de code php .
Et éventuellement, le combiner avec le module Flag , pourrait éventuellement améliorer encore l'expérience utilisateur. Par exemple, pour les utilisateurs connectés pour indiquer laquelle des premières pages possibles ils considèrent comme leur "favori".
Si vous cherchez à définir cela globalement par programme, vous pouvez définir la variable dans settings.php:
$conf['site_frontpage'] = 'some/custom/path';
J'ai modifié le nœud de la page d'accueil (sur les sous-domaines) en définissant la variable dans un hook_url_outbound_alter ()
variable_set('site_frontpage', $value);
Et puis rediriger:
$_GET['q'] = 'node/' . $domain_homepage_node_id;