Saya ingin memberikan implementasi template dalam modul saya dan memungkinkan tema untuk menimpanya. Pada dasarnya, saya menambahkan saran dengan kode sederhana ini:
function attach_preprocess_node(&$vars) {
$vars['theme_hook_suggestions'][] = 'node__test';
}
(Saya tidak ingin menggunakan hook_theme untuk menambahkan tema baru karena saya ingin menggunakan kembali fungsi node preproses. Nama tema canggung tetapi saya tidak ingin menulis node_ melampirkan _% untuk menghindari kebingungan dengan jenis simpul.)
Lalu saya menggunakan hook_theme_registry_alter () untuk menambahkan path modul:
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);
}
}
}
Namun itu tidak berhasil. Itu berarti: tema file / simpul - super.tpl.php tidak digunakan. Ini digunakan hanya jika saya menyalinnya ke folder tema.
Jawaban:
Pada dasarnya Anda dapat menghemat sedikit sakit kepala dengan menerapkan
hook_theme()
alih-alih mengubah registri.Saya sarankan melihat theming_example dalam proyek Contoh , dengan mudah direproduksi di halaman doc API ini , mungkin dengan kode yang sangat membantu di halaman ini .
Ini semua untuk Drupal 7.
sumber
hook_theme
harus memberi Anda$existing
parameter yang memungkinkan Anda memodifikasi hal itu, bukan menimpanya. Jika bukan itu masalahnya, mungkin Anda sedang memukul bug.Mungkin yang ini berhasil:
Yang penting di sini adalah kunci ' kait dasar '.
sumber
base hook
: drupal.org/node/2106635Saya suka solusi dashohoxha dari implementasi hook_theme tetapi tidak bisa membuatnya bekerja. Setelah googling lagi saya menemukan variasi yang bekerja baik untuk saya:
Catatan: modul khusus saya disebut 'mymodule' dan tipe konten khusus saya disebut 'blog_post'. Tpl.php yang saya gunakan disebut 'node - blog_post.tpl.php' dan terletak di sub folder 'templates' pada modul saya.
sumber
Ini cuplikan saya untuk mendeklarasikan templat tampilan yang disimpan di folder "templat" dari "custom_module" saya:
Semoga ini bisa membantu seseorang.
sumber
Saya pernah menanyakan ini di Stack Overflow . Pada dasarnya, Anda harus menerapkan
hook_theme_registry_alter()
untuk mendapatkan jalur Anda ditambahkan ke jalur templat tema kait; kemudian, aktifhook_enable()
, Anda memanggil drupal_theme_rebuild () untuk menghapus cache registri tema dan mendapatkan jalur Anda dipindai untuk templat.sumber
hook_enable()
dipanggil ketika modul diaktifkan; jika modul sudah diaktifkan, itu harus dinonaktifkan, dan kemudian diaktifkan kembali.