3 заметки с тегом

битрикс

Хранения и вывод «телефона», «почты» и т. д. в шаблонах битрикса

Зачастую при разработке веб-проектов встаёт проблема хранения и редактирования редко-изменяемых полей типа «телефон», «Почта», «адрес компании» и т. д.

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

Все это продолжалось до тех пор, пока я не увидел у себя под носом нужное мне решение в маркетплейсе «Настройки ++».
Оно как раз помогает создавать сколь угодно таких «полустатичных полей» и даёт возможность выводить их в самих шаблонах.

Скачивайте, пока не сделали платным :—)
https://marketplace.1c-bitrix.ru/solutions/askaron.settings/

9 мая   bitrix   битрикс

Как показать следующую и предыдущую новость в битриксе?

Этот довольно часто встречающийся кейс пока никак не реализован в самом битриксе, поэтому пишу этот пост больше для себя, чтобы решение этой проблемы где-то было под рукой.
Обычно такая потребность возникает на странице какого-то конкретного поста, для того чтобы после него вывести следующий и предыдущий за ним пост. Поэтому код ниже написан для комплексного компонента «news», вставлять его надо в файле detail.php. Как всегда не претендую на оптимальность, но мою потребность он легко закрывает)

<?
	$rs=CIBlockElement::GetList(array("active_from" => "desc"), array("ACTIVE"=>"Y", "IBLOCK_ID"=>$arParams["IBLOCK_ID"]), false, array("nElementID"=>$ElementID, "nPageSize"=>1), array("ID", "NAME", "DETAIL_PAGE_URL"));
	while($ar=$rs->GetNext()) $page[] = $ar;
?>
<div>
	<?if (count($page) == 2 && $ElementID == $page[0][ID]):?>
		<div class="_next">
			<a href="<?=$page[1]["DETAIL_PAGE_URL"]?>">
				<?=$page[1]["NAME"]?>
			</a>
		</div>
	<?elseif (count($page) == 3):?>
		<div class="_prev">
			<a href="<?=$page[0]["DETAIL_PAGE_URL"]?>">
				<?=$page[0]["NAME"]?>
			</a>
		</div>
		<div class="ps-_next">
			<a href="<?=$page[2]["DETAIL_PAGE_URL"]?>">
				<?=$page[2]["NAME"]?>
			</a>
		</div>
	<?elseif (count($page) == 2 && $ElementID == $page[1][ID]):?>
		<div class="_prev">
			<a href="<?=$page[0]["DETAIL_PAGE_URL"]?>">
				<?=$page[0]["NAME"]?>
			</a>
		</div>
	<?endif;?>
</div>
2017   bitrix   битрикс

catalog.section.list для вывода дерева разделов и элементов

Зачастую у меня при разработке возникает двухуровневая структура данных, и часто удобно использовать в инфоблоках секции и элементы как способ хранения информации.
К сожалению битрикс не дает штатного компонента для вывода такого дерева:

  • секция 1
    — элемент1.1
    — элемент1.2
    — элемент1.3
  • секция 2
    — элемент2.1
    — элемент2.2
    — элемент2.3
    ...

Хотя для меня он был бы крайне полезен. В таких случаях для себя я использую следующий подход.
На страницу вытаскиваю стандартный компонент catalog.section.list с default-ом шаблоном.

  1. Вычищаю все лишнее с файлов template.php и result_modifier.php.
  2. В result_modifier делаю с помощью CIBlockElement::GetList запрос на получение всех элементов в данном инфоблоке и структурирую их в массив с ключом равным секции элемента.
  3. Прохожусь циклом по $arResult[«SECTIONS»] и добавляю в каждый элемент массива массив который я получил в шаге 2.
  4. В итоге у меня получается массив с секциями внутри каждого из элементов массива будет подмассив со всеми элементами массива.

Содержание файла result_modifier будет примерно вот таким:

$arSelect = Array("ID", "NAME", "IBLOCK_SECTION_ID");
$arFilter = Array("IBLOCK_ID"=>$arParams["IBLOCK_ID"], "ACTIVE"=>"Y");
$res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect);
while($ob = $res->GetNextElement())
{
	$arFields = $ob->GetFields();
	$arSec[$arFields["IBLOCK_SECTION_ID"]][] = $arFields;
}
foreach ($arResult['SECTIONS'] as $key => $arSection){
	$arResult['SECTIONS'][$key]["ELEMENTS"] = $arSec[$arSection["ID"]];
}

p.s. совершенно неточно что данный подход идеальный и вы можете придумать свой)

2017   bitrix   битрикс