Joomla Protostar模板中的PHP代码可以解释这一部分

时间:2013-09-06 11:55:05

标签: php templates joomla joomla-extensions

我正在通过研究和逆向工程默认的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->输入全部?

1 个答案:

答案 0 :(得分: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更改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,您对该视图有什么用途),而控件只控制流量。

每个部分应该只处理涉及其领域的工作。例如,View的代码不应该进行数据库调用,从Web服务获取数据等。这是Model的工作。视图应仅从模型中获取数据,该数据应采用视图所需的格式,然后将其打印出来。

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