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 Компоненты / BPOU - Bitrix blog
Рейтинг
0.00
голосов: 0

О блоге

Файлы для компонент битрикса

Администраторы (1)

Модераторы (0)

Модераторов здесь не замечено

Читатели (0)

Читателей здесь не замечено

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;

Bitrix: вывод мета заголовков и описаний (meta-title, meta-description) при кешировании компонентов

Добрый день мне (все равно никто не читает)

Частенько, при включённом кешировании компонент, с помощью «магик» метода
$APPLICATION->SetPageProperty("description", $desc);
в result_modifier.php и template.php не получается ничего вывести/изменить, потому что кеш просто будет выводить первое закешированное для всех записей.

Что бы этого избежать, нужно завсети друга для result_modifier.php, под именем component_epilog.php, который выполняется мимо кеширования, каждый раз. А для того, что бы ему что-то передать, нужно в result_modifier.php добавить
global $APPLICATION;
$cp = $this->__component; 
if (is_object($cp)){
	$cp->arResult['DESC'] = implode(' ', array_slice(explode(' ', strip_tags($arResult["PREVIEW_TEXT"])), 0, 20));
	$cp->SetResultCacheKeys(array('DESC'));
	$arResult['DESC'] = $cp->arResult['DESC'];
}

а с component_epilog.php уже вывести в нужное место
global $APPLICATION;
$APPLICATION->SetPageProperty("description", $arResult["DESC"]);


зы: читать подробности тут dev.1c-bitrix.ru/learning/course/?COURSE_ID=43&LESSON_ID=2975

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

<?
// файл result_modifier.php news.detail

// упорядочиваем как и в разделе. (получить автоматом нельзя)
$arOrder = array("ACTIVE_FROM" => "DESC"); 
$arSelect = Array("ID", "NAME", "DETAIL_PAGE_URL");
$arFilter = Array("IBLOCK_ID"=>$arParams["IBLOCK_ID"], "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");
$res = CIBlockElement::GetList($arOrder, $arFilter, false, array("nPageSize" => "1","nElementID" => $arResult["ID"]), $arSelect);
//"nPageSize" - количество элементов на странице при постраничной навигации 
//"nElementID" - ID элемента который будет выбран вместе со своими соседями. Количество соседей определяется параметром nPageSize.
while($ob = $res->GetNext()) $arFields[] = $ob;

// упорядочиваем соседей, если нет левого или правого
if (count($arFields) == 2 && $arResult["ID"] == $arFields["0"]["ID"]) {	
	$arFields["2"] = $arFields["1"]; 
	unset($arFields["0"]); 
}

if (isset($arFields["0"])) 
	$arResult["LEFT_ARROW"] = array(
		"LINK" => $arFields["0"]["DETAIL_PAGE_URL"],
		"NAME" => $arFields["0"]["NAME"]
	);

if (isset($arFields["2"])) 
	$arResult["RIGHT_ARROW"] = array(
		"LINK" => $arFields["2"]["DETAIL_PAGE_URL"],
		"NAME" => $arFields["2"]["NAME"]
	);
?>