Drupal 첫 페이지를 프로그래밍 방식으로 런타임에 설정하고 싶습니다.
어떻게해야합니까? 이것이 가능한가?
답변
사용할 수 있습니다 variable_set()
.
variable_set('site_frontpage', $value);
답변
익명 사용자와 인증 된 사용자에 대해 다른 프론트 페이지를 설정할 수 있는 모듈 ( 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);
}
}
답변
매우 유연한 솔루션은 패널 을 사용하는 것 입니다. 기준에 따라 다른 디스플레이를 제공 할 수 있으며 UI를 통해 제어됩니다.
답변
나는 이렇게 고쳤다.
/**
* 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);
}
}
답변
규칙 모듈은 “프로그래밍 방식”에서 FrontPage를 설정하는 데 사용할 수 있습니다.
실제로 생성 되는 규칙은 rules 또는 php code를 사용하여 로그인 한 (인증 된) 사용자를 다른 첫 페이지 로 리디렉션 하는 답변의 변형입니다 .
선택적으로이를 플래그 모듈 과 결합 하면 사용자 경험을 더욱 향상시킬 수 있습니다. 예를 들어, 로그인 한 사용자가 “선호”로 간주하는 가능한 첫 페이지를 표시합니다.
답변
프로그래밍 방식으로 전역 적으로 설정하려는 경우 settings.php에서 변수를 설정할 수 있습니다.
$conf['site_frontpage'] = 'some/custom/path';
답변
hook_url_outbound_alter () 에서 변수를 설정하여 하위 도메인의 홈페이지 노드를 변경했습니다.
variable_set('site_frontpage', $value);
그리고 리디렉션 :
$_GET['q'] = 'node/' . $domain_homepage_node_id;