Joomla 3 MVC 平台 12.1 自定义组件模板覆盖
Posted
技术标签:
【中文标题】Joomla 3 MVC 平台 12.1 自定义组件模板覆盖【英文标题】:Joomla 3 MVC platform 12.1 custom component template override 【发布时间】:2013-04-13 01:58:59 【问题描述】:我正在使用 Joomla 3 的 MVC 12.1 平台,并遇到了一些让模板覆盖工作的问题。
我的组件有 3 个控制器:商店、优惠券、销售。
对于这些控制器中的每一个,我都将我的观点称为与此类似:
$paths = new SplPriorityQueue;
$paths->insert(JPATH_SITE.'/templates/'.$app->getTemplate().'/html/com_stores/stores', 'normal');
$paths->insert(JPATH_COMPONENT . '/views/stores/tmpl', 'normal');
$view = new StoresViewsStores(new StoresModelsStore, $paths);
$view->setLayout('default');
// Render our view.
echo $view->render();
它们之间唯一的区别是分别切换视图/模型/目录。
只要我的模板中不包含任何覆盖,一切都会按预期工作。但是,一旦我包含覆盖,事情就会变得不稳定。
如果我在模板中添加com_stores/stores/default.php
,我的商店会被正确覆盖,但是优惠券和销售控制器开始指向商店覆盖而不是它们自己的文件夹。
是我缺少的东西使每个控制器都指向相同的覆盖吗?
这里仅供参考是每个控制器中的路径。
商店:
$paths->insert(JPATH_SITE.'/templates/'.$app->getTemplate().'/html/com_stores/stores', 'normal');
$paths->insert(JPATH_COMPONENT . '/views/' . $viewName . '/tmpl', 'normal');
销售:
$paths->insert(JPATH_SITE.'/templates/'.$app->getTemplate().'/html/com_stores/sales', 'normal');
$paths->insert(JPATH_COMPONENT . '/views/' . $viewName . '/tmpl', 'normal');
优惠券:
$paths->insert(JPATH_SITE.'/templates/'.$app->getTemplate().'/html/com_stores/coupons', 'normal');
$paths->insert(JPATH_COMPONENT . '/views/' . $viewName . '/tmpl', 'normal');
感谢您的帮助
【问题讨论】:
你读过docs.joomla.org/… 吗? 问题不在于如何覆盖某些东西,而在于如何在新的 MVC 框架中正确设置路径。后来正如我在回答中描述的那样,我发现控制器设置不正确,这使我所有的观点都指向同一个覆盖。 如果您有名为 stores 的控制器,则您没有使用新的 mvc。新的 mvc 具有名称为 save、put、get、copy 和其他动词的控制器。 这是一个前端组件,我不需要保存,放,等等等等;除了我用来扩展的新框架类之外的命名约定,而不是将 Legacy 附加到事物... 【参考方案1】:终于找到了解决办法。我首先通过跟踪组件来查看正在加载的内容。原来一切都是通过我的商店控制器强制执行的。因此,我对组件检查以查看要使用的控制器的方式稍作更改。
$controller = $app->input->get('controller','stores');
到
$controller = $app->input->get('view','stores');
需要注意的一点是,我的所有视图都与我的控制器名称完全匹配,所以我不需要做任何特别的事情来知道这会起作用。
【讨论】:
以上是关于Joomla 3 MVC 平台 12.1 自定义组件模板覆盖的主要内容,如果未能解决你的问题,请参考以下文章
在 ASP.NET MVC 3 中创建基于平台显示不同视图的自定义 ViewResult
在 Joomla 3 中向组件添加带有自定义 url 参数的菜单类型