如果你错过了愉快的推特讨论,上周在芝加哥的 Joomla! 日活动中,有一群开发者——是的,包括你 Ryan Ozimek——在一个房间里度过了一段愉快的时光,编写平台应用程序。正如 Nicholas Dionysopoulos 对我说:“我想这将结束那个无休止的 '为什么我们要将平台从 CMS 中分离出来' 的问题。”老实说,我之前也有同样的问题,直到参加了芝加哥的 Joomla! 日活动和那个令人惊叹的(而且非常有趣和富有成效的)Joomla! 平台会议 :)”Nick 已经甚至提议了一个CLI 应用程序以包括在 CMS 的核心中。
“平台应用程序”究竟是什么?好吧,你已经知道其中三个:Joomla! CMS、Joomla! CMS 管理员和 Joomla! CMS 安装程序。那么,人们可能还需要什么呢?实际上,天空才是极限。Joomla! 平台可以用来构建各种 PHP 应用程序,其中一些可能与 CMS 一起工作,而另一些则是完全独立的。构建一个简单的平台应用程序甚至比构建一个简单的模块还要简单。事实上,你甚至可以只在一个文件中完成它。
Ryan 等人在 文档wiki 中编写了一些示例。我们还在这里开始了它们的可下载集合: 示例应用程序。在平台上,有两种应用程序:命令行和Web。对于CLI,Hello World 和 Hello You 是由 Ryan 编写的,Twitter 那个是由 Steven Pignataro 编写的,而 Joomla! Rocks 是由 Javier Gómez 编写的(如果我把这些功劳弄错了,请接受我的道歉)。我制作了示例Web应用程序。Dustin Clute 也提供了一个 使用守护进程的CLI应用(尽管他也发现了一个库的bug)。到目前为止,这些都是简单的;它们没有配置文件,也没有使用数据库。然而,这些都没有限制,我们将添加一些更复杂的。
现在,是时候让你加入这个乐趣,尝试这些并制作你自己的应用程序了。当你制作了一个,请添加到这个集合中,这样我们就可以有一些有趣的应用程序来玩了。
运行平台应用程序
那么,你实际上要对这些文件做什么呢?
首先,你需要确保你的网络服务器上有一个平台的副本。你可以去 github 并从下载按钮下载当前版本的zip文件。本地保存并解压缩它。
要运行mywebapp应用程序,将文件解压缩到平台的根目录并浏览到它。所以如果你在本地platform文件夹中放置了平台,那么就是 https:///platform/mywebapp。
对于CLI应用程序,把它放在相同的地方,在你的平台根目录。
要运行CLI应用程序并实际看到它们运行,你需要处于Web服务器的命令行。如何到达那里取决于你的操作系统以及你是否拥有本地安装。如果你有localhost,你可以进入终端(在Linux或Mac上)或CMD(在Windows上),否则你需要使用类似puTTy的工具ssh到你的远程主机。
一旦你到达那里,输入
php helloworldapp.php
你应该看到Hello World。或者如果你尝试另一个,可能会看到其他内容。
构建平台应用程序
一旦你了解了它们的制作方式,你就可以制作你自己的。对于CLI应用程序,你所真正需要的是一个类和一个执行方法。这是Ryan的
<?php
define('_JEXEC', 1);
require_once ( '../libraries/import.php' );
jimport( 'joomla.application.cli' );
class HelloWorld extends JCli
{
public function execute( )
{
$this->out( 'Hello World' );
}
}
JCli::getInstance( 'HelloWorld' )->execute( );
所以,他引入了 import.php,这开始了整个引导过程。
然后,因为他正在构建CLI,所以他扩展了JCli。
然后他创建了一个简单的方法,只是输出“Hello World”。
最后,他实例化了JCli对象,我们就完成了。
我看到了Ryan的代码,然后我决定我们需要一个Hello World的Web应用程序。我用两个文件做到了这一点,myapp.php和application.php。
在application.php中,我放置了我的类,它扩展了JApplication并具有render方法。
<?php
/**
* @copyright Copyright (C) 2005 - 2011 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
// no direct access
defined('JPATH_PLATFORM') or die;
/**
* Joomla! Application class
*
* Provide many supporting API functions
*
* @package Joomla.MyWebApp
* @subpackage Application
*/
final class JMyWebApp extends JApplication
{
/**
* Display the application.
*/
public function render()
{
echo '<h1>My Web Application</h1>';
echo 'The current URL is '.JUri::current().'<br />';
echo 'The date is '. JFactory::getDate('now');
}
}
你可以看到我决定使用两个API,用于日期和当前URI。这样我们就知道它不仅仅是一个php文件,而实际上是一个Joomla平台应用。然后mywebapp.php是
<?php
// Usually this will be in the framework.php file in the includes folder.
require_once JPATH_PLATFORM.'/import.php';
// Use jimport to get the specific packages your application needs.
jimport('joomla.environment.uri');
jimport('joomla.utilities.date');
//It's an application, so let's get the application helper.
jimport('joomla.application.helper');
$client = new stdClass;
$client->name = 'mywebapp';
$client->path = JPATH_MYWEBAPP;
JApplicationHelper::addClientInfo($client);
// Instantiate the application.
// We're setting session to false because we aren't using a database so there is no where to store it.
$config = Array ('session'=>false);
$app = JFactory::getApplication('mywebapp', $config);
// Render the application. This is just the name of a method you create in your application.php
$app->render();
你可以看到这看起来更像你在CMS安装的index.php文件中看到的内容。定义常量,然后进行导入(就像CLI示例中一样)并jimport你需要的库。然后,因为我没有数据库或configuration.php文件,将会话设置为false,实例化应用程序,并使用render方法获取页面。太棒了!
好的,现在轮到你了。制作一个应用程序并分享它,无论是在wiki上还是在我们的 code.joomla.org 仓库中。别忘了tweet你的成功 :)
更新:好的,好的,我清理了标记。EW