Joomla 3 - 自定义组件 - 如何从管理视图访问站点模型?
Joomla 3 - Custom Component - How to access site model from Admin View?
我使用组件创建器为 Joomla 3 生成自定义组件。我在管理员面板中有一个视图需要前端模型的功能。
我已经 google 搜索了好几天,试图找到合适的答案,这是我最接近有效的回复:
但是,在该回复中,他似乎使用了来自另一个站点视图的站点视图模型。
以下是关于我的组件结构的一些信息:
姓名:com_stargazer
管理员查看:电子邮件
index.php?option=com_stargazer&view=email&layout=test
/administrator/components/com_stargazer/views/email/tmpl/test.php
站点视图和模型:returnpage
/components/com_stargazer/models/returnpage.php
/components/com_stargazer/views/returnpage/tmpl/default.php
我试图通过包含路径来修改我的管理视图以包含站点模型:
$this->setModel(getModel(JModelLegacy::addIncludePath(JPATH_SITE . '/components/com_stargazer/models', 'returnpageModel')));
$this->setModel(JModelLegacy::getInstance('returnpage', 'stargazerModel'));
// assigns array from the second model to 'ItemsOtherModel.' there is no '$' sign used.
$this->ItemsOtherModel = $this->get('tags','returnpage');
但是,getModel 似乎无法从视图访问。 (可能只是控制器?)
其他,参考文献说要修改控制器(评论中发布的其他参考文献):
https://docs.joomla.org/Using_multiple_models_in_an_MVC_component
在过去的几天里,我尝试了上述参考代码示例的各种迭代。 . .最终我对修改哪个控制器感到困惑?我是否需要修改管理控制器或站点控制器才能使其正常工作?将功能添加到管理模型并在站点视图中访问它会更容易吗?
调试起来也很困难,因为我不知道是哪个模型引发了错误。到目前为止,我最好的猜测是,我根本没有运气从管理员视图附加到站点模型。如果您能帮助解决这个问题,我们将不胜感激。
这是我的第一个问题,所以我希望它足够清楚。
如果需要,我可以澄清。
提前致谢。
要调用前端或后端模型,您可以使用 JLoader 甚至 require_once 来包含模型文件。
使用 JLoader,您可以像这样在管理视图中调用模型
JLoader::import('joomla.application.component.model'); //Load the Joomla Application Framework
JLoader::import( 'returnpage', JPATH_SITE . '/components/com_stargazer/models' ); //Call the frontend model directory
$tags_model = JModelLegacy::getInstance( 'returnpage', 'StargazerModel' );//Instantiate the model
$tags = $tags_model->gettags();
你也可以使用require_once
require_once JPATH_COMPONENT_SITE.'/models/returnpage.php';
$tags_model = JModelLegacy::getInstance( 'returnpage', 'StargazerModel' );//Instantiate the model
$tags = $tags_model->gettags();
我使用组件创建器为 Joomla 3 生成自定义组件。我在管理员面板中有一个视图需要前端模型的功能。
我已经 google 搜索了好几天,试图找到合适的答案,这是我最接近有效的回复:
但是,在该回复中,他似乎使用了来自另一个站点视图的站点视图模型。
以下是关于我的组件结构的一些信息:
姓名:com_stargazer
管理员查看:电子邮件
index.php?option=com_stargazer&view=email&layout=test /administrator/components/com_stargazer/views/email/tmpl/test.php
站点视图和模型:returnpage
/components/com_stargazer/models/returnpage.php /components/com_stargazer/views/returnpage/tmpl/default.php
我试图通过包含路径来修改我的管理视图以包含站点模型:
$this->setModel(getModel(JModelLegacy::addIncludePath(JPATH_SITE . '/components/com_stargazer/models', 'returnpageModel')));
$this->setModel(JModelLegacy::getInstance('returnpage', 'stargazerModel'));
// assigns array from the second model to 'ItemsOtherModel.' there is no '$' sign used.
$this->ItemsOtherModel = $this->get('tags','returnpage');
但是,getModel 似乎无法从视图访问。 (可能只是控制器?)
其他,参考文献说要修改控制器(评论中发布的其他参考文献):
https://docs.joomla.org/Using_multiple_models_in_an_MVC_component
在过去的几天里,我尝试了上述参考代码示例的各种迭代。 . .最终我对修改哪个控制器感到困惑?我是否需要修改管理控制器或站点控制器才能使其正常工作?将功能添加到管理模型并在站点视图中访问它会更容易吗?
调试起来也很困难,因为我不知道是哪个模型引发了错误。到目前为止,我最好的猜测是,我根本没有运气从管理员视图附加到站点模型。如果您能帮助解决这个问题,我们将不胜感激。
这是我的第一个问题,所以我希望它足够清楚。
如果需要,我可以澄清。
提前致谢。
要调用前端或后端模型,您可以使用 JLoader 甚至 require_once 来包含模型文件。 使用 JLoader,您可以像这样在管理视图中调用模型
JLoader::import('joomla.application.component.model'); //Load the Joomla Application Framework
JLoader::import( 'returnpage', JPATH_SITE . '/components/com_stargazer/models' ); //Call the frontend model directory
$tags_model = JModelLegacy::getInstance( 'returnpage', 'StargazerModel' );//Instantiate the model
$tags = $tags_model->gettags();
你也可以使用require_once
require_once JPATH_COMPONENT_SITE.'/models/returnpage.php';
$tags_model = JModelLegacy::getInstance( 'returnpage', 'StargazerModel' );//Instantiate the model
$tags = $tags_model->gettags();