2011-02-18 65 views
1
function posts_theme($existing, $type, $theme, $path) { 
    return array(
     'post_node_form' => array(
     'arguments' => array('form' => NULL), 
     'template' => VARIABLE, 
    ) 
); 
} 

這在暗示不同的模板是表明一個模板在Drupal 6渲染「post_node_form」的方式,但我想從兩個不同的路徑得到節點編輯表單:主題化的節點形式

  • 通過AJAX通過drupal_get_form(「post_node_form」)通過默認節點
  • /添加/ POST

如果我取代「變量」,由路徑(或任何其他條件)上,它不會因爲我的工作t好像?該模板的名稱被緩存,您需要刷新緩存以刷新它。

任何建議不同表單模板的解決方案?

注意。這不是節點模板的情況,(然後您可以將模板建議放入預處理鉤子中)。它關於節點FORM。

回答

0

好吧,我回答我的問題:

的解決方案的主要是掛鉤preprocess_NAME_OF_MY_FORM,即每頁加載都會執行,並且可以在您的模塊或您的主題中。

所以在我的情況,我在我的「上崗」模塊中寫道:

/** 
* Implementation of hook_theme(). 
*/ 
function posts_theme($existing, $type, $theme, $path) {  
    return array(
     'post_node_form' => array(
     'arguments' => array('form' => NULL), 
     'template' => 'post-form-custom', 

    ) 
); 
} 

function posts_preprocess_post_node_form(&$vars) { 
    // I check the path to know if node_form is retrieve through normal way or ajax way.  
    if (check_plain(arg(0)) == 'node'){ 
     $vars['template_files'][] = 'post-form-default'; 
    } 
} 

我在我的模塊文件夾中的文件通過AJAX post-form-custom.tpl.phppost-form-default.tpl.php

0

添加此功能/或修改,如果存在到你的主題的template.php:

function phptemplate_preprocess_page(&$vars) { 
    // ... 
    $node = menu_get_object(); 
    if ($node->type == 'post') { 
    $vars['template_files'][] = VARIABLE; 
    } 
    // ... 
} 
+0

我打電話drupal_get_form和不走通過preprocess_page鉤:(可能也因爲我沒有通過正常的Drupal菜單系統實現它 – corbacho 2011-02-21 09:26:06