Как я могу пометить шаблон для редактирования или добавить узел для определенного типа контента?

Я хочу указать шаблон для редактирования или добавить узел для определенного типа содержимого.
Например, для темы всех форм типа контента я использую файл page-node-{add|edit}.tpl.php (в зависимости от того, что мне нужно добавить или отредактировать).

Но я не нашел имя шаблона для типа настраиваемого узла, например Products.

Мне нужна тема только для продуктов, но не для других типов контента.

Я попытался использовать page-node-edit-product.tpl.php и page-node-product-edit.tpl.php но не повезло.

Хм. Может быть, есть лучший способ, но как насчет функции препроцесса.

Я по-прежнему новичок в Drupal, поэтому я мог бы попробовать что-то вроде этого [код может не работать]:

 <?php function themeName_preprocess_page(&$vars, $hook) { if ((arg(0) == 'node') && (arg(1) == 'add' && arg(2) == 'product')) { $vars['template_files'][] = 'page-node-add-product'; } } ?> 

Обязательно очистите кэш и реестр тем после выполнения новых функций препроцесса.

Я считаю, что это «правильный» способ сделать это.

Из модуля узла:

 $form['#theme'] = array($node->type .'_node_form', 'node_form'); 

Поэтому Drupal попытается использовать тему 'product_node_form'

поэтому вы можете создать модуль, который реализует это.

Вам нужно будет реализовать [hook_theme] [1] и предоставить функцию или шаблон.

Вы можете обнаружить, что проще использовать [hook_form_alter] [2], чтобы добавить некоторые классы и обычный CSS, чтобы изменить внешний вид.

 function themename_preprocess_page(&$vars) { // Add per content type pages if (isset($vars['node'])) { // Add template naming suggestion. It should alway use hyphens. // If node type is "custom_news", it will pickup "page-custom-news.tpl.php". $vars['template_files'][] = 'page-'. str_replace('_', '-', $vars['node']->type); } } 

Добавьте вышеуказанный код в template.php

Затем создайте пару файлов tpl

1) page-contenttype.tpl.php

используется при отображении и редактировании содержимого

2) page-node-add-contenttype.tpl.php

используется при добавлении этого типа содержимого.

Работает с drupal 6.

Я сам drupal noob, но что-то (может быть, немного больше), как эта работа?

 function phptemplate_node_form($form) { switch ($form['#node']->type) { case 'product': return theme_render_template(path_to_theme().'/node-edit-product.tpl.php', array('form' => $form)); default: return theme_node_form($form); } } 

Для меня та же проблема. Подскажите, куда вставить код:

 <?php function themeName_preprocess_page(&$vars, $hook) { if ((arg(0) == 'node') && (arg(1) == 'add' || arg(2) == 'product')) { $vars['template_files'][] = 'page-node-add-product'; } } ?> 

Он вводится в template.php или в page-node – {add | edit} -example.tpl.php?

Я помещаю это в свой файл template.php в каталог моей темы:

 function MYTHEMENAME_theme($existing, $type, $theme, $path) { return array( // tell Drupal what template to use for the edit form family_individual_node_form' => array( 'arguments' => array('form' => NULL), 'template' => 'node-family_individual-edit' ) );