2012-11-06 3 views
0

페이지에 양식을 표시하는 가장 좋은 방법은 궁금합니다 (예 : 차단 된 사용자가 아니라 블로그가 아니라 주 콘텐츠의 등록 양식) . user_menu에서Drupal 7 theming : hook_theme or drupal_get_form

user.module 방법 (* hook_menu *) :

$items['vip/register'] = array(
    'title' => 'Create new vip account', 
    'page callback' => 'drupal_get_form', 
    'page arguments' => array('vip_register_form'), 
    'access callback' => 'user_register_access', 
    'type' => MENU_LOCAL_TASK, 
); 

또는 (* hook_theme *) use_theme를 통해 테마를 만들어 (가상의) :

$items['vip/register'] = array(
    'title' => 'Create new vip account', 
    'page callback' => 'theme', 
    'page arguments' => array('vip_register'), 
    'access callback' => 'user_register_access', 
    'type' => MENU_LOCAL_TASK, 
); 

function user_theme() { 
    return array(
    'vip_register' => array(
    ) 
); 
} 

function theme_vip_register(){ 
    return drupal_get_form('vip_register_form'); 
} 

I 디자이너가 그래픽 통합을 이후에 할 것이기 때문에 테마 목적으로 이것을 궁금해합니다.

감사합니다.

+0

무엇이 질문입니까? –

+0

그것은 우수 사례에 관한 것이었지만 매우 구체적입니다. 결국 디자이너는 선언 된 템플릿을 선호하며 렌더링 함수 대신 렌더링 함수를 반환합니다. – pinkvoid

답변

1

이것은 실제 답변이 아니지만 처음에는 무엇이 문제인지 잘 모르겠습니다. 드루팔 (Drupal) 관습 # 1 : 핵을 해킹하지 마십시오!

그 이름대로 테마 기능은 테마 인 것입니다.입니다. 따라서 양식을 먼저 작성해야합니다. 사용자 example.com/vip/register 페이지에 액세스하면

$items['vip/register'] = array(
    'title' => 'Create new vip account', 
    'page callback' => 'drupal_get_form', 
    'page arguments' => array('vip_register_form'), 
    'access callback' => 'user_register_access', 
    'type' => MENU_LOCAL_TASK, 
); 

는 drupal_get_form 함수는 인수 vip_register_form으로 호출된다.

이제는 (vip 사용자 등록) 양식을 반환하는 함수를 정의해야합니다. 귀빈 레지스터 페이지를 열

function vip_register_form($form, &$form_state){ 
    ..your FAPI stuff here. 
    return $form; 
} 

이제 사용자는이 양식 일반 양식 대신을 볼 수 있습니다. 암호 및 사용자 이름 필드도 추가하지 않으면 사용할 수 없습니다. 기존 양식을 변경하려는 경우, 단지 새로운 경로로 메뉴 후크를 복사

$user_menu_routers = user_menu(); 
$items['vip/register'] = $user_menu_routers['user/register']; 

이제 (일반 사용자 등록 페이지와 동일) 페이지 A를 사용하여 등록/VIP에 당신의 형태를 변경할 수 있습니다 form_alter 후크. 기존 테마에도 영향을 미치지 않고 수동으로 테마를 테마화할 수 있습니다.