it-swarm-eu.dev

Jak programově nastavit přední stránku?

Chci nastavit úvodní stránku Drupal) programově v době spuštění.
Jak to mohu udělat? Je to možné?

22
Ek Kosmos

K tomu můžete použít variable_set() .

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

Existuje modul ( Frontpage , což je ten, který jsem udržoval), který umožňuje nastavit jinou přední stránku pro anonymní uživatele a ověřené uživatele. Modul umožňuje modulům třetích stran změnit stránku, na kterou jsou uživatelé místo toho přesměrováni, nebo změnit pole struktury použité k vykreslení stránky. Moduly třetích stran mohou změnit přesměrovací adresu URL, pouze pokud nebyla v rámci modulu Frontpage nastavena přední stránka pro anonymní nebo ověřenou totožnost, nebo pokud během načítání uzlu došlo k chybě; modul se pravděpodobně v budoucnu pravděpodobně změní, aby moduly třetích stran mohly uživatele přesměrovat na konkrétní stránku, kterou vyberou.

Jako alternativu můžete vytvořit vlastní modul, který pomocí kódu podobného tomu, který používá aplikace Frontpage, přesměrovává uživatele na konkrétní stránku, založenou na konkrétních kritériích.

Modul by měl implementovat hook_menu () a přiřadit zpětné volání nabídky, například http://example.com/frontpage ; zpětné volání této položky nabídky by mělo jednoduše ověřit, že je ověřena podmínka, a poté uživatele přesměrovat na konkrétní adresu URL.

Kostra kódu by mohla být něco podobného následujícímu:

/**
 * 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

Velmi flexibilním řešením by bylo použití Panels . Různé displeje mohou být prezentovány na základě jakýchkoli kritérií a jsou řízeny pomocí uživatelského rozhraní.

9
tim.plunkett

Opravil jsem to takto:

/**
 * 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

Modul Rules lze použít také k nastavení úvodní stránky "programově".

Skutečným pravidlem, které má být vytvořeno, by byla variace odpovědi u uživatelů přesměrování přihlášených (ověřených) uživatelů na jinou frontpage pomocí pravidel nebo php kód .

A případně jeho kombinace s modulem Flag , by možná ještě více zlepšila uživatelský dojem. Např. Pro přihlášené uživatele uveďte, které z možných titulních stránek považují za své „oblíbené“.

1
Pierre.Vriens

Pokud to chcete programově nastavit globálně, můžete nastavit proměnnou v settings.php:

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

Uzel domovské stránky (na subdoménách) jsem změnil nastavením proměnné v hook_url_outbound_alter ()

variable_set('site_frontpage', $value);

A pak přesměrování:

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