如何设置模板主题以进行编辑或为特定内容类型添加节点?

时间:2009-10-08 15:38:14

标签: php drupal templates drupal-6 preprocessor

我想主题模板进行编辑或为特定内容类型添加节点 例如,要主题所有内容类型表单,我使用文件page-node-{add|edit}.tpl.php(取决于我需要添加或编辑的内容)。

但我没有找到自定义节点类型的模板名称,例如Products。

我只需要针对产品的主题,但不需要其他内容类型的主题。

我尝试了page-node-edit-product.tpl.phppage-node-product-edit.tpl.php,但没有运气。

6 个答案:

答案 0 :(得分:16)

嗯。可能有更好的方法,但预处理功能呢。

我仍然是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';
  }
}
?>

确保在创建新的预处理函数后清除缓存和主题注册表。

答案 1 :(得分:1)

我认为这是“正确”的做法。

来自节点模块:

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

因此Drupal将尝试主题'product_node_form'

所以你可以创建一个实现它的模块。

您需要实现[hook_theme] [1],并提供函数或模板。

你可能会发现使用[hook_form_alter] [2]更容易添加一些类和普通的CSS来改变外观。

答案 2 :(得分:1)

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一起使用。

答案 3 :(得分:0)

我自己就是一个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);
}
}

答案 4 :(得分:0)

对我来说同样的问题。提示插入代码的位置:

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

答案 5 :(得分:0)

我把它放在我主题目录中的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'
    )
  );