2012-07-12 106 views
2

我有一個PHP腳本用於AJAX查詢,但我希望他們能夠在Joomla(2.5)框架的傘下操作,所以我可以有會議ID,用戶ID等可用於我。joomla組件開發與Ajax查詢

例如:

$(function() { 
$.ajax({          
    url: 'ajax.php', //the script to call to get data      
    dataType: 'json'  //data format  
    ... 
}); 
}); 

凡ajax.php有這樣的代碼:

$user =& JFactory::getUser(); 

從我的理解,最好讓你的AJAX/JSON調用一個標準的Joomla組件。我對開發一個MVC組件不太瞭解,但是從我所看到的情況來看,這對我想做的事情來說是過度的。

有什麼我可以使用的?

+0

我已經在此線程中回答了此問題:http://stackoverflow.com/questions/10820052/how-to-correctly-code-a-joomla-mvc-component-to-perform-jquery-ajax- gets-posts/10833585#10833585 – 2012-07-13 13:12:02

+0

@SørenBeckJensen我已經看到了,但它回答說明你已經有了一個組件。這是我的問題。對於我想要做的事情來說,組件開發似乎有點矯枉過正。即使是hello world組件開發教程也是巨大的。必須有一個更簡單的快捷方式來獲取組件設置,以便我可以使用AJAX? – Tom 2012-07-13 18:46:44

回答

4

如果你創建一個組件,您可以創建例如compoments/com_yourcomponent/views/ajax/view.raw.php原料查詢新view,並把所有的邏輯和輸出在那裏 網址將是index.php?option=com_yourcomponent&view=ajax&format=raw

可以打印的信息和網址後controller.php創造新的方法與exit()index.php?option=com_yourcomponent&task=ajax

+0

這就是問題所在,正在創建一個組件。我看不到一個簡單的方法來設置一個沒有通過所有的MVC的東西。有沒有辦法創建一個組件,而不經過MVC的過程? – Tom 2012-07-13 18:37:11

+0

複製組件/ com_contact/contact.php重命名爲yourcomponentname.php 編輯刪除助手,包括更改控制器名稱。 也複製controller.php,重命名類名,並在'}之前用'exit();''添加'function ajax() – VampiRUS 2012-07-13 23:58:33

2

這是絕對有可能通過Joomla Platform的方式。下面我給出的例子實際上是J1.5,但可以輕鬆適應J2.5,並對包含的文件進行一些調整。

  1. 創建一個Joomla平臺的文件,包括如下圖所示:
  2. 包括在腳本
  3. 使用您的功能現在可用的Joomla環境文件。

另外建議您實現一個ReSTful API而不是您的自定義腳本。這是非常簡單的使用Luracast Restler。我在10分鐘左右就開始運行了,然後添加了如下所示的Joomla框架,並且有一個極其靈活的基於Joomla的API,使用AJAX調用我的站點在一小時內!就我而言,年最佳花費開發時間

yourscript.php

require_once('joomla_platform.php'); 
/* Get some of the available Joomla stuff */ 
$config = new JConfig(); 
$db = &JFactory::getDBO(); 
$user =& JFactory::getUser(); 
if($user->gid <25) { 
    die ("YOU CANT BE HERE"); 
} 
echo "<pre>".print_r($config,true)."</pre>"; 

joomla_platform.php

<?php 
    /* Initialize Joomla framework */ 
    if (!defined('_JEXEC')) { 
     define('_JEXEC', 1); 
     //  define('JPATH_BASE', dirname(__FILE__)); 
     define ('JPATH_BASE', "c:\\wamp\\www"); 
     define('DS', DIRECTORY_SEPARATOR); 
     /* Required Files */ 
     require_once (JPATH_BASE .DS.'includes'.DS.'defines.php'); 
     require_once (JPATH_BASE .DS.'includes'.DS.'framework.php'); 
     /* To use Joomla's Database Class */ 
     require_once (JPATH_BASE .DS.'libraries'.DS.'joomla'.DS.'factory.php'); 
     require_once (JPATH_LIBRARIES.DS.'joomla'.DS.'import.php'); // Joomla library imports. 
     /* Create the Application */ 
     global $mainframe; 
     $mainframe =& JFactory::getApplication('site'); 
    } 
?> 
+0

謝謝,我會再試一次,但我已經用2.5下了這個路徑,似乎並沒有發現那麼容易,但是它的工作原理是1.5。 – Tom 2012-07-13 18:35:32

2

你並不需要創建任何自定義文件,並將它們添加到的Joomla腳本。你只需要一個控制器來提供Ajax請求。你甚至不需要一個視圖(單向)。

你的Ajax調用應該是這樣的:

$(function() { 
$.ajax({          
    url: 'index.php?option=com_<component_name>&no_html=1task=<controller_name>.<controller_action>', //not_html = 1 is important since joomla always renders it's default layout with menus and everything else, but we want the raw json output    
    dataType: 'json' //data format  
    ... 
}); 
}); 

而且你的控制器:

/* 
    * @file admin/controller/<controller_name>.php 
    */ 

class <component_name>Controller<controller_name> extends JController 
{ 

     public function <controller_action>() 
     { 

     //do something 
     $respnse['message'] = 'Your message for the view'; 
     die(json_encode($reponse)); 
     } 
    } 

... 

這只是如何它可以做一個例子。