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