it-swarm-es.com

¿Cómo configurar programáticamente la portada?

Quiero establecer la página de inicio Drupal programáticamente en tiempo de ejecución.
¿Cómo puedo hacer esto? es posible?

22
Ek Kosmos

Puede usar variable_set() para eso.

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

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 anónima o autenticada 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);
  }
}
16
kiamlaluno

Una solución muy flexible sería usar Paneles . Se pueden presentar diferentes pantallas según cualquier criterio, y se controla a través de una interfaz de usuario.

9
tim.plunkett

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

El módulo Reglas se puede usar también para configurar la portada "programáticamente".

La regla que se creará realmente 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 , posiblemente podría 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".

1
Pierre.Vriens

Si está buscando configurar esto globalmente mediante programación, puede configurar la variable en settings.php:

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

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;
0
TvC