2010-05-05 2 views
4

새로운 모듈 'foo'는 하나 이상의 새로운 콘텐츠 형식을 정의 할 수있는 foo_node_info()을 구현합니다.동일한 모듈에 정의 된 여러 콘텐츠 유형에 대한 hook_form

콘텐츠 유형 'footypea'와 콘텐츠 유형 'footypeb'의 두 가지 콘텐츠 유형을 정의하는 경우 hook_form() (각 "hook"의 이름은 무엇이되어야합니까?)을 구현하는 방법은 무엇입니까? 양식 편집?

drupal example에서 새 콘텐츠 형식의 이름은 모듈 이름과 동일합니다. 위에서 설명한 두 개의 새로운 콘텐츠 형식이 모듈에 정의 된 예제에서는 어떻게됩니까?

구현 된 hook_form() 함수의 형식은 footypea_form() 및 footypeb_form()입니까? (이것은 작동하지 않는 것 같습니다)

또는 하나의 foo_form() 함수를 구현해야하며이 클래스 내에 $ form [ 'footypea'] 및 $ form [ 'footypeb'] 요소가있는 배열 $ form을 반환해야합니다. 차례로 개별 양식 필드 정의의 배열입니까?

답변

3

모듈의 hook_node_info()에 'module' 속성을 추가하십시오 (http://api.drupal.org/api/function/hook_node_info/6 참조). 예를 들어

:

/** 
* Implementation of hook_node_info(). 
*/ 
function foo_node_info() { 
    return array(
    'footypea' => array(
     'name' => t('Foo Type A'), 
     'description' => t('This is Foo Type A'), 
     'module' => 'footypea', //This will be used for hook_form() 
    ), 
    'footypeb' => array(
     'name' => t('Foo Type B'), 
     'description' => t('This is Foo Type B'), 
     'module' => 'footypeb', //This will be used for hook_form() 
    ), 
); 
} 

지금 당신이 ( http://api.drupal.org/api/function/hook_form/6 참조) 각 유형에 대해 다음 hook_form() 구현을 추가 할 수 있습니다. 여기

/** 
* Implementation of hook_form(). 
*/ 
function footypea_form(&$node, $form_state) { 
    // Define the form for Foo Type A 
} 

/** 
* Implementation of hook_form(). 
*/ 
function footypeb_form(&$node, $form_state) { 
    // Define the form for Foo Type B 
} 

트릭 hook_node_info() 각 요소의 모듈 재산권 hook_node_info()를 구현하는 모듈과 동일 할 필요가 없다는 점이다. 정의 된 각 유형은 유형 특정 후크를 구현하기위한 고유 한 모듈 특성을 가질 수 있습니다.

+0

+1 : 그렇습니다. 이는 사실이며 다른 콘텐츠 유형별 후크에도 해당됩니다. 'footypea_access ($ op, $ node, $ account)','footypeb_access ($ op, $ node, $ account)','footypea_validate ($ node, & $ form)','footypeb_validate ($ node, & $ form) ($ node)','footypeb_install ($ node)','footypea_update ($ node)'','footypea_insert ($ node)','footypea_delete ($ node)'' 기타 – Sk8erPeter

0

노드 유형이 무엇인지는 중요하지 않습니다. Drupal에서 후크를 구현할 때 첫 번째 부분은이를 만드는 모듈의 이름입니다. 여기 foo 모듈은 foo_form()에서 hook_form()을 구현합니다.

그건 그렇고 쉽기 때문에 드루팔 (Drupal 7)이 나오기 때문에 CCK에서 콘텐츠 유형을 확인해야합니다.

관련 문제