Как я могу пометить шаблон для редактирования или добавить node для определенного типа контента?
Я хочу указать шаблон для редактирования или добавить node для определенного типа контента.
Например, для темы всех форм типа контента я использую файл page-node-{add|edit}.tpl.php
(в зависимости от того, что мне нужно делать, добавлять или редактировать).
Но я не нашел имя шаблона для пользовательского типа node, например Products.
Мне нужно только тему для продуктов, но не для других типов содержимого.
Я пробовал с page-node-edit-product.tpl.php
и page-node-product-edit.tpl.php
, но не повезло.
Ответы
Ответ 1
Хм. Может быть, есть лучший способ, но как насчет функции препроцесса.
Я по-прежнему новичок в 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';
}
}
?>
Обязательно очистите кэш и реестр тем после выполнения новых функций препроцесса.
Ответ 2
Вот что я думаю, это "правильный" способ сделать это.
Из модуля node:
$form['#theme'] = array($node->type .'_node_form', 'node_form');
Итак, Drupal попытается использовать тему 'product_node_form'
чтобы вы могли создать модуль, который реализует это.
Вам нужно будет реализовать [hook_theme] [1] и предоставить функцию или шаблон.
Вы можете обнаружить, что проще использовать [hook_form_alter] [2], чтобы добавить некоторые классы и обычный CSS для изменения внешнего вида.
Ответ 3
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.
Ответ 4
Я сам 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);
}
}
Ответ 5
Для меня та же проблема. Подскажите, куда вставить код:
<?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 или на странице node - {add | edit} -example.tpl.php?
Ответ 6
Я помещаю это в свой файл 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'
)
);