Ссылки на соседние элементы инфоблока лучше доставать
более новыми штатными средствами Битрикс
Технически получить «соседей» фиксированного элемента инфоблока без лишних запросов к базе данных стало возможно после ввода в функцию CIBlockElement::GetList нового параметра «nElementID». Он задает количество соседних элементов с каждой стороны, которые следует включить в выборку.
С появлением новго ядра D7 , с новыми идеями, механизмами и концепциями стало возможно получить соседние элементы за доли секунды (
быстрее, чем выборкой CIBlockElement)
use Bitrix\Main\Application;
$sectResultID=$arResult['IBLOCK_SECTION_ID'];
$elemResult=$arResult['ID'];
$reqleft="sel ect BE.ID as ID,BE.NAME as NAME,BE.CODE as CODE fr om b_iblock_element BE where id = (sel ect min(id) fr om b_iblock_element where b_iblock_element.ACTIVE='Y' and id > ".$elemResult;
if (!empty($sectResultID))
{
$reqleft.=" and b_iblock_element.IBLOCK_SECTION_ID=".$sectResultID;
}
$reqleft.=" ORDER BY b_iblock_element.ID desc ";
$reqleft.=" )";
$resleft = Application::getConnection()
->query($reqleft)
->fetchAll();
|
В массиве $resleft все необходимые поля. Для "следующего" элемента запрос будет иметь другой вид.
$reqright="select BE.ID as ID,BE.NAME as NAME,BE.CODE as CODE fr om b_iblock_element BE wh ere id = (select max(id) fr om b_iblock_element wh ere b_iblock_element.ACTIVE='Y' and id < ".$elemResult;
if (!empty($sectResultID))
{
$reqright.=" and b_iblock_element.IBLOCK_SECTION_ID=".$sectResultID;
}
$reqright.=" ORDER BY b_iblock_element.ID desc ";
$reqright.=" )";
|
Основная задача выполнена, осталось всего-лишь вывести уже подготовленную информацию. Очень удобную, современную навигацию по динамическому контенту можно получить, не засоряя код лишними Javascript эвентами, например
<div class="paddle previous loaded" data-m="" data-id="<?=$rowleft['ID'];?>" data-aop="paddles_prev">
<a href="<?=$sectResultCODE;?>/<?=$rowleft['CODE'];?>/">
<div class="headline ">
<img width="75" class=" loaded" src="<?=$photolefturl;?>" data-src="" data-initial-set="true">
<div>
<h4 class="truncate"><?=$rowleft['NAME'];?></h4>
</div>
</div>
</a>
</div>
|
Стиль CSS размером в 2кБ например:
.paddle a {opacity: 0.6;background: #e5e5e5;position: fixed;top: 50%;z-index: 2147483646;height: 10rem;}.paddle a::before {display: block;background: #666;height: 100%;padding-top: 3.1rem;text-align: center;width: 3rem;}.previous.paddle a {left: 0px;}.previous.paddle a::before {font-size: 2.8rem;font-weight: normal;position: relative;color: #fff;content: "<";font-family: ps_g;}.previous.paddle a::before {float: left;}.paddle a .headline {color: #333;display: inline-block;height: 100%;overflow: hidden;position: relative;transition: width .5s cubic-bezier(.1, .9, .2, 1);width: 0px;}.previous.paddle a .headline {border-right: .4rem solid #393965;}img {border: 0;max-width: 100%;}.paddle a .headline img,.paddle a .headline div {left: 1rem;position: absolute;}.paddle a .headline img {height: 7.5rem;/*width: 10rem;*/top: 1.2rem;}.paddle a .headline div {top: 1.8rem;}.paddle a .headline img ~ div {left: 12rem;}.paddle a .headline h4 {font-size: 1.3rem;line-height: 1.384;color: #666;display: block;left: 12rem;margin-top: 0.5rem;max-height: 5.5rem;overflow: hidden;width: 27rem;}.paddle a .headline img ~ div h4 {width: 16.5rem;}.paddle a:focus,.paddle a:hover,.paddle a.expand {opacity: 1;text-decoration: none;}.paddle a:focus .headline,.paddle a:hover .headline,.paddle a.expand .headline {padding: 1rem;width: 30rem;}.paddle a {opacity: 0.6;background: #e5e5e5;position: fixed;top: 50%;z-index: 2147483646;height: 10rem;}.paddle a::before {display: block;background: #666;height: 100%;padding-top: 3.1rem;text-align: center;width: 3rem;}.next.paddle a {right: 1.8rem;}.next.paddle a::before {font-size: 2.8rem;font-weight: normal;position: relative;color: #fff;content: ">";font-family: ps_g;}.next.paddle a::before {float: right;}.paddle a .headline {color: #333;display: inline-block;height: 100%;overflow: hidden;position: relative;transition: width .5s cubic-bezier(.1, .9, .2, 1);width: 0px;}.next.paddle a .headline {border-left: .4rem solid #393965;}img {border: 0;max-width: 100%;}.paddle a .headline img,.paddle a .headline div {left: 1rem;position: absolute;}.paddle a .headline img {height: 7.5rem;/*width: 10rem;*/top: 1.2rem;}.paddle a .headline div {top: 1.8rem;}.paddle a .headline img ~ div {left: 12rem;}.paddle a .headline h4 {font-size: 1.3rem;line-height: 1.384;color: #666;display: block;left: 12rem;margin-top: 0.5rem;max-height: 5.5rem;overflow: hidden;width: 27rem;}.paddle a .headline img ~ div h4 {width: 16.5rem;}
|