Как включить ЧПУ в компоненте news.list битрикс

98
22 февраля 2022, 16:40

На сайте есть папка inform в ней 2 файла index.php и detail.php В файле index.php вызывается компонент news.list, в файле detail.php вызывается компонент news.detail. В файле index.php если задано DETAIL_URL=/inform/detail.php?ELEMENT_CODE=#ELEMENT_CODE# детальная новость выводится, если ничего не задано или задано DETAIL_URL=/inform/#ELEMENT_CODE#/ детальная новость не выводится вместо нее пустая белая страница ошибок на ней нет. Пробовал использовать вместо news.list компонент news тоже самое получается.

Как изменить DETAIL_URL, чтобы детальная страница отображалась и URL имел вид /inform/frukty/ ????????

Привожу коды компонентов и код файла urlrewrite.php

Код файла index.php в папке inform

<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); 
?><h1>Информация</h1> 
<div class="tile"> 
	<?$APPLICATION->IncludeComponent("bitrix:news.list", "inform_l", array( 
	"IBLOCK_TYPE" => "cont", 
	"IBLOCK_ID" => "3", 
	"NEWS_COUNT" => "100", 
	"SORT_BY1" => "ACTIVE_FROM", 
	"SORT_ORDER1" => "ASC", 
	"SORT_BY2" => "ACTIVE_FROM", 
	"SORT_ORDER2" => "ASC", 
	"FILTER_NAME" => "", 
	"FIELD_CODE" => array( 
		0 => "NAME", 
		1 => "", 
	), 
	"PROPERTY_CODE" => array( 
		0 => "", 
		1 => "", 
	), 
	"CHECK_DATES" => "Y", 
	"DETAIL_URL" => "/inform/detail.php?ELEMENT_CODE=#ELEMENT_CODE#", 
	"AJAX_MODE" => "N", 
	"AJAX_OPTION_JUMP" => "N", 
	"AJAX_OPTION_STYLE" => "Y", 
	"AJAX_OPTION_HISTORY" => "N", 
	"CACHE_TYPE" => "A", 
	"CACHE_TIME" => "36000000", 
	"CACHE_FILTER" => "N", 
	"CACHE_GROUPS" => "N", 
	"PREVIEW_TRUNCATE_LEN" => "", 
	"ACTIVE_DATE_FORMAT" => "d.m.y G:i", 
	"SET_TITLE" => "Y", 
	"SET_STATUS_404" => "Y", 
	"INCLUDE_IBLOCK_INTO_CHAIN" => "N", 
	"ADD_SECTIONS_CHAIN" => "N", 
	"HIDE_LINK_WHEN_NO_DETAIL" => "N", 
	"PARENT_SECTION" => "4", 
	"PARENT_SECTION_CODE" => "", 
	"DISPLAY_TOP_PAGER" => "N", 
	"DISPLAY_BOTTOM_PAGER" => "Y", 
	"PAGER_TITLE" => "Информация", 
	"PAGER_SHOW_ALWAYS" => "N", 
	"PAGER_TEMPLATE" => "pagenav", 
	"PAGER_DESC_NUMBERING" => "N", 
	"PAGER_DESC_NUMBERING_CACHE_TIME" => "36000", 
	"PAGER_SHOW_ALL" => "N", 
	"DISPLAY_DATE" => "N", 
	"DISPLAY_NAME" => "Y", 
	"DISPLAY_PICTURE" => "N", 
	"DISPLAY_PREVIEW_TEXT" => "N", 
	"AJAX_OPTION_ADDITIONAL" => "" 
	), 
	false 
);?> 
</div> 
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

Код файла detail.php в папке inform

<? 
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); 
$APPLICATION->SetTitle("Заголовок"); 
?><?$APPLICATION->IncludeComponent("bitrix:news.detail", "inform_detail", array( 
	"IBLOCK_TYPE" => "cont", 
	"IBLOCK_ID" => "3", 
	"ELEMENT_ID" => $_REQUEST["ID"], 
	"ELEMENT_CODE" => $_REQUEST["ELEMENT_CODE"], 
	"CHECK_DATES" => "Y", 
	"FIELD_CODE" => array( 
		0 => "", 
		1 => "", 
	), 
	"PROPERTY_CODE" => array( 
		0 => "", 
		1 => "", 
	), 
	"IBLOCK_URL" => "", 
	"AJAX_MODE" => "N", 
	"AJAX_OPTION_JUMP" => "N", 
	"AJAX_OPTION_STYLE" => "Y", 
	"AJAX_OPTION_HISTORY" => "N", 
	"CACHE_TYPE" => "A", 
	"CACHE_TIME" => "36000000", 
	"CACHE_GROUPS" => "Y", 
	"META_KEYWORDS" => "-", 
	"META_DESCRIPTION" => "-", 
	"BROWSER_TITLE" => "SEO_T", 
	"SET_TITLE" => "Y", 
	"SET_STATUS_404" => "Y", 
	"INCLUDE_IBLOCK_INTO_CHAIN" => "Y", 
	"ADD_SECTIONS_CHAIN" => "N", 
	"ACTIVE_DATE_FORMAT" => "d.m.Y", 
	"USE_PERMISSIONS" => "N", 
	"DISPLAY_TOP_PAGER" => "N", 
	"DISPLAY_BOTTOM_PAGER" => "Y", 
	"PAGER_TITLE" => "Страница", 
	"PAGER_TEMPLATE" => "inform_detail", 
	"PAGER_SHOW_ALL" => "Y", 
	"DISPLAY_DATE" => "Y", 
	"DISPLAY_NAME" => "Y", 
	"DISPLAY_PICTURE" => "Y", 
	"DISPLAY_PREVIEW_TEXT" => "Y", 
	"USE_SHARE" => "N", 
	"AJAX_OPTION_ADDITIONAL" => "" 
	), 
	false 
);?> <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>

Код файла urlrewrite.php

<? 
$arUrlRewrite = array( 
	array( 
		"CONDITION"	=>	"#^/inform/([^/]+)/($|\\?.*)#", 
		"RULE"	=>	"ELEMENT_CODE=$1", 
		"ID"	=>	"", 
		"PATH"	=>	"/inform/detail.php", 
	), 
	array( 
		"CONDITION"	=>	"#^/inform/#", 
		"RULE"	=>	"bitrix:news.list", 
		"ID"	=>	"", 
		"PATH"	=>	"/inform/index.php", 
	) 
); 
 
?>

Код шаблона info_list

<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?> 
<ul> 
<?/*if($arParams["DISPLAY_TOP_PAGER"]):?> 
	<?=$arResult["NAV_STRING"]?><br /> 
<?endif;*/?> 
<?foreach($arResult["ITEMS"] as $arItem):?> 
	<? 
	$this->AddEditAction($arItem['ID'], $arItem['EDIT_LINK'], CIBlock::GetArrayByID($arItem["IBLOCK_ID"], "ELEMENT_EDIT")); 
	$this->AddDeleteAction($arItem['ID'], $arItem['DELETE_LINK'], CIBlock::GetArrayByID($arItem["IBLOCK_ID"], "ELEMENT_DELETE"), array("CONFIRM" => GetMessage('CT_BNL_ELEMENT_DELETE_CONFIRM'))); 
	?> 
 
			<li><a href="<?echo $arItem["DETAIL_PAGE_URL"]?>"><?echo $arItem["NAME"]?></a></li> 
 
<?endforeach;?> 
<?/*if($arParams["DISPLAY_BOTTOM_PAGER"]):?> 
	<?=$arResult["NAV_STRING"]?> 
<?endif;*/?> 
</ul>

Answer 1

В Вашей реализации, с тем что уже сделано можно сделать так:

  • в файле urlrewrite.php наверно не то что то, вот пример

вместо этого:

array(
    "CONDITION" =>  "#^/inform/([^/]+)/($|\\?.*)#",
    "RULE"  =>  "ELEMENT_CODE=$1",
    "ID"    =>  "",
    "PATH"  =>  "/inform/detail.php",
),

попробуйте так (т. е. выбирается из урла вторая часть после /inform/ который может быть символами и цифрами, и то что найдено будет передано в файл /inform/detail.php в $_REQUEST[‘ELEMENT_CODE’], а в этом файле вы уже будете использовать где хотите ):

array ( 
    'CONDITION' => '#^/inform/([a-zA-Z0-9_-]+)/?(.*)#',
    'RULE' => 'ELEMENT_CODE=$1',
    'ID' => '',
    'PATH' => '/inform/detail.php',
),
  • В файле index.php укажите DETAIL_URL = "/inform/#ELEMENT_CODE#" (тогда урлы в шаблоне будут составлены такого типа , /inform/<код элемента> )
  • а в файле detail.php уберите строчку "ELEMENT_ID" => $_REQUEST["ID"] (ведь Вы же не собираетесь передавать id товара да и в файле urlrewrite.php такой вариант не описали, а в этом файле у вас будет код элемента из урла в переменной $_REQUEST[‘ELEMENT_CODE’] которую вы уже подкидываете в компонент )

Но потестируйте может чуть другая регулярка нужна (можно найти в документации).

Если белый экран то надо включить в битриксе вывод php ошибок.

(Ну наверно проще было бы комплексный компонент использовать news - по нему много статей и документации)

READ ALSO
Как проверить изменения в диске

Как проверить изменения в диске

Пишу веб приложение на PHP, возника задача синхронизировать яндекс диск с сервером с помощью Rest Api, но вот как сделать если я загружаю файл...

92
Это знак эквивалентности &quot;===&quot;?

Это знак эквивалентности "==="?

Это знак эквивалентности "==="?

107
Преобразование error объекта в json

Преобразование error объекта в json

Использую express, возникла проблема

74