diff --git a/getLastNews.php b/getLastNews.php new file mode 100644 index 0000000..ae97cd8 --- /dev/null +++ b/getLastNews.php @@ -0,0 +1,18 @@ +channel->item as $item) { + $i++; + echo 'Название - ' . trim($item->title) . PHP_EOL; + echo 'Ссылка - ' . trim($item->link) . PHP_EOL; + echo 'Описание - ' . trim($item->description) . PHP_EOL; + if ($i === $countNews) { + break; + } +} \ No newline at end of file diff --git a/src/IblockHelper.php b/src/IblockHelper.php new file mode 100644 index 0000000..8b0dc75 --- /dev/null +++ b/src/IblockHelper.php @@ -0,0 +1,160 @@ +getCache(); + $taggedCache = $instance->getTaggedCache(); + $items = []; + $iblockIds = []; + if (\is_array($params) && !empty($params['IBLOCK_ID'])) { + if (\is_array($params['IBLOCK_ID'])) { + $iblockIds = $params['IBLOCK_ID']; + } elseif (\is_numeric($params['IBLOCK_ID'])) { + $iblockIds[] = $params['IBLOCK_ID']; + } + } + $cachePath = '/custom_iblock'; + if ($cache->initCache($ttl, md5(serialize($params)), $cachePath)) { + $vars = $cache->getVars(); + $items = $vars['items']; + } elseif ($cache->startDataCache()) { + if (!empty($iblockIds)) { + $taggedCache->startTagCache($cachePath); + } + switch ($params['type']) { + case self::TYPE_OLD: + $items = static::getListOld($params); + break; + case self::TYPE_D7: + $items = static::getListD7($params); + break; + case self::TYPE_D7_OBJECT: + $items = static::getListD7Objects($params); + break; + } + if (!empty($iblockIds)) { + foreach ($iblockIds as $iblockId) { + $taggedCache->registerTag('iblock_' . $iblockId); + } + $taggedCache->endTagCache(); + } + $cache->endDataCache(['items' => $items]); + } + + return $items; + } + + /** + * @param array $params + * + * @return array + */ + protected static function getListOld(array $params) + { + $items = []; + $res = \CIBlockElement::GetList($params['order'], $params['filter'], false, false, $params['select']); + if(isset($params['select']['DETAIL_PAGE_URL']) || isset($params['select']['LIST_PAGE_URL'])){ + while ($item = $res->GetNextElement()) { + $items[] = $item; + } + } else { + while ($item = $res->Fetch()) { + $items[] = $item; + } + } + + return $items; + } + + /** + * @param array $params + * + * @return array + * @throws \Bitrix\Main\ArgumentException + * @throws \Bitrix\Main\ObjectPropertyException + * @throws \Bitrix\Main\SystemException + */ + protected static function getListD7(array $params) + { + return static::getListD7Base($params)->fetchAll(); + } + + /** + * @param array $params + * + * @return \Bitrix\Main\ORM\Query\Result + * @throws \Bitrix\Main\ArgumentException + * @throws \Bitrix\Main\ObjectPropertyException + * @throws \Bitrix\Main\SystemException + */ + protected static function getListD7Base(array $params) + { + /** это тестовый хелпер - универсально под свойство делать дольше(под 2 типа), поэтмоу на тестовом задании пропускаем */ + $filter = $params['filter']; + $select = $params['select'] ?: ['*']; + $query = \Bitrix\Iblock\ElementTable::query(); + if ($filter instanceof \Bitrix\Main\Entity\Query) { + $query->where($filter); + } else { + $query->setFilter($filter); + } + $query->setSelect($select); + if ((int)$params['limit'] > 0) { + $query->setLimit((int)$params['limit']); + } + if (!empty($params['order'])) { + $query->setOrder($params['order']); + } + return $query->exec(); + } + + /** + * @param array $params + * + * @return mixed + * @throws \Bitrix\Main\ArgumentException + * @throws \Bitrix\Main\ObjectPropertyException + * @throws \Bitrix\Main\SystemException + */ + protected static function getListD7Objects(array $params) + { + return static::getListD7Base($params)->fetchCollection()->getAll(); + } +} \ No newline at end of file