1

我想将一篇文章加载到 Joomla 框架内的组件模板 php 代码中。

我可以在 php 中加载模块、在文章中加载模块、在文章中加载组件等等……但我从不想将文章加载到组件 php 中。

有人知道那个代码片段吗?

感谢任何帮助。

4

2 回答 2

4

我会在您的视图中加载文章模型,例如

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。查看文章视图,在文章显示之前检查它对文章所做的所有花哨的事情。

于 2013-11-04T10:29:02.103 回答
2

使用 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

  • filter.article_id:单个整数或整数数组
  • filter.article_id.include: (bool) true|falsetrue包括false排除给定的 id(s)
  • -> 类别、作者、作者别名的 dito
  • filter.subcategories: (bool) false|true
  • filter.max_category_levels: (int) 1
  • filter.date_filtering: (string) off|range|relative
  • filter.date_field:(字符串)创建的数据库表字段²
  • filter.start_date_range用于 filter.date_filtering==range
  • filter.end_date_range for filter.date_filtering==range
  • filter.relative_date (int) 0从今天开始过去的天数,对于 filter.date_filtering==relative
  • filter.tag (int) 0标签id
  • load_tags: (bool) true|false
  • show_associations: (bool) false|true

排序和限制

  • list.ordering:(字符串)排序数据库表字段²
  • list.direction: (string) ASC|DESC
  • list.limit: (int)
  • list.start: (int) 0从零开始

)² 有效字段: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。根据白名单检查所有字段。

于 2018-07-27T13:56:08.940 回答