2009-10-08 11 views
10

Je veux thématiser le modèle pour modifier ou ajouter un nœud pour un type de contenu spécifique.
Par exemple, pour thématiser toutes les formes de type de contenu j'utilise le fichier page-node-{add|edit}.tpl.php (en fonction de ce que j'ai besoin de faire ajouter ou modifier).Comment puis-je thématiser le modèle pour l'édition ou ajouter un nœud pour un type de contenu spécifique?

Mais je n'ai pas trouvé le nom de modèle pour un type de noeud personnalisé, par exemple Produits.

J'ai besoin de thème uniquement pour les produits, mais pas pour les autres types de contenu.

J'ai essayé avec page-node-edit-product.tpl.php et page-node-product-edit.tpl.php mais pas de chance.

Répondre

16

Hmm. Il peut y avoir un meilleur moyen, mais qu'en est-il de la fonction de pré-traitement.

Je suis encore vraiment nouveau à Drupal, donc je voudrais essayer peut-être quelque chose comme ça [code peut ne pas fonctionner]:

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

Assurez-vous d'effacer registre de cache et le thème après avoir fait de nouvelles fonctions de prétraiter.

0

Je suis un drupal noob moi-même, mais serait quelque chose (pourrait avoir besoin d'un peu plus) comme ce travail?

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

C'est ce que je pense être la façon «correcte» de le faire.

À partir du module de noeud:

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

Alors Drupal va essayer de thème 'product_node_form'

afin que vous puissiez créer un module qui implémente cela.

Vous devrez implémenter [hook_theme] [1] et fournir une fonction ou un modèle.

Vous trouverez peut-être qu'il est plus facile d'utiliser [hook_form_alter] [2] pour ajouter des classes et CSS normal pour changer l'apparence.

+0

Ah, mais je veux utiliser un modèle complètement différent plutôt que le thème de la forme. –

+0

Bien que vous puissiez faire ce que vous avez publié, je ne suis pas sûr que ce soit ce que veut le PO. Cela ne changera que le modèle du formulaire actuel (qui n'en utilise actuellement aucun), cela ne changera pas le modèle de page utilisé. De ses exemples, il semble que c'est ce qu'il veut. – googletorp

0

Pour moi le même problème. Demander où insérer un code:

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

Il est entré dans template.php ou la page nœud - {ajouter | modifier} -example.tpl.php?

+0

Dans la deuxième comparaison, il y a une erreur, il doit être un && au lieu de ||: Parce qu'il s'applique à tout contenu 'ajouter'. –

0

je mets dans mon fichier template.php dans le répertoire de mon thème:

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

Ajoutez le code ci-dessus dans template.php

Ensuite, créez deux fichiers TPL

1) page-contenttype.tpl.php

utilisé lors de l'affichage et de la modification du contenu

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

utilisé lors de l'ajout de ce type de contenu.

Fonctionne avec 6.

drupal