Загрузка статьи в шаблон компонентов в 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|false
true
включать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. Все поля проверены против белого списка.