2011-02-02 73 views
0

我創建了一個名爲finder的模塊,我想從url中獲取參數,將它們緊縮,然後通過tpl文件顯示結果。這裏的相關功能...在Drupal模塊回調,預處理和模板之間傳遞數據

function finder_menu() 
{ 
    $items = array(); 
    $items['finder'] = array(
     'page callback' => 'finder_view', 
     'access callback' => TRUE, 
    ); 
    return $items; 
} 

function finder_theme($existing, $type, $theme, $path) 
{ 
    return array(
     'finder_view' => array(
      'variables' => array('providers' => null), 
      'template' => 'results', 
     ), 
    ); 
} 

function finder_preprocess_finder_view(&$variables) 
{ 
    // put my data into $variables 
} 

function finder_view($zipcode = null) 
{ 
    // Get Providers from Zipcode 

    return theme('finder_view', $providers); 
} 

現在我知道finder_view被調用。我也知道finder_preprocess_finder_view被調用。最後,我知道result.tpl.php正被用於輸出。但我無法圍繞如何在回調中完成有意義的工作,不知何故使預處理器中的數據可用於添加到「變量」,以便我可以在tpl文件中訪問。

在你使用tpl文件的情況下,回調甚至對任何事情都有用嗎?我在過去做過這樣的事情,回調完成所有工作並傳遞給一個主題函數,但是這次我想使用一個文件進行輸出。

謝謝...

UPDATE:這實際上是一個參數命名的問題。 Drupal 6在hook_theme中使用了「參數」鍵,而不是「變量」。一旦改變,一切都按預期工作。我還刪除了預處理器,因爲我的邏輯是在回調中執行的。

回答

0

該問題存在於hook_theme中,我使用'變量'而不是'參數'。我應該刪除這個問題嗎?

1

您的邏輯應該始終處於回撥狀態。通過在菜單數組中指定「文件」,可以在單獨的文件中。

在你的例子中,一旦你從郵政編碼「獲得提供者」,這個接合點非常重要。 :)

在您的主題功能中,您可以將$ providers數組轉換爲更像傳統drupal $ vars arary的東西,或者您可以跳過預處理和模板,只需執行所有主題在主題功能中工作。預處理和模板都很方便,並不總是必需的。

我會將主題函數重命名爲不同的東西,或者就此而言,回調會讓事情變得更容易理解。

這有幫助嗎?我不是100%確定你真正想問什麼,但是如果你希望在保持良好結構的同時簡化代碼,希望這會有所幫助。

+0

在過去,當使用tpl文件時,我在預處理函數中準備好了數據。同樣在那裏,我可以通過將它添加到傳遞給它的變量引用中,在tpl文件中添加我需要的任何數據。但是當我使用模塊回調時,如何將我在那裏做的任何事情傳遞給我的tpl文件?我不關心預處理器,如果我不需要它。 – rob5408 2011-02-02 23:42:04

+0

返回主題('finder_view',$ providers);正是如此。如果將數據格式化爲theme()可以變爲變量的格式,則可以一起跳過預處理函數。 – mirzu 2011-02-03 19:31:33