これが「公式の」方法であるかどうかはわかりませんが、私にとっては確かにクリーンで迅速です。コンポーネントフォルダー内の単一のファイルにコアJoomlaファイルを含め、そのコアをjQuery呼び出しに使用します。テンプレート、MVC、またはCMSのオーバーヘッドはありません。Joomla 1.5の場合、必要なファイルは2つだけです。joomla_platform.phpはJoomlaのindex.phpに基づいてJoomlaの内臓をロードし、もう1つはそれを使用して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を必要としないことにも言及する必要があります。Joomlaプラットフォームを活用するためだけにコンポーネント全体を作成する必要がないように、同じ2つのファイルを使用してクイックスタンドアロンページを作成します。示されているindex.phpは、通常のWebページを表示するために、jsonでエンコードされた出力の代わりに標準のHTMLを簡単に出力できます。フレームワークと私が推測するCMSの有用性の多くをバイパスしますが、特定の何かのためにすべてのオーバーヘッドを必要としない場合もあります。
components \ com_mycomponent \ platform \ 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');
}
?>
components \ com_mycomponent \ platform \ 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);
}
});