2016-05-31 45 views
1

我使用组件创建器为Joomla 3生成自定义组件。我在管理员面板中有一个视图,该视图需要来自前端模型的功能。Joomla 3 - 自定义组件 - 如何从管理视图访问网站模型?

我一直在做谷歌搜索了好几天试图找到一个合适的答案,这是我来工作的响应最接近:

How can I include multiple models in one view for in a Joomla 3.x component built with Component Creator

然而,在回应他似乎是使用来自其他站点视图的站点视图模型。

这里是关于我的组件结构的有点:

名称:com_stargazer

管理员查看:电子邮件

的index.php选项= com_stargazer &视图=电子邮件&布局=测试 /管理员/组件/ 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

在过去的几天里,我已经试过上述各种迭代参考代码示例。 。 。最终我很困惑要修改哪个控制器?我是否需要修改管理员控制器才能使其工作或者站点控制器?将该功能添加到管理员模型并在网站视图中访问它会更容易吗?

调试也很困难,因为我不知道哪个模型会抛出错误。我迄今为止的最佳猜测是,我从管理视图中完全没有运气附加到网站模型。任何帮助将不胜感激,在得到这个整理。

这是我的第一个问题,所以我希望它很清楚。
我可以澄清,如果需要。 在此先感谢。

+0

其他Referrences: https://www.component-creator.com/en/forum/community-support/153-multiple-models-in-one-view-for-j3-3 *** https://api.joomla.org/cms-3/classes/JModelLegacy.html *** https://www.corephp.com/blog/joomla-mvc-load-a-model-from-anywhere/ *** https://lvstechnologies.wordpress.com/2013/07/17/joomla-mvc-load-a-model-from-anywhere/ *** –

回答

2

要调用前端或后端模型,可以使用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(); 
+0

非常感谢。你的答案非常简单。我尝试了两种方法,并且它们都工作得很好。你知道是否有一种比另一种更受欢迎的方式?我感谢你的时间和专业知识。 –

+0

非常欢迎。第二个执行时间较短,但我更喜欢第一个,因为它遵循Joomla API。 –