it-swarm-korea.com

custom_module.info의 "files []"는 양식 제출에 포함되지 않습니까?

Drupal 7 (구체적으로 Taxonomy Views Integrator ))로 포팅하는 모듈이 있으며 2 개의 포함 파일 tvi.admin.inc이 있습니다 were 모듈의 .info 파일을 통해 포함됩니다 :

files[] = includes/tvi.admin.inc

tvi.admin.inc에는 validation & submit functions을 포함하여 tvi.modulehook_form_alter()에서 사용하는 함수가 들어 있습니다.

hook_form_alter()을 사용하여 변경 한 내용은 제대로 작동하지만 after submit ​​tvi.admin.inc의 유효성 검사 및 제출 기능을 사용할 수 없으며 선언되지 않은 함수 오류가 발생합니다.

p.s.

http://drupal.org/node/224333#registry 를 통해 확장 된 .info 모듈 레지스트리의 초기 문제를 확인했으며 다음과 같이 말합니다 may 우리에게 답을 제공하십시오 :

기능 만 포함 된 파일은 .info 파일에 나열 될 필요가 없습니다.

해결 방법으로

이제 module_load_include()을 사용하여 tvi.admin.inc 맨 위에 tvi.module를로드합니다. 여기에는 제출 양식에 여전히 inc 및 유효성 검증/제출 기능이 포함됩니다.

6
electblake

. info 파일에 나열된 파일은 모듈이로드 될 때 자동으로 포함되지 않습니다. 모듈이 PHP 찾을 수없는 클래스에 대한 객체를 만들려고 할 때로드됩니다.이 경우 spl_autoload_register () 로 등록 된 콜백 Drupal 레지스트리의 내용은 객체 생성을 위해 어떤 파일을로드해야하는지 찾습니다.

함수가 포함 된 파일을로드하는 유일한 방법은 module_load_include()를 사용하는 것입니다.
로드 할 함수가 hook_form_alter() (또는 hook_form_FORM_ID_alter())로 변경된 양식에 추가되는 양식 유효성 검사 핸들러 (또는 양식 제출 핸들러) 인 특정 경우 오히려 후크를 포함하는 동일한 파일에 양식 핸들러를 유지하고 싶습니다. 기술적으로 양식이 제출 된 후 양식 핸들러가 사용되므로 파일이 필요하지 않은 경우 hook_form_alter()에 의해 파일이로드됩니다. 지금까지 코드는 작동했지만 Drupal의 이후 버전에서는 작동하지 않을 것이라고합니다.

Drupal 7을 사용하면 모듈이 hook_hook_info () 를 구현할 수 있습니다. Drupal에서 후크 구현이 정의 된 파일을 알기 위해 사용됩니다.) 시스템 모듈은 자체 구현을 정의합니다. 다음 코드가 포함되어 있습니다.

function system_hook_info() {
  $hooks['token_info'] = array(
    'group' => 'tokens',
  );
  $hooks['token_info_alter'] = array(
    'group' => 'tokens',
  );
  $hooks['tokens'] = array(
    'group' => 'tokens',
  );
  $hooks['tokens_alter'] = array(
    'group' => 'tokens',
  );

  return $hooks;
}

이 후크 구현을 통해 Drupal 모듈 custom.module에 대한 hook_tokens() 구현이 포함 된 파일을 찾을 때 custom.tokens 파일을 찾습니다. custom.module 모듈이 설치된 디렉토리에 포함되어 있습니다.
타사 모듈은 자체 hook_hook_info()를 구현할 수 있지만 Drupal 다른 모듈에서도 구현 된 후크를 찾습니다) 수정하고 있음을 기억해야합니다. 즉, hook_token_alter()에 대한 그룹을 변경하면 Drupal에서 hook_token_alter()의 구현을 찾습니다.)에서 파일이 변경됩니다.

다음과 유사한 구현을 사용하여 hook_hook_info()를 사용하여 모듈 파일과 다른 파일에 일부 후크를 유지할 수 있습니다.

function custom_hook_info() {
  return array(
    'form_alter' => array(
      'group' => 'form',
    ),
  );
}

이전에보고 한 내용은 여전히 ​​유효합니다. Drupal의 향후 버전은 hook_form_alter()의 구현을 찾을 위치를 알고 있지만 양식 핸들러가있는 위치를 찾지 못하므로 작동을 멈출 수 있습니다.
이것이 모듈 파일에 hook_form_alter() (또는 hook_form_FORM_ID_alter()) 및 모든 관련 폼 핸들러의 구현을 계속 유지하는 이유입니다.

16
kiamlaluno

수업 만 추적되고 자동으로 포함됩니다. 다른 모든 것은 수동으로 포함되어야합니다.

또한, 당신이 여기서 무엇을하고 있는지 잘 모르겠습니다. 자신의 양식을 변경할 필요가 없습니다. 둘째, _submit ()/_ validate () 콜백은 양식 함수 자체와 동일한 파일에 있어야하며 수동으로 포함시킬 필요가 없습니다.

2
Berdir