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

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

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

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

Я пробовал с page-node-edit-product.tpl.php и page-node-product-edit.tpl.php, но безуспешно.


person Leandro Ardissone    schedule 08.10.2009    source источник


Ответы (6)


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

Я все еще новичок в 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';
  }
}
?>

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

person easement    schedule 08.10.2009

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

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

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

Итак, Drupal попытается использовать тему product_node_form.

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

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

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

person Jeremy French    schedule 08.10.2009
comment
Ах, но я хочу использовать совершенно другой шаблон, а не только тему формы. - person Leandro Ardissone; 08.10.2009
comment
Хотя вы можете делать то, что написали, я не уверен, что OP хочет этого. Это изменит только шаблон для фактической формы (которая в настоящее время не использует), это не изменит шаблон страницы, который используется. Судя по его примерам, он хочет именно этого. - person googletorp; 09.10.2009

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) страница-узел-добавить-contenttype.tpl.php

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

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

person Alauddin    schedule 31.01.2011

Я сам 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);
}
}
person Detect    schedule 08.10.2009

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

<?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?

person gaintsev    schedule 04.11.2009
comment
Во втором сравнении ошибка должна быть && вместо ||: ‹? Php function themeName_preprocess_page (& $ vars, $ hook) {if ((arg (0) == 'node') && (arg (1) == 'добавить' && arg (2) == 'продукт')) {$ vars ['template_files'] [] = 'page-node-add-product'; }}? ›Потому что это применимо к любому контенту« добавить ». - person Leandro Ardissone; 05.11.2009

Я поместил это в свой файл 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'
    )
  );
person Julie    schedule 23.12.2010