Сегодня я расскажу как настраивать ЧПУ при совместном использовании 2х компонентов – «лента новостей» и «новость детально». Результатом будут красивые ссылки вида /news/1/ вместо стандартного /news/news_detail.php?ELEMENT_ID=1.
Итак, что нам необходимо для начала работы:
— созданный инфоблок с добавленными элементами
— настроенный обработчик 404 ошибки (как это сделать, я писал тут)
— компонент «лента новостей» (для примера будет располагаться в корне сайта /index.php)
— компонент «новость детально» (например, в /news/news_detail.php)
Первым делом в ленте новостей указываем путь до страницы детального просмотра — /news/#ELEMENT_ID#/
В настройках «новости детально» должно стоять: ID новости ={$_REQUEST[«ELEMENT_ID»]}
Идем в Панель управления – Настройки – Настройки продукта – Обработка адресов – Новая запись.
Для тестового примера заполняем поля как на скриншоте
Файл — указываем путь до страницы, на которой лежит компонент «новость детально».
Условие стоит рассмотреть подробнее:
символами #^ обозначается начало строки для сопоставления;
/news/ — реальный или виртуальный каталог (т.е. может не существовать), который будет использоваться в адресах ссылок. Должен совпадать с первой частью пути до страницы детального просмотра в компоненте «лента новостей» (до #ELEMENT_ID#/);
([0-9]+) — буквально означает «любое количество цифр от 0 до 9». Это наиболее подходящий вариант, так как id новости — всегда число;
# — конец условия
Этим заканчивается процесс настройки, ЧПУ уже должно работать.
Для правильной работы поиска указываем в настройках инфоблока:
URL страницы информационного блока: #SITE_DIR#/
URL страницы раздела:
URL страницы детального просмотра: #SITE_DIR#/news/#ELEMENT_ID#/
Здесь /news/ тот самый существующий или не существующий каталог, о котором шла речь выше.
Работа с разделами сознательно не затрагивалась в данной статье, по той причине что нет стандартного новостного компонента, выводящего их список (да, в каталоге есть, но это уже совсем другая история:)
Больше статей и материалов по web-разработке в tg-канале - подписывайтесь!
Подписаться в telegram
Спасибо огромное, очень я эту информацию искал ))
А то на форуме битрикса или к мануалам отсылают (в которых далеко не всегда все очевидно), или говорят — вы лохи, всякую ерунду спрашиваете ((
Все прекрасно работает, спасибо! Но, что делать, если нужно использовать вместо числового идентификатора символьный, например, ELEMENT_CODE? Пробовал таким путем, но не прокатывает…. Буду признателен за подсказку.
Настройка, по идее, отличается всего лишь одним пунктом — в списке путь до деталки /news/#ELEMENT_CODE#/ и в настройках детального просмотра «Код элемента» ={$_REQUEST[«ELEMENT_CODE»]}
Большое спасибо за пример! В документации по битриксу эта информация почему-то отсутствует.
ЧПУ работает, но возникает проблема при применении постраничной навигации —
например при выводе комментариев к новости или при разбивке длинной статьи с помощью тега .
Пример:
До настройки ЧПУ ссылки на новости были такого вида:
/news/detail.php?ID=4827
Если к новости есть многостраничные комментарии (выводятся с помощью компонента forum.topic.reviews), то ссылки имели такой вид:
/news/detail.php?ID=4827&PAGEN_2=2
/news/detail.php?ID=4827&PAGEN_2=3
и т.д.
После настройки ЧПУ ссылки на новость стали такого вида:
/news/4827/
Ссылка выводится красиво как и задумано.
Но ссылки с постраничной навигацией выглядят уже не очень:
/news/4839/?ID=4839&PAGEN_2=2
/news/4839/?ID=4839&PAGEN_2=3
А не так как хотелось бы:
/news/4839/?PAGEN_2=2
/news/4839/?PAGEN_2=3
Пробовал различные настройки в «Обработке адресов» — бесполезно, компонент system.pagenavigation этим правилом не подчиняется.
Поэтому от настройки ЧПУ видимо придется отказаться.
Александр, у Вас в настройках инфоблока путь до страницы детального просмотра правильный стоит?
Такой проблемы не должно быть.
В настройках детальной страницы след. параметр:
#SITE_DIR#/news/#ELEMENT_ID#/
Александр, скиньте код страницы мне на e-mail, попробуем разобраться:)
alexey.valeev@gmail.com
Спасибо, Алексей! Второй раз нахожу нужную информацию на Вашем блоге.
Очень помогли, спасибо!
Отлично) это сработало!
А если ситуация такая. Есть уже готовая страница.. и надо привести её из вида http://mysite.ru/bitrix/test/…/test.php к виду http://mysite.ru/test.html. Естественно с редиректом со старой на новую. Как это реализовать в битриксе, если не секрет?)
C ходу видится 2 варианта — прописать в админке правило в «Обработке адресов» (не скажу точно как оно будет выглядеть, можно в курсах подсмотреть) или поставить 301й редирект прямо из .htaccess корневой директории.
У Вас ссылка битая (как это сделать, я писал тут). Вы наверно с Денвера переносили…
Спасибо, ссылку исправил.
Наконец-то полезная инфа по этому вопросу! :)
Спасибо, благодаря Вам все получилось
столкнулся с такой же ситуацией как у Александр:
05.10.2010 в 06:32 http://alexvaleev.ru/nastroika-chpu-v-novostnoi-lent-1c-bitrix-sposob2/#comment-682
раньше никогда не было таого или не замечал, но тут засада
ситуация такая: есть каталог(catalog) у него настроено ЧПУ
понадобилось создать новый раздел со своим правилом
создал: categoria/list.php
кидаю туда компонент catalog.section и настраиваю под него фильтрацию и чпу
Код
«CONDITION» => «#^/catalog/categoria/([a-zA-Z0-9_]+)/([a-zA-Z0-9_]+)/(.*)#»,
«RULE» => «CATEGORIA=$1&AUTO=$2»,
«ID» => «bitrix:catalog»,
«PATH» => «/catalog/categoria/list.php»,
отлично, ссылка /catalog/categoria/1/kia/ работает, но на странице есть постраничная навигация. нажимаем 2 страницу и
/catalog/categoria/1/kia/?CATEGORIA=1&AUTO=kia&PAGEN_1=2
как избавиться от этой части CATEGORIA=1&AUTO=kia& чтобы осталось только /catalog/categoria/1/kia/?PAGEN_1=2
сами элементы имеют правильный путь, все хорошо, а вот постраничная навигация нет
вы тогда смогли понять от чего такое могло произойти или нет?
я бы еще добавил в конструкцию (?:\\?.*)?# дабы после сброса кеша на детальной странице вместо содержимого не появлялась противная красная надпись ЭЛЕМЕНТ НЕ НАЙДЕН
«CONDITION» => «#^/news/([0-9]+)/(?:\\?.*)?#»,
Алексей, у меня не получается настроить использование символьного идентификатора вместо числового через ELEMENT_CODE, как Вы описали. У меня Битрикс 7.0.6 На форуме пишут, что нужно добавлять код в файл /bitrix/php_interface/init.php чтобы ЧПУ работало на старых версиях Битрикса: http://dev.1c-bitrix.ru/community/forums/forum6/topic35759/
Но у меня и с этим кодом не работает.
Помогите разобраться.
Ребят, помогите пожалуйста. Переношу новости, не могу настроить чпу отображения новостей. Показывает код 404
Необходим вывод новостей типа » #SITE_DIR#/news/#SECTION_CODE#/#ELEMENT_CODE#.php »
Создал страницу » #SITE_DIR#/news/newsdetail.php »
Добавил в нее компонент » bitrix:news.detail » и настроил ID новости » ={$_REQUEST[«ELEMENT_ID»]} »
В правилах обработки адресов указал
Условие » #^/news/([a-zA-Z0-9]+$)/([a-zA-Z0-9]+$)/# »
Компонент » bitrix:news.detail »
Файл » /news/newsdetail.php »
Правило » ELEMENT_CODE=$2 »
При переходе по ссылке «новость детально» открывается 404.
Подскажите, пожалуйста, на каком этапе совершил ошибку. Спасибо.
Точно не скажу, нужно тестировать, но сразу видно 2 ошибки:
1. в настройках компонента нужно указать, что используется код элемента = {$_REQUEST[«ELEMENT_CODE»]}
2. условие не совпадает с маской, так правильнее #^/news/([a-zA-Z0-9]+$)/([a-zA-Z0-9]+$)\.php#
Подправил
Условие » #^/news/([a-zA-Z0-9]+$)/([a-zA-Z0-9]+$)\.php# »
ID новости » ={$_REQUEST[«ELEMENT_CODE»]} »
не помогает
В настройках нужно указать использование символьного кода элемента, а не ID. И установить его значение «ELEMENT_CODE» => ={$_REQUEST[«ELEMENT_CODE»]}
сделала для #ELEMENT_CODE#.
Стояла задача такова-каталог товаров без разделов.
Создаем папочку в которой у нас будет размещатся в файле index.php catalog.section.В нем же создадим файл detail.php где будет находится компонента catalog.element.Теперь по настройкам
1.Настройка правил обработок.
Условие:#^/catalog/([\w\d\-]+)(\\?(.*))?#
Файл:/catalog/detail.php
Правило:ELEMENT_CODE=$1
2.Настройка инфоблока
URL страницы детального просмотра:#SITE_DIR#/catalog/#ELEMENT_CODE#/
3.Настройка компоненты catalog.section
Параметр компоненты «Включить поддержку ЧПУ» ОТКЛЮЧАЕМ=))
Потом в параметрах
«URL, ведущий на страницу с содержимым элемента раздела»:
/catalog/#ELEMENT_CODE#/
4.Настройка компоненты элемент каталога детально
Код элемента:={$_REQUEST[«ELEMENT_CODE»]}
И ставим галочку в компоненте Включить поддержку ЧПУ =)))
Все заработало
Всем привет!