Php 在Joomla中将文章加载到组件模板中

Php 在Joomla中将文章加载到组件模板中,php,joomla,article,Php,Joomla,Article,我想将一篇文章加载到Joomla框架内的组件模板php代码中 我可以在php中加载模块,在文章中加载模块,在文章中加载组件,还有..但是我从来都不想将文章加载到php组件中 有人知道这方面的代码片段吗 非常感谢您的帮助。我会像这样在您的视图中加载文章模型 JModelLegacy::addIncludePath(JPATH_SITE.'/components/com_content/models', 'ContentModel'); $model = JModelLegacy::getInsta

我想将一篇文章加载到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
。在文章显示之前,请查看,以查看它对文章所做的所有花哨的操作。

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

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,我遇到了一个
致命错误:\u克隆方法调用了第164行的…/components/com\u content/models/article.php中的非对象。

似乎模型中需要params属性:

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);
不确定是否或在什么上下文中确实需要
modelegacy::addIncludePath…
。有人知道这件事吗

更新 您可能希望使用带有id筛选器的文章s(注意复数)模型,因为它还能够获取标记和关联:

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\u content/models/articles.php

  • filter.article\u id:单个整数或整数数组
  • filter.article_id.include:(bool)true | false
    true
    包含
    false
    排除给定id
  • ->类别、作者、作者别名同上
  • filter.subcategories:(bool)false | true
  • filter.max_category_levels:(int)1
  • filter.date_筛选:(字符串)关闭|范围|相对
  • filter.date_字段:(字符串)已创建数据库表字段²
  • filter.start\u date\u筛选器的范围。date\u筛选器==范围
  • filter.end\u日期\u筛选器的范围。日期\u筛选器==范围
  • filter.relative_date(int)0从今天开始的过去天数,对于filter.date_filtering==relative
  • filter.tag(int)0标记id
  • 加载标签:(bool)真|假
  • 显示关联:(bool)假|真
排序和限制

  • list.ordering:(字符串)ordering数据库表字段²
  • list.direction:(字符串)ASC | DESC
  • list.limit:(int)
  • list.start:(int)0从零开始
)²有效字段:
id、标题、别名、签出、签出时间、catid、类别、标题、状态、访问、访问级别、创建人、创建人、排序、特色、语言、点击数、向上发布、向下发布、图像、URL、筛选标记。根据白名单检查所有字段。

对于Joomla.3.8.10,我得到了一个
致命错误:\u在第164行的…/components/com\u content/models/article.php中对非对象调用了克隆方法。

似乎模型中需要params属性:

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);
不确定是否或在什么上下文中确实需要
modelegacy::addIncludePath…
。有人知道这件事吗

更新 您可能希望使用带有id筛选器的文章s(注意复数)模型,因为它还能够获取标记和关联:

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\u content/models/articles.php

  • filter.article\u id:单个整数或整数数组
  • filter.article_id.include:(bool)true | false
    true
    包含
    false
    排除给定id
  • ->类别、作者、作者别名同上
  • filter.subcategories:(bool)false | true
  • filter.max_category_levels:(int)1
  • filter.date_筛选:(字符串)关闭|范围|相对
  • filter.date_字段:(字符串)已创建数据库表字段²
  • filter.start\u date\u筛选器的范围。date\u筛选器==范围
  • filter.end\u日期\u筛选器的范围。日期\u筛选器==范围
  • filter.relative_date(int)0从今天开始的过去天数,对于filter.date_filtering==relative
  • filter.tag(int)0标记id
  • 加载标签:(bool)真|假
  • 显示关联:(bool)假|真
排序和限制

  • list.ordering:(字符串)ordering数据库表字段²
  • list.direction:(字符串)ASC | DESC
  • list.limit:(int)
  • list.start:(int)0从零开始
)²有效字段:
id、标题、别名、签出、签出时间、catid、类别、标题、状态、访问、访问级别、创建人、创建人、排序、特色、语言、点击数、向上发布、向下发布、图像、URL、筛选标记。根据白名单检查所有字段。

谢谢你。这为我节省了很多时间。因此,如果我想加载别名为“000001”的文章的介绍文本,我该如何实现?PHP新手抱歉:)我试过了,但没能成功。是否需要比上述代码更多的代码?是否需要调用该应用程序<代码>$app=JFactory::getApplication()?@DalamHensi看起来应该是
如果($articleId==“21”){echo$item->fulltext;}
或者类似的东西谢谢你。这为我节省了很多时间。因此,如果我想加载别名为“000001”的文章的介绍文本,我该如何实现?PHP新手抱歉:)我试过了,但没能成功。是否需要比上述代码更多的代码?是否需要调用该应用程序<代码>$app=JFactory::getApplication()?@DalamHensi它看起来像是
if($articleId==“21”){echo$item->fulltext;}
之类的东西