我不知道这是否是“官方”的做法,但它对我来说肯定是干净和快速的。我只是将核心 Joomla 文件包含在组件文件夹中的单个文件中,然后将该核心用于我的 jQuery 调用 - 无需模板、MVC 或 CMS 开销。对于 Joomla 1.5,只需要 2 个文件:joomla_platform.php 用于加载基于 Joomla 的 index.php 的 Joomla 的内容,另一个用于使用它并将某些内容返回给 jQuery。请参阅http://api.joomla.org上的文档。
From index.php
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
编辑:这是我如何做到这一点的淡化版本:
不过,我想警告一下是有必要的。我在内部使用它,所以不用担心,但我返回配置的示例只是向您展示如何获取配置,我不会将此示例输出用于一般用途。此处的检查确保管理员用户已登录,但您可以随意调整它。
我还应该提到,这不需要组件或 jQuery 来工作。我使用相同的 2 个文件来编写快速的独立页面,这样我就不必为了利用 Joomla 平台而编写整个组件。显示的 index.php 可以很容易地输出标准 HTML 而不是 json 编码输出来显示普通网页。它绕过了我认为的框架和 CMS 的大部分用处,但有时您不需要所有特定的开销。
组件\com_mycomponent\平台\joomla_platform.php:
<?php
/* If not already done, 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');
}
?>
组件\com_mycomponent\平台\index.php:
<?php
require_once('joomla_platform.php');
$config = new JConfig();
$db = &JFactory::getDBO();
$user =& JFactory::getUser();
//Make sure a logged in user is doing the request (not mandatory, but safer)
//if(!$user->id) {
// die("Not logged in");
if($user->gid < 23) {
die('Administrators only!');
} else {
$query = "SELECT * FROM jos_users ORDER BY id DESC LIMIT 1 /* Get the last registered user */";
$db->setQuery($query);
$row = $db->loadAssoc();
//echo json_encode($row); // Return only the SQL result
//echo json_encode(get_object_vars($user)); // Return only the user object
//echo json_encode(get_object_vars($config)); // Return only the config object
echo json_encode(
array_merge( // Merge the arrays, and return them all
$row,
get_object_vars($user),
get_object_vars($config)
)
);
}
?>
在 php 文件中使用 jQuery 示例:
$.ajax({
type: "GET",
url: "components/com_mycomponent/platform/index.php",
dataType: "json",
success: function(joomla) {
alert('Joomla Platform info appended to myDiv for '+joomla.sitename);
$.each(joomla, function(key, value) {
$('#myDiv').append(key + ' : ' + value + '<br/>')
});
},
error:function (xhr, ajaxOptions, thrownError){
alert("Joomla Platform Error Status: " + xhr.status + " Thrown Errors: "+thrownError);
}
});