Шаблон ноды

Главные вкладки

Аватар пользователя Bochagov Bochagov 24 января 2011 в 15:20

Всем привет!

Упёрся на этот раз в вывод содержимого ноды...
Модуль-нода, подготавливает данные в hook_load().

Если в теме создать файл node-type.tpl.php, то всё нормально отображается, но вот
как мне сделать, чтобы при установке модуля, можно было просматривать созданные
материалы при любой установленной теме...

Используя зачатки логики, сообразил, что в месте с модулем должен быть файл типа
node-type.tpl.php, но как мне теперь объяснить Друпал свои намерения?

Порылся в книжке, но так и не нашёл...

Комментарии

Аватар пользователя natbampo natbampo 24 января 2011 в 16:02

а по моему для таких случаев надо подсунуть в реестр путь для записи 'node':
<?php
function имяМодуля_theme_registry_alter(&$theme_registry) {
$theme_registry['node']['theme paths'][] = drupal_get_path('module', 'имяМодуля');
}
?>

Аватар пользователя Bochagov Bochagov 25 января 2011 в 13:13

Спасибо за отзывы!

2Softovick

Почти разобрался с темизацией, но осталась пара вопросов:

<?php
function mynode_theme(){
      return array(    
      
'mynode_node' => array(
        
'arguments' => array('node' => NULL),        
        
'template' => 'node-mynode',    
        ),
    ); 
}

function 

mynode_view($node$teaser FALSE$page FALSE)
{
    
node_prepare($node$teaser FALSE);
    
$node->content['here_content_name'] = array(
            
'#value' => theme('mynode_node'$node),
            
'#weight' => 2
        
);
    return 
$node;
}

function 

theme_mynode_node($node)
{    
    
$output '<div class="tester_class">'.$node->source['name'].'</div>';
    return 
$output;
}
?>

Эти функции работают, но хотелось бы вынести функцию темизации в отдельный файл.
Я создаю файл "node-mynode.tpl.php", удаляю функцию темизации, её содержимое переношу
в файл, но возникает ошибка, на мой взгляд вполне логичная:

warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'theme_mynode_node' not found or invalid function name in C:\wamp\www\test\includes\theme.inc on line 656.

Хотя нашёл два источника где именно таким способом выносился код темизации...

2natbampo
У меня
hook_theme_registry_alter() не срабатывает...

Если честно, не совсем понял то, что делает функция.
Она указывает Друпал, где искать файл для темизации данного типа материала?
Эта функция применима только для нод?

'file' => 'modules/user/user.pages.inc',
'theme path' => 'modules/user',

И можно ли будет в теме переопределить вывод данного типа материала
или эта функция жёстко определяет модульный шаблон?

Аватар пользователя natbampo natbampo 25 января 2011 в 14:24

Ну вот смотри. Проверяю у себя:
Имеется модуль joke, в этой же папке шаблон(node-joke.tpl.php) для этого типа узла.
Пишу:
<?php
function joke_theme_registry_alter(&$theme_registry) {
$theme_registry['node']['theme paths'][] = drupal_get_path('module', 'joke');
}
?>
указал что когда движок будет этот узел показывать(theme('node')), чтобы поискал шаблон и в этой папке.
Его сразу найдет и будет работать.

Тема может этот шаблон переопределить(в template.php):
<?php
function phptemplate_preprocess_node(&$variables){
if ($variables['node']->type == 'joke') {
$variables['template_file'] = 'node-joke2';
}
}
?>
при этом node-joke2.tpl.php лежит в папке темы - он и подгрузится

Реестр понятно у тебя девелом перестраивается каждый раз?