Risposte:
Puoi usarlo variable_set()
per questo.
variable_set('site_frontpage', $value);
hook_install
o hook_update_N
poi dovrebbe andare bene.
Esiste un modulo ( Frontpage , che è quello che ho mantenuto) che consente di impostare una prima pagina diversa per utenti anonimi e utenti autenticati. Il modulo consente ai moduli di terze parti di modificare la pagina a cui vengono invece reindirizzati gli utenti o di modificare l'array della struttura utilizzato per eseguire il rendering della pagina. I moduli di terze parti sono autorizzati a modificare l'URL di reindirizzamento solo quando la pagina iniziale per anonimo o autenticato non è stata impostata nel modulo Frontpage o quando si è verificato un errore durante il caricamento del nodo; il modulo verrà probabilmente modificato in futuro per consentire ai moduli di terze parti di reindirizzare gli utenti a una pagina specifica selezionata.
In alternativa, è possibile creare un modulo personalizzato che, utilizzando un codice simile a quello utilizzato da Frontpage, reindirizza gli utenti a una pagina specifica, basandosi su criteri specifici.
Il modulo dovrebbe implementare hook_menu () e associare un callback di menu, ad esempio, http://example.com/frontpage ; il callback di quella voce di menu dovrebbe semplicemente verificare che una condizione sia verificata, quindi reindirizzare gli utenti a un URL specifico.
Lo scheletro del codice potrebbe essere qualcosa di simile al seguente:
/**
* 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 soluzione molto flessibile sarebbe quella di utilizzare i pannelli . Display diversi possono essere presentati in base a qualsiasi criterio ed è controllato tramite un'interfaccia utente.
Ho risolto in questo modo:
/**
* 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
e usa drupal_is_front_page
per reindirizzare gli utenti, usando drupal_goto
, in base a una condizione (in questo caso $ user-> uid non dovrebbe essere 0)
Il modulo Regole può essere utilizzato anche per impostare la pagina iniziale "a livello di programmazione".
La regola effettivamente da creare, sarebbe una variante della risposta di Redirect che ha effettuato l'accesso (autenticato) agli utenti a una prima pagina diversa usando le regole o il codice php .
E opzionalmente combinandolo con il modulo Flag , potrebbe eventualmente migliorare ulteriormente l'esperienza dell'utente. Ad esempio per gli utenti che hanno effettuato l'accesso per indicare quale delle possibili prime pagine considerano il loro "preferito".
Se stai cercando di impostarlo programmaticamente a livello globale, puoi impostare la variabile in settings.php:
$conf['site_frontpage'] = 'some/custom/path';
Ho modificato il nodo della home page (nei sottodomini) impostando la variabile in hook_url_outbound_alter ()
variable_set('site_frontpage', $value);
E quindi reindirizzare:
$_GET['q'] = 'node/' . $domain_homepage_node_id;