我想将一篇文章加载到Joomla框架中的组件模板php代码中。
我可以加载php中的模块,文章中的模块,文章中的组件和..但我从来不想将文章加载到组件php中。
是否有人知道该代码片段?
感谢任何帮助。
答案 0 :(得分:3)
我会在你的视图中加载文章模型,如
JModelLegacy::addIncludePath(JPATH_SITE.'/components/com_content/models', 'ContentModel');
$model = JModelLegacy::getInstance('Article', 'ContentModel', array('ignore_request' => true));
$article = $model->getItem((int) $articleId);
现在,您可以访问文章中提供的所有字段,例如$item->fulltext
或$item->introtext
。看一下article view,看一下它在显示文章之前所做的所有花哨的东西。
答案 1 :(得分:0)
有了Joomla .3.8.10,我得到了Fatal error: __clone method called on non-object in .../components/com_content/models/article.php on line 164
似乎模型中需要params-property:
use Joomla\Registry\Registry; // only for new Registry below
ModelLegacy::addIncludePath(JPATH_SITE.'/components/com_content/models', 'ContentModel');
$model=JModelLegacy::getInstance('Article', 'ContentModel', array('ignore_request'=>true));
// $params=JFactory::getApplication()->getParams();
// An empty registry object is just fine:
$params=new Registry;
$model->setState('params', $params); // params (even empty) is *required* for model
$article=$model->getItem((int) articleId);
不确定是否确实需要ModelLegacy::addIncludePath...
或在什么情况下需要use Joomla\Registry\Registry; // for new Registry
$model=JModelLegacy::getInstance('Article', 'ContentModel', array('ignore_request'=>true));
$model->setState('params', new Registry);
$model->setState('filter.article_id', (int) $articleId ); // or use array of ints for multiple articles
$model->setState('load_tags', true); // not available for Article model
$model->setState('show_associations', true);
$articles=$model->getItems();
$article=$articles[0];
。有人对此有见识吗?
您可能要使用带有id过滤器的Article s (注意复数)模型,因为它还可以获取标签和关联:
components/com_content/models/articles.php
更多过滤器
如果您想通过ID以外的其他方式获取文章(默认为默认)。来自true
false
包括{{1}}以排除给定的id 订购和限制
)²有效字段: id,标题,别名,checked_out,checked_out_time,catid,category_title,状态,访问权限,access_level,创建,created_by,排序,精选,语言,匹配,publish_up,publish_down,图像,URL,filter_tag。所有字段均已根据白名单进行检查。