Загрузка статьи в шаблон компонентов в Joomla

Я хотел бы загрузить статью в php-код шаблона компонентов в рамках Joomla.

Я могу загружать модули в php, модули в статьях, компоненты в статьях и... но я никогда не хотел загружать статью в php компонентов.

Кто-нибудь знает фрагмент кода для этого?

Ценю любую помощь.

2 ответа

Решение

Я хотел бы загрузить модель статьи на ваш взгляд, как

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

Кажется, что свойство 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);

Не уверен, если или в каком контексте ModelLegacy::addIncludePath... действительно требуется. У кого-нибудь есть понимание этого?

Обновить

Возможно, вы захотите использовать модель Article (обратите внимание на множественное число) с id-фильтром, так как он может извлекать теги и ассоциации также:

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];

Еще несколько фильтров

В случае, если вы хотите получить статьи другими способами, чем идентификатор (по умолчанию сначала). Отcomponents/com_content/models/articles.php

  • filter.article_id: одно целое или массив целых
  • filter.article_id.include: (bool) true|falsetrueвключатьfalse исключить данные идентификаторы
  • -> Дито для категории, автор, author_alias
  • filter.subcategories: (bool) false | true
  • filter.max_category_levels: (int) 1
  • filter.date_filtering: (строка) off|range| относительный
  • filter.date_field: (строка) созданное поле таблицы БД²
  • filter.start_date_range для filter.date_filtering== диапазон
  • filter.end_date_range для filter.date_filtering== диапазон
  • filter.relative_date (int) 0 количество дней в прошлом с сегодняшнего дня, для filter.date_filtering== относительный
  • filter.tag (int) 0 идентификатор тега
  • load_tags: (bool) true | false
  • show_associations: (bool) false | true

Заказ и ограничение

  • list.ordering: (строка) упорядочение поля таблицы БД²
  • list.direction: (строка) ASC | DESC
  • list.limit: (int)
  • list.start: (int) 0 начинается с нуля

)² Допустимые поля: id, заголовок, псевдоним, checked_out, checked_out_time, catid, category_title, состояние, доступ, access_level, созданный, selected_by, упорядочивание, избранные, язык, хиты, publish_up, publish_down, изображения, URL, filter_tag. Все поля проверены против белого списка.

Другие вопросы по тегам