it-swarm-eu.dev

Nejsou „soubory []“ z custom_module.info zahrnuty do odeslaných formulářů?

Mám modul, ke kterému se připojuji Drupal 7 (konkrétně Taxonomy Views Integrator )) a jsou zde 2 zahrnout soubory _tvi.admin.inc_ které - byly zahrnuty prostřednictvím souboru .info modulu:

_files[] = includes/tvi.admin.inc_

V _tvi.admin.inc_ jsou uloženy funkce, které používá _tvi.module_ hook_form_alter(), včetně validace & odeslaných funkcí

Přestože změny provedené pomocí hook_form_alter() fungují správně, po odeslání nejsou funkce ověření a odeslání v _tvi.admin.inc_ k dispozici a vyvolávají nehlášenou chybu funkce.

p.s.

Původní vydání rozšířeného registru modulů .info jsem zkontroloval prostřednictvím: http://drupal.org/node/224333#registry a uvádí následující, který může odpovězte nám:

Soubory obsahující pouze funkce nemusí být uvedeny v souboru .info.

Jako řešení,

Nyní používám module_load_include() k načtení _tvi.admin.inc_ v horní části _tvi.module_, které ve formuláři odeslání stále obsahuje inc a tedy funkce validace/předložení.

6
electblake

Soubory uvedené v souborech . Info nejsou při načítání modulu automaticky zahrnuty; načtou se, když se modul pokusí vytvořit objekt pro třídu, která PHP nenalezne. V tom případě zpětné volání zaregistrované u spl_autoload_register () zkontroluje obsah registru Drupal) k nalezení souboru, který je třeba načíst, aby bylo možné vytvořit objekt.

Jediným způsobem, jak načíst soubor obsahující funkci, je použít module_load_include().
V konkrétním případě, kde je funkcí načtení obsluha validace formuláře (nebo obsluha odesílání formuláře), která je přidána do formuláře změněného pomocí hook_form_alter() (nebo hook_form_FORM_ID_alter()) , Raději bych zpracoval popisovače formulářů ve stejném souboru obsahujícím implementaci zavěšení. Technicky je soubor načten hook_form_alter(), pokud to není nutné, protože popisovače formulářů se používají po odeslání formuláře; kód zatím fungoval, ale není řečeno, že by to v budoucích verzích Drupalu nefungovalo.

Drupal 7 umožňuje modulům implementovat hook_hook_info () , který se používá od Drupal k určení, ve kterých souborech jsou implementovány implementace háčků. Systémový modul definuje svou vlastní implementaci, který obsahuje následující kód:

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;
}

Při této implementaci zavěšení, když Drupal hledá soubor obsahující implementaci hook_tokens() pro modul custom.module, bude hledat soubor custom.tokens. inc obsažené v adresáři, kde je nainstalován modul custom.module.
Moduly třetích stran mohou implementovat své vlastní hook_hook_info(), ale je třeba si uvědomit, že upravují kde Drupal hledá háček implementovaný jinými moduly také , což znamená, že změna skupiny pro hook_token_alter() změní soubory, kde Drupal hledá jakoukoli implementaci hook_token_alter().

Je možné použít hook_hook_info() k uchování některých háčků v souboru, který se liší od souboru modulu, pomocí implementace podobné následující:

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

To, co jsem dříve nahlásil, je stále platné; budoucí verze Drupal by mohly přestat fungovat, protože nenajdou, kde jsou obsluhy formulářů, přestože vědí, kde najít implementaci hook_form_alter()).
To je důvod, proč si stále dávám implementaci implementace hook_form_alter() (nebo hook_form_FORM_ID_alter()) a všech souvisejících manipulátorů formulářů do souboru modulu.

16
kiamlaluno

Sledovány jsou pouze třídy a jsou automaticky zahrnuty. Všechno ostatní musí být zahrnuto ručně.

Také si nejsem opravdu jistý, co tady děláte, nemusíte měnit své vlastní formy. Za druhé, zpětná volání _submit ()/_ validate () by měla být ve stejném souboru jako samotná funkce formuláře, pak je nemusíte vkládat ručně.

2
Berdir