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

Как получить id статьи в своём компоненте?

00 голосов
2
Как получить id статьи в своём компоненте?
спросил 29 Авг, 13 от аноним
редактировать 29 Авг, 13

2 Ответы

00 голосов
Смотря что вы хотите. Если делаете свой компонент для просмотра новостей - то надо из URL брать.
ответил 30 Авг, 13 от root (25,590 баллов)
Я делаю компонент, который добавляется в конец статьи. Т.е. парсить $APPLICATION->GetCurPage() ? А если там ЧПУ, то нужно делать еще в БД запросы? Нет ли какого-то готового решения?
А как выводится статья? С помощью news.detail?
Да, на самом деле статья это всего лишь пример.. нужно общее решение
00 голосов

Грубо говоря, всё действительно сводится к парсингу $_SERVER['REQUEST_URI'], равно как и $APPLICATION->GetCurPage(). Если хотите воспользоваться "встроенными" стандартными средствами для ЧПУ - вот участок кода, отвечающий за эту задачу. В $arVariables попадают параметры, описанные в $arComponentVariables (по шаблонам путей из <сайт>/urlrewrite.php 

 

$arResult["URL_TEMPLATES"] = array();

$arDefaultUrlTemplates404 = array(
    "element_list" => "",
    "element_history" => "#ELEMENT_ID#/history/",
    "element_edit" => "#ELEMENT_ID#/",
);
 
$arDefaultVariableAliases404 = Array(
    "element_list" => array("PAGE_NAME" => "PAGE_NAME"),
    "element_edit" => array("PAGE_NAME" => "PAGE_NAME", "ELEMENT_ID"=>"ELEMENT_ID"),
    "element_history" => array("PAGE_NAME" => "PAGE_NAME", "ELEMENT_ID"=>"ELEMENT_ID"),
);
 
$arComponentVariables = Array("ELEMENT_ID", "PAGE_NAME");
 
$arDefaultVariableAliases = Array("ELEMENT_ID" => "ELEMENT_ID", "PAGE_NAME"=> "PAGE_NAME");
 
$requestURL = $sPath = $prevComponentPage = false;
$arUrlTemplates = CComponentEngine::MakeComponentUrlTemplates($arDefaultUrlTemplates404, $arParams["SEF_URL_TEMPLATES"]);
$arVariableAliases = CComponentEngine::MakeComponentVariableAliases($arDefaultVariableAliases404, $arParams["VARIABLE_ALIASES"]);
$componentPage = CComponentEngine::ParseComponentPath(
    $arParams["SEF_FOLDER"],
    $arUrlTemplates,
    $arVariables,
    $requestURL);
if (empty($componentPage) && !empty($_REQUEST["PAGE_NAME"])):
    $componentPage = $_REQUEST["PAGE_NAME"];
endif;
 
$componentPage = (empty($componentPage) ? "element_list" : $componentPage);
 
CComponentEngine::InitComponentVariables($componentPage, $arComponentVariables, $arVariableAliases, $arVariables);
 
Как видите, всё совсем не очевидно, но видимо очень гибко -- работает как в случае включенного ЧПУ в компоненте, так и в случае выключенного. Читайте http://dev.1c-bitrix.ru/api_help/main/reference/ccomponentengine/initcomponentvariables.php , изучайте код стандартных компонентов.
ответил 31 Авг, 13 от root (25,590 баллов)

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

0 голосов
6 ответов
0 голосов
0 ответов
0 голосов
2 ответов
0 голосов
3 ответов
спросил 16 Март, 14 от Santinel (180 баллов)