Я изучаю Битрикс где-то пару недель. Зачем?.. Хотелось чего-то новенького, тут подвернулась учёба. Даром, с наставниками, с возможным трудоустройством дальше хотя бы на пару месяцев - на испытательный срок. Я ничего заранее про Битрикс не знала, ну кроме термина "Битрикс" и факта, что в каждой второй вакансии по Laravel (мой обычный фреймворк) я на хедхантере вижу строчку Б_ЭТОНАМ_ТОЖЕНАДО.

Ниже попробую описать, чем Битрикс труден при выраженном любопытстве. Ну и, опять же, пару опций намечу, как это вот всё лечить. Вдруг разработчики Битрикса статью увидят? Они симфонисты. Правда, они старый код не трогают (это не точно), пишут второе ядро D7. Собственно про D7 наружный лифт на картинке.

Два вида пыха

Первое, что вам надо узнать до захода на Битрикс: "там всё на файлах". Точнее, на файлах многое. Есть типовые страницы, вроде "товар с артикулом". Сами артикулы и другие свойства товаров, конечно, хранятся в базе.

Но. В сабже есть

  • вёрстка

  • и визуальный редактор.

Вёрстка, если издалека, это файл.php. Как таковую структуру вёрстки мы рассмотрим чуть ниже. Тут лишь отмечу, что вёрстка - шаблон, в нём 90% HTML там-сям разбавлены хитрой специальной шаблоновой формой пыха:

<ul>
  <?php foreach ($arResult['ITEM'] as $item) : ?>
    <li>
      <a href="<?=$item['URL']?>" class="<?=$item['PARAM']['color'] ?? ''">
        <?=$item['TEXT']?>
      </a>
    </li>
  <?php endforeach; ?>
</ul>

Парочка комментариев к коду:

  • я могу подвирать в названиях разных параметров. Ибо они - последнее, что меня там цепляет

  • я долго думала, что к этой вставке выбрать в рубрике "какой язык". Хабр не подсвечивает РНР, поскольку ждёт теги снаружи. А на HTML он не знает, что делать с пыхом в кавычках

И да, я в курсе, это привычка к blade (шаблоны на Laravel), а в том же Yii шаблоны ровно такие же. Только Yii не прикидывается юзающим визуальный редактор (вернее, не в тех количествах).

Собственно, это и есть пых второй формы: редакторы.

Вы нажимаете кнопочку "добавить страницу", и где-то в недрах Алдана некий невидимый джинн создаёт вёрстку 'файл.php', в нужную папку Битрикса её складывает и уходит. Ну или так: уходит, переведя вас на эту страницу (если вы заодно поставили галочку "перевести на страницу" - проверьте).

Если вы там в админке внутри страницы жмёте на кнопку "добавить меню / новостной компонент / и др. сюда", джинн (или братец джинна) находит файл вашей страницы, место внутри её вёрстки - промежду тегами - где нужно вставить вызов крутецкой функции. Дальше вставляет туда, например, такое:

<?$APPLICATION->IncludeComponent("bitrix:news","",Array(
        "DISPLAY_DATE" => "Y",
        "DISPLAY_PICTURE" => "Y",
        "DISPLAY_PREVIEW_TEXT" => "Y",
        "SEF_MODE" => "Y",
        "AJAX_MODE" => "Y",
        "IBLOCK_TYPE" => "news",
        "IBLOCK_ID" => "1",
        "NEWS_COUNT" => "20",
        "USE_SEARCH" => "Y",
        "USE_RSS" => "Y",
        "USE_RATING" => "Y",
        "USE_CATEGORIES" => "Y",
        "USE_REVIEW" => "Y",
        "USE_FILTER" => "Y",
        "SORT_BY1" => "ACTIVE_FROM",
        "SORT_ORDER1" => "DESC",
        "SORT_BY2" => "SORT",
        "SORT_ORDER2" => "ASC",
        "CHECK_DATES" => "Y",
        "PREVIEW_TRUNCATE_LEN" => "",
        "LIST_ACTIVE_DATE_FORMAT" => "d.m.Y",
        "LIST_FIELD_CODE" => Array(),
        "LIST_PROPERTY_CODE" => Array(),
        "HIDE_LINK_WHEN_NO_DETAIL" => "Y",
        "DISPLAY_NAME" => "Y",
        "META_KEYWORDS" => "-",
        "META_DESCRIPTION" => "-",
        "BROWSER_TITLE" => "-",
        "DETAIL_SET_CANONICAL_URL" => "Y",
        "DETAIL_ACTIVE_DATE_FORMAT" => "d.m.Y",
        "DETAIL_FIELD_CODE" => Array(),
        "DETAIL_PROPERTY_CODE" => Array(),
        "DETAIL_DISPLAY_TOP_PAGER" => "Y",
        "DETAIL_DISPLAY_BOTTOM_PAGER" => "Y",
        "DETAIL_PAGER_TITLE" => "Страница",
        "DETAIL_PAGER_TEMPLATE" => "",
        "DETAIL_PAGER_SHOW_ALL" => "Y",
        "STRICT_SECTION_CHECK" => "Y",
        "SET_TITLE" => "Y",
        "ADD_SECTIONS_CHAIN" => "Y",
        "ADD_ELEMENT_CHAIN" => "N",
        "SET_LAST_MODIFIED" => "Y",
        "PAGER_BASE_LINK_ENABLE" => "Y",
        "SET_STATUS_404" => "Y",
        "SHOW_404" => "Y",
        "MESSAGE_404" => "",
        "PAGER_BASE_LINK" => "",
        "PAGER_PARAMS_NAME" => "arrPager",
        "INCLUDE_IBLOCK_INTO_CHAIN" => "Y",
        "USE_PERMISSIONS" => "Y",
        "GROUP_PERMISSIONS" => Array("1"),
        "CACHE_TYPE" => "A",
        "CACHE_TIME" => "3600",
        "CACHE_FILTER" => "Y",
        "CACHE_GROUPS" => "Y",
        "DISPLAY_TOP_PAGER" => "Y",
        "DISPLAY_BOTTOM_PAGER" => "Y",
        "PAGER_TITLE" => "Новости",
        "PAGER_SHOW_ALWAYS" => "Y",
        "PAGER_TEMPLATE" => "",
        "PAGER_DESC_NUMBERING" => "N",
        "PAGER_DESC_NUMBERING_CACHE_TIME" => "36000",
        "PAGER_SHOW_ALL" => "Y",
        "FILTER_NAME" => "",
        "FILTER_FIELD_CODE" => Array(),
        "FILTER_PROPERTY_CODE" => Array(),
        "NUM_NEWS" => "20",
        "NUM_DAYS" => "30",
        "YANDEX" => "Y",
        "MAX_VOTE" => "5",
        "VOTE_NAMES" => Array("0", "1", "2", "3", "4"),
        "CATEGORY_IBLOCK" => Array(),
        "CATEGORY_CODE" => "CATEGORY",
        "CATEGORY_ITEMS_COUNT" => "5",
        "MESSAGES_PER_PAGE" => "10",
        "USE_CAPTCHA" => "Y",
        "REVIEW_AJAX_POST" => "Y",
        "PATH_TO_SMILE" => "/bitrix/images/forum/smile/",
        "FORUM_ID" => "1",
        "URL_TEMPLATES_READ" => "",
        "SHOW_LINK_TO_FORUM" => "Y",
        "POST_FIRST_MESSAGE" => "Y",
        "SEF_FOLDER" => "/",
        "SEF_URL_TEMPLATES" => Array(
            "detail" => "#ELEMENT_ID#/",
            "news" => "search/",
            "section" => "rss/",
        ),
        "AJAX_OPTION_JUMP" => "N",
        "AJAX_OPTION_STYLE" => "Y",
        "AJAX_OPTION_HISTORY" => "N",
        "VARIABLE_ALIASES" => Array(
            "detail" => Array(),
            "news" => Array(),
            "section" => Array(),
        ),
        "USE_SHARE" => "Y",
        "SHARE_HIDE" => "Y",
        "SHARE_TEMPLATE" => "",
        "SHARE_HANDLERS" => array("delicious", "lj", "twitter"),
        "SHARE_SHORTEN_URL_LOGIN" => "",
        "SHARE_SHORTEN_URL_KEY" => "",
        )
);?>

Скопировала отсюда: https://dev.1c-bitrix.ru/user_help/components/content/articles_and_news/news.php .

Ещё раз. Вы кликаете на кнопки в админке на визуальном редакторе. Вам не рекомендуется лезть внутрь кода. В глаза ж бросается - тут код для демонов. Это вот всё под капотом пишет пыха второго типа "редактор" в нужное место пыхи первого типа "страница".

Что помешало умный редактор сделать слегка иначе:

  • джинн ищет файл, куда нужно добавить вставку

  • делает вставку: require сюда файл 'local / config / имя_вёрстки / имя_вставляемого_компонента / хеш.php'

  • а сами эти 105 строчек кода (см. вставку выше) далее пишет туда в (новый) файл, по адресу

Ясное дело, уже очень многое выполнено по-старому. Ок, пишем нового джинна, он проверяет, есть ли вставка старого типа внутри местной вёрстки (с подробным кодом). И если есть, вырезает, далее - см. выше (если уже что-то было, это кладём в новый файл, вёрстке оставив только require и адрес).

Отладку ведём в два хода: изнутри пыха вёрстки находим адрес. По адресу берём файл, а в нём - знакомый уже вызов функции.

Минусы такого решения: мы больше файлов проходим при формировании клиентской выдачи. И больше файлов при перенастройке страницы. Но. Тут, во-первых, три с половиной файла на среднем сайте. А во-вторых, сабж славится своим кешем - чаще всего отдаётся страница готовая. Даже один процент вашего миллиона хитов формировать страницу с нуля не требует. Что не касается работы в админке - но вы в ней не ежечасно. И вас там трое.

Плюс: разделение вёрстки с бекендом. Мы оставляем вёрстке одну строку вместо сотенки с хвостиком. Строчку, которую может понять верстальщик, не знающий РНР: "мы открываем стандартный тег РНР, пишем на языке РНР 'включить' по-английски, пишем стандартное заклинание $_НАЧАТЬ['КОРНЕМ_САЙТА'] - тут по-английски тоже, и, наконец, адрес нужного файла. Закрывающий тег РНР".

Это всегда будет выглядеть одинаково. И это не вызывает вопросов "а шотакое Б_ПРОЛОГ_ЭТОШТО?" Если вдруг вызовет, чел в целом знает, куда идти (вот по этому адресу).

Собственно, дальше - о перегрузке внимания. Или о правилах "как писать годный код. Чтобы потом, через пару лет, ты его сам читал бы на ночь и успокаивался".

Фраза, с которой мы начинаем вёрстку, выглядит так:

<?php if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die; ?>

Это вообще чего? Да очень просто:

  • вёрстка содержит код РНР (см. выше). Вызов вставляемой вёрстки самостоятельно (просто как файла) может вывести в браузер ошибки, на основании коих хакер поймёт, как устроен ваш сервер, код, и туда залезет. В общем, это про безопасность.

  • правильные запросы в Bitrix устроены так: те страницы, которые именно для вызывания, начинаются с подключения крыши (head.php, живёт этот файл по адресу local/templates/имя_шаблона/вотон... кажется, так. Не точно). Файл крыша.пых, в свою очередь, подключает пролог. Ну а пролог вызывает ещё кого-то. И не единственного. Где-то по ходу в недрах программы рождается наша константа: Б_ПРОЛОГ_УЖЕТУТ. Если она у нас есть, значит, вызвано всё в нормальной последовательности для выдачи.

  • ну а ты, маленький программист, ты, разумеется, думаешь о безопасности, помнишь, что эту хреновину зовут Б_ПРОЛОГ_ТУТ, кроме того, годится она только трушная. То есть, бывает и ложная. А когда?.. А зачем?.. А нафига мне всё вот это знать в рамках вёрстки?

Альтернатива: в корне лежит файл security.php . Там наша строчка. Вёрстка же начинается со знакомого для верстальщика (см. выше) "первое - открываем тег РНР, пишем require, далее заклинание $_НАЧАТЬ['КОРНЕМ_САЙТА'], ну и вот это вот .'/security.php'; Закрываем пых."

Что важно знать в такой ситуации? Нужно ли знать о прологе? Или о том, как вообще вставляется эта вёрстка в страницу? Нет. Требуется лишь одна привычка: начинать безопасностью. "Вставьте в начало вёрстки файл безопасность.пых. Он в корне сайта".

Если однажды верстальщик задумается "что там внутри", он отдельно откроет файл "безопасность". С некоторой вероятностью закроет сразу же. С несколько меньшей дальше пойдёт изучать язык. Станет отличным бекендером битрикса, ибо знает поверхность админки уже как свои пять пальцев. Все эти ваши "Б_ПРОЛОГ_ЕСТЬ, а === правда?" раньше ему не встречались, не отвлекали, кнопочки были всем и всё было кнопочками (это я про админку).

Где что лежит

Выйдя по делу (насчёт CMain) на https://bxapi.ru/ , я обрадовалась: я там увидела ссылочку "карта модулей". Я почему-то решила, что мне покажут, кто кого вызывает из старых файлов, в какой последовательности. Лично мне для учёбы такая бы подошла: карточки из названий файлов, их описаний и стрелочки между карточками: "тот вызывает этот (и при каких условиях)".

Я начала было такое делать, но там сто слоёв. Что-то подсказывает, что требуются программисты для написания этого как проекта с интерактивом, а не мои бумажки или мои майндкарты. Я бы предположила, это поможет учиться.

Наши параметры: один, два, много

У части функций на ларавель вообще нет параметров. Я про вопросики вроде $user->isAdmin() или ->isActive(). Или же вызовы просят один параметр, ну или два: update(UserUpdateRequest $request, User $id) в контроллере UserController (тут раньше была ошибка - благодарю @manzadeyза подсказку)

Выше на моей вставке из 105 строчек кода 100 - это... Вы меня поняли. Если вы лезете в код, надо ж всё это знать?.. Умная пыха второго типа "редактор" сама меняет такие значения - не лезьте в код.

Только вопрос: как мне это развидеть? Что помешало сделать таблицы для компонентов, и для конфигов (а это конфиг реально), и вместо вороха строк передавать ID записи в базу?

К минусам (выше) добавится ещё слой. Даже ещё одно обращение к базе. Хуже того, добавится ещё N таблиц (по числу компонентов). Только (опять см. выше) у нас есть кеш. Ну и, опять же, в моём учебном проекте было ещё до меня... 744 таблицы. Семьсот сорок четыре таблицы, Карл! И экономить на рюшечках?


Кажется, я уже выдохлась. Если что-то всплывёт ещё, я напишу отдельно. Но это вряд ли - всё таки я уже, видимо, завязала. Опыт бесценный - теперь мне ничо ни по чём. Какой-нибудь Yii... Ах да!! Чуть не забыла:)

Это вверху страницы в хедере

Подключения стилей, скриптов и строчек. Это же тоже конфиги. Строчки надо выселить на массив:

$aHeaderLinks = [
	'css' => [], 
	'js' => [], 
	'str' => []
];

Дальше, вообще не трогая вёрстку, где-то отдельным местом внутри запускающих файлов из этих вот конфигов всё занести на ассет: $asset->addCss($item) для каждого по ключу 'css' и др.

Ну а верстальщику дать отдельные кнопочки для добавления опций. Кнопка "добавить ссылку на css", такое.


Тут я добавлю ресурсы, которые мне помогли и кукуху сберечь, и ещё даже что-то выучить.

1) хабр. Ищете по слову "Битрикс" и по слову "Bitrix" - это два разных. Очень рекомендую "Битрикс для программиста и менеджера: любовь и ненависть" от @parserme : https://habr.com/ru/post/459330/ . Написано в июле 2019.

2) древний (даже не адаптивный) сайт https://max22.ru/ . Это один из первый, куда я зашла от отчаяния, через гугл. Ну а конкретнее - https://max22.ru/s-bitrix/why-bitrix/ с комментариями. Дата последнего - 18 год. А Битрикс ушёл вперёд... Но конфликты там вечные.

3) Подкаст "Ядро Битрикс: история и планы" на "Пятиминутке РНР": https://www.youtube.com/watch?v=fz08nLnxgpo&t=3s&ab_channel=ПятиминуткаPHP . Запись выложена в июле 2021.

(апд) 4) Добавлю сюда же ссылку (см. в комментариях тут) от @hazgна "Исповедь Битрикс хейтера" @mmjurov: https://habr.com/ru/post/282333/ . Текст написан в 2016 году, обратите внимание. Что-то, возможно - многое, с тех пор изменилось. Но в целом мне лично текст сейчас (в августе 2022) был очень полезен.

Да, разумеется, ещё

  • документация битрикса, это https://dev.1c-bitrix.ru/user_help/ и другие трое на выпадашке сверху (собственно, только неделю спустя поняла, что они там пучками)

  • учебные курсы https://dev.1c-bitrix.ru/learning/course/index.php - эти тоже пучком. Не обращайте внимания на красненькое: мышку наводите на "выбрать курс" и полчаса обдумываете список опций

  • упоминавшийся выше сайт https://bxapi.ru/ - это, правда, только о новом ядре (вроде бы)

Комментарии (50)


  1. FanatPHP
    06.08.2022 17:12
    +18

    Не знаю, насколько вам будет интересен этот комментарий, но читается статья тяжело. Я бы охарактеризовал этот стиль как "бессвязно-развязный". Слов очень много, но при этом структура отсутствует как в статье целиком, так в отдельных абзацах. Плюс какое-то фамильярничанье — "пыха", "крыша". И это "Я тут два дня по верхам посмотрела, сейчас буду рекомендации давать!".


    При всей нелюбви к Битриксу, читать это всё неприятно.


    1. MaryRabinovich Автор
      06.08.2022 18:20

      Спасибо. Очень вас понимаю - и пишется тяжело, и учится. Разве что про "нелюбовь" к нему добавлю два слова.

      Я буквально вчера разделила для себя "битрикс как инструмент" и "битрикс как продукт". И как продукт (статья, собственно, о битриксе как продукте скорее) он наглухо абсолютно захватывающий совершенно, только с поллитрой в сутки. В час. Ну то есть... Я в общем в целом не пью, но тут обнаружила, что за мои две недели учёбы практически не выхожу из квартиры даже. А вроде бы лето.

      Битрикс - такой Магадан, мне кажется. Там очень много людей. Они очень заняты. Они рассчитывают на Битрикс в его сегодняшнем виде. Они не любят, когда под окнами роют. И не надеются получить местные апельсины (я ничего толком про Магадан не знаю, это только мои фантазии - что своих апельсинов там не выращивают).

      А между тем это город с инфраструктурой. Скажем, в Финляндии тоже климат тяжёлый, но есть подход "ок, тут такая задача, как бы саму её постановку бы упростить".

      У меня по началу к битриксу вовсе не "нелюбовь" была - это был шок. Шок, продержавшийся почти неделю, с вопросом "куда смотреть-то? Откуда куда бежать и зачем?" Я как-то раз на пассажирском сидении оказалась на МКАДе с водителем-начинашкой, ну и тут с битриксом вспомнила это зрелище: рядом с тобой сидит человек с десятью руками, тремя ногами, двигает сразу всем и не очень вовремя. И очень нервничает. Хуже того: от его этих действий зависит ваше здоровье, как минимум, а то и вовсе - жизнь.

      Я правда удивлена, что в сети нету карты файлов "кто кого подключает" для разработчиков. Для освоения старого кода Битрикса. Кто кого подключает, и что где творится на каком уровне. Вот, например, есть массив по имени $aMenuLinks (не спрашивайте), есть $arParams и $arResult. Ну и как они связаны? Где? В каком файле какого уровня? Каким способом?

      Как только вы докапываетесь до нужных файлов, Битрикс становится даже не проще - он тривиален. Это длинные простыни разных ифов. Иф то да сё, вот тут вот присвоить так, если нет - то эдак. Если вон там то да сё, то там вон присвоить так-то. Ну и так далее. Ваш арРезалт становится ясным объектом работы, вернее, становится результатом действий какого-то текста из сотни ифов. "Ну хорошо", вы думаете, "пусть их всегда так зовут, результаты, это у них фамилия." Он всегда арРезалт, только состав там разный, в зависимости от компонента.

      Ну и в статье идея в том, что отладка поверхности, как бы сказать, на уровне разработчика - это ж не так уж сложно. Вроде бы, так поменять старый код, чтобы разрабы не плакали, в целом просто. Хотя бы отчасти. Ну хоть бы вынести этот чёртов Б_ПРОЛОГ_ТУТ наружу, в секьюрити файл. Чтобы просто на каждом уровне думать о главном - главном для этого уровня, а остальное использовать, но не думая.

      ...есть ещё версия "мышкой копировать такие строчки". Я так попробовала. С третьего раза взвыла - я не могу так. Если в моей работе есть некий код, я хочу знать, о чём он и для чего. Что за проблему исходно мы им решаем. И почему решаем именно так.


      1. riky
        07.08.2022 22:00
        +1

        не мучайте себя, проходите мимо, если не нравится. а с БХ наверное есть те кому оно нравится, пусть и занимаются с ним.
        Это как приехать в деревню и ходить объяснять местным жителям что этот гнилой сарай надо давно снести. Даже если объективно его и пора бы уже снести.


        1. MaryRabinovich Автор
          08.08.2022 09:51

          Я вообще ни разу не говорила, что надо снести сарай. Битрикс - огромный город. И в нём есть места, которые, кмк, сравнительно легко реформировать, сохранив оболочку. Причём реформы в одних местах не затронут другие: можно всё это сделать последовательно, шаг за шагом.


  1. manzadey
    06.08.2022 17:49
    +2

    Абсолютно согласен с комментарием FanatPHP. Материал изложенный вами тяжело даётся для понимания и сути статьи.

    Можно было просто сократить до одного предложения: Я решила поучить битрикс и поняла что там ад, но вот держите ссылки где я всего этого набралась.

    Я так ничего и не понял. Но я понял хотя бы то, что пример из Laravel некорректен. Ибо метод update у модели принимает только массив $parameters & $options. И не знание основ фреймворка говорит о том, что вы, скорей всего, вообще с ним не работали.


    1. MaryRabinovich Автор
      06.08.2022 17:50

      Господи:) Таки да, спасибо больше. Сейчас исправлю (я о примере на ларавель). Я с ним уже пару лет, но просто последние пару недель на битриксе 25 часов в сутки. Это выматывает.


      1. manzadey
        06.08.2022 17:53
        +1

        Странно что вас вообще хватило на такое время. Я как узнал какой там творится ад, вообще даже мысли не было к нему притрагиваться. Хотя предлагали и я сразу открещивался от него. Не в обиду битриксоидам. :)


        1. MaryRabinovich Автор
          06.08.2022 17:58
          +1

          Я, собственно, бросила, видимо. Ещё в задумчивости. В частности, среди целей статьи было понять, стоит ли пробовать в этом вырасти дальше. Ну и ещё себе двухнедельной давности что-то сказать, что упростило бы то ли решение, стоит ли ввязываться, то ли процесс учёбы, раз уж ввязалась уже.

          Наверное, сделаю перерыв. А там уже как пойдёт.


        1. MaryRabinovich Автор
          06.08.2022 20:56

          Перечитала статью и комментарии, пару часов сознательно отдохнув - впервые за две недели. Читать это невозможно, тут вы все правы:)

          Но. В статье всё таки не только "я поняла, что там ад". Я ещё там с гипотезами, где этот ад-то, похоже, на ровном месте выращен. Я просто по второму в/о психолог, несколько лет проработала у Л.Ф. Обуховой на факультете психологии образования в МГППУ. Ну и мне любопытно, как ухитряются люди на ровном месте сделать добавочных три проблемы, решая одну какую-то. Что-то вроде борьбы Ивана со змеем - рубим голову, три вырастает, и так по кругу. Вот уже сто голов, вот уже тысяча, а мы всё мечемся.

          Сколько я видела комментариев, что Битрикс - зло. Но никогда не видела ничего по делу. Что надо бы изменить, что причём дёшево поменять, и что, при этом, видимо, упростит работу разрабам, не изменив вообще ничего для контент-менеджеров.


  1. Lodin
    06.08.2022 19:11
    +1

    ...В свободное время... учить Битрикс... Да ещё и после Laravel... А вы знаете толк в извращениях!

    До стх пор помню тот момент, когда после Битрикса попробовал Yii — этот странный восторг от того, что прямо на твоих глазах творится настоящая магия вместо привычной битриксовой имитации.

    Имхо, Битрикс — прекрасный трамплин для маркетологов: вот они-то там точно получают мастер-класс. Для программиста же это лимбо.


    1. MaryRabinovich Автор
      06.08.2022 20:16

      А можно с вами поговорить как со специалистом?

      Как вам вот эта мысль: в Битриксе чуть ли не главное зло - наличие пяти файлов да в трёх местах про одно действие? Причём про каждое это свои три места. Или четыре. Или шесть разных папок новых.

      Ровно туда же - "чтобы подправить в коде настройку вызова компонента, надо

      • вдуматься, какая папка и какой там файл

      • в вёрстке найти компонент

      • найти нужный параметр

      • изменить параметр

      Коротко говоря, это, в общем-то, невозможность деления дел на планирование - выполнение - контроль/исправление - и так по кругу.

      Если бы, например, настройки вызова компонента жили в БД (а компонент вызывался бы с айдишником строчки в таблице таких настроек), мы бы, меняя настройки, вообще не думали бы про вёрстку. А в момент вёрстки вообще не думали бы о настройке - вёрстка осталась бы только про расположение внутри страницы.

      Если эта формулировка вам кажется спорной, можете ли скорректировать её? Или с достаточным опытом это вот всё тут выше - вообще не тема, а Битрикс - лимбо в силу вообще других факторов? А каких?

      ЗЫ я сначала-то Yii попробовала. И напряглась от виджетов, не поверите. Это был первый опыт с вёрсткой такого типа, в шаблонах такого уровня. Ну и вот это вот их подключение css... Я тогда, видите ли, ещё не знала про Битрикс. Всё ж познаётся в сравнении - в сравнении с blade вёстка от Yii - это что-то с чем-то.


      1. w0lf
        06.08.2022 22:23

        То что вы описываете, это не проблема Битрикса а это проблема кривых разработчиков на Битриксе, которые начали писать на нём 15 лет назад и продолжают в том же стиле и сейчас.

        По факту нормальный сайт на Битриксе сейчас использует D7+ORM. Взаимодействие front и back идет по REST API. Стандартные компоненты не используются. Тогла алгоритм внесения изменений становится прост:

        Если это контент, то он правится в соотвествующих модулях админ панели

        Если это набор данных, отдаваемый backend на frontend - это правится в коде и шаблоне соотвествующих компонентов.

        Если это отображение - это уже frontend и к Битриксу отнешения не имеет.


        1. habr4yota
          08.08.2022 09:51

          уже лет 20 его пилят - до 2004 все кто хотел посмотреть что это такое давно посмотрели


  1. Keeper13
    06.08.2022 19:34
    +1

    Битрикс не нужен.


    1. MaryRabinovich Автор
      06.08.2022 20:16

      Он уже есть. И на нём уйма сайтов. Проблема:)


      1. Keeper13
        08.08.2022 11:54

        Всё выше- и нижеизложенное в комментариях лишь подкрепляет мой тезис.


  1. VladTulku
    06.08.2022 20:18

    Хостинг для Битрикса все еще дороже чем для всех остальных?


    1. MaryRabinovich Автор
      06.08.2022 20:30

      Я уточню только, что в статье не реклама. В смысле что я ни разу не представитель Битрикса. В данный момент у меня в компьютере пробная версия (и скоро кончится), а ещё сервер, только учебный. Сервер от фирмы, где я сейчас учу Битрикс.

      Ну и такое. Насколько я поняла из нескольких видео по истории, вроде бы, дело-то не вполне в Битриксе, а в 1С. Был для начала Битрикс просто для сайтов. Дальше они интегрировались с 1С, вышел 1С-Битрикс. И принадлежит 1С. Или там что-то совместное, я не помню. Платят, собственно, именно за интеграцию. То есть, реально движок (как минимум, декларативно) отвечает не только за вывод инфы в сети, но ещё за оплату, налоги, отчётность. И это прям денег стоит реально. Если вы пробовали обращаться к бухгалтеру или юристу, вы сами знаете.


      1. Metotron0
        06.08.2022 23:16
        +3

        Как в вашей статье и комментариях читать фразу "Ну и такое" или "Кнопка "добавить ссылку на css", такое."? Вроде, ожидается, что будет пример кода, какое именно "такое" это самое "кнопка", но кода нет, это вводит в заблуждение. А самостоятельное предложение "Ну и такое" вообще запутало.

        Переводы вида "$_НАЧАТЬ['КОРНЕМ_САЙТА']" трудно переводить обратно. Я распознал document_root, но $_НАЧАТЬ не припомню. Это $_SERVER, $_GET?

        Ещё лично меня регулярно сбивал странный порядок слов в предложениях, типа такого: "Что помешало умный редактор сделать слегка иначе". Если читать это слева направо, то сперва читаешь "Что помешало умный редактор", исправляешь в голове на "умному редактору", потом дочитываешь до конца и приходится перестраивать смысл всего предложения заново. Как стихи читаю — большая когнитивная нагрузка. Для восприятия проще такое: "Что помешало сделать умный редактор слегка иначе". Тут "помешало сделать" написано слитно, поэтому не приходится искать смысл по разным частям предложения.
        Схожее построение с глаголом в конце есть в предложении "Даже один процент вашего миллиона хитов формировать страницу с нуля не требует". Магистр Йода кумир ваш?

        Также глаз зацепился за обилие точек там, где просится запятая: "Минусы такого решения: мы больше файлов проходим при формировании клиентской выдачи. И больше файлов при перенастройке страницы. Но."

        А тут слишком много "я": "я обрадовалась: я там увидела ссылочку "карта модулей". Я почему-то решила".

        В фразе "Лично мне для учёбы такая бы подошла" я так и не смог понять, кто именно "такая", потому что ближайшее слово женского рода, к которому это может относиться — "ссылочка "карта модулей", но описана явно не ссылочка. И снова глагол в конце, хотя, имхо, проще читается "мне для учёбы подошла бы такая".

        // Наверное, мне стоило оформить цитаты цитатынми блоками…


      1. Iv38
        08.08.2022 05:15

        Был для начала Битрикс просто для сайтов. Дальше они интегрировались с 1С, вышел 1С-Битрикс. И принадлежит 1С.

        Вроде бы Битрикс никогда не принадлежал 1С. Это совместное предприятие.

        То есть, реально движок (как минимум, декларативно) отвечает не только за вывод инфы в сети, но ещё за оплату, налоги, отчётность.

        Ну как... Битрикс, который для магазинов (редакции Бизнес), имеет модуль для интеграции с 1C. Так как 1С у каждого предприятия имеет свои особенности конфигурации, нельзя просто взять и настроить этот модуль в админке, чтобы отчётность и склад заработали. Требуется работа по интеграции и стоить она будет прилично. Но далеко не все даже интернет магазины это используют. И есть куча сайтов на Битриксе, которые магазинами не являются и вообще никакую интеграцию с 1С не используют.


        1. MaryRabinovich Автор
          08.08.2022 09:59

          А что ещё на нём делают, и каковы тогда мотивы выбора именно Битрикса? Есть, например, бесплатный Вордпресс, он тоже с админкой - если нужна админка.

          Это не восклицание, а содержательный вопрос. Мне правда любопытно, чем люди мотивируют такой выбор. Опять же, я не о том, что "Битрикс плохой" - мне почему-то тут в каждом втором комментарии приписывают такое мнение. Я так не говорила. Такая сложная штука не может быть сразу во всех местах плохая или хорошая. Но первое, что в глаза бросается - какой он тяжёлый.


          1. Iv38
            08.08.2022 12:56

            Я, в силу опыта работы с ним, хорошо знаю недостатки Битрикса. Но при этом на Вордпресс я не согласен. У него своих проблем вагон. В частности мне показалось довольно сложным поддерживать вордпресс в свежем состоянии. Потому что при обновлениях он склонен разваливаться. А если не поддерживать, то он тут же становится целью для атак. Битрикс в этом плане намного лучше. У него надёжно работающие обновления, и есть кое-какие инструменты контроля безопасности.

            Не могу ничего сказать про другие CMS в сравнении - не имею опыта. Зачем вообще выбирать Битрикс? Мне кажется, Битрикс, он такой энтерпрайзный. Как 1C, винда, всякие ERP-системы. Ты платишь за лицензию, тебе дают сапорт (неплохой, кстати), обновления, а вокруг куча компаний, которые готовы разрабатывать и поддерживать сайты на Битриксе. На Битриксе работает куча корпоративных сайтов, которые не интернет-магазины.

            Ну и конечно, часто решение о том, что использовать принимает разработчик, на которого довелось наткнуться заказчику. Я лично сделал горстку мелких сайтов на младших версиях Битрикса. Почему не другая CMS? Потому что я работал с Битриксом. Почему не голый фреймфорк? Потому что небольшой сайт со стандартным функционалом проще сделать на CMS.


    1. w0lf
      06.08.2022 22:30

      Уже давно нет. Тарифы "для битрикса" есть, но это, так сказать, legacy маркетологов. Знаю много сайтов на битриксе, которые работают на самых простых тарифах хостинга по 199 рублей, если у сайта не какая то экстраординарная посещаемость и пряморукие разработчики, которые потратили немного времени и прикинули какие объекты насколько нужно кэшировать, проблем никаких.


  1. hazg
    07.08.2022 01:38
    +1

    Странный размен, лара на это. (не фанат, давно почти без php, но справедливости ради..)
    К сожалению, немного опыта с ним чудом я получил (на минималках, два проекта, прошу не пинать).

    Перед применением полезно читать - https://habr.com/en/post/282333/, но это не точно.




    1. MaryRabinovich Автор
      08.08.2022 10:06

      Сочная ссылка:) Спасибо.

      Насчёт размена... Ну не размен, конечно же. Нет. Я просто иногда учу что-то новенькое, просто так. Чаще всего - для себя, сама покупаю курсы в свободном ритме. Сейчас я решила сделать наоборот - вписалась на стажировку в крупной компании. Работала я в основном раньше тоже в свободном ритме - типа полставки, где я единственный программист (а всего людей десять), или где я - одна/вдвоём на бекенде, а есть ещё, скажем, фронтенд и девопс. Или ещё мобильные и фронтенд. И тоже девопс. Короче, очень был ограниченный опыт по взаимодействиям. Причём когда разработчиков пятеро, и все разные, это уже процессы выраженные, но никто ещё о них не подумал. И даже не думает думать. Особенно начальник, которому кажется, что от людей ему нужен код, поэтому надо им повторить пять раз, что уже нужен код.

      Короче, это сейчас для меня ещё и опыт с тикетами (впервые), с соглашениями по именованию веток в гите (и тоже впервые), ну и др.

      И я даже успела трижды обговорить с начальством, можно ли спрыгнуть на ларавель обратно. У них всё там же.

      Но. Битрикс - это магия. Вот. Я осознала.
      Тут просто нужен бубен.

      А если серьёзно, это феноменальная школа, мне кажется. Я же до этого пробовала поучить Yii, и оскорбилась, что там шаблоны с вкраплениями php. Смешно вспоминать.


  1. misato
    07.08.2022 07:48
    +1

    Битрикс, конечно же, ужасен с точки зрения разработчика по всем возможным параметрам, и этому всегда противопоставляется, как бы, его успешность как продукта.

    Однако, Битрикс как CMS для веб-сайта ужасен и с точки зрения продукта!

    Изначальный смысл любой CMS - это разделить функции разработчиков и пользователей которые управляют контентом. Разработчики добавили фичи, натянули дизайн, выдали логины/пароли и отдали в эксплуатацию, осталось только посматривать в логи и мониторы, реагировать на технические сбои или атаки.

    По факту Битрикс настолько замороченный и сложный в плане интерфейса админки, что сложности с ним испытывают абсолютно все. В качестве контрпримера могу привести другой печально известный своей допотопностью движок WordPress - да, это тоже дырявое PHP, но когда там ставишь там новый модуль или плагин, у него появляется удобная закладочка для управления данными, которую не надо полчаса искать, просматривая все разделы и блоки меню.


    1. a0fs
      07.08.2022 12:57
      +1

      ППКС.

      Сталкивался с Bitrix несколько раз в качестве специалиста по "заставить это как-то работать" (aka эксплуатация на максималках). Все разы меня терзал странный вопрос: как это чудо света (а это без сомнения чудо света, ибо совершенно не постижимо как при наличии уже понимания, что нужно разделять в сущности представление, действия над ней её данные, всего накопленного опыта CMS можно было породить ЭТО) достигло своих высот.

      Для меня как эксплуатации, данная CMS является головной болью. Ей нельзя запретить писать в собственные директории на сервере. То есть, без специальных извращений с несколькими экземплярами PHP под разными пользователями, один из которых под публичную часть, второй под админку, эта штука не способна защитить себя от различных червей. Мне приходилось иметь дело с дырявой Joomla. И манипуляция с правами пользователя PHP на файлы и директории давала достаточно защиты от червей. Да нужно обновляться но сидя в конторе в одно лицо, без умных (ну или просто) семпаев, задача "не ушатай" становится более приоритетной... Такой фокус с Bitrix не прокатит, там нужно иметь 4-й дан в эксплуатации PHP, чтобы защитить это чудо без постоянных обновлений. При чистой эксплуатации, когда все изменения в сайте производит разработка, либо заказчик, а я просто держу это на плаву, единственным решением задачи защиты стало обернуть всё в меркуриал репозитарий, выполнения с некоторой периодичностью status и если там что-то появилось отправку diff на почту, для дальнейшего выяснения, кто-куда-зачем.... Даже, когда разработки утверждала, что оно обновлено, раз в неделю diff давал 100500 файлов загаженных сложно вычленяемыми на фоне остального говнокода сниппетами заразы...

      Работа сабжа со стилями вызывает трепет. Если не знать того единственного правильного способа (который мне лично не известен), оно порождает миллион css файлов, и весь этот миллион тянется пользователем при запросе страницы. И эти файлы однотипны и отличаются только штампов времени в конце. Понять откуда это всё без вдумчивого изучения решительно нельзя...

      Поменять что-то на странице, если это не предусмотрено разработчиком модуля, вёрстки и прочего, даже при наличии доступа к коду, практически не реально. Понять куда там запрягают коней без специальных курсов решительно нельзя. В админке найти нужно тебе опцию - квест повышенной сложности. Если оно падает, то никто кроме поднимавшего не сможет вернуть всё взад (ну или разворачивание резервной копии с потерей всего, что сделано после её создания). Если человек, кто разворачивал, делал это методом тыка - ничто не поможет кроме бекапа....

      Если кто-то сможет объяснить почему оно ТАК популярно, нижайше прошу просветить, иначе у меня создаётся впечатление о клиническом садомазохизме всей отрасли российского сайтоделательства. Нет, как коммерческий продукт, для создателей этой CMS - это просто шедевр: эксплуатация будет платить за лицензию, потому что ей нужны будут обновы. Там есть место облачным сервисам, поскольку НУЖНО регулярное резервное копирование и не помешает CDN, особенно если это чудо развёрнуто на shared-хостинге с драконовскими лимитами по диску. Но блин, что это кроме откатов даёт эксплуатации не ясно. Даже знакомый разработчик сайтов мне не смог внятно ответить о плюсах "продукта", но живописал великим и могучим своё к нему отношение....


      1. nikolas78
        07.08.2022 13:10

        Реклама, сэр. У меня знакомый бизнесмен прибежал ко мне с горящими глазами, рассказывая на ходу, как где-то ему рассказали, что можно легко поднять новый бизнес, используя Битрикс. То есть им преподносят это как технологию для зарабатывания денег, а не как технологию, обслуживающую бизнес.


        1. a0fs
          07.08.2022 14:32

          Какой ужас....


      1. MaryRabinovich Автор
        08.08.2022 10:16

        А удалось ли вам достаточно изучить его внутренности, чтобы понять, откуда всё-таки записи?

        Я, по счастью, даже если на нынешнем месте останусь на Битриксе какое-то время (а может быть, и останусь - это яркий опыт, хотя и нервный), я там точно не буду ответственной за безопасность (потому что будут начальники, над ними начальники и др.)

        Но чисто логически. Я вот пытаюсь понять - ну на уровне моей нынешней о нём осведомлённости. Вот есть админка - это единственный блок, который может что-то внутрь писать. А, хотя нет - клиентская часть тоже может. Если мы на странице, и залогинились, мы можем кликнуть "добавить страницу", и клик приведёт к записыванию файла страницы на сервер.

        Но всё таки. Все эти записи, вроде бы, это либо стандартные тексты ("добавить на эту страницу код вывода инфоблока между вот этими секциями" - и добавляется код инфоблока, это стандартный текст). Либо ещё стандартные записи в БД.

        Вопрос, как туда может что-то ещё просочиться. Через какие действия? Возможно, я бы попробовала логировать время действий. Когда кто в админке кнопку какую нажал. И делала бы дифф каждый раз, после каждого редакторского сеанса... Не уверена, что это хороший способ. Но альтернатива - только выстраивать карту файлов-редакторов. Запись на сервер делают конкретные файлы же.

        Ах да, там ещё вопрос в настройке прав в директории на сервере, может быть, у вас сервер слишком открытый наружу? Хотя это, небось, чересчур примитивно - об уровнях доступа наверняка позаботился хостинг.


        1. a0fs
          08.08.2022 23:16

          Эта дрянь должна писать в себя, чтобы жить. Писать она может даже то, что потом она будет исполнять. И МАЛЕЙШЕЕ отверстие, позволяющее выполнить свой (атакующего) код в контексте сервера (а судя по тому, какая круговерть творится вокруг движка, пока он творит свою чёрную магию, этих отверстий там порядком), либо малейшая дрянь которую можно положить через механизмы движка на сервер а затем исполнить php-интерпретатором, даёт полный контроль над всем движком. И червяк начинает методично разбрасывать обфусцированные сниппеты по всем index.php и прочему бардаку, что обильно разбросан по всему движку, на всю, местами неадекватную, глубину вложенности. Я как администратор не могу с этим справится, в Bitrix нет такого каталога, где лежит код, и куда пользователь (лицо взаимодействующее с сайтом даже через админку) писать не должен, и каталога, где лежит переданное от клиента, и от которого должен держаться подальше php-fpm (ну по крайней мере не исполнять от туда скрипты). И это бесит! Я не в силах понять, что творится при создании контента. Простыни инициализируемых объектов мало чем сами отличаются от вредоносов. Ну нет там смысла для взгляда человеческого и нельзя в среднем объять мозгом простынь на 4-10 скролов с перечислением каких-то инициализируемых свойствах убер объекта...

          Итого:

          • Битрикс делает невозможной пассивную защиту, поскольку нельзя реализовать классическую схему W^X (то куда можно записать не должно исполняться)

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

          • Эта штука умудряется заразиться кажется даже быстрее чем Windows XP с SP1 выставленная голой жопой в интернет. При этом если XP от интернета можно держать на расстоянии, то с Bitrix это не выйдет совсем...

          • И при всех своих заслугах оно стоит дичайших денег.....

          Решительно отказываюсь понимать происходящее.....


          1. Iv38
            08.08.2022 23:28

            Со всем согласен кроме того, что сайт на битриксе умудряется мгновенно заражаться. За свою битриксную карьеру я наблюдал только один случай заражения сайта и то это было сделано через уязвимость шаред-хостинга и с самим битриксом никак связано не было. Чаще всего заражение происходит по вине разработчиков. Через забытые ими инструменты отладки и администрирования, через небезопасные реализации загрузки файлов, через намеренно оставленные бэкдоры.


            1. a0fs
              09.08.2022 00:44

              Возможно это утверждение сделано на основе психологической травмы, нанесённой эксплуатацией этого чуда. Я верю, что знаючи эту тварь дотошно, её можно сделать адекватной (у людей то как-то выходит...). Но всё-таки, если весь контент создаётся путём записи пользовательского ввода в php файлы... это само собой напрашивается на проблемы.... Вот что мешало эти долбаные объекты инициализировать json файлами???...

              А так, при общей популярности темы сайтостроительства и общей уверенности, что выучив PHP можно почти сразу разбогатеть на непыльной работе (ну по крайней мере в горизонте прошлых лет), в отрасли полно людей склонных использовать инструменты криво, опасно и даже преступно... Вот только в сочетании с Bitrix это становится просто идеальным штормом...


              1. Iv38
                09.08.2022 02:31

                Но всё-таки, если весь контент создаётся путём записи пользовательского ввода в php файлы...

                В норме это доступно только пользователям админки, и сам битрикс позволяет ограничить им права. В проектах, которые разрабатывал я, менеджеры контента имели личные учётки, которым был запрещён доступ к модулю управления структурой, и был разрешён доступ к конкретным инфоблокам. То есть, если это, например, фрилансер-новостник, то он может только писать новости в свой новостной инфоблок, может загружать файлы определённых типов в медиабиблиотеку, и не может править никакие важные файлы сайта. А если в организации всё сурово, и редакция битрикса позволяет, можно это ещё обернуть в бизнес-процессы, чтобы каждую новость утверждал ответственный сотрудник. То есть разделить создание контента и его публикацию.


      1. gnome2_terminal_is_best
        08.08.2022 14:07
        +1

        Классики книг по разработке ПО, уже давно сказали, что если есть возможность купить готовую библиотеку, которая делает то, что нужно, лучше её купить, чем самим разрабатывать. Вот от сюда и причина, почему покупают Битрикс. Там уже есть всё, или почти всё. Разрабатывать на нормальном фреймворке, конечно интересно, но это если нужно сделать немножечко CRUD'ов. А в Битриксе, куча всего уже написано, бери не хочу. Посморите, сколько там модулей и компонентов уже есть, после установки. И всё это добро, стоит не так много, одно-две месячной зарплаты программиста. А пилить столько фич, один программист, будет годами. В этом и секрет популярности "Битры".


  1. GoodGod
    07.08.2022 14:10

    Я веб бекендер разработчик с большим опытом. Могу сказать что Битрикс - самая трудная система. Он сложнее: Laravel, Symfony, Python Django, C# .NET, и даже Java Spring. Огромная кодовая база. Под разобраться - я имею ввиду реально знать как работает CIBlockElement::GetList, прям залезть внутрь и разобраться, а не уметь вызывать его с типовыми параметрами.

    UPD: а, да, сейчас там же делается через D7, что-то вроде \Bitrix\Iblock\Iblock::wakeUp. Но все равно, сути это не меняет.


    1. MaryRabinovich Автор
      08.08.2022 10:30

      Я, в общем, думаю в эту сторону. Вопрос только в том, нет ли ещё какого-то пласта фактов, который надо бы знать помимо кодовой базы. Что-то вроде грамматики. Там материала так много, что очень уже похоже на настоящий язык (типа английский, китайский...) И в данный момент у меня ощущение, что я изучаю слова вообще без каких-либо способов их анализа. Учишься плавать, уже попав в воду - как-то барахтаешься, авось выплывешь. Внутри такой сложной области должны быть какие-то мета-подходы. Для описания, что именно мы изучаем. Паттернами тут пахнет слабо. Но некоторая архитектура есть, это же очевидно. Только вообще не ясно, как она выполнена.

      Ну то есть ясно, как в ней копаться: идёшь в файл пролог, дальше во все, кого он там подключает, ну и так далее. Но это же, кажется, в данный момент каждый упоротый должен с нуля картировать. А большинство не упоротых просто тусят снаружи, тыкая в кнопки. Я вообще фигею от метода "сделаем временную страницу, добавим на неё блок этой кнопочкой, потом скачаем код менюшки и вставим в нужное место вёрстки уже целевой страницы. А ещё там что-то из скачанного ещё вон туда положим (далее следует непостижимый по своей структуре путь - куда именно мы переложим созданное на временной страничке)".

      Скажем, когда я попробовала (а потом забросила - потому что сравнивала с ларавель, поскольку битрикса ещё не видела) учить Yii, я посмотрела, в частности, видео Павла Климова, "Философия Yii". Стало понятно, зачем они так. Какие там за и против.

      Про Битрикс я не понимаю, зачем он такой. Почему он такой. Кто его сделал именно так, из каких соображений. В том же ютубе довольно просто найти (пятьсот) курсов о том, как менюшку добавить, ещё (пятьсот) видео с конференций в духе "как мы боролись с Битриксом на тему ХХ", но нету практически никаких видео о сути событий. Мой пока, кажется, единственный улов - подкаст на "Пятиминутке РНР" (по ссылке в конце статьи). Но там уже только второе ядро - насколько я поняла, они намеренно вообще никак не трогают легаси. Хотя на начальном этапе (как минимум, у меня) дело имеешь именно с этим легаси, и там же.. А, ладно:(


      1. GoodGod
        08.08.2022 10:49

        Раньше были интересные курсы от Академия 1С-Битрикс, я смотрел
        №1 - Интеграция дизайна и настройка платформы
        №2 - Основные технологии и расширение типовых возможностей системы
        №3 - Расширенные технологии и производительность
        D7. Разработка собственного модуля

        Ну то есть ясно, как в ней копаться: идёшь в файл пролог, дальше во все, кого он там подключает, ну и так далее.

        В кодовой базе - вам не разобраться. Я бы советовал именно "трясти дерево" как вы говорите. Т.е. вызывать функции с типовыми параметрами, и не рекоммендовал лезть сильно глубоко внутрь. Там очень сложный и непонятный код. Эффективно работать с 1С-Битрикс == хорошо знать как работать с функциями в основном инфоблоков (CIBlockElement::GetList и т.д.), catalog, sale, но != залезть в них внутрь и заковыряться там.


  1. Iv38
    08.08.2022 05:51
    +2

    Битрикс состоит из множества слоёв легаси. В некотором смысле они выбрали виндовый подход к развитию. Я работал с битриксом более 10 лет ещё со времён php4, когда никакого ООП там вообще не было. И автолоада тоже. Тогда он не казался мне сложным. Роутинг на файлах был вполне понятен и сваливал всю работу на Apache. Компоненты просто инклюдились и конфигурировались в коде, а визуальный редактор упрощал этот процесс. Потом всё это стало обрастать зачатками MVP в новых компонентах 2.0 и комплексных компонентах, и примитивными зачатками ООП. При этом бешено разрастался функционал ещё на старых технологиях. Компоненты и шаблоны в тыщи строк сохранились в Битриксе до сих пор. Потом борьба за производительность привела к множеству слоёв кеширования. И так далее.

    Потом возникла новая надежда - D7. Но он развивался крайне медленно, а старые компоненты никто не спешил переписывать, продукт был уже очень большим. К этому добавился Битрикс Корпоративный портал, который дьявольски оттягивал ресурсы на новые фичи, а рефакторинг так и не наступал. И уж тем более никогда не шло речи о новом Битриксе, несовместимом со старыми наработками. Так что D7 стал лишь ещё одним вариантом сделать что-то в Битриксе.

    Из-за того, что компоненты жили в директории bitrix рядом с кодом самого Битрикса, было крайне сложно вести проект в системах управления версиями. Так что добавилась возможность держать свои компоненты и модули в отдельной директории. Что усложнило и без того нелёгкую процедуру поиска кода, который тебе надо исправить. Плюс часть конфигурации всё равно в БД и нет миграций. Запихнул код в гит? Поздравляю, теперь придумай как накатывать данные и обеспечить совместимость с нужной версией Битрикса.

    В итоге образовалась какая-то адовая сложность. Тонны документации, курсы, сертификация. Я наблюдал, как люди, которым я делал сайты, даже поддерживать их не могут. Некоторые битриксоиды считают это за плюс - всегда хватает работы по поддержке.


    1. MaryRabinovich Автор
      08.08.2022 10:37

      А удалось ли вам картировать, кто кого подключает в старом ядре? Там адское месиво, или это можно до конца довести? Я пару раз начинала, и дважды бросила. Плюс - ещё ни разу не начинала копать админку. А как бы надо бы понимать, как выглядят файлы-редакторы. Т.е., те, которые что-то дописывают/изменяют в вёрстке и в базе данных, когда я кликаю кнопки в админке.

      И да, а почему не работает "выгрузить БД тут, импортировать там" - где может выскочить несовместимость с новой версией Битрикса?


      1. Iv38
        08.08.2022 11:50

        А удалось ли вам картировать, кто кого подключает в старом ядре?

        Не уверен, что я правильно понял ваш вопрос, но думаю, что я довольно хорошо понимал жизненный цикл страницы. По крайней мере, когда работал с Битриксом. То есть лет, наверное, 7 назад.

        И да, а почему не работает "выгрузить БД тут, импортировать там" - где может выскочить несовместимость с новой версией Битрикса?

        Так можно. Вообще мне нравились в Битриксе две вещи. Система обновления и система резервного копирования. Первая способна весьма стабильно обновлять систему, причём через множество версий. А вторая способна забэкапить и с помощью одного скрипта развернуть сайт обратно в другом месте.

        Но когда работаешь с системой контроля версий, кладёшь туда файлы проекта, ядро битрикса не включаешь. Соответственно появляется зависимость от конкретной версии ядра. В мире пхп такое решается через композер, только не в мире битрикса.

        Можно попробовать включить и ядро в проект. Но битрикс ОЧЕНЬ тяжёл, а каждое обновление будет приводить к огромным коммитам.

        Чёрт с ним с ядром. Часть конфигурации проекта неизбежно хранится в БД. Инфоблоки, например. Они меняются через интерфейс админки. Как это синхронизировать с кодом? Можно сделать подобие миграций и все подобные изменения реализовывать средствами API. Но тогда мы значительной части функционала админки, за который уплочено. И мы всё ещё не можем гарантировать, что кто-то не сделает в админке что-то, что приведёт к рассинхронизации с зафиксированным состоянием. Плюс обновления битрикса изменяют данные в БД. И как понять, были ли они безопасны относительно того, что зафиксированно в коде или нет?

        В корпоративном портале с этим ещё страшнее. Там приходится синхронизировать изменения компонентов, если ты их кастомизировал, чтобы не потерять новые фичи. Так что я перед крупными апдейтами несколько дней на это выделял.


        1. MaryRabinovich Автор
          08.08.2022 14:48

          Несколько вопросов сразу.

          1) почему бы ядро не хранить отдельным репозиторием. Если их (фирменные) обновления ядра не затрагивают (а хотя как это? Вроде, ядро как раз и обновляют же. Хуже того: без обновлений у вас повышается уязвимость), то вот, ядро в одном месте есть, и пусть будет. А дальше ваш кастомный код вы пушите в другое место. Слить два каталога вместе на одном сервере, вручную, можно всегда.

          2) проблема с конфигурациями в БД. Гм. Я-то как раз задавалась вопросом, зачем половина конфигураций в файлах. А видимо, вот поэтому - чтобы хотя бы их можно было переносить легко. Я про разные там "список линков для подключения Asset-ом" или "параметры вызова новостного блока на главной странице (сейчас эта простыня хранится внутри шаблона)". Или ещё набор описаний линков меню (казалось бы, вместо массива $aMenuLinks в файле .bottom.menu.php могли бы быть ровно такое же число строчек в таблице с названием типа b_menu_links_settings).

          (тут не очень вопрос получился, скорее, вообще мысли вслух)

          3) выше @a0fsпишет страшное. Что там на сервер чего-то вписывается вредоносное. Я пару (новичковых) гипотез в ответ предложила, под его комментарием, но вдруг вы знаете каноническое решение? (подозрительно) или он вообще просто краски сгущает, запугивает. Всё таки чтобы на сервер писалось что-нибудь вне проекта - а как это в принципе может быть? На фоне возможных опций в жизненном цикле страницы админки, которая кнопки слушает и отрабатывает созданием / редактированием кода в файлах внешних страниц?


          1. Iv38
            08.08.2022 15:33

            почему бы ядро не хранить отдельным репозиторием

            А кто это должен делать? Я? Но как? Битрикс обновляется через собственную систему обновления.

            выше @a0fsпишет страшное. Что там на сервер чего-то вписывается вредоносное.

            В принципе, он правильно пишет. Битриксу действительно необходимы права на запись всюду. И даже его собственное ядро не является исключением. Хотя бы из-за обновлений. Но я лично не сталкивался с проблемами из-за этого. Плюс у Битрикса есть собственные механизмы безопасности: проактивная защита, сканер уязвимости. А сам продукт периодически проходит какие-то аудиты безопасности, что даёт какую-то надежду, что при регулярных апдейтах хотя бы через уязвимости ядра ничего не пролезет.


  1. MaryRabinovich Автор
    08.08.2022 14:34

    Оценочка под статьёй на данный момент 0 = 8 - 8. Кажется, это очередное высказывание сообщества о самом Битриксе.


    1. Iv38
      08.08.2022 15:39

      И какое оно? Я не могу понять как интерпретировать такие оценки в этом ключе. Статья о том, что вам не понравился Битрикс, значит плюсы статье это минусы Битриксу? А минусы статье, это потому что статья про Битрикс на Хабре не нужна должна быть заминусована. Так что это тоже минусы Битриксу?

      Битрикс на Хабре никогда не любили. Самому Битриксу от этого, кажется, ни тепло, ни холодно.


      1. MaryRabinovich Автор
        08.08.2022 18:18

        И вовсе статья не об этом. Статья о рац предложениях по упрощениям.

        Причём постфактум (уже после этого обсуждения и благодаря ему) я поняла, что я же могу сама кое-что менять. Само собой, не в ядре, но в традициях его использования.

        Да, нет такого файла "секьюрити" в исходной сборке. И все (по-дедовски, по-старому) вставляют в каждый файл вёрстки вот это длинное с шайтан-константой, которая должна быть, и быть трушной. И надо каждый раз вспоминать её имя. И эту логику.

        Да ради бога - мучайтесь:) А я себе написала файл, вынесла туда вот это вот, и дальше пишу, сама у себя, именно реквайр файл этот. И дальше можно даже похулиганить: не просто вымереть, если что-то не так, а вывести, скажем, "зачем ты ерундой занимаешься?" - как-то раз в книжке прочла такое, мне очень понравилось)

        С вызовом компонент так не выйдет, потому что кто-то может потом полезть редактировать через админку, и вынести в отдельные файлы эти вот простыни, или в БД, это не способ. Но я над этим ещё подумаю.

        Пока что стало просто в разы проще морально. Что есть свобода на моём уровне писать по-разному.


        1. Iv38
          08.08.2022 19:03

          А я себе написала файл, вынесла туда вот это вот

          Кстати, редактор в админке при создании файла использует файл шаблона страницы (их даже может быть несколько на выбор). Можно его отредактировать. В шаблоне сайта это директория page_templates. Документация.


          1. MaryRabinovich Автор
            08.08.2022 20:55

            Любопытно, да. Подозреваю, там старая документация, и можно всё то же самое делать внутри папки local (там редактируют внутри папки bitrix). Проверю на свежую голову.

            А ещё у меня пока остаётся вопрос, что будет, если включение компонента сделано не напрямую в страницу (в шаблон), а внутрь инклуда, который сам уже встроен в шаблон страницы. Справляется ли с такой двухэтажной конструкцией визуальный редактор.

            Вообще говоря... кстати, не должен бы. Ну или надо понять, как он вообще устроен. Думала глянуть сегодня устройство админки, забыла с утра, сейчас вспомнила, заглянула в папочку bitrix/admin (теоретически это то, куда мы идём, чтобы открыть админку). И там правда есть файл index.php. Который, однако, из одной строчки - require '/bitrix/modules/main/interface/desktop.php' от корня сайта.

            Собственно, помимо индекса там ещё... добрая сотня файлов, если не несколько сотен. И все, похоже, устроены как "одна строчка: require какой-то модуль от корня сайта". Возможно, там есть и реакции на отдельные действия кнопочек. Но где же это прочесть, не лазия в коде-то, а...


            1. Iv38
              08.08.2022 23:12

              Подозреваю, там старая документация, и можно всё то же самое делать внутри папки local

              Можно. Где находится шаблон сайта, там и редактируйте.

              А ещё у меня пока остаётся вопрос, что будет, если включение компонента сделано не напрямую в страницу (в шаблон), а внутрь инклуда, который сам уже встроен в шаблон страницы. Справляется ли с такой двухэтажной конструкцией визуальный редактор.

              Не совсем. Если просматривать страницу в админке в визуальном редакторе, то там на месте инклюда будет блок "код PHP". Но при просмотре на самом сайте в режиме редактирования Битрикс уже осилит размотать эту цепочку и можно будет в визуальном режиме поправить параметры компонента, который находится в подключаемом файле, а изменения успешно в него запишутся.

              Ещё вместо пэхапэшного include() можно использовать компонент включаемой области. Но в данном случае это не очень поможет.


              1. MaryRabinovich Автор
                09.08.2022 12:16

                Компонент сущеееественно хуже, там же ещё параметры вызова.