Antworten:
Sie können dafür verwenden variable_set()
.
variable_set('site_frontpage', $value);
hook_install
oder hook_update_N
dann sollte in Ordnung sein.
Es gibt ein Modul ( Frontpage , das ich gepflegt habe), mit dem Sie eine andere Frontpage für anonyme Benutzer und authentifizierte Benutzer einrichten können. Das Modul ermöglicht es Modulen von Drittanbietern, die Seite zu ändern, zu der die Benutzer umgeleitet werden, oder das Strukturarray zu ändern, das zum Rendern der Seite verwendet wird. Module von Drittanbietern dürfen die Umleitungs-URL nur ändern, wenn die Startseite für anonym oder authentifiziert im Frontpage-Modul nicht festgelegt wurde oder wenn beim Laden des Knotens ein Fehler aufgetreten ist. Das Modul wird wahrscheinlich in Zukunft geändert, damit Module von Drittanbietern die Benutzer zu einer bestimmten von ihnen ausgewählten Seite umleiten können.
Alternativ können Sie ein benutzerdefiniertes Modul erstellen, das mit einem Code ähnlich dem von Frontpage verwendeten Code Benutzer auf eine bestimmte Seite umleitet, wobei bestimmte Kriterien zugrunde gelegt werden.
Das Modul sollte hook_menu () implementieren und einen Menü-Callback beispielsweise mit http://example.com/frontpage verknüpfen . Der Seitenrückruf dieses Menüelements sollte einfach überprüfen, ob eine Bedingung überprüft wurde, und die Benutzer dann zu einer bestimmten URL umleiten.
Das Code-Gerüst könnte etwa so aussehen:
/**
* 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);
}
}
Eine sehr flexible Lösung wäre die Verwendung von Panels . Verschiedene Anzeigen können basierend auf beliebigen Kriterien dargestellt und über eine Benutzeroberfläche gesteuert werden.
Das habe ich so behoben:
/**
* 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
und verwendet werden sollte drupal_is_front_page
, um Benutzer umzuleiten, unter Verwendung von drupal_goto
(in diesem Fall sollte $ user-> uid nicht 0 sein)
Das Modul Regeln kann auch verwendet werden, um die Startseite "programmgesteuert" einzustellen.
Die tatsächlich zu erstellende Regel wäre eine Variation der bei Redirect angemeldeten (authentifizierten) Benutzer auf eine andere Startseite mittels Regeln oder PHP-Code .
Wenn Sie es optional mit dem Flag- Modul kombinieren , wird die Benutzerfreundlichkeit möglicherweise weiter verbessert. ZB für eingeloggte Benutzer, um anzugeben, welche der möglichen Frontpages sie als "Favorit" betrachten.
Wenn Sie dies global programmgesteuert festlegen möchten, können Sie die Variable in settings.php festlegen:
$conf['site_frontpage'] = 'some/custom/path';
Ich habe den Homepage-Knoten (auf Subdomains) geändert, indem ich die Variable in a gesetzt habe hook_url_outbound_alter () gesetzt habe.
variable_set('site_frontpage', $value);
Und dann umleiten:
$_GET['q'] = 'node/' . $domain_homepage_node_id;