Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Как сделать вывод урл в списке новостей

00 голосов
5
Есть идея переделать страницы ведущие на детальное описание новости
из /news/105/
в /news/novost/

при этом сделать работоспособным предыдущий вариант ссылки, либо сделать редирект на новую страницу.
Как это правильнее сделать?
СпасиБО!
спросил 06 Ноя, 13 от SicknezZz (200 баллов)

5 Ответы

00 голосов
В настройках инфоблока пропишите "URL детальной страницы элемента": /news/#CODE#/

Чтобы оставить работоспособным первый вариант нужно оставить текущее правило в urlrewrite + написать небольшой скрипт, который будет редиректить на новую страницу.
ответил 14 Дек, 13 от AtomiX (140 баллов)
00 голосов
правильно ли я вас понял, заменить в настройках вывода компонента (так как есть у меня сейчас):
Код
"SEF_URL_TEMPLATES" => array(
  "detail" => "#ELEMENT_CODE#/",
)


А вот правило из urlrewrite:
Код
array(
   "CONDITION"   =>   "#^/news/#",
   "RULE"   =>   "",
   "ID"   =>   "bitrix:news",
   "PATH"   =>   "/news/index.php",
),


Александр, я буду вам признателен, если опишите мои действия чуть-чуть подробнее.
ответил 28 Март, 14 от SicknezZz (200 баллов)
00 голосов
В настройках компонента тоже поменяйте.

Но я говорил про настройки инфоблока: http://floomby.ru/content/1i3ZYNo9qU/

Правило добавьте ещё одно (перед тем, которое вы написали):
array(
"CONDITION" => "#^/news/(\\d+)/#",
"RULE" => "ID=$1",
"ID" => "",
"PATH" => "/somefile.php",
),

В somefile.php вам приходит $_GET['ID'] с ID новости. По этому ID получаете её символьный код. И делаете редирект на новую страницу.
ответил 20 Июль, 14 от AtomiX (140 баллов)
00 голосов
вот что получилось в файле newredir.php:

Код
<? require ($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");

$res = CIBlockElement::GetByID($_GET["ELEMENT_ID"]);
if($ar_res = $res->GetNext()) }
LocalRedirect("/news/'.$ar_res['CODE'].'/", ,301 Moved permanently); 
}
require ($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); ?>

вот только редиректа нет.
ответил 21 Ноя, 14 от SicknezZz (200 баллов)
00 голосов
ошибку сам исправил ))

Код
<? require ($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");

$res = CIBlockElement::GetByID($_GET["ELEMENT_ID"]);
if($ar_res = $res->GetNext()) {
LocalRedirect("/news/".$ar_res['CODE']."/", false, "301 Moved permanently"); 
}
require ($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php"); ?>

и в правиле:
Код
   array( 
      "CONDITION"   =>   "#^/news/(\\d+)/#", 
      "RULE"   =>   "ELEMENT_ID=$1", 
      "ID"   =>   "", 
      "PATH"   =>   "/news/newsredir.php", 
   ),


Александр, спасибо!
ответил 17 Март, 15 от SicknezZz (200 баллов)

Похожие вопросы

0 голосов
2 ответов
0 голосов
4 ответов
0 голосов
6 ответов
спросил 19 Окт, 13 от Nemesida (240 баллов)
0 голосов
3 ответов
0 голосов
2 ответов