Respuestas:
Puedes usar variable_set()
para eso.
variable_set('site_frontpage', $value);
hook_install
o hook_update_N
entonces debería estar bien.
Hay un módulo ( Frontpage , que es uno que mantuve) que permite configurar una página principal diferente para usuarios anónimos y usuarios autenticados. El módulo permite que los módulos de terceros modifiquen la página a la que se redirige a los usuarios, o que modifiquen la matriz de estructura utilizada para representar la página. Los módulos de terceros pueden cambiar la URL de redireccionamiento solo cuando la página de inicio para anónimos o autenticados no se ha configurado dentro del módulo de Frontpage, o cuando ha habido un error durante la carga del nodo; el módulo probablemente se cambiará en el futuro para permitir que los módulos de terceros redirijan a los usuarios a una página específica que seleccionen.
Como alternativa, puede crear un módulo personalizado que, utilizando un código similar al utilizado por Frontpage, redirija a los usuarios a una página específica, basándose en criterios específicos.
El módulo debe implementar hook_menu () y asociar una devolución de llamada de menú a, por ejemplo, http://example.com/frontpage ; la devolución de llamada de la página de ese elemento del menú simplemente debe verificar que se verifique una condición y luego redirigir a los usuarios a una URL específica.
El esqueleto del código podría ser algo similar a lo siguiente:
/**
* 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);
}
}
Una solución muy flexible sería utilizar paneles . Se pueden presentar diferentes pantallas según cualquier criterio, y se controla a través de una interfaz de usuario.
Lo arreglé así:
/**
* 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
y utiliza drupal_is_front_page
para redirigir a los usuarios, utilizando drupal_goto
, en función de alguna condición (en este caso $ user-> uid no debería ser 0)
El módulo de Reglas también se puede usar para configurar la portada "programáticamente".
La regla que se creará en realidad, sería una variación de la respuesta en Redirigir a los usuarios registrados (autenticados) a una página principal diferente usando reglas o código php .
Y, opcionalmente, combinarlo con el módulo Flag podría posiblemente mejorar aún más la experiencia del usuario. Por ejemplo, para los usuarios registrados para indicar cuáles de las posibles portadas consideran que son sus "favoritos".
Si está buscando configurar esto globalmente mediante programación, puede configurar la variable en settings.php:
$conf['site_frontpage'] = 'some/custom/path';
He alterado el nodo de la página de inicio (en subdominios) configurando la variable en un hook_url_outbound_alter ()
variable_set('site_frontpage', $value);
Y luego redireccionando:
$_GET['q'] = 'node/' . $domain_homepage_node_id;