Извиняюсь за долгий ответ.
Сделал так.
price.php
...
$articles = JFactory::getDBO()->setQuery("SELECT * FROM #__content WHERE catid = '9'")->loadObjectList();
if (count($articles) > 0) { ?>
<div class="items-leading clearfix">
<div class="uslugi-flex uslugi-flex-title">
<div class="uslugi-intro uslugi-intro-title">дополнительные услуги</div>
<div class="features-block features-block-title">особенности</div>
</div><?
$leadingcount = 0;
foreach ($articles as $item) : ?>
<div class="uslugi-flex leading-<?= $leadingcount ?><?= $item->state == 0 ? ' system-unpublished' : '' ?>"><?
$this->item = &$item;
include_once (JPATH_ROOT . '/templates/' . $app->getTemplate(). '/html/com_content/category/uslugi_item.php'); ?>
</div><?
$leadingcount++;
endforeach; ?>
</div><?
}
В итоге:
Notice: Undefined property: stdClass::$params in /var/www/********/html/templates/********/html/com_content/category/uslugi_item.php on line 13
Notice: Undefined property: stdClass::$params in /var/www/********/html/templates/********/html/com_content/category/uslugi_item.php on line 15
Fatal error: Call to a member function get() on null in /var/www/********/html/templates/********/html/com_content/category/uslugi_item.php on line 15
То есть объект, полученный в
JFactory::getDBO()->setQuery...->loadObjectList()
не отдаёт те полноценные $this-объекты, которые нужны файлу uslugi_item.php, чтобы отобразить верстку (нужны параметры, доп. поля, как минимум).
Листинг uslugi_item.php.
<?
/**
* @package Joomla.Site
* @subpackage Layout
*
* [member=126442]copyright[/member] Copyright (C) 2005 - 2013 Open Source Matters, Inc. All rights reserved.
* @license GNU General Public License version 2 or later; see LICENSE.txt
*/
defined('_JEXEC') or die;
// Create a shortcut for params.
$params = $this->item->params;
JHtml::addIncludePath(JPATH_COMPONENT . '/helpers/html');
$canEdit = $this->item->params->get('access-edit');
// GET CUSTOM FIELDS
$сustomFields = array();
foreach ($this->item->jcfields as $field) {
$сustomFields[$field->name] = $field->value;
} ?>
<div class="uslugi-intro"><?
if ($this->item->state == 0) : ?>
<span class="label label-warning"><?= JText::_('JUNPUBLISHED')?></span><?
endif;
echo JLayoutHelper::render('joomla.content.blog_style_default_item_title', $this->item);
if (!$params->get('show_intro')) :
echo $this->item->event->afterDisplayTitle;
endif;
echo $this->item->event->beforeDisplayContent;
echo $this->item->introtext;
if ($useDefList) :
echo JLayoutHelper::render('joomla.content.info_block.block', array('item' => $this->item, 'params' => $params, 'position' => 'below'));
endif;
if ($params->get('show_readmore') && $this->item->readmore) :
if ($params->get('access-view')) :
$link = JRoute::_(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid));
else :
$menu = JFactory::getApplication()->getMenu();
$active = $menu->getActive();
$itemId = $active->id;
$link1 = JRoute::_('index.php?option=com_users&view=login&Itemid=' . $itemId);
$returnURL = JRoute::_(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid));
$link = new JUri($link1);
$link->setVar('return', base64_encode($returnURL));
endif; ?>
<p class="readmore"><a class="btn" href="<?= $link ?>">Подробнее об услуге</a></p><?
endif; ?>
</div> <?
if (!empty($сustomFields)) { ?>
<div class="features-block">
<div class="features-item features-arr">
<img src="<?= $this->baseurl ?>/templates/*********/images/double-arr.png" alt="">
</div><?
if (!empty($сustomFields['ico-1']) || !empty($сustomFields['podpis-1'])) { ?>
<div class="features-item"><?= $сustomFields['ico-1'] ?><br><?= $сustomFields['podpis-1'] ?></div><?
}
if (!empty($сustomFields['ico-2']) || !empty($сustomFields['podpis-2'])) { ?>
<div class="features-item"><?= $сustomFields['ico-2'] ?><br><?= $сustomFields['podpis-2'] ?></div><?
}
if (!empty($сustomFields['ico-3']) || !empty($сustomFields['podpis-3'])) { ?>
<div class="features-item"><?= $сustomFields['ico-3'] ?><br><?= $сustomFields['podpis-3'] ?></div><?
} ?>
<div class="features-item features-arr">
<img src="<?= $this->baseurl ?>/templates/*********/images/double-arr.png" alt="">
</div><?
if (!empty($сustomFields['tsena']) ) { ?>
<div class="features-item">
<div class="features-price">от<br><span><?= $сustomFields['tsena'] ?></span><br>рублей</div>
</div><?
} ?>
</div><?
}
echo $this->item->event->afterDisplayContent;
uslugi_items.inc.php
<?
$leadingcount = 0;
if (!empty($this->lead_items)) : ?>
<div class="items-leading clearfix">
<div class="uslugi-flex uslugi-flex-title">
<div class="uslugi-intro uslugi-intro-title">дополнительные услуги</div>
<div class="features-block features-block-title">особенности</div>
</div><?
foreach ($this->lead_items as &$item) : ?>
<div class="uslugi-flex leading-<?= $leadingcount ?><?= $item->state == 0 ? ' system-unpublished' : '' ?>"><?
$this->item = &$item;
echo $this->loadTemplate('item'); ?>
</div><?
$leadingcount++;
endforeach; ?>
</div><!-- end items-leading --><?
endif;
У меня всё равно идея в price.php каким-то образом в $this положить рубрику "Услуги" и подключить uslugi_items.inc.php. Чтобы из $this сама Joomla взяла lead_items и выполнила такой же код, как в рубрике "Услуги".
Либо надо как-то получить объект класса ContentViewCategory по id категории, потому что через JFactory::getDBO() получается объект класса Joomla\CMS\Table\Category и у него нет params и get()