我正在通过研究和逆向工程默认的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;
}
我得到的一些东西是......
这些变量是什么,例如“$ task”,因为我没看到它们被设置为参数
为什么这些变量不像其他变量一样包含在内,什么是$ app->输入全部?
答案 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的工作。视图应仅从模型中获取数据,该数据应采用视图所需的格式,然后将其打印出来。
这并不是说你不能做另一个部分在另一个部分工作,只是你应该让/建立每个部分完成它应该做的工作。