【问题标题】:Joomla 3 - Custom Component - How to access site model from Admin View?Joomla 3 - 自定义组件 - 如何从管理员视图访问站点模型?
【发布时间】:2016-09-29 14:50:00
【问题描述】:

我使用组件创建器为 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?option=com_stargazer&view=email&layout=test /administrator/components/com_stargazer/views/email/tmpl/test.php

站点视图和模型:返回页面

/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 似乎无法从视图中访问。 (可能只有控制器?)

其他,参考说要修改控制器(在 cmets 中发布的其他参考):

https://docs.joomla.org/Using_multiple_models_in_an_MVC_component

在过去的几天里,我尝试了上述代码示例的各种迭代。 . .最终我对修改哪个控制器感到困惑?我是否需要修改管理控制器才能使其正常工作,还是站点控制器?将功能添加到管理模型并在站点视图中访问它会更容易吗?

调试也很困难,因为我不知道哪个模型引发了错误。到目前为止,我最好的猜测是,我根本没有运气从管理员视图附加到站点模型。如有任何帮助,我们将不胜感激。

这是我的第一个问题,所以我希望它足够清楚。
如果需要,我可以澄清。 提前致谢。

【问题讨论】:

标签: php model-view-controller joomla components


【解决方案1】:

要调用前端或后端模型,您可以使用 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 API。
猜你喜欢
  • 2014-04-09
  • 1970-01-01
  • 2017-10-29
  • 2020-03-04
  • 2016-03-30
  • 1970-01-01
  • 2016-06-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多