如何以编程方式设置首页?


Answers:


22

您可以使用variable_set()它。

variable_set('site_frontpage', $value);

18
这是正确的,但这不是应该过于频繁或基于使用操作来进行的事情。调用variable_set()始终会导致“ cache_clear_all('variables','cache_bootstrap');”;因此下一个请求将需要从数据库中重新获取变量和引导信息。
Berdir 2011年

1
@Berdir-这会以某种方式影响网站性能吗?
Ek Kosmos

7
是的,这会影响性能,cache_bootstrap包含多个只能随时间重新生成的缓存,例如挂钩实现。替代解决方案是使用视图,面板或自定义模块在首页上动态显示内容。例如,您可以构建一个视图以显示内容类型的最新节点,然后将site_frontpage指向该视图。
2011年

hook_installhook_update_N之后使用此选项应该没问题。
leymannx

16

有一个模块(Frontpage,我维护了一个模块),该模块允许为匿名用户和经过身份验证的用户设置不同的首页。该模块允许第三方模块更改将用户重定向到的页面,或更改用于呈现页面的结构数组。仅当未在Frontpage模块中设置匿名或已认证的首页或在节点加载过程中发生错误时,才允许第三方模块更改重定向URL。该模块将来可能会更改,以允许第三方模块将用户重定向到他们选择的特定页面。

或者,您可以创建一个自定义模块,该模块使用类似于Frontpage的代码,根据特定条件将用户重定向到特定页面。

该模块应实现hook_menu()并将菜单回调关联到例如http://example.com/frontpage;该菜单项的页面回调应仅验证条件是否经过验证,然后将用户重定向到特定的URL。

代码框架可能类似于以下内容:

/**
 * 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);
  }
}

9

一个非常灵活的解决方案是使用Panels。可以基于任何标准来呈现不同的显示,并且可以通过UI进行控制。


4

我固定像这样:

/**
 * 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);
  }
}

1
你好。很高兴与您分享您的代码。如果您能告诉我们您的代码如何对其进行修复,那就更好了。您知道,如果出于某些原因复制粘贴的代码对他们不起作用,则可以推理其他人。
Mołot

@molot-此方法应添加到您的自定义模块中,实现hook_page_alter并用于根据某种条件使用drupal_is_front_page来重定向用户drupal_goto(在这种情况下,$ user-> uid不应为0)
commonpike 2015年

@commonpike这不是我不理解。我的评论是关于答案的整体质量的,尤其是对于新手,经验不足的用户的可用性。
Mołot



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.