Nasıl tema düzenlemek için şablon olabilir veya belirli bir içerik türü için bir düğüm eklemek?

6 Cevap php

I want to theme the template for edit or add a node for a specific content type.
For example, to theme all the content type forms I use the file page-node-{add|edit}.tpl.php (depending what I need to do add or edit).

Ama, örneğin Ürünleri için, özel bir düğüm türü için şablon adını bulamadık.

Ben ancak, diğer içerik türleri için, sadece ürünler için tema gerekir.

I page-node-edit-product.tpl.php ve page-node-product-edit.tpl.php ile denedim ama hayır şans ettik.

6 Cevap

Hmm. Bir önişlem işlevi hakkında daha iyi bir yolu ama ne olabilir.

Ben hala Drupal gerçekten yeni değilim, bu yüzden belki [kod çalışmaz] olmayabilir böyle bir şey denemek istiyorum:

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

Yeni önişlem fonksiyonları yaptıktan sonra önbelleği ve tema defterini temizlemek için emin olun.

Bu bunu yapmak için 'doğru' yolu bence budur.

Düğüm modülü:

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

Yani Drupal tema 'product_node_form' için çalışacağız

bu yüzden bu uygulayan bir modül oluşturabilirsiniz.

Sen [hook_theme] [1], uygulamak ve bir işlevi veya şablon sağlamak gerekir.

Bunu [2] görünümünü değiştirmek için bazı sınıfları ve normal CSS eklemek için [hook_form_alter] kullanmak daha kolay olduğunu görebilirsiniz.

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 yukarıdaki kodu ekleyin

Sonra tpl dosyaları çift oluşturmak

1) sayfa-contenttype.tpl.php

içerik görüntüleme ve düzenleme yaparken kullanılan

2) sayfa-düğüm-add-contenttype.tpl.php

bu içerik türünü eklerken kullanılır.

Drupal 6 ile çalışır.

Kendimi bir drupal çaylak değilim, ama bir şey bu iş gibi (biraz daha gerekebilir) olurdu?

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

Benimle aynı sorun için. Nerede bir kod eklemek için istemi:

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

Bu template.php veya sayfa-düğüm girilir - {add | edit}-example.tpl.php?

Ben tema dizini benim template.php dosyasına koymak:

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