如果你错过了愉快的推特讨论,上周在芝加哥的 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://127.0.0.1/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