2012-11-19 48 views
4

我做了一個基本的Joomla模塊爲我的網站作爲一個在線留言板。但我想在其中放入AJAX(我知道一個類似AJAX的模塊已經存在於JED中,但這更像是一個讓我學習AJAX如何在Joomla模塊中工作的項目)。把AJAX在一個Joomla模塊

,你重定向到一個新的PHP文件作爲該文件將不會被定義爲

defined('_JEXEC') or die('Restricted access'); 

將在一個新的頁面失敗顯然是行不通的通常的AJAX的東西。和定義_JEXEC等於一個(因爲我已經在幾個職位的SO閱讀)據我讀過的Joomla Docs是一個安全隱患,因爲它提供了一個入口點到該網站。

我見過的other shoutbox module做的方式是在helper.php文件中的函數來指向。這對我來說是有意義的,因爲這是所有功能通常應該存儲的地方。然而,我不清楚如何讓模塊訪問onSubmit()(或相關的)命令上的helper.php文件,並且希望有人能夠對此有所瞭解。

我實際上並不需要具體的事情我發言欄模塊 - 這更多的是如何在的Joomla得到AJAX功能模塊問題以及它是如何安排

回答

5

其他二是在你需要記住,當你讓你的AJAX調用,你不能直接訪問一個PHP文件中的Joomla正軌。所以最好是打電話給你的模塊。在這種情況下,讓模塊檢查POST或URL中的變量。

我JQuery的AJAX的大風扇這是包含比方法是誰建使用的在線留言板的傢伙多了很多自我。

$("#addShout").click(function(event, ui) { 
       $.ajax({ 
        type: 'GET', 
        url: "<?php echo JURI::base() . "index.php?option=mod_mymodule&task=getCustomerJson&selectedCustomer="?>" + encodeURIComponent(value), 
        success:function(data){ 
         $('#shouts').append(data); 
        }, 
        error:function(){ 
         $('#errors').html('<p class="error"><strong>Oops!</strong> Try that again in a few moments.</p>'); 
        } 
       }); 
     }); 

然後我在給你瓦倫丁評論中提及:

$task = JRequest::getVar('task'); 
if($task == "getCustomerJson"){mySuperHelper::getCustomerJson();} 

當存在變數,您只能調用必要的功能。

解釋它有點像這個過程的一部分:

  1. 如果有職的變量或URL,那麼它將顯示模塊的Joomla預期的方式。
  2. 如果檢測到變量調用該方法,將其添加到數據庫和JavaScript功能,將增加它的顯示器。也防止正常顯示發生。

您引用的模塊非常有趣。主文件所引用的幫助器函數完成了MVC中通常處理的模型,並且JavaScript也有點兒不盡如人意。如果你真的想了解一個工作你真的需要深入到fatAjax.js文件,因爲它包含了所有的AJAX的,並設置了mod_shoutbox.php監聽的變量。

+0

很好的答案!謝謝 –

+0

只是供參考,我終於有時間來實現這一點,所以已經提交了一些我需要做的調整!再次感謝這篇文章:) –

1

從我的知識,你可以這樣做AJAX從模塊調用模塊本身的功能(或類似功能)。

可以構建組件並創建返回RAW或JSON作爲響應的圖。因爲Joomla!本身會被稱爲你可以使用Joomla! API &它的所有好東西。這也是一個安全問題,因爲如果您需要獲取敏感數據,您還可以執行ACL /用戶檢查。

時,可以從該模塊調用類似:

index.php?option=com_mycomponent&task=getJson

文章Generating JSON output是一個很好的起點。

+0

我覺得這個模塊呢:)我確定通過一個組件這樣做 - 這是一個簡單得多做這樣的說法,你說的。 http://extensions.joomla.org/extensions/communication/shoutbox/43 –

+0

你可以簡單地做一個$任務= JRequest :: getVar( '任務'); if($ task ==「getJson」){mySuperHelper :: getJson();} – Cleanshooter

0
jQuery(document).ready(function() { 
    jQuery(".btnshow").click(function() { 
     var pagename, pid; 
     pid=jQuery(this).attr('rel'); 
     pagename="<?php echo JURI::root();?>index.php?option=com_componentname&view=result&Id="+pid;  
     jQuery.get(pagename, function (data) { 
      jQuery('.para1').html(data); 
     }); 
    }); 
}); 


<a href="JavaScript:void(0);" rel="<?php echo $id; ?>" title="<?php echo $id; ?>"><img src="<?php echo $image; ?>" alt="" /></a> 
+0

但是,您可以用mod_modulename替換com_componentname,並在helper.php類中添加訪問函數嗎?正如我所說的,這是訪問一個模塊而不是組件功能。我已經在JED鏈接中添加了我正在嘗試瞭解的模塊 –

0

Fron Joomla 3.2如果你需要在Joomla做一個AJAX請求!從自定義模塊或插件中,您可以構建如下的URL。

index.php?option=com_ajax&module=your_module_name&method=YourMethodName&format=json 

每個參數的說明

1. index.php文件選項= com_ajax:所有請求都必須通過com_ajax路由。

2. module = your_module_name:第一部分是您使用的擴展類型。這可以是'模塊'或'插件'。第二部分是擴展名。請注意,您不包括前綴'mod_'或'plg_',只是名稱。

3. method = YourMethodName:這是您試圖調用的方法名稱。如果你在一個模塊中使用它,那麼該方法必須附加'Ajax'。因此,此處表示的方法將爲YourMethodNameAjax。如果你在插件上使用這個方法,這個方法必須加上'onAjax'。所以,在這裏所代表的方法將是onAjaxYourMethodName

時請在Joomla doc