- ЧПУ и ID элемента
- Битрикс. Получить идентификатор элемента/раздела по коду
- Найти id элемента по коду
- ID раздела поиска по коду
- Не мучайтесь
- Битрикс: как получить идентификатор значения свойства типа списка
- Как получить идентификатор элемента инфоблока, который знает свое имя в Битрикс?
- Как узнать ID значения свойства, зная его название в Битриксе?
- Как отобразить название раздела и его ссылку в 1С-Битрикс
- автор: Дмитрий
- 13 комментариев
- Получить ID элемента инфоблока вне шаблона компонента
- Как возникла такая необходимость?
- Получить идентификатор из URL
- Создайте глобальную переменную с id element
ЧПУ и ID элемента
Здесь поднималась тема ЧПУ в сложных компонентах. . Мир пока.
Цитата |
---|
Игорь пишет: Я накосячил, вставив любой код он вытащил element_id и поместил в информационный блок |
Да каким-то нетривиальным образом. Я также подумал об извлечении ELEMENT_ID из URL-адреса.
Мой ЧПУ немного сложнее. /topik555/news444.php. Пока не делал, но ID надо где-то хранить.
Если Андрей не напишет, спрошу в техподдержку.
Есть стандартный блок отчетов. Без ЧПУ путь к новостной статье ../index.php?SECTION_ID= &ELEMENT_ID= с включенным ЧПУ путь ../topic /news .php
Задача: с включенным ЧПУ на новости page ../topic/news .php получить количество новостей без разбора URL.
PS. В первом случае без ЧПУ все просто (GET).
Встреча |
---|
Константин Полунин пишет: Задача: при включенном ЧПУ на странице новости…/topic/news .php узнать количество новостей без разбора URL. |
Цитата |
---|
Евгений Жуков пишет: Где именно на странице? В компоненте он уже есть. |
Прямо в теле страницы.
Настоящая задача — прикрепить к новости список сопутствующих товаров из каталога. Логика будет выглядеть так:
Источник
Битрикс. Получить идентификатор элемента/раздела по коду
Дата 28.10.2017 Автор Алексей Рубрика Программирование
Очень нет Я люблю ЧПУ в адресах сайтов. Бессмысленная жертва воображаемого комфорта. Из-за ЧПУ получаются сверхдлинные адреса, которыми даже нельзя нормально поделиться в некоторых социальных сетях/мгновенных сообщениях из-за ограничения на количество символов. Поэтому кое-где приходится переделывать.
В Битрикс есть инструмент, позволяющий найти идентификацию элемента/раздела по символьному коду (часто тому же, что входит в состав ЧПУ). К сожалению, в документации это не описано. Так что обо всех его свойствах можно догадаться, просто взглянув на исходный код в файле:
Найти id элемента по коду
$id = CIBlockFindTools::GetElementID( $element_id , $ element_code , $section_id , $section_code , $arFilter )
Эта функция возвращает идентификатор элемента. Или null, если элемент не найден. Разберем параметры функции:
$element_id — если вы передаете идентификатор элемента, он возвращает
$element_code — код символа элемента
$section_id — идентификатор элемента. найдена секция в элементе (необязательно)
$section_code — код символа секции, содержащей элемент (необязательно)
$arFilter — поле свойства для фильтрации (необязательно). Для ускорения процесса поиска можно передать ID информационного блока, содержащего элемент: array(«IBLOCK_ID» => №).
ID раздела поиска по коду
Используется функция, аналогичная поиску элементов:
$id = CIBlockFindTools::GetSectionID( $section_id , $section_code , $arFilter )
$section_id — ID
$section_code — код символа раздела
$arFilter — массив свойств для фильтрации (необязательно). Но для ускорения процесса поиска можно передать ID информационного блока, содержащего элемент: array(«IBLOCK_ID» => №).
Не мучайтесь
Товарищи, не страдай! Не ЧПУ. Я никогда не слышал и не видел законного использования ЧПУ.
ЧПУ похоже на QR-коды. Полезно для очень ограниченного круга задач. Поэтому его часто используют не по назначению.
Источник
Битрикс: как получить идентификатор значения свойства типа списка
Давайте посмотрим, как получить идентификатор свойства Тип списка, зная его значение.
Как получить идентификатор элемента инфоблока, который знает свое имя в Битрикс?
Сначала рассмотрим простой пример: мы нужно узнать ID элемента (или раздела), зная его название, код символа или другой параметр:
$arItem[‘ID’] — будет ID наш элемент информационного блока. Сделаем то же самое для раздела, только теперь ищем идентификатор раздела по коду символа :
$arItem[‘ID’] теперь является идентификатором раздела.
Почему я привел вам эти примеры? Для вашего понимания, в свойствах все хранится немного иначе.
Как узнать ID значения свойства, зная его название в Битриксе?
Для этого нам понадобится метод CIBlockPropertyEnum: :Получить список . Структура данных свойства выглядит следующим образом:
Как выглядел бы код, если бы мы получили имя свойства из его идентификатора:
$enum_fields[ «VALUE»] is аналогия имени в именах элементов и разделов.
Противоположная процедура просто меняет фильтр на:
$enum_fields[«ID»] — и будет наш нужный ID.
«IBLOCK_ID»=>34, «CODE»=>»PARTNER» — информационный блок и символьный код нашего свойства списка.
Так же запомните этот ID, для таких методов есть более короткие нотации:
Их можно рекомендовать, потому что они имеют более короткую нотацию:
Но этот метод возвращает много бесполезных полей, поэтому всегда помните 2 вещи:
1. Я не рекомендуется делать этот метод в цикле, количество запросов к базе значительно возрастет, лучше написать правильный GetList. Я как-то искал баг в своем коде, загрузка страницы занимала более 5 секунд и оказалось, что причина в этом 🙂
2. В принципе очень похоже на getlist , только это не ограничивает возвращаемые поля
Источник
Как отобразить название раздела и его ссылку в 1С-Битрикс
Зная ID раздела, очень легко вывести его название в Битрикс, а также узнать, по какой ссылке он доступен.
Ссылка формируется из настроек информационного блока. Для того, чтобы все ваши ссылки отображались корректно, настройки в инфоблоке и вашем компоненте должны совпадать.
Мы будем использовать API Битрикс для отображения названия раздела.
$arItem[‘IBLOCK_SECTION_ID’] — ID раздела, название которого мы хотим отобразить
$ar_res[‘SECTION_PAGE_URL’] — ссылка на раздел
$ar_res[‘NAME’] — название раздела
автор: Дмитрий
13 комментариев
Я хочу иметь возможность отображать список сообщений которые относятся только к определенному разделу. Как это сделать?
Во втором поле, также известный как arFilter, вы должны ввести как минимум 3 параметра, где вы должны ввести идентификатор инфоблока и раздела, а также указать, что мы будем выбирать только активные элементы.
PS: Извините за запоздалый ответ, спам-фильтр работает отлично 🙂
Ну я же сижу на петлях в разделах инфоблока и упорно пишу туда код раздела инфоблока, а не самого инфоблока. Я поставил свой, он не очень юзабелен, на странице видно только название страницы, содержимое раздела инфоблока теперь не отображается.
Попробуйте добавить
перед кодом
в более новые версии Битрикс, есть опция из основного раздела по URL встроена, кроме того, в настройках компонента нужно включить отображение 404 страниц, чтобы при вводе разных символов сервер возвращал 404 В информации о настройках блока, если не ошибаюсь, можно найти выбор основного раздела
Попробуйте перед подключением модуля инфоблока
Добрый день! Это не работает, если элемент принадлежит к двум разделам одновременно. Я нашел решение:
Fetch()) <
$temp++; // Проверяем, скольким разделам принадлежит элемент
>
если ($temp == 1) < // Если элемент принадлежит только одному разделу
$db_old_groups = CIBlockElement::GetElementGroups($arItem[‘ID’], false);
while($ar_group = $db_old_groups->Load()) <
эхо ‘Раздел:’ . $ar_group[«ИМЯ»];
>
>
плюс < // Если элемент принадлежит более чем одному разделу
echo ‘Sections:’;
$db_old_groups = CIBlockElement::GetElementGroups($arItem[‘ID’], false);
while($ar_group = $db_old_groups->Load()) <
эхо $ar_group[«ИМЯ»] . ‘ ‘;
>
>
?>
…но не знаю как связать эти разделы.
Добрый день, Дмитрий.
Я не могу понять, что не так.
Я использую GetList для отображения списка папок информационных блоков:
«ASC»),
Array(«IBLOCK_ID» => 5, «ACTIVE» => «Y»),
false,
Array(‘ID’, ‘ИМЯ’, ‘КОД’, ‘URL_PAGE_SECTION’)
);
while($ar_fields = $my_sections->GetNext())
<
?>
При переходе по ссылке и детальном просмотре содержимого папки отображается все содержимое информационного блока и пишется URL: «http://www . site.ru/kalendar/march/» , т.е. index.php не добавляется.
Режим ЧПУ включен в настройках компонента комплексного отчета:
Страница общего списка: #SECTION_CODE#/
Страница раздела : #SECTION_CODE# /
Страница детального просмотра: #SECTION_CODE#/#ELEMENT_CODE#/
Конфигурация информационного блока включает:
URL страницы информационного блока: #SITE_DIR#/kalendar/ <12> ; URL-адрес страницы раздела: #SITE_DIR#/kalendar /#SECTION_CODE #/
Подробный URL-адрес страницы просмотра страницы: #SITE_DIR# /calendar/#SECTION_CODE#/#ELEMENT_CODE#/
Подскажите, что не так или какую информацию читать.
Ок, не глядя, возможны 2 причины:
1. возможно нужно включить конфигурацию ЧПУ в компонент и дополнительно указать там правила (убедиться, что он был добавлен в файл urlrerwite.php)
2 .ваши элементы могут не иметь t сгенерированный код символа
Приведенный выше код se не отображалось правильно, оно было продублировано.
«ASC»),
Массив(«IBLOCK_ID» => 5, «ACTIVE» => «И»),
false,
Массив(‘ID’, ‘ИМЯ’, ‘CODE ‘, ‘URL_PAGE_SECTION’)
);
Источник
Получить ID элемента инфоблока вне шаблона компонента
На странице на клиентском сайте с помощью Битрикс появилась задача получить ID текущего элемента из инфоблока Сообщение, вне шаблона компонента, но на странице, где отображается несколько инфоблоков.
Расскажу как сделать это в этой короткой заметке.
Как возникла такая необходимость?
Есть подробная страница вывода сообщений, где я хочу вывести дополнительные информационные блоки и в некоторых из них идентификаторы открытых ( текущий) могут потребоваться сообщения. Например, я хочу отобразить в сайдбаре список из 5 самых последних сообщений, и если текущее сообщение будет одним из них, то оно там будет продублировано, что нехорошо. Чтобы этого не допустить, нужно в вызове компонента поставить фильтр, игнорирующий текущие новости, а сделать это можно, передав id.
Страница использует ЧПУ, адрес страницы /media/news /ID_NEWS/ ., а так как $arParams[“ELEMENT_ID”] доступен только внутри компонента, т.е. в его шаблоне, есть несколько способов получить его оттуда.
Получить идентификатор из URL
Один из способов получить идентификатор — получить его из URL-адреса страницы. Для этого на странице, где вызывается компонент (не в шаблоне компонента), добавьте следующий простой код:
Создайте глобальную переменную с id element
Возможность парсить URL и получать оттуда ID меня не устраивала, т.к. в будущем был шанс, что изменится вложенность и ID перестанет быть третьим элементом в массив, а какой-то другой.
Поэтому я сделал иначе. В шаблоне компонента в подробной отчетности я создал глобальную переменную, которая содержала текущий ID:
И уже на самой странице, где отображаются нужные мне информационные блоки, я могу использовать эту переменную:
В этом нет ничего сложного, но когда я столкнулся с этой задачей, я сразу не знал, как это сделать.
Я пробовал гуглить, но не нашел ответ Все сайты копируют одинаково, чтобы получить ID инфоблока в шаблоне компонента, хотя вопросов быть не должно.
Так что я надеюсь, что эта заметка облегчит кому-то поиск
Micro: редактор терминала, совместимый с мышью
Шрифт