Strict Standards: Declaration of PluginAceadminpanel_ModuleLang::Get() should be compatible with ModuleLang::Get($sName, $aReplace = Array, $bDelete = true) in /home/deer/pages.org.ua/blog/plugins/aceadminpanel/classes/modules/lang/Lang.class.php on line 21 Strict Standards: Declaration of PluginAceadminpanel_ModuleViewer::_SortBlocks() should be compatible with ModuleViewer::_SortBlocks($a, $b) in /home/deer/pages.org.ua/blog/plugins/aceadminpanel/classes/modules/viewer/Viewer.class.php on line 24 Bitrix: предыдущий с последующий элементы для news.detail (через запросы) / Компоненты / BPOU - Bitrix blog

Bitrix: предыдущий с последующий элементы для news.detail (через запросы)

Замечательно работавший код без кеша, с кешем компонентов, превратился в «говно», довольно часто стало такое происходить, с этим битриксом.

Посмотрев исходник и запрос, решено было его переписать в рабочий вариант (код стал легче и быстрее)
$iid = $arParams["IBLOCK_ID"];
$dpu = $arParams["DETAIL_URL"];

$q = $DB->query("SET @rank_prev = 0, @rank_cur = 0");
$q = "SELECT prev.ID as ID, prev.NAME as NAME, REPLACE('$dpu', '#ELEMENT_CODE#', prev.CODE) as LINK
FROM (SELECT @rank_cur:=@rank_cur+1 AS rank, ID, NAME, CODE FROM b_iblock_element WHERE ACTIVE = 'Y' AND IBLOCK_ID = '$iid' ORDER BY ACTIVE_FROM DESC) as cur
INNER JOIN (SELECT @rank_prev:=@rank_prev+1 AS rank, ID, NAME, CODE FROM b_iblock_element WHERE ACTIVE = 'Y' AND IBLOCK_ID = '$iid' ORDER BY ACTIVE_FROM DESC) as prev
ON prev.rank + 1 = cur.rank
WHERE cur.ID = ".$arResult["ID"];
$q = $DB->query($q);
while ($ob = $q->getNext()) $arResult["LEFT_ARROW"] = $ob;

$q = $DB->query("SET @rank_cur = 0, @rank_next = 0");
$q = "SELECT next.ID as ID, next.NAME as NAME, REPLACE('$dpu', '#ELEMENT_CODE#', next.CODE) as LINK
FROM (SELECT @rank_cur:=@rank_cur+1 AS rank, ID, NAME, CODE FROM b_iblock_element WHERE ACTIVE = 'Y' AND IBLOCK_ID = '$iid' ORDER BY ACTIVE_FROM DESC) as cur
INNER JOIN (SELECT @rank_next:=@rank_next+1 AS rank, ID, NAME, CODE FROM b_iblock_element WHERE ACTIVE = 'Y' AND IBLOCK_ID = '$iid' ORDER BY ACTIVE_FROM DESC) as next
ON cur.rank + 1 = next.rank
WHERE cur.ID = ".$arResult["ID"];
$q = $DB->query($q);
while ($ob = $q->getNext()) $arResult["RIGHT_ARROW"] = $ob;
  • 0
  • 17 февраля 2014, 17:26
  • admin

Комментарии (0)

RSS свернуть / развернуть
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.