Bitrix компонент rss, ajax

318
15 августа 2017, 16:22

Пишу компонента по парсингу и записи Rss ленти в инфоблоки, не зная bitrix-а. Здесь результат: https://bitrix.nbrz.ru/imported-news/, код: https://github.com/M0LFAR/test-alterEgo

urlrewrite:

array(
  "CONDITION" => "#^/imported-news/#",
  "RULE" => "",
  "ID" => "bitrix:news",
  "PATH" => "/imported-news/index.php",
)

Вопрос: 1. Как обработать ajax запрос из шаблона компонента, какая есть альтернатива? 2.Как при ЧПУ выводить новости только для активной секции, например по адресу https://bitrix.nbrz.ru/imported-news/drugie/ - должны отображатся новости из секции drugie? Как в фильтр передать параметр из uri?

Answer 1
  1. Точно так же как и на любой другой странице. Собственно вариантов не много:

1.1 в запросе передаете параметр, означающий, что это AJAX запрос. По этому параметру необходимо перед контентом, что нужно отправить поставить сброс буфера $APPLICATION->RestartBuffer(), а сразу после die(). Минус решения, тратятся ресурсы на построение кода перед этим компонентом.

1.2 отдельный файл принимающий AJAX запрос, не подключающий header.php. И содержащий подключение компонента. Только надо позаботится, чтоб на странице и в этом скрипте настройки компоненты были соответсвющими.

  1. Получаете текущий URL и разбираете его на значимые для вас части

    $request = Bitrix\Main\Context::getCurrent()->getRequest(); $curDir = $request->getRequestedPageDirectory();

А дальше по нему фильтруете, по тем признакам что у вас есть

  1. Самый важный пункт... Не очень удачный алгоритм скрипта. Представьте высоздали очень крутой сайт с огромной посещаемостью и все разом зашли. Да ваш серевер сразу заблокируют. Потому, что каждый посетитель - запрос к внешнему ресурсу с одного и того же IP. Если не высокая посещаемость, но есть "доброжелаетель" одна относительно не сложная консольная команда в линкус, и тот же результат для вашего сервера. Обратная ситуация: малая посещаемость. Если лента которую парсите отдает, например, по 10 новостей. А у вас заходят раз в неделю - будут пропуски. Кроме того скорость загрузки вашего сайта (этой страницы) будет сильно зависеть от канала от вашего сервера до источника, скорости работы источника (И это на каждом хите)

На мой взгляд практичнее создать агента (или просто скрипт дергаемый cron),который с заданной периодичностью, будет опрашивать фид и записывать в бд. А компоненту останется только выводить накопленные новости (обязательно с использованием кеширования).

Да даже если оставлять ваш подход - продумайте оптимаьный интервал времени, когда нет смысла опрашивать источник, а достаточно просто отдать из кеша.

READ ALSO
JSON MySQL, пересортировка “ключей” [требует правки]

JSON MySQL, пересортировка “ключей” [требует правки]

глупый недочет, каких бы это плюсов производительности не дало, это в любом случае минус, ключи должны сохранять свою изначальную позицию!

303
пополнение баланса php

пополнение баланса php

есть форма, для пополнения баланса пользователя через интеркассу

308