2009-10-08 30 views
10

Tôi muốn chủ đề mẫu để chỉnh sửa hoặc thêm nút cho một loại nội dung cụ thể.
Ví dụ: để chủ đề tất cả các loại biểu mẫu nội dung tôi sử dụng tệp page-node-{add|edit}.tpl.php (tùy thuộc vào những gì tôi cần thêm hoặc chỉnh sửa).Làm cách nào để chủ đề mẫu để chỉnh sửa hoặc thêm nút cho một loại nội dung cụ thể?

Nhưng tôi không tìm thấy tên mẫu cho loại nút tùy chỉnh, ví dụ: Sản phẩm.

Tôi chỉ cần chủ đề cho Sản phẩm chứ không phải cho các loại nội dung khác.

Tôi đã thử với page-node-edit-product.tpl.phppage-node-product-edit.tpl.php nhưng không có may mắn.

Trả lời

16

Hmm. Có thể có cách tốt hơn nhưng về chức năng tiền xử lý.

tôi vẫn thực sự mới đến Drupal, vì vậy tôi có lẽ sẽ cố gắng một cái gì đó như thế này [mã có thể không hoạt động]:

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

Hãy chắc chắn để xóa bộ nhớ cache và chủ đề registry sau khi thực hiện chức năng preprocess mới.

0

Tôi là một drupal noob bản thân mình, nhưng sẽ một cái gì đó (có thể cần nhiều hơn một chút) như công việc này?

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

Đây là những gì tôi nghĩ là cách 'thích hợp' để thực hiện.

Từ module nút:

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

Vì vậy, Drupal sẽ cố gắng chủ đề 'product_node_form'

vì vậy bạn có thể tạo một module mà thực hiện này.

Bạn cần triển khai [hook_theme] [1] và cung cấp chức năng hoặc mẫu.

Bạn có thể thấy dễ sử dụng hơn [hook_form_alter] [2] để thêm một số lớp và CSS thông thường để thay đổi giao diện.

+0

Ah, nhưng tôi muốn sử dụng một mẫu hoàn chỉnh khác thay vì chỉ tạo biểu mẫu. –

+0

Mặc dù bạn có thể làm như bạn đã đăng, tôi không chắc chắn đây là những gì OP muốn. Điều này sẽ chỉ thay đổi mẫu cho biểu mẫu thực tế (hiện không sử dụng bất kỳ mẫu nào), điều này sẽ không thay đổi mẫu trang đang được sử dụng. Từ ví dụ của anh ta có vẻ như đây là điều anh ta muốn. – googletorp

0

Đối với tôi cùng một vấn đề. Nhắc nơi chèn mã:

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

Nó được nhập trong template.php hoặc trong nút trang - {add | edit} -example.tpl.php?

+0

Trong lần so sánh thứ hai, có lỗi phải là && thay vì ||: Vì nó áp dụng cho bất kỳ nội dung nào 'thêm'. –

0

tôi đặt này trong file template.php của tôi trong thư mục chủ đề của tôi:

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

Thêm mã trên trong template.php

Sau đó tạo vài file tpl

1) page-contenttype.tpl.php

được sử dụng khi hiển thị và chỉnh sửa nội dung

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

được sử dụng khi thêm loại nội dung đó.

Làm việc với drupal 6.

Các vấn đề liên quan