Eu gostaria de fornecer a implementação de modelo no meu módulo e permitir que os temas o substituam. Basicamente, adiciono uma sugestão por este código simplificado:
function attach_preprocess_node(&$vars) {
$vars['theme_hook_suggestions'][] = 'node__test';
}
(Não quero usar hook_theme para adicionar um novo tema, pois quero reutilizar as funções do nó de pré-processamento. O nome do tema é estranho, mas não quero escrever node_ attach _% para evitar confusão com o tipo de nó.)
Então eu uso hook_theme_registry_alter () para adicionar o caminho do módulo:
function attach_theme_registry_alter(&$theme_registry) {
$path = drupal_get_path('module', 'attach') . '/themes';
$theme_registry_copy = $theme_registry;
_theme_process_registry($theme_registry_copy, 'phptemplate', 'theme_engine', 'node', drupal_get_path('module', 'node'));
$theme_registry += array_diff_key($theme_registry_copy, $theme_registry);
if (!isset($theme_registry['node']['theme paths'])) {
$theme_registry['node']['theme paths'] = array();
}
if (!isset($theme_registry['node']['theme paths'])) {
$first_element = array_shift($theme_registry['node']['theme paths']);
if ($first_element) {
array_unshift($theme_registry['node']['theme paths'], $first_element, $path);
}
else {
array_unshift($theme_registry['node']['theme paths'], $path);
}
}
}
No entanto, isso não funciona. Isso significa: o arquivo themes / node - super.tpl.php não é usado. Ele é usado apenas se eu o tiver copiado para a pasta do tema.
Respostas:
Basicamente, você pode economizar um pouco de dor de cabeça implementando em
hook_theme()
vez de alterar o registro.Sugiro dar uma olhada em theming_example no projeto Examples , reproduzido com facilidade nesta página de documento da API , talvez com um código especialmente útil nesta página .
Isso é tudo para o Drupal 7.
fonte
hook_theme
deve fornecer o$existing
parâmetro que permite modificar a coisa, sem substituí-la. Se não for o caso, talvez você esteja atingindo um bug.Talvez este funcione:
Importante aqui é a chave ' gancho de base '.
fonte
base hook
: drupal.org/node/2106635Eu gosto da solução dashohoxha da implementação hook_theme, mas não consegui fazê-la funcionar. Depois de pesquisar mais, encontrei uma variação que funcionou bem para mim:
Notas: meu módulo personalizado é chamado 'mymodule' e meu tipo de conteúdo personalizado é chamado 'blog_post'. O tpl.php que eu uso é chamado 'node - blog_post.tpl.php' e está localizado na subpasta 'templates' do meu módulo.
fonte
Aqui está meu snippet para declarar os modelos de visualizações armazenados na pasta "template" do meu "custom_module":
Espero que ajude alguém.
fonte
Eu perguntei isso uma vez no Stack Overflow . Basicamente, você precisa implementar
hook_theme_registry_alter()
para adicionar seu caminho ao caminho do modelo de gancho do tema; em seguida,hook_enable()
chame drupal_theme_rebuild () para limpar o cache do registro do tema e verificar o caminho para encontrar modelos.fonte
hook_enable()
é chamado quando um módulo está ativado; se o módulo já estiver ativado, ele deverá ser desativado e, em seguida, ativado novamente.