Me gustaría proporcionar una implementación de plantilla en mi módulo y permitir que los temas la anulen. Básicamente, agrego una sugerencia por este código simplificado:
function attach_preprocess_node(&$vars) {
$vars['theme_hook_suggestions'][] = 'node__test';
}
(No quiero usar hook_theme para agregar un nuevo tema porque quiero reutilizar las funciones de nodo de preproceso. El nombre del tema es incómodo pero no quiero escribir node_ attach _% para evitar confusiones con el tipo de nodo).
Luego uso hook_theme_registry_alter () para agregar la ruta del 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);
}
}
}
Sin embargo, no funciona. Eso significa: el archivo themes / node - super.tpl.php no se usa. Solo se usa si lo copié en la carpeta de temas.
Respuestas:
Básicamente, puede ahorrarse un poco de dolor de cabeza implementando en
hook_theme()
lugar de alterar el registro.Sugiero echar un vistazo a theming_example en el proyecto de ejemplos , reproducido fácilmente en esta página de documentación API , quizás con un código especialmente útil en esta página .
Todo esto es para Drupal 7.
fuente
hook_theme
debería darle el$existing
parámetro que le permite modificar la cosa, no anularla. Si no es el caso, entonces tal vez estás golpeando un error.Quizás este funcione:
Importante aquí es la clave ' gancho base '.
fuente
base hook
: drupal.org/node/2106635Me gusta la solución de dashohoxha de la implementación hook_theme pero no pude hacer que funcione. Después de buscar más en Google, encontré una variación que me funcionó bien :
Notas: mi módulo personalizado se llama 'mymodule' y mi tipo de contenido personalizado se llama 'blog_post'. El tpl.php que uso se llama 'node - blog_post.tpl.php' y se encuentra en la subcarpeta 'templates' de mi módulo.
fuente
Aquí está mi fragmento para declarar plantillas de vistas almacenadas en la carpeta "plantilla" de mi "módulo_personalizado":
Espero que ayude a alguien.
fuente
Pregunté esto una vez en Stack Overflow . Básicamente, debe implementar
hook_theme_registry_alter()
para agregar su ruta a la ruta de la plantilla de enlace de tema; luego, enhook_enable()
, llama a drupal_theme_rebuild () para borrar el caché del registro de temas y escanear tu ruta en busca de plantillas.fuente
hook_enable()
se invoca cuando un módulo está habilitado; si el módulo ya está habilitado, debe deshabilitarse y luego habilitarse nuevamente.