我想将一篇文章加载到 Joomla 框架内的组件模板 php 代码中。
我可以在 php 中加载模块、在文章中加载模块、在文章中加载组件等等……但我从不想将文章加载到组件 php 中。
有人知道那个代码片段吗?
感谢任何帮助。
我会在您的视图中加载文章模型,例如
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
。查看文章视图,在文章显示之前检查它对文章所做的所有花哨的事情。
使用 Joomla .3.8.10 我得到了一个Fatal error: __clone method called on non-object in .../components/com_content/models/article.php on line 164
似乎模型中需要参数属性:
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...
真正需要。有没有人对此有见识?
您可能希望将 Article s(注意复数)模型与 id-filter 一起使用,因为它还能够获取标签和关联:
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 以外的其他方式获取文章(默认优先)。从components/com_content/models/articles.php
true
包括false
排除给定的 id(s)排序和限制
)² 有效字段:id、title、alias、checked_out、checked_out_time、catid、category_title、state、access、access_level、created、created_by、ordering、featured、language、hits、publish_up、publish_down、images、urls、filter_tag。根据白名单检查所有字段。