【问题标题】:PHP code inside Joomla Protostar template can somebody explain this sectionJoomla Protostar模板中的PHP代码有人可以解释这部分
【发布时间】:2013-09-06 11:55:05
【问题描述】:

我通过学习和逆向工程默认的 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 到底是关于什么的?

【问题讨论】:

    标签: php templates joomla joomla-extensions


    【解决方案1】:
    $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 视图),而控件仅控制流程。

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

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

    【讨论】:

    • 感谢您的解释。很明显,只知道 php 的基础知识,我对 Joomla 使用的整个世界一无所知。有这个名字吗?这就是 MVC 的全部意义所在吗?我问是因为我显然需要买一本新教科书或其他东西
    • 为您的 MVC 问题添加了一部分。
    • 我可以再问一个愚蠢的问题吗?这样做有什么意义,例如“$site_title = $this->params->get('sitetitle');”只是为了以后使用它,例如“elseif (($site_title) && ($site_desc))”?为什么不是“elseif ($this->countModules('site_title') etc...”
    • elseif 正在检查站点标题和站点描述是否存在/设置,如果您使用 countModules,则只会检查是否有任何 joomla 模块设置为名为 @987654330 的位置@
    猜你喜欢
    • 1970-01-01
    • 2021-10-24
    • 2016-06-02
    • 2015-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多