Estou desenvolvendo um módulo, mas os ganchos que estou adicionando não são invocados no Drupal. Isso acontece com mais de um gancho.
Eu li a documentação dos ganchos e não consigo encontrar nada que explique por que isso acontece. Eu verifiquei que estou usando os parâmetros corretos e retornando o valor correto.
O que estou fazendo errado? Falta alguma coisa?
Respostas:
Ao desenvolver um módulo, lembre-se das seguintes notas.
A implementação de um gancho feito a partir de um módulo é uma função cujo nome é prefixado com o nome abreviado do módulo (também chamado de nome da máquina ); do nome do gancho, retire a peça do gancho e substitua-a pelo nome da máquina do módulo. Por exemplo, a implementação de
hook_menu()
done from example.module éexample_menu()
. Se o módulo for exemplo_menu.module e a função forexample_menu()
, isso não será considerado ahook_menu()
implementação para exemplo_menu.module.Isso também significa, por exemplo, que a
hook_form_alter()
implementação em example_form.module não éexample_form_alter()
, masexample_form_form_alter()
. Como outro exemplo, a implementação dehook_form_FORM_ID_alter()
done para alterar o formulário retornadouser_register_form()
de example.module não éexample_form_user_register_alter()
, masexample_form_user_register_form_alter()
. (O ID do formulário é user_register_form .)De um modo geral, o uso de caracteres maiúsculos no nome da máquina do módulo não cria problemas: o PHP não faz diferenças entre
myModule_get_value()
, emymodule_get_value()
, e$value = myModule_get_value()
chamariamyModule_get_value()
oumymodule_get_value()
.Embora exista um caso em que o uso de caracteres maiúsculos no nome de uma máquina de módulo causaria problemas: ao definir os ganchos de atualização para um módulo.
drupal_get_schema_versions()
, a função que retorna uma lista de atualizações disponíveis, contém o seguinte código.A última linha executada
drupal_get_schema_versions()
é a seguinte.Se o nome do módulo for myModule.module,
drupal_get_schema_versions('myModule')
retornará apenas as funções com um nome que comece com myModule_update e termine com um número; funções comomymodule_update_7120()
não serão incluídas porque a expressão regular usada dedrupal_get_schema_versions()
diferencia maiúsculas de minúsculas. Isso ainda se aplica ao Drupal 8, pois a expressão regular ainda é a mesma usada no Drupal 7.Alguns ganchos são chamados em momentos específicos. Por exemplo ,,
hook_menu()
ehook_menu_alter()
são chamados do Drupal 7 após a ativação / desativação de um módulo ou quando o cache das informações do roteador é limpo;hook_init()
não é chamado para páginas em cache.Depois que os ganchos são chamados porque um evento específico aconteceu, eles não serão chamados novamente até que um evento semelhante não ocorra. Eles não são chamados em duas solicitações de página sucessivas.
O Drupal armazena em cache a lista de ganchos implementados em um módulo. Se você estiver editando o código de um módulo ativado para adicionar novos ganchos, primeiro será necessário desativar e reativar o módulo, ou o Drupal não notará que há novos ganchos.
Assegure-se de que uma
return
declaração não tenha penetrado em uma de suas funções de gancho durante uma refatoração. Ele tem o potencial de quebrar não apenas o gancho em que aparece, mas também causar uma reação em cadeia que quebra outros ganchos, dificultando a localização do problema.fonte