2011-09-17 15 views
1

我正在創建一個Joomla組件。 在前端視圖中,我通過從第一個選項中選擇一個選項來創建2個下拉菜單,第二個選項必須相應地更改。 爲此,我使用AJAX。隨着Joomla,我怎麼進入一個AJAX調用只有輸出生成的PHP函數調用?

我可以將請求發送到放置在Controller.php這樣文件和PHP函數內部PHP函數產生正確的輸出。

的問題是把Joomla框架把這個輸出頁面內所有的meta標籤,標題,模板等,因爲它應該在瀏覽器中顯示之前還給AJAX。 你可以看到我收到的螢火蟲截圖。 我想要把下拉菜單中的div是-div ID =「選擇-formatocarta」 - ,你可以看到,之前「中選擇」我有許多其他有害的東西。 http://img695.imageshack.us/img695/7725/selectp.jpg

結果是在div裏面我只想放上由php函數生成的「select」菜單,我得到整個頁面。即使我可以顯示通過AJAX請求傳遞tmpl = component參數的唯一菜單,div高度就像整個頁面都在裏面。

我怎樣才能收到唯一PHP函數的輸出,而不Joomla模板? 如果這是不可能的,我怎樣才能從responseText中提取唯一的下拉菜單? 我只能使用JavaScript,我沒有可用的原型或jQuery。

回答

2

退出。

那麼的Joomla會先評估你的組件代碼,然後通過添加模板系統後的頁眉/頁腳(這就是爲什麼組件動態可以添加CSS等標題行)。所以你需要做的就是立即退出,停止Joomla無法添加頁眉/頁腳。

所以在你的控制器代碼,你會碰到這樣的:

<?php 

function ajax_foo() 
{ 
    ...code here... 
    $view->display(); 
    jexit(); 
} 

PHP中的內置exit()功能也將正常工作,但jexit()是首選。

+0

這個效果很好,你也可以選擇另一個視圖,只適合你的喜好: '$ view = $ this-> getView(「Raw」,「html」,「PREFIX」);'' –

2

你需要創建你的/組件/ com_yourcomponent /控制器/文件夾的子控制器稱爲ajax.raw.php

然後,您可以發送Ajax請求,以這樣的:

的index.php?選項= com_name &任務= ajax.function_name &格式=原& VAR =價值

  • 的「函數名」將執行控制器內的同名函數。
  • 格式=原告訴的Joomla不包括模板
  • 的VAR =數值代表你想發送,並可以使用JRequest :: getVar()
0

你不檢索任何參數必須爲此創建一個新的控制器。您可以簡單地使用現有的控制器並將格式=原始格式追加到URL中。這關閉了Joomla的所有輸出。爲ajax調用創建一個特殊的控制器只是在您的組件很大且難以維護的情況下可能是一個好的做法。

使用jexit();乾脆輸出是絕對不好的。