2

我通过学习和逆向工程默认的 Joomla Protostar 模板来学习 Joomla 模板开发。我了解大约 80% 的情况,并且通过学习 php 的基础知识,我已经能够复制它。但是,我不明白下面的代码块在做什么(它在定义('_JEXEC')或死后就在模板的顶部;

// Getting params from template
$params = JFactory::getApplication()->getTemplate(true)->params;

$app = JFactory::getApplication();
$doc = JFactory::getDocument();
$this->language = $doc->language;
$this->direction = $doc->direction;

 // Detecting Active Variables
$option   = $app->input->getCmd('option', '');
$view     = $app->input->getCmd('view', '');
$layout   = $app->input->getCmd('layout', '');
$task     = $app->input->getCmd('task', '');
$itemid   = $app->input->getCmd('Itemid', '');
$sitename = $app->getCfg('sitename');

if($task == "edit" || $layout == "form" )
 {
$fullWidth = 1;
}
else
{
$fullWidth = 0;
}

我不明白的一些事情是......

  1. 这些变量是什么,例如“$task”,因为我没有看到它们被设置为参数

  2. 为什么这些变量不像其他变量一样包含在内,$app->input 到底是什么?

4

1 回答 1

3
$option   = $app->input->getCmd('option', '');
$view     = $app->input->getCmd('view', '');
$layout   = $app->input->getCmd('layout', '');
$task     = $app->input->getCmd('task', '');
$itemid   = $app->input->getCmd('Itemid', '');

这些调用通过各种全局变量 $_POST、$_GET、$_SESSION 等查看是否定义了这些变量($_POST['task']、$_GET['task'] 等)。如果不存在,则返回默认值(第二个参数)。

$app->input是 joomla 输入类的对象(如 JRequest、JInput 或类似的)。该类是执行查看全局变量的实际工作的类。您可以更改getCmd为 like getString,但可能会进行其他不这样做的getCmd过滤。getString您必须查看核心文件(request.php、input.php 等)才能了解它的实际作用。

您可以执行以下相同的操作:

$input = new JInput();
//get option or if none use the default 'com_users'
$option = $input->getString("option","com_users"); 

编辑 关于你关于 MVC 的问题:

不,这不是 MVC 的一部分。这只是 joomla 提供了一种过滤传入数据的简单方法。

MVC 是应用程序的数据(模型)、视图和控制器部分的抽象。您可以在组件中看到这一点。查看 com_users 组件或 joomla 附带的任何其他组件。

您将看到模型处理数据,视图仅打印出数据(以及正确的 html、json 视图),而控件仅控制流程。

每个部分都应该只做与其区域相关的工作。例如,视图的代码不应该进行数据库调用、从 Web 服务获取数据等。这是模型的工作。View 应该只从 Model 中获取数据,这些数据应该是 View 需要的格式,然后打印出来。

这并不是说你不能在不同的部分做另一个部分,只是你应该让/构建每个部分做它应该做的工作。

于 2013-09-06T12:01:33.103 回答