Разработка компонента joomla с помощью запросов Ajax

У меня есть PHP-скрипт, используемый для запросов AJAX, но я хочу, чтобы они могли работать под управлением структуры Joomla (2.5), чтобы я мог иметь доступ к идентификатору сеанса, идентификатору пользователя и т. Д.

Например:

$(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, но из того, что я вижу, это то, что я делаю.

Есть ли что-то еще, что я мог бы использовать?

Related of "Разработка компонента joomla с помощью запросов Ajax"

если вы создаете компонент, вы можете создать новый view для необработанных запросов, например compoments/com_yourcomponent/views/ajax/view.raw.php и поместить всю логику и вывод туда, где url будет index.php?option=com_yourcomponent&view=ajax&format=raw

или

вы можете создать новый метод в controller.php с exit() после печати информации, а url будет index.php?option=com_yourcomponent&task=ajax

Это абсолютно возможно с помощью платформы Joomla . Пример, который я приведу ниже, на самом деле для J1.5, но легко адаптируется к J2.5 с некоторой настройкой на включенные файлы.

  1. Создайте файл платформы joomla для включения, как показано ниже:
  2. Включите этот файл в свой скрипт
  3. Используйте текущую среду Joomla для своих функций.

Еще одна важная рекомендация – реализовать API ReSTful вместо ваших собственных скриптов. Это ужасно просто, используя Luracast Restler . Я запустил его и запустил около 10 минут, а затем добавил Joomla Framework, как показано ниже, и имел чрезвычайно гибкий API на основе Joomla, используя призывы 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'); } ?> 

Вам не нужно создавать какие-либо пользовательские файлы и добавлять их в скрипт 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)); } } ... 

Это лишь один из примеров того, как это можно сделать.