这是一个关于如何为Joomla开发一个模型-视图-控制器组件的系列教程。Joomla 3. x。

注意:

如果你是第一次接触到Joomla!请阅读有关组件功能的绝对基础知识。

需求:

你需要Joomla !3.0(使用PHP、MySQL和Apache/Microsoft IIS)或更大的本教程。我收集了很多信息,然后我开始迁移新Joomla的组件!2.5到3.0。下面是一些用于迁移的重要信息。请参阅有关迁移升级版本的所有信息。使用“display_errors”来帮助调试错误。

迁移Joomla 2.5 Joomla 3.0:

请记住,您需要在直接扩展JModel、JView或JController的任何地方添加Legacy。如果它是间接的(比如通过JModelList),您就不必,它已经被处理了。除此之外,正如很久以前所宣布的,不支持的代码已经被删除(我认为JParameter是最大的影响),扩展只需要稍微改变一下……尽管您将希望看到Kyle正在进行的输出更改。当然,如果您正在构建独立的平台应用,新的MVC和JApplicationWeb / JApplicationCLI是完全支持的工作方式和优点,而我们做这个是新安装包已经在服务器上到了CMS。

示例:由于我们在3.0中删除了DS常数,所以我们需要替换com_media中常量的用法。最不引人注目的变化是用PHP的DIRECTORY_SEPARATOR常量替换它,因为DS是它的别名。然而,推荐的方法是简单地使用斜杠,即,'components/com_example/models/example.php' 而不是 'components'.DS.'com_example'.DS.'models'.DS.'example.php'.这是为了windows安全。

if(!defined('DS')){
define('DS',DIRECTORY_SEPARATOR);
}

//$controller = JController::getInstance('HelloWorld');
$controller = JControllerLegacy::getInstance('HelloWorld');

//class HelloWorldViewHelloWorlds extends JView
class HelloWorldViewHelloWorlds extends JViewLegacy

class HelloWorldController extends JControllerLegacy

class HelloWorldModelHelloWorld extends JModelItemLegacy

class HelloWorldModelUpdHelloWorld extends JModelFormLegacy

JRegistry::getValue() now is JRegistry::get()

//Convert sample to JRegistry with LoadJSON - Sample from Joomla! 3.0 sourcecode

//				$params = new JRegistry;
//				$params->loadJSON($this->item->params);
//				$this->item->params = $params;

				$params = new JRegistry;
				$params->loadString($item->params);
				$item->params = $params;

新MVC Joomla !3.0

该平台的第12.1版本为模型-视图-控制器范例引入了一种新的格式。原则上,类JModel、JView和JController现在是接口,基础抽象类分别是JModelBase、JViewBase和JControllerBase。此外,所有的类都被简化了,删除了许多与Joomla的耦合!这对于独立的Joomla CMS来说是不必要的平台的应用程序。