Detail page url битрикс

Detail page url битрикс

В принципе это стандартная возможность системы управления битрикс, но почему-то часто спрашивают как это сделать. Возможно в документации данный вопрос освещен не достаточно понятно. Постараюсь рассказать по простому, со скринами, как же вывести разделы инфоблока в меню.

Как это сделать, смотрите в видео

Добавляем разделы в инфоблок:

Предположим что нам нужно создать меню из подкатегорий новостей. У нас уже есть готовый инфоблок для новостей и он выведен на сайт. В общем новости работают. И наступил момент, что новостей стало достаточно много и пора их разбить на несколько категорий: "Спорт", "Финансы" и.т.д.

Для начала создаем эти разделы:

Теперь задача создать пункты выпадающего меню, которое автоматически будет брать разделы в качестве своих пунктов. Для этого нужно создать необходимый тип меню в Управлении структурой. В моем случае я создаю тип меню "Меню подраздела"

Создаем в нужном каталоге сайта этот тип меню и рядом с ним создаем такой же файл с приставкой _ext.php.

В моем примере я создаю блог на основе компонента новостей, потому каталог и соответствующий инфоблок называются blog

Настройка ext меню

В меню сайта необходимо подключить соответствующее меню в пункте "Тип меню для остальных уровней:" и установить чекбокс для "Подключать файлы с именами вида .тип_меню.menu_ext.php:"

В наше . _ext.php меню вносим вот такие данные:

  • "SEF_BASE_URL" => "/blog/", — каталог инфоблока на сайте
  • "SECTION_PAGE_URL" => "#SECTION_ID#/", — подставляем ID раздела
  • "DETAIL_PAGE_URL" => "#SECTION_ID#/#ELEMENT_ID#.html", — полный путь к элементу инфоблока
  • "IBLOCK_TYPE" => "company", — ID типа инфоблока из которого выводим
  • "IBLOCK_ID" => "5", ID инфоблока из которого выводим
  • "DEPTH_LEVEL" => "4", уровень вложенности, этой цифрой можно выводить подразделы разделов если иерархия многоуровневая

В настройках компонента инфоблока также прописываем аналогичный путь к элементам и разделам инфоблока

В итоге все вновь создаваемые разделы инфоблока будут автоматически попадать в выпадающее меню (в моем случае, вы можете проделать эти манипуляции для любого типа меню)

Надеюсь объяснил наглядно и понятно, если остались вопросы или есть чем дополнить данную записку, прошу писать в комментариях. Всем успехов.

Создаем раздел blog и в визуальном редакторе, в правой колонке выбираем комплексный компонент «Контент • Новости • Новости» и добавляем его на страницу. Это комплексный компонент, предназначен для решения нескольких задач: показывать список новостей, показывать отдельную новость и т.д.

Рядом с комплексным компонентом есть несколько простых, которые предназначены для решения одной задачи:

  • Список новостей
  • Новость детально

В настройках компонента оставляем шаблон .default , выбираем тип инфоблока и сам инфоблок, которые были предварительно созданы в панели управления. Отмечаем checkbox-ы «Включать раздел в цепочку навигации» и «Устанавливать статус 404». В принципе, больше можно ничего не менять, остальные настройки можно поменять позже. В результате файл /blog/index.php будет таким:

Читайте также:  Cod black ops 4 отзывы

Сам компонент расположен в bitrix/components/bitrix/news . В папке templates видим три шаблона, и среди них .default , который мы выбрали. Теперь надо скопировать этот шаблон в папку шаблона сайта, чтобы адаптировать его под свои нужды. Для раздела «Блог» предусмотрен отдельный шаблон local/templates/blog , именно в эту папку и будем копировать. Для шаблона компонента используем имя blog :

После копирования шаблона компонента, файл /blog/index.php был перезаписан:

Из папок шаблонов все удаляем, оставляем только файлы шаблонов и файлы стилей:

  • /local/templates/blog/components/bitrix/news/blog/bitrix/news.list/.default/template.php
  • /local/templates/blog/components/bitrix/news/blog/bitrix/news.detail/.default/template.php
  • /local/templates/blog/components/bitrix/news/blog/bitrix/news.list/.default/style.css
  • /local/templates/blog/components/bitrix/news/blog/bitrix/news.detail/.default/style.css

Шаблон списка новостей

Файл шаблона /local/templates/blog/components/bitrix/news/blog/bitrix/news.list/.default/template.php . Этот шаблон используется как для показа всех статей блога, так и для показа статей выбранного раздела инфоблока. Странно, но в шаблоне не предусмотрен вывод заголовков и вывод подразделов текущего раздела инфоблока. Давайте это исправим и создадим файл result_modifier.php :

Теперь можно заняться шаблоном списка статей блога:

Постраничная навигация

Чтобы кастомизировать постраничную навигацию, надо скопировать один из шаблонов системного компонента system.pagenavigation . Все содержимое папки modern копируем в папку pager :

Удаляем файл стилей style.min.css и создаем файл .description.php :

И теперь нам надо отредактировать файл template.php . Распечатаем массив $arResult с помощью функции print_r() :

В нашем случае показывается список из 11 статей, по две статьи на страницу. Всего получается 6 страниц, но на последней странице только одна статья.

  • NavShowAlways — всегда показывать постраничную навигацию
  • NavTitle — название списка элементов, например «Статьи» или «Новости»
  • NavRecordCount — общее количество статей (записей)
  • NavPageCount — общее количество страниц
  • NavPageNomer — номер текущей страницы
  • NavPageSize — количество статей на одну страницу
  • bShowAll — разрешено или нет показывать ссылку «Все статьи»
  • NavShowAll — равен true , если показываются все статьи, без постраничной навигации
  • NavNum — номер постраничной навигации ( PAGEN_1 , PAGEN_2 , …)
  • bDescPageNumbering — использовать или нет обратную постраничную навигацию
  • nPageWindow — количество страниц, которые отображаются в постраничной навигации
  • bSavePage — равна true если в главном модуле отмечена опция запоминать последнюю открытую страницу
  • sUrlPath — путь к странице относительно корня
  • NavQueryString — строка GET-параметров
  • nStartPage — номер первой страницы слева для текущей страницы
  • nEndPage — номер первой страница справа для текущей страницы
  • NavFirstRecordShow — порядковый номер первой статьи на текущей странице
  • NavLastRecordShow — порядковый номер последней статьи на текущей странице

По поводу переменной bSavePage :

По поводу переменных nStartPage и nEndPage . Если текущая страница — третья ( NavPageNomer=3 ), а показывается пять ссылок ( nPageWindow=5 ), тогда nStartPage=1 , а nEndPage=5 :

Если текущая страница — четвертая ( NavPageNomer=4 ), а показывается пять ссылок ( nPageWindow=5 ), тогда nStartPage=2 , а nEndPage=6 :

Читайте также:  Highscreen power five max 2 blue

Шаблон готов, давайте его применим. Для этого заходим в настройки компонента и выбираем в выпадающем списке наш шаблон pager :

Теперь постраничная навигация выглядит так:

ЧПУ (SEF)

Идем в настройки компонента и выставляем значения:

  • Каталог ЧПУ (относительно корня сайта): /blog/
  • Страница общего списка: [пусто]
  • Страница раздела: category/#SECTION_ID#/
  • Страница детального просмотра: category/#SECTION_ID#/post/#ELEMENT_ID#/

Теперь URL будут иметь вид:

  • Страница раздела блога: http://www.host.ru/blog/category/3/
  • Страница просмотра статьи: http://www.host.ru/blog/category/3/post/12/

Еще один вариант — использовать символьные коды (транслитерация названия) разделов и элементов инфоблока:

  • Каталог ЧПУ (относительно корня сайта): /blog/
  • Страница общего списка: [пусто]
  • Страница раздела: category/#SECTION_CODE#/
  • Страница детального просмотра: category/#SECTION_CODE#/post/#ELEMENT_CODE#/

Теперь URL будут иметь вид:

Если категории блога имеют вложенность, можно использовать #SECTION_CODE_PATH# вместо #SECTION_CODE# :

Шаблон отдельной новости

Файл шаблона /local/templates/blog/components/bitrix/news/blog/bitrix/news.detail/.default/template.php

И добавим стили для страницы детального просмотра:

Хлебные крошки

Для полноты картины не хватает еще хлебных крошек. Давайте откроем шаблон сайта local/templates/blog/header.php и добавим компонент «Навигационная цепочка»:

Выглядит неплохо, но есть лишний элемент «Блог». Это потому, что второй элемент цепочки — «Блог» — Битрикс добавляет из файла /blog/.section.php , а третий элемент — «Статьи о домашних животных» — добавляет комплексный компонент «Новости». Сейчас файл .section.php имеет вид:

Но хотелось бы еще подправить шаблон компонента «Навигационная цепочка». Создадим свой шаблон с именем chain в папке общего шаблона сайта .default :

До версии 12.5 можно было просто подменять урл товаров, которые добавляются в корзину.
Нужно это было, например для того, чтобы переходя из корзины в карточку товара, подсвечивать выбранную характеристику.

В более старших версиях добавили новое поле в корзину PRODUCT_PROVIDER_CLASS, которое теперь берет на себя взаимодействие торгового каталога и интернет-магазина. По умолчанию это CCatalogProductProvider.

Если теперь мы добавим товар в корзину таким образом:

Зайдем в корзину, и с удивлением обнаружим, что у добавленного товара «Название» и «Страница детального просмотра» поменялись на те, которые настоящие у товара, а не то что мы передали функции CSaleBasket::Add.

Всему виной провайдер CCatalogProductProvider, который и поддерживает взаимодействие с интернет магазином. Этот класс использует интерфейс IBXSaleProductProvider. Если заглянуть в код класса, то можно увидеть следующее:

Тут то и происходит подмена наших полей на стандартные.

Чтобы решить эту проблему, мы создадим свой провайдер, назовем его CCatalogProductProviderCustom, и подключим его в init.php

Код его будет такой:

Код функций GetProductData и OrderProduct надо взять из исходного класса CCatalogProductProvider. Только убрав в них две злосчастные строчки, чтобы получилось примерно так:

И теперь при добавлении товара в корзину при помощи CSaleBasket::Add надо передавать передавать PRODUCT_PROVIDER_CLASS равным CCatalogProductProviderCustom.

На этом всё. Можно использовать свои урлы и названия у товаров в корзине. Например, удобно дописывать в скобки артикул товару

Читайте также:  Asus u30s рамка матрицы

Похожие записи

1С-Битрикс. LazyLoad или ленивая загрузка контента при включенном кешировании

В этой заметке я хочу рассказать о технологии LazyLoad или в простонародье «ленивая загрузка» в Битриксе. Метод, описанный мной, будет точно работать в компонентах catalog.section и news.list.

1C-Битрикс. Кастомизация нового шаблона компонента sale.order.ajax

С выходом нового шаблона компонента sale.order.ajax на форумах битрикса разгораются возмущения и недомения. Мол, теперь код всего шаблона на JavaScript и как его кастомизировать непонятно. На самом деле да, код js-скрипта составляет почти семь тысяч строк. Сходу в таком количестве кода, даже хорошо написанного (к сожалению, битрикс этим не балует), соблюдая паттерны программирования, будет непросто.

В этой заметке я покажу способ, как можно кастомизировать основной скрипт логики шаблона оформления заказа (order_ajax.js), не прибегая к его правке. Что нам это даёт? Когда прилетят очередные обновления шаблона, мы просто заменим его и всё. Все наши кастомизации будут работать (в теории).

1С-Битрикс. Защита от спама в регистрации без капчи

Не редкость, когда боты начинают регистрироваться на сайтах и захламлять списки пользователей своим присутствием. В «1С-Битрикс» можно включить капчу для защиты от спама. Но порой и капча не спасает, да и заставлять пользователей вводить код с капчи, я считаю, не гуманно. Воспользуемся другим трюком.

8 комментариев

Здравствуйте. Вы не могли бы выложить итоговый текст файла php.ini?

Просто, вот этот кусок

необходимо, я так полагаю, во что то обернуть?

Олег, добрый вечер. Этот кусок кода нужно вставить в файл, где будет хранится ваш провайдер, например /bitrix/php_interface/providers/product_provider_custom.php

И далее подключить этот файл в init.php

Добрый день. У меня при создании заказа, в админку падают товары и все бы хорошо, но при редактировании заказа, товары которые были со скидкой, почему-то слетает скидка, именно после нажатия на кнопку, изменить заказ. Тех поддержка мне написали, что "У вас при добавлении товара в корзину не прописан PRODUCT_PROVIDER_CLASS, он должен быть равен "CCatalogProductProvider". Поэтому и не распространяется скидка. " Как быть, что сделать чтобы при оформлении заказа, значение записывалось такое как они пишут !

Можно не переписывать метод класса родителя GetProductData. Можно использовать: $arParent = parent::GetProductData($arFields); а потом уже менять массив 🙂

Виталий, конечно! Даже нужно, я бы сказал. Заметка не нова — перепишу на досуге.

Олег, здравствуйте! Не много не по теме, но пытаюсь решить одну задачу — смену типа цены по купону в корзине. Никак не соображу, как лучше это сделать. Через эти обратные функции?

Роман, как вариант — да

Олег, сделал через хендлеры к событиям корзины.

Ссылка на основную публикацию
Adblock detector