Joomla 3 MVC平台12.1自定义组件模板覆盖

时间:2013-04-19 15:52:13

标签: model-view-controller joomla components joomla-extensions joomla3.0

我正在使用Joomla 3的MVC 12.1平台,并遇到一些让模板覆盖工作的问题。

My Component有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');

感谢您的帮助

1 个答案:

答案 0 :(得分:0)

终于找到了解决方案。我开始通过跟踪组件来查看正在加载的内容。原来一切都是通过我的商店控制器强制的。所以我对组件检查的方式略有改变,看看要使用哪个控制器。

$controller = $app->input->get('controller','stores');

$controller = $app->input->get('view','stores');

有一点需要注意的是,我的所有视图都与我的控制器名称完全匹配,所以我不必做任何特别的事情就知道这会有效。