it-swarm.it

Come impostare programmaticamente la prima pagina?

Voglio impostare la Drupal prima pagina a livello di codice in fase di esecuzione.
Come posso fare questo? È possibile?

22
Ek Kosmos

Puoi usare variable_set() per questo.

variable_set('site_frontpage', $value);
22
Rafael Caceres

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 una richiamata del 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);
  }
}
16
kiamlaluno

Una soluzione molto flessibile sarebbe quella di usare pannelli . Display diversi possono essere presentati in base a qualsiasi criterio ed è controllato tramite un'interfaccia utente.

9
tim.plunkett

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);
  }
}
4
r0ber

Il modulo Rules può essere utilizzato anche per impostare la pagina iniziale "a livello di programmazione".

La regola effettivamente da creare, sarebbe una variazione della risposta su Reindirizzare gli utenti registrati (autenticati) su 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 la loro "preferita".

1
Pierre.Vriens

Se stai cercando di impostarlo programmaticamente a livello globale, puoi impostare la variabile in settings.php:

$conf['site_frontpage'] = 'some/custom/path';
1

Ho modificato il nodo della home page (nei sottodomini) impostando la variabile in un hook_url_outbound_alter ()

variable_set('site_frontpage', $value);

E quindi reindirizzare:

$_GET['q'] = 'node/' . $domain_homepage_node_id;
0
TvC