2009-10-08 14 views
10

Chcę motywować szablon do edycji lub dodać węzeł dla określonego typu zawartości.
Na przykład, aby poddać tematowi wszystkie formularze typu zawartości, używam pliku page-node-{add|edit}.tpl.php (w zależności od tego, co muszę dodać lub edytować).Jak mogę motywować szablon do edycji lub dodać węzeł dla określonego typu zawartości?

Ale nie znalazłem nazwy szablonu dla niestandardowego typu węzła, na przykład Produkty.

Potrzebuję motywu tylko dla produktów, ale nie dla innych typów zawartości.

Próbowałem już z page-node-edit-product.tpl.php i page-node-product-edit.tpl.php, ale bez powodzenia.

Odpowiedz

16

Hmm. Może być lepszy sposób, ale co z funkcją przetwarzania wstępnego.

nadal jestem bardzo nowe do Drupal, więc chciałbym spróbować może coś takiego [code może nie działać]:

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

Pamiętaj, aby wyczyścić pamięć podręczną i tematem rejestru po wprowadzeniu nowych funkcji Preprocesuj.

0

Sam jestem dumpal noob, ale czy coś (może potrzebować trochę więcej) jak ta praca?

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

To jest, jak sądzę, "właściwy" sposób na zrobienie tego.

Z modułu węzła:

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

Więc Drupal będzie starał się motyw 'product_node_form'

więc można utworzyć moduł, który implementuje ten.

Będziesz musiał zaimplementować [hook_theme] [1] i podać funkcję lub szablon.

Może się okazać, że łatwiej jest użyć [hook_form_alter] [2], aby dodać kilka klas i normalny CSS, aby zmienić wygląd.

+0

Ah, ale chcę użyć zupełnie innego szablonu niż tematu tylko w formularzu. –

+0

Chociaż możesz zrobić tak, jak napisałeś, nie jestem pewien, czego chce OP. Spowoduje to jedynie zmianę szablonu rzeczywistego formularza (który obecnie nie jest używany), to nie zmieni szablonu strony, który jest używany. Z jego przykładów wynika, że ​​właśnie tego chce. – googletorp

0

Dla mnie ten sam problem. Zapyta gdzie wstawić kod:

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

To jest wpisane w template.php lub w widoku-węzła - {dodania | Edytuj} -example.tpl.php?

+0

W drugim porównaniu występuje błąd, musi to być && zamiast ||: Ponieważ dotyczy dowolnej treści "dodaj". –

0

kładę to w moim pliku template.php w katalogu mojego motywu:

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

Dodaj powyższy kod w template.php

Następnie należy utworzyć kilka plików OC

1) page-contenttype.tpl.php

używany podczas wyświetlania i edytowania treści

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

używane podczas dodawania tego typu zawartości.

Działa z drupalem 6.