2009-10-08 5 views
10

Quiero el tema de la plantilla para editar o agregar un nodo para un tipo de contenido específico.
Por ejemplo, al tema de todos los formularios de tipo de contenido utilizo el archivo page-node-{add|edit}.tpl.php (dependiendo de lo que necesite hacer agregar o editar).¿Cómo puedo tema la plantilla para editar o agregar un nodo para un tipo de contenido específico?

Pero no encontré el nombre de la plantilla para un tipo de nodo personalizado, por ejemplo Productos.

Necesito el tema solo para Productos, pero no para los otros tipos de contenido.

Lo he intentado con page-node-edit-product.tpl.php y page-node-product-edit.tpl.php pero no tuve suerte.

Respuesta

16

Hmm. Puede haber una manera mejor, pero ¿qué pasa con una función de preproceso?

Todavía estoy realmente nuevo a Drupal, así que tal vez sería intentar algo como esto [código puede no funcionar]:

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

asegúrese de borrar la memoria caché y el tema del registro después de hacer nuevas funciones de procesamiento previo.

0

Soy novato de drupal, pero ¿algo (podría necesitar un poco más) como este?

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); 
} 
} 
1

Esto es lo que creo que es la forma "correcta" de hacerlo.

Desde el módulo de nodo:

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

Así Drupal intentará tema 'product_node_form'

para que pueda crear un módulo que implementa esto.

Tendrá que implementar [hook_theme] [1] y proporcionar una función o plantilla.

Puede encontrar que es más fácil de usar [hook_form_alter] [2] para agregar algunas clases y CSS normal para cambiar la apariencia.

+0

Ah, pero quiero utilizar una plantilla diferente completa en lugar de sólo el tema de la forma. –

+0

Aunque puede hacer lo que ha publicado, no estoy seguro de que esto sea lo que quiere el OP. Esto solo cambiará la plantilla para el formulario real (que actualmente no usa ninguno), esto no cambiará la plantilla de página que se está utilizando. De sus ejemplos parece que esto es lo que quiere. – googletorp

0

Para mí el mismo problema. Preguntar dónde insertar un código:

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

Se entra en template.php o en la página de nodos - {add | Edición} -example.tpl.php?

+0

En la segunda comparación hay un error que debe ser un && en lugar de ||: Porque se aplica a cualquier contenido 'agregar'. –

0

que poner esto en mi archivo template.php en el directorio de mi tema:

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' 
    ) 
); 
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); 
    } 
} 

Añadir el código anterior en template.php

A continuación, cree par de archivos TPL

1) page-contenttype.tpl.php

utilizado al mostrar y editar el contenido

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

se usa al agregar ese tipo de contenido.

Funciona con Drupal 6.

Cuestiones relacionadas