Как я могу пометить шаблон для редактирования или добавить 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'
    )
  );