2

我正在开发一个 Joomla 组件,我有许多任务要在组件中执行。我目前正在做的是拥有一个视图和对应的控制器。现在,如果用户请求某些任务,我只需在控制器中调用相应的方法。在这个方法本身中,我编写了所有显示给用户的 HTML 代码。一切正常。

我唯一的疑问是,我是否仍然遵循 MVC 模型并且我的组件会被 Joomla 社区接受吗?

如果这不是正确的方法,请告诉我如何从单个控制器为不同的任务设置不同的视图。视图位于views>name>tmpl>default.php 和view>name>tmpl>sample.php

4

2 回答 2

1

这似乎需要一个多部分的答案,所以,

  1. JED“社区”有几个很好的文档可以帮助您提交内容,其中包括服务条款扩展目录常见问题解答和关于2010 年底开始的“增强批准流程”的博客条目。

  2. 就“社区”而言,处理来自同一控制器的不同视图的“正确”方法可能是确保最终用户/设计师可以使用 Joomla! 的覆盖。因此,您目录中的每个文件tmpl都应尽可能仅包含 HTML 和多个文件<?php echo $this->myVariable; ?>,并偶尔使用循环来解开一组数据以进行显示。您的控制器不应生成 HTML,如果生成了,则最终用户/设计人员将无法为您的组件创建模板覆盖。

  3. 如果您查看标准的 Joomla!2.5 组件 Controllers 和 sub-controller 的排列往往与 view 相匹配,例如,如果你看com_content有一个对应的 controller 和 view for articles, articleand featured

  4. 话虽如此,根据用户正在执行的操作,对相同的内容进行不同的处理是可以接受的,并且得到支持tmpl。这是通过使用调用 URL 的形式来实现的。例如,我们的一个组件呈现相同的视图,但基于用户权限,他们可能正在查看tmpl 或tmpl 文件。实现这一点的代码非常简单。viewtaskcontroller.taskeditrun

例如

if($canDo->get('core.edit')) {
    $plan = '<a href="'.JRoute::_( 'index.php?option=com_easystaging&task=plan.edit&id='. $row->id ).'">'.$row->name.'</a>';
} elseif ($canDo->get('easystaging.run')) {
    $plan = '<a href="'.JRoute::_( 'index.php?option=com_easystaging&task=plan.run&id='. $row->id ).'">'.$row->name.'</a>';
} else {
    $plan = $row->name;
}
于 2012-06-25T00:47:49.670 回答
1

最初不打算回答这个问题,但“被 Joomla 社区接受”说服我投入我的两个比特。

恕我直言,典型的 Joomla 用户不是 MVC、PHP 甚至开发方面的专家,所以我首先关心的是让他们“接受”它。我尝试在 Joomla Content 组件等普遍接受的组件以及用户如何与之交互之后对任何组件开发进行建模。当您为文章添加新菜单项时,请注意选项的组织方式 - 存档、单篇、类别、精选等。这是用户理解的组织,因此我相应地组织 MVC

也许不是技术上完美的答案,但归根结底,Joomla CMS 通常适用于非技术用户,所以我通常首先从他们的角度来看,确保我在技术上保持健全。

于 2012-06-24T16:59:50.270 回答