有任何方法可以在joomla视图中以编程方式设置模板吗?
我使用MVC架构来开发我的组件。我有两个前端的模板。1登录用户(模板B)其他普通访问者(模板A)。
我遇到的问题是,我有一家书店供登录用户使用。模板是模板B。书店里有搜索图书的功能。搜索和书店从我的组件加载。指定给菜单项并加载模板B的书店,但当我单击“搜索”按钮时,它会带来模板A的结果,这意味着模板从模板B更改为模板A。
我的网站的默认模板是模板B。我通过菜单项分配模板A。
我用的是Joomla 2.5
发生了什么?
发布于 2015-06-10 11:06:53
我也遇到了类似的问题,在这里,我分别为注册用户和客人使用了两个模板。我希望只在特定的模板中加载视图,所以我不得不在视图中以编程方式设置/更改模板,我尝试使用Itemid,但它只是不可靠,最后,经过一些研究,我得到了如下工作。
$app = JFactory::getApplication();
$app->setTemplate('Protostar'); //or whatever your template is named.这样,我可以确定这个视图/布局只加载在一个特定的模板中。我在joomla3.4上成功地使用了它,尽管它可能在您的版本上有效。
发布于 2013-06-07 08:38:16
我认为,这可以通过使用JSite::setTemplate($template,$templateParams)方法来完成,但我不确定这是否能与缓存一起工作,需要进行测试。
发布于 2022-06-02 22:16:25
setTemplate()方法中的Joomla 4存在问题。它是为SiteApplication类实现的( Factory::getApplication()可以访问哪个实例,以便从站点视图进一步设置模板),但它不是针对AdministratorApplication.实现的。因此,很难以编程的方式为管理员的视图设置模板。
经过一些调整之后,我能够在接下来的几行中实现这一点(在HtmlView.php):中使用它)
$app = Factory::getApplication();
$app->set('theme', 'any-theme-name');
$app->set('themeParams', 'any-params-for-theme');您甚至可以在管理员的模板文件夹中设置站点s (frontend) templates for admin的视图,而无需复制它--只需添加以下内容
$app->set('themes.base', JPATH_SITE . DIRECTORY_SEPARATOR . 'templates');在Joomla4.1.4中工作得很好。
对于应用程序的站点部分,这个https://stackoverflow.com/a/30754502/3486976方法应该仍然有效,所以在上面的黑客攻击中没有必要。
https://stackoverflow.com/questions/14500601
复制相似问题