Здрасте!

В русскоязычном сегменте Интернета существует такой интересный феномен, как хейтеры Битрикс.

Недавно прочитал статью Минусы Битрикса, или Битрикс глазами программиста, и плакать захотелось. Причем этот парень не одинок, он по наслышке знает, что Битрикс — это ужас ужасный.

В данном посте я напишу некое опровержение того что написал автор, потому что написал он полный бред!

Итак, по порядку:

1. Архитектура



Битрикс — это полное отсутствие архитектуры. Это просто набор десятков или сотен тысяч файлов с кусками кода, которые никак не связаны между собой.


Ну нет господа, если уж и делать обзор, то как-то надо запариваться и изучать систему. У Битрикса есть условное разделение частей системы на MVC:
  • контроллер — это компонент (хотя по факту это виджет, а в некоторых случаях роутер — если говорить про компоненты из коробки)
  • модель — это т.н. API. Можете писать их как хотите. Можете разделить их на ServiceLayer, на ActiveRecord и другие паттерны. Делайте что хотите ;-)
  • представление — это шаблоны. Тут все как надо, есть темы, есть шаблоны, все океюшки


2. Код



Ниже я приведу функцию «продукта». Эта функция — метод класса (!!!) ядра (!!!) Битрикса, который вызывается, как статический (!!!) и ему передается 21 аргумент по ссылке (!!!).


У BitrixFramework есть такое явление как D7 — это новое ядро. В нем переписано много чего, да конечно оно мало задокументировано, но если говорить про сравнение, то это тоже самое что смотреть код Yii 1, и говорить что там говнокод.

Смотреть код который написан лет 7 назад и на его основе делать обзор, пфф…

Примеры кода из D7 (выгрузка названий элементов, количество которых больше 5):

ElementTable::getList(array(
    'select' => array('NAME'),
    'filter' => array('>CNT' => 5)
    'runtime' => array(
        new Entity\ExpressionField('CNT', 'COUNT(*)')
    )
));


в старом ядре пришлось писать бы руками запрос.

3. Обман



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


Это можно сделать, НИЧЕГО не допиливая, а данная фраза говорит о компетенции писавшего.

Пример легко можно найти: www.youtube.com/watch?v=IF97A0RtJ34 (интеграция начинается с 20 минуты).

Все доработки — это боль, тлен и тысячи трудочасов программиста


Если делать как поступают многие Битрикс-разработчики (а они просто берут модули из коробки и их допиливают их), то да — это тот еще геморрой. Но кто мешает написать свой компонент, так как надо?

Заключение



В итоге, это можно охарактеризовать, как продукт хороших маркетологов, которые работают без хороших программистов


Вот здесь на самом деле соглашусь: очень хорошо разрекламированная система, с весьма сомнительным инструментарием для разработчика.

Статья написана программистом и описывает то, что у Битрикса под капотом.


Статья про минусы Битрикс написана сомнительным программистом, по крайней мере в области Битрикс, который прочитав пару страниц документации, написав один компонент или даже модуль (но вряд ли), считает что он все знает о системе.

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

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


  1. JhaoDa
    24.04.2016 16:03
    +15

    У BitrixFramework есть такое явление как D7 — это новое ядро. В нем переписано много чего
    Не могли бы вы показать пару примеров из этого ядра? Глобальные переменные уже перестали использовать или ещё нет?

    Вот здесь на самом деле соглашусь: очень хорошо разрекламированная система, с весьма сомнительным инструментарием для разработчика.
    Битрикс очень популярная система, ее очень часто покупают, и люди готовы за нее платить. Так неужели не стоит с ней работать?
    Хммм, мне одному видится здесь противоречие?


    1. rpsv
      24.04.2016 16:24
      -14

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


    1. serginhold
      25.04.2016 07:07

      >> Не могли бы вы показать пару примеров из этого ядра? Глобальные переменные уже перестали использовать или ещё нет?

      вот сравнение есть на просторах интернета
      www.intervolga.ru/blog/bitrix/d7-analogi-lyubimykh-funktsiy-v-1s-bitriks

      В общем стремятся не использовать глобальные переменные, но они все равно остались по всюду )

      Я вот не понимаю, почему в битриксе никак не избавятся от global $APPLICATION и global $USER, две самые «популярные» переменные, а по новому с ними работать нельзя


      1. horses
        25.04.2016 15:46

        Я вот не понимаю, почему в битриксе никак не избавятся от global $APPLICATION и global $USER, две самые «популярные» переменные, а по новому с ними работать нельзя

        Потому что вынуждены поддерживать обратную совместимость. Новый код их не использует, но старый то никуда не делся:
        Как в коде ядра, который еще не переписали, так и в решениях разработчиков.


        1. serginhold
          25.04.2016 16:35

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

          Я про это например:
          $APPLICATION->IncludeComponent()
          или про это:
          $USER->IsAdmin()

          есть же теперь класс
          Bitrix\Main\Application

          почему там нет метода IncludeComponent?


          1. horses
            25.04.2016 23:07
            -1

            Потому что еще этот код не реализован. Задача же стоит не просто формально уйти от глобальных переменных и типа ООП теперь во весь рост.
            Вполне возможно, что есть нужда вообще полностью пересмотреть работу $APPLICATION->IncludeComponent(). Не большой массив параметров передавать. Полноценная поддержка ООП компонентов, где наследоваться может не только код компонента, но и шаблоны, описания и параметры.


  1. Matvey-Kuk
    24.04.2016 16:04
    +61

    Благодарю! Давно ожидал подробный обзор лучших сторон битрикса с примерами кода, ссылками и развернутым объяснением, почему «здесь хорошо, а здесь плохо», без перехода на личности и вообще, сразу чувствуется подход профессионала.


    1. rpsv
      24.04.2016 16:06
      -42

      Этот пост был не на это направлен, а на опровержение того, что написал человек, который откровенно в Битрикс не разбирается.


      1. Matvey-Kuk
        24.04.2016 16:07
        +23

        Я и поблагодарил вас за развернутое опровержение.


      1. JhaoDa
        24.04.2016 16:07
        +17

        Опровержение? Без примеров кода, ссылок и развернутого объяснения? Мы на Хабре, тут принято опровергать с пруфами.


        1. Matvey-Kuk
          24.04.2016 16:12
          +41

          Это же вселенная битрикс. Достаточно общих слов и обвинения в непрофессионализме. Не переживайте.


          1. rpsv
            24.04.2016 16:20
            -13

            Код скинул. А разве по вашему человек профессионал, если он пишет что в Битрис нельзя сделать интеграцию с 1С стандартными средствами, хотя по факту это можно сделать?


            1. TimsTims
              24.04.2016 23:06
              +4

              Пользователи Хабра очень просят вас выложить пример такой интеграции, чтобы вы подробно расписали(может, даже со скриншотами):
              -«вот тут клик-клик нажали сюда, настроили то, хоп-хоп и готово: вот смотрите, вот тут у нас товар, вот тут он в Битриксе появился. Всё очень просто!»
              Добавьте это и вас отблагодярят по хабровски. И желательно убрать наезды на автора другого поста. Лучше ничего не пишите про это, нафиг здесь такой срач.


              1. rpsv
                25.04.2016 07:11
                -7

                Видео искать не пробовали? Ссылку в пост добавил


            1. kotomyava
              25.04.2016 03:15
              +3

              А можно? Вот так стандартными средствами, без напильника для произвольной конфигурации? Так покажите как это делается, вместо такого сомнительного утверждения.


              1. Crank
                25.04.2016 12:06
                +3

                Вы произнесли запрещенные в 1С слова «произвольная конфигурация». Система выполнила недопустимую операцию, ваша лицензия аннулирована.


            1. Crank
              25.04.2016 12:04

              Формально обмен с 1С есть. Давайте все полюбуемся кодом компонента sale.export.1c, посмотрим как написан класс CAllSaleExport. На дворе 2016 год, такой обмен даром не нужен.


        1. rpsv
          24.04.2016 17:05
          -16

          Интересненько. Статья про минусы не особо изобилует ссылками или кодом, за исключением кода, которым уже никто не пользуется. Но там это нормально, потому что для всех Битрикс априори говно. Еще раз говорю: моя статья опровергает ровно то, что написано в статье про минусы, и не более. Но видимо всем по хер.


          1. Delphinum
            24.04.2016 23:00
            +11

            Вы пытаетесь опровергнуть устоявшееся в обществе мнение. Кто говорил что будет легко?


      1. Focushift
        24.04.2016 16:48
        +1

        Что-то мало для опровержения, 2 пункта с копейками. 3й пункт на ответ не тянет, к примеру если взять микрософт, то само с собой он интегрируется за пару щелчков, а не надо чей-то модуль переписывать.


        1. rpsv
          24.04.2016 16:49
          -3

          Вы оригинал читали? Там больше написано? Я прокомментировал все пункты, которые приводятся там, на большее эта статья не расчитана


          1. Firz
            24.04.2016 23:07
            +5

            Так Вам и пытаются сказать что для комментариев есть специальная кнопка «Написать комментарий».


    1. Apatic
      24.04.2016 19:14
      +1

      Благодарю! Давно ожидал подробный обзор лучших сторон битрикса с примерами кода, ссылками и развернутым объяснением, почему «здесь хорошо, а здесь плохо», без перехода на личности и вообще, сразу чувствуется подход профессионала.


      Я конечно извиняюсь, но и оригинальная статья не особо развернута.
      Хотелось бы чтобы не только «защита» какого-то продукта должна была быть развернутой и наполненной ссылками и примерами, но и «обвинение». Иначе это получается какая-то «презумпция виновности».


      1. workless
        25.04.2016 06:14
        +1

        Есть такое слово «сарказм»


  1. lair
    24.04.2016 16:12
    +23

    У Битрикса есть условное разделение частей системы на MVC
    контроллер — это компонент (хотя по факту это виджет, а в некоторых случаях роутер — если говорить про компоненты из коробки)
    модель — это т.н. API. Можете писать их как хотите. Можете разделить их на ServiceLayer, на ActiveRecord и другие паттерны. Делайте что хотите ;-)

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


    1. rpsv
      24.04.2016 16:23
      -12

      Битрикс позволяет следовать архитектуре, но не обязывает.


      1. lair
        24.04.2016 16:36
        +2

        … благодаря чему можно легко получить хаос вместо архитектуры. Хотя бы сам Битрикс ей следует? Строго? Униформно?


        1. rpsv
          24.04.2016 16:43
          -8

          Вообще нет))) Битрикс переписывает в основном модуль Магазина и все что с этим связанно. На остальное грубо говоря — пофиг. Но если говорить про архитектуру, то Битрикс ее поддерживает.

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

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


          1. nazarpc
            24.04.2016 16:55
            +4

            Тем более когда продукт делает несколько разработчиков у них должны так или иначе даже не желая того возникнуть правила и стандарты. А если нет — то это многое говорит о процессе разработки.


            1. rpsv
              24.04.2016 17:02
              -2

              они есть, именно соглашение по документированию кода, и по сути компоненты соответствуют ему, вот только получается все равно не круто.


          1. MGames
            24.04.2016 17:01

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


            1. rpsv
              24.04.2016 17:01
              -7

              Коммерческий для покупателей, разработчики не платят за Битрикс!


              1. HaruAtari
                24.04.2016 18:18

                Покупатель платит разработчикам за доработки. А вы хотите, что бы он платил им за то, что они будут писать то, за что он уже заплатил.


                1. rpsv
                  24.04.2016 18:46
                  -5

                  Покупатель платит, за то что в коробке. Если его устраивает функционал по умолчанию, зачем его допиливать?


          1. HaruAtari
            24.04.2016 18:16
            +5

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

            Действительно. Почему это люди не хотят своими силами писать движок за который перед этим заплатили?! Странные. Хотят за свои деньги получить готовое решение.


            1. rpsv
              24.04.2016 18:45
              -8

              Еще раз: разработчики ничего не платили. В маркетплейсе много решений выложено, многие из которых бесплатные.


          1. Delphinum
            24.04.2016 23:03

            Я не силен в Битриксе, даже кода его не видил, но мне стало интересно: Битрикс позиционируется как CMS, фреймворк или библиотека?


            1. Old_Chroft
              25.04.2016 01:38

              1С -Битрикс позиционируется как готовая законченная система. О том и ср*чь разгор, против чего поднял вопрос топик-стартер.


          1. lair
            24.04.2016 23:20
            +6

            На остальное грубо говоря — пофиг.

            Вот потому, что пофиг, и нет архитектуры.


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

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


            Но почему сообщество программеров не может сами взять все в свои руки?

            Может. Но это уже не будет архитектурой битрикса.


            Почему все что-то хотят чтобы все было, но никто для этого ничего не делает.

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


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

            Ага, все-таки в компонентах из коробки — говнокод? Ну и зачем вы тогда спорите с тем фактом, что у Битрикса плохая архитектура?


    1. hudson
      24.04.2016 17:18

      Вот тоже за это глаз зацепился )


  1. VampiRUS
    24.04.2016 16:12
    +5

    Вот отсутствие документации по новому ядру очень огорчает, особенно когда обновление ломает старое работающее, при чём и новое api не стоит на месте, а развивается, читай ломает, то что удалось починить, через найденые возможности в новом api.


    1. rpsv
      24.04.2016 16:21
      -7

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


      1. northicewind
        24.04.2016 16:45
        +3

        Это совсем не решение. Вот аргумент метода getList

        array(
            'select' => array('NAME'),
            'filter' => array('>CNT' => 5)
            'runtime' => array(
                new Entity\ExpressionField('CNT', 'COUNT(*)')
            )
        )
        

        Что из этого подскажет IDE?


        1. rpsv
          24.04.2016 16:47
          -12

          IDE подскажет класс, а зайти в класс потратить пару минут на изучение — это уже скилл программиста.
          К слову: данный класс расписан в документации.
          Вообще, основные моменты все таки расписаны в документации.


          1. vladqa
            25.04.2016 00:52
            +6

            IDE подскажет класс, а зайти в класс потратить пару минут на изучение — это уже скилл программиста.

            по-моему, скилл программиста (в данном случае, разработчика D7), заключается, в частности, в том, чтоб догадаться о том, что параметр метода в виде магического массива, для понимания структуры которого надо лезть на сайт с документацией или смотреть исходники метода (а зачастую еще пару методов в глубину надо будет проглядеть) — это не то, что хочет пользователь фреймворка.

            А догадаться в этом месте сделать нормальный самодокументрируемый fluent-интерфейс для установки всех параметров — вот это уже больше похоже на скилл программиста


      1. VampiRUS
        25.04.2016 01:05

        я же написал «то что удалось починить, через найденые возможности в новом api.»
        Да, можно разобраться, именно это и приходится делать( а это время/деньги), чтобы перестали сыпаться на почту письма, от покупателей, которые обновили битрикс и у них в лучшем случаем модуль перестал работать.
        Можно даже найти нужную замену, уточнить в тех. поддержке, получить ответ: «Да это новое API можно использовать, оно на долго» и через месяц они уже опять меняют его.


  1. kez
    24.04.2016 16:22
    +5

    Ради приличия добавьте хоть ссылки на «Как правильно» и «Почему так не надо делать». Иначе получается не статья, а оправдание какое-то, со странными аргументами в конце.


    1. rpsv
      24.04.2016 16:22
      -4

      По сути только про новое ядро ссылки нужно, они есть (добавил).


  1. DrPass
    24.04.2016 16:27
    +24

    > В русскоязычном сегменте Интернета существует такой интересный феномен, как хейтеры Битрикс.
    Это как раз не феномен. Вот если бы найти человека, который положительно относится к Битриксу, и при этом занимается его поддержкой, а не продажами, вот это будет феномен :)


    1. rpsv
      24.04.2016 16:30
      -10

      Скоро увидите)))


  1. mgis
    24.04.2016 16:49
    +6

    Сергей Рыжиков наверное читает этот пост и плачет.


    1. rpsv
      24.04.2016 16:49
      -1

      Не понятно, расшифруйте…


      1. DevMan
        24.04.2016 17:30

        google -> Сергей Рыжиков
        ну или совсем по простому — https://habrahabr.ru/users/Rizhikov/


        1. rpsv
          24.04.2016 17:40
          +1

          Я знаю кто это, я не понимаю причину слез…


  1. L0NGMAN
    24.04.2016 17:27
    +4

    Сколько вам заплатили месье? Надеюсь много… :)


    1. rpsv
      24.04.2016 17:41

      Я тоже надеюсь))


  1. Spiritschaser
    24.04.2016 17:41
    +3

    > Но кто мешает написать свой компонент, так как надо?
    Собственно, это 80% кейсов нестандартной конфигурации Битрикс. Легче взять не-Битрикс с кучей разъяснений на Stack Overflow.


    1. rpsv
      24.04.2016 17:41
      -3

      Клиенты Битрикс за вами не последуют)


      1. kAIST
        24.04.2016 22:09
        +5

        Я никогда не работал с битриксом, не знаю что у вас там творится, но эта фраза звучит как то по сектантски…


  1. hMartin
    24.04.2016 17:43
    +7

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

    оффтоп
    Нда, ~100 рейтинга за пост формата
    Вступление: плохо плохо плохо
    1. плохо
    2. плохо + кусочек кода
    3. плохо
    вывод — плохо

    Это жесть.


    1. rpsv
      24.04.2016 17:48

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


      1. yarosroman
        25.04.2016 07:15

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


      1. rahem
        25.04.2016 10:06

        Негативное впечатление происходит от очень плохого соотношения цена/качество у Битрикс.

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

        Я сам покрутил демку Битрикса, чтобы обсудить выбор системы для внутреннего сайта и после ознакомления с «ошеломляющими» возможностями стал «любить» его еще сильнее.


        1. navion
          25.04.2016 12:38

          Нам его навязала веб-студия и позднее стало понятно почему — Битрикс обеспечивает постоянный доход для них.
          Сайт с ним нельзя сделать один раз и забыть до ребрендинга, надо постоянно ставить обновления и проверять/доводить после этого.


          1. rahem
            25.04.2016 12:41
            +1

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


  1. L0NGMAN
    24.04.2016 17:44

    Вот тут всё сказано: http://govnokod.ru/search?search=Bitrix :)


    1. rpsv
      24.04.2016 17:50
      -2

      А кто писал это говно? Можно решить данную задачу иначе, с помощью Битрикса, но никто не заморачивается, потому что Битрикс для всех по-умолчанию не очень. Можно с таким же успехом написать говнокод на Yii, а потом говорить что фреймворк не очень!


      1. Zezst
        24.04.2016 23:48

        На Yii тоже можно написать говнокод, я видел такое, я с ним работал. Он мне по наследству достался. Но совсем сильно нагадить не выйдет, архитектура не позволит.


      1. kotomyava
        25.04.2016 03:31

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


  1. MetaDone
    24.04.2016 17:48
    +14

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

    <?
    require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php");
    $APPLICATION->SetTitle("Интернет-магазин \"Одежда\"");
    ?>
    <h2>Лучшие коллекции</h2>
    <?$APPLICATION->IncludeComponent("bitrix:catalog.top", "", array(
        "IBLOCK_TYPE_ID" => "catalog",
        "IBLOCK_ID" => "2",
        "ELEMENT_SORT_FIELD" => "name",
        "ELEMENT_SORT_ORDER" => "asc",
        "ELEMENT_SORT_FIELD2" => "name",
        "ELEMENT_SORT_ORDER2" => "asc",
        "HIDE_NOT_AVAILABLE" => "N",
        "ELEMENT_COUNT" => "8",
        "LINE_ELEMENT_COUNT" => "4",
        "PROPERTY_CODE" => array(0=>"MINIMUM_PRICE",1=>"MAXIMUM_PRICE",2=>"",),
        "OFFERS_FIELD_CODE" => array(0=>"NAME",1=>"",),
        "OFFERS_PROPERTY_CODE" => array(0=>"ARTNUMBER",1=>"COLOR_REF",2=>"SIZES_SHOES",3=>"SIZES_CLOTHES",4=>"MORE_PHOTO",5=>"",),
        "OFFERS_SORT_FIELD" => "sort",
        "OFFERS_SORT_ORDER" => "asc",
        "OFFERS_SORT_FIELD2" => "id",
        "OFFERS_SORT_ORDER2" => "desc",
        "OFFERS_LIMIT" => "0",
        "VIEW_MODE" => "SLIDER",
        "TEMPLATE_THEME" => "site",
        "PRODUCT_DISPLAY_MODE" => "Y",
        "ADD_PICT_PROP" => "MORE_PHOTO",
        "LABEL_PROP" => "NEWPRODUCT",
        "OFFER_ADD_PICT_PROP" => "MORE_PHOTO",
        "OFFER_TREE_PROPS" => array(0=>"COLOR_REF",1=>"SIZES_SHOES",2=>"SIZES_CLOTHES",),
        "SHOW_DISCOUNT_PERCENT" => "Y",
        "SHOW_OLD_PRICE" => "Y",
        "ROTATE_TIMER" => "30",
        "MESS_BTN_BUY" => "Купить",
        "MESS_BTN_ADD_TO_BASKET" => "В корзину",
        "MESS_BTN_DETAIL" => "Подробнее",
        "MESS_NOT_AVAILABLE" => "Нет в наличии",
        "SECTION_URL" => "",
        "DETAIL_URL" => "",
        "BASKET_URL" => "/personal/cart/",
        "ACTION_VARIABLE" => "action",
        "PRODUCT_ID_VARIABLE" => "id_slider",
        "PRODUCT_QUANTITY_VARIABLE" => "quantity",
        "PRODUCT_PROPS_VARIABLE" => "prop",
        "SECTION_ID_VARIABLE" => "SECTION_ID",
        "CACHE_TYPE" => "A",
        "CACHE_TIME" => "180",
        "CACHE_GROUPS" => "Y",
        "DISPLAY_COMPARE" => "N",
        "PRICE_CODE" => array(0=>"BASE",),
        "USE_PRICE_COUNT" => "N",
        "SHOW_PRICE_COUNT" => "1",
        "PRICE_VAT_INCLUDE" => "Y",
        "PRODUCT_PROPERTIES" => array(),
        "USE_PRODUCT_QUANTITY" => "Y",
        "CONVERT_CURRENCY" => "N",
        "OFFERS_CART_PROPERTIES" => array(0=>"ARTNUMBER",1=>"COLOR_REF",2=>"SIZES_SHOES",3=>"SIZES_CLOTHES",)
      ),
      false
    );?>
    <h2>Тренды сезона</h2>
    <?$APPLICATION->IncludeComponent(
      "bitrix:catalog.top",
      "",
      Array(
        "IBLOCK_TYPE" => "catalog",
        "IBLOCK_ID" => "2",
        "VIEW_MODE" => "SECTION",
        "TEMPLATE_THEME" => "site",
        "PRODUCT_DISPLAY_MODE" => "Y",
        "ADD_PICT_PROP" => "MORE_PHOTO",
        "LABEL_PROP" => "NEWPRODUCT",
        "OFFER_ADD_PICT_PROP" => "MORE_PHOTO",
        "OFFER_TREE_PROPS" => array("COLOR_REF", "SIZES_SHOES", "SIZES_CLOTHES"),
        "SHOW_DISCOUNT_PERCENT" => "Y",
        "SHOW_OLD_PRICE" => "Y",
        "MESS_BTN_BUY" => "Купить",
        "MESS_BTN_ADD_TO_BASKET" => "В корзину",
        "MESS_BTN_DETAIL" => "Подробнее",
        "MESS_NOT_AVAILABLE" => "Нет в наличии",
        "ELEMENT_SORT_FIELD" => "sort",
        "ELEMENT_SORT_ORDER" => "asc",
        "ELEMENT_SORT_FIELD2" => "name",
        "ELEMENT_SORT_ORDER2" => "asc",
        "SECTION_URL" => "",
        "DETAIL_URL" => "",
        "BASKET_URL" => "/personal/cart/",
        "ACTION_VARIABLE" => "action",
        "PRODUCT_ID_VARIABLE" => "id_section",
        "PRODUCT_QUANTITY_VARIABLE" => "quantity",
        "PRODUCT_PROPS_VARIABLE" => "prop",
        "SECTION_ID_VARIABLE" => "SECTION_ID",
        "DISPLAY_COMPARE" => "N",
        "ELEMENT_COUNT" => "12",
        "LINE_ELEMENT_COUNT" => "4",
        "PROPERTY_CODE" => array("MINIMUM_PRICE", "MAXIMUM_PRICE"),
        "OFFERS_FIELD_CODE" => array("NAME"),
        "OFFERS_PROPERTY_CODE" => array("ARTNUMBER", "COLOR_REF", "SIZES_SHOES", "SIZES_CLOTHES", "MORE_PHOTO"),
        "OFFERS_SORT_FIELD" => "sort",
        "OFFERS_SORT_ORDER" => "asc",
        "OFFERS_SORT_FIELD2" => "id",
        "OFFERS_SORT_ORDER2" => "desc",
        "OFFERS_LIMIT" => "0",
        "PRICE_CODE" => array("BASE"),
        "USE_PRICE_COUNT" => "N",
        "SHOW_PRICE_COUNT" => "1",
        "PRICE_VAT_INCLUDE" => "Y",
        "PRODUCT_PROPERTIES" => array(),
        "USE_PRODUCT_QUANTITY" => "Y",
        "CACHE_TYPE" => "A",
        "CACHE_TIME" => "180",
        "CACHE_GROUPS" => "Y",
        "HIDE_NOT_AVAILABLE" => "N",
        "CONVERT_CURRENCY" => "N",
        "OFFERS_CART_PROPERTIES" => array("ARTNUMBER", "COLOR_REF", "SIZES_SHOES", "SIZES_CLOTHES")
      )
    );?>
    <?$APPLICATION->IncludeComponent("bitrix:sale.bestsellers", ".default", array(
        "HIDE_NOT_AVAILABLE" => "N",
        "SHOW_DISCOUNT_PERCENT" => "Y",
        "PRODUCT_SUBSCRIPTION" => "Y",
        "SHOW_NAME" => "Y",
        "SHOW_IMAGE" => "Y",
        "MESS_BTN_BUY" => "Купить",
        "MESS_BTN_DETAIL" => "Подробнее",
        "MESS_NOT_AVAILABLE" => "Нет в наличии",
        "MESS_BTN_SUBSCRIBE" => "Подписаться",
        "PAGE_ELEMENT_COUNT" => "4",
        "LINE_ELEMENT_COUNT" => "4",
    


    1. rpsv
      24.04.2016 17:53
      -10

      А нормальность чем определяется?

      Про коробку написано в статье. Про пример D7: ниже написано, что на старом ядре это не решить, читайте полностью, а не поверхностно.

      Ради лайков коммент писали что ли? Извините, я уже не могу ничего лайкать, написал статью на свою голову)))


      1. MetaDone
        24.04.2016 18:08

        нормальность определяется нормальной документацией, следованием стандартам (если не в курсе, есть к примеру psr-2).
        В битриксе же тонны ужаса тянутся с момента его появления из глубин ада на свет для обратной совместимости, и лучше это никогда не станет, рано или поздно придет время выбирать — или поддерживать все, что написали ранее, или переписать все по человечески.
        Но пока работают маркетологи, люди будут это хавать и даже защищать, а в сторону других вещей даже смотреть не будут. Меня один знакомый просил поправить мелочь в магазине на OpenCart, потому что его знакомый-битриксойд не смог разобраться даже в этом. Зато спец с опытом, в веб-разработке весьма долго.


  1. maxtm
    24.04.2016 17:55
    +5

    модель — это т.н. API. Можете писать их как хотите. Можете разделить их на ServiceLayer, на ActiveRecord и другие паттерны. Делайте что хотите ;-)

    Модель это таки модель в общепринятом понятии MVC или таки API (а-ля ServiceLayer)?
    «Писать как хотите» — никак не тянет на архитектуру.


    1. rpsv
      24.04.2016 17:56
      -1

      А что такое модель в общепринятом понимаю MVC, ActivRecord??? Модель — это бизнес-логика, паттерны которые я перечислил, это способы реализации модели.


      1. maxtm
        24.04.2016 18:24

        Бизнес-логика это ServiceLayer, который оперирует моделями в том числе.
        А модель — это часть системы которая отвечает за работу с данными конкретного объекта/сущности/етц.
        Где-то это AR, где-то Manager/Entity.
        Но никак ServiceLayer.

        У Вас же получается, что модель — это все разом, и AR, и Manager/Entity подход ServiceLayer, что и вызывает батхерт.


        1. rpsv
          24.04.2016 18:50

          А я не говорил что модель это ServiceLayer, и модель это уж точно не AR и DM.
          Модель, т.е. бизнес-логика (почему вы модель от БЛ отделили?) — это по сути объект, который уже обращается к SL, AR, DM,…


          1. lnroma
            25.04.2016 13:18

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


        1. vladqa
          25.04.2016 00:56

          Справедливости ради надо отметить, что это весьма холиварная тема: ADM против RDM. Есть несколько трактований понятия «Модель» и пара лагерей, которые кидают друг в друга какашками.

          Но в общем случае модель — это не только данные, но и методы по их обработке. А вот где они находятся — в сервисах или в других классах — вопрос десятый.


  1. kroketmonster
    24.04.2016 18:47
    +18

    Спасибо за статью, очень понравилось, теперь точно никогда не буду использовать битрикс и всех буду отговаривать.


  1. BaxTepXuTep
    24.04.2016 18:48

    «На чужие кучи глаза не пучи.»
    2k.livejournal.com/520078.html


    1. xdevel
      24.04.2016 20:39

      https://www.youtube.com/watch?v=280f6PFEayc


  1. ColdPhoenix
    24.04.2016 18:48
    +6

    похоже что пост лишь добавил хейта на битрикс:)


  1. remotemethod
    24.04.2016 18:48
    +2

    В этой статье как и в обозреваемой, ничего конкретного, будто не статья а «прения».

    offtopЧто-то мне подсказывает что следующую статью назовут:

    Обзор «Обзор обзора».


  1. ertaquo
    24.04.2016 19:54
    +31

    image


  1. kireevco
    24.04.2016 20:08

    По поводу данной и оригинальной статьи промолчу, все было сказано уже.
    Мне вот интересно, а какие альтернативы битриксу народ использует в реалиях связки с 1С? Magento?


    1. votyra
      25.04.2016 07:17

      А для каких целей Вам нужна альтернатива? Синхронизировать цены-товары — раз вдень (импорт-экспорт xml)? или заказы? Bitrix — работает из коробки(почти) и согласно описанию(почти), но если вам нужно чуть больше «фишечек» то эта статья и предыдущие, а точнее коментарии к ним, скорей всего разубедят Вас использовать Bitrix, и Вам «прийдеться» использовать свою маженту-престу и.т.д. Да будет сложно заставить найти общий язык администраторасайта-phpпрограмиста с 1с-програмистом.


  1. Zhandos
    24.04.2016 20:41
    +1

    Yii1 говнокод?


    1. lithium_li
      24.04.2016 21:12

      если зарыться поглубже можно нарваться на спагетти в нескольких местах


    1. Borro
      24.04.2016 21:14

      Местами. Например их AR и UrlManager — и тот и другой расширить очень сложно не переписав половину класса. Не просто так разработчики решили написать Yii2.


      1. Zhandos
        24.04.2016 22:03
        +2

        В том-то и дело, в некоторых местах, в bitrix говнокод — повсеместно.


  1. lithium_li
    24.04.2016 21:11
    +1

    модель — это т.н. API. Можете писать их как хотите. Можете разделить их на ServiceLayer, на ActiveRecord и другие паттерны. Делайте что хотите ;-)


    ActiveRecord в битриксе, где?! на дворе 2016 год, а модели битрикса методом getList до сих пор возвращают объект Main\DB\Result вместо массива из экземпляров класса модели, это не модели а плевок в лицо сообществу разработчиков.

    bitrix не заводится на php7, и вряд ли заведется с огромным количество мусора в коде ядра, что уже говорит многом.

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


    1. Spunreal
      24.04.2016 21:31

      Эльдорадо на Битриксе. Это им не мешает быть серьёзным проектом.
      С php7 сейчас как раз ведутся работы. Скоро и на нем будет запускаться. пока парочка модулей из всех не работает, скрытые ошибки не смотрел.


      1. lithium_li
        24.04.2016 21:39

        откуда вам знать что они не перетащили весь основной функционал на другой фреймворк/апи и от битрикса не осталась только авторизация и система рендера шаблонов?

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


      1. michael_vostrikov
        25.04.2016 06:57

        Слышал, что они вроде как собираются переписать с Битрикса. Не знаю, правда или нет.


      1. asd111
        25.04.2016 20:46

        Эльдорадо НЕ на Битриксе, а на Java платформе для инет коммерции Hybris. Они ушли от Битрикса.
        Вот доказательство
        hh.ru/vacancy/10488581?customDomain=1


        1. horses
          25.04.2016 23:18
          -4

          Они ушли от битрикса, вы уверены? Уже ушли?
          Вы уверены? А открыть исходный код их главной страницы попробуйте: http://www.eldorado.ru/
          И посчитайте сколько там раз встречается слово bitrix. Я 9 раз насчитал. Это при том, что они статику с отдельного домена отдают.
          Там еще масса следов, показывающих, что это битрикс.
          Может быть они и собираются уйти, но сейчас у них отдача контента битриксом идет.


        1. Spunreal
          26.04.2016 11:22

          Пока ещё на Битриксе вроде (http://dl1.joxi.net/drive/2016/04/25/0001/2235/80059/59/76bf316f43.jpg).

          Ну и одни ушли, другие пришли. Примеров крупных магазинов много:
          www.oldi.ru
          euroset.ru
          www.svyaznoy.ru
          www.shop.mts.ru
          www.incity.ru
          allsoft.ru


      1. ainu
        27.04.2016 10:27
        +1

        Вот это и это сложно назвать серьезным проектом.


        1. Spunreal
          27.04.2016 10:57

          Ок, я вас понял. Посещаемость в 500к-1кк в сутки для интернет-магазина, это не серьёзный проект. Серьёзность определяется временем загрузки страницы. Справедливости ради, если б у меня был такой магазин, мне бы хватило денег на собственное решение, а не на Битриксе или любом другом фреймворке.


  1. zenn
    24.04.2016 21:55
    +8

    Я еще такого не видел, чтобы кто-то серьезно отстаивал чужое д*рьмо да еще и так уверенно. Давайте взглянем хотя бы сюда:

    Примеры кода из D7 (выгрузка названий элементов, количество которых больше 5):

    ElementTable::getList(array(
    'select' => array('NAME'),
    'filter' => array('>CNT' => 5)
    'runtime' => array(
    new Entity\ExpressionField('CNT', 'COUNT(*)')
    )
    ));

    Вы считаете это адекватным кодом? Передачу массива ключ-значение, по факту 'критерий' -> 'значение' в стат. метод класса? Без инкаспуляции, полиморфизма… Да блин, взгляните вы в symfony, laravel и подобные, где реализован ORM/ActiveRecord — все они спроектированы так, что даже не имея под рукой документации интуитивно понятно можно составить запрос в базу.
    Взгляните сюда — это действительно удачный пример, или сюда. Если считаете себя «опытным» php-программистом то взгляните на реализацию логики работы их activerecord/queryBuilder моделей и вы поймете, насколько вы заблуждались с адекватностью битрикса и его нового ядра.


    1. horses
      25.04.2016 15:55
      -1

      Автор статьи просто не опытен и не в курсе, что getList в D7 — это просто обертка, которая реализует привычный синтаксис.
      На самом деле там лежит объект Query. Все примерно так, как вы привели в своих ссылках.
      Вот его описание в документации: http://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=5751


      1. zenn
        25.04.2016 23:11
        +2

        Вы так и не поняли смысла моего сообщения. То, что приведено по вашей ссылке не меньший ад чем код автора в этой статье. Еще раз, обратите внимание на выражения инкаспуляция и полиморфизм. Если не понятно — обратите внимание на динамическую модель у тех примеров, что привел я, и на то, что вы показываете в битриксе (дикий адовый п**дец с передачей массивов с неизвестными параметрами и значениями) — про такой код чаще всего говорят: «Когда я начинал писать этот код только бог и я знали как он работает. Теперь остался только бог».


        1. horses
          25.04.2016 23:28
          -1

          Вы ссылку открывали: http://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&LESSON_ID=5751?
          Вторую часть первой вставки кода посмотрите.
          Этот код подобен коду из вашей ссылки: http://www.yiiframework.com/doc-2.0/yii-db-query.html
          Кстати, почему вы говорите о неизвестных параметрах? Набор параметров строго определен и вольностей здесь нет.
          Так же в ваших эмоциональных выражениях кроме эмоций нет ничего. Объясните чем это плохо и какие проблемы создает?


  1. xRay
    24.04.2016 22:30

    А что скажите про такой баг http://dev.1c-bitrix.ru/community/forums/messages/forum6/topic73598/message384042/#message384042?
    Ладно бы его уже его исправили, но нет. Скоро уже год будет этому багу…


  1. Jodes
    24.04.2016 23:39
    +8

    Хорошая попытка, Битрикс, но нет.

    Автор выбрал элегантный способ хабрасуицида :)


  1. vladqa
    25.04.2016 00:46
    +1

    но если говорить про сравнение, то это тоже самое что смотреть код Yii 1, и говорить что там говнокод.

    ElementTable::getList(array(
        'select' => array('NAME'),
        'filter' => array('>CNT' => 5)
        'runtime' => array(
            new Entity\ExpressionField('CNT', 'COUNT(*)')
        )
    ));
    


    Забавно, что эта, так называемая, «ORM» (хотя что-то мне подсказывает, что до ORM там далеко, но т.к. детально код не смотрел, утверждать не берусь), своим способом конфигурации подозрительно напоминает упомянутый вами AR в Yii1 как пример говнокода (там тоже можно было проинициализировать CDbCriteria магическим массивом): http://www.yiiframework.com/doc/guide/1.1/ru/database.ar

    Да и даже в устаревшем Yii1 код и, в частности, ORM, гораздо лучше.


  1. Old_Chroft
    25.04.2016 02:18
    +2

    ЖЫРНЫМ выделено мной:

    контроллер — это компонент (хотя по факту это виджет, а в некоторых случаях роутер — если говорить про компоненты из коробки)
    Контоллер, виджет, роутер!? Вы разницу понимаете?
    модель — это т.н. API. Можете писать их как хотите. Можете разделить их на ServiceLayer, на ActiveRecord и другие паттерны. Делайте что хотите ;-)
    Не, API — это нечто другое. Модель — это модель. А Application Programming Interface — совершенно другое. Я категорически против, что бы с моей моделью делали что хотели. Бл*ть, инкапсуляция — это один из основополагающих принципов ООП!
    представление — это шаблоны. Тут все как надо, есть темы, есть шаблоны, все океюшки
    Да, тут все как надо. С условием, что это «как надо» нельзя будет редактировать из админки (если кто не в курсе — в Битриксе можно редактировать код приложения из админки. Но это я так понимаю и есть одна из «фишек» ).

    PS: Я не хейтер Битрикса. С этой системой я работал недостаточно для широко развернутого поста (в ту или иную сторону). Высказал только свое IMHO.
    PPS: Битрикс, перепишите к черту свою систему заново, в ней нет ничего такого за что стоит цепляться и взращивать монстра.


  1. IvanGur
    25.04.2016 07:21

    Bitrix, продукт сам в себе, недаром существует BitrixVM.
    Но меня всегда смущало, почему php_admin_value open_basedir «none»?


    1. kotomyava
      25.04.2016 15:15
      +1

      А меня, вот, куда больше смущает, что битрикс создаёт тонны php файлов, от пользователя, под которым запущен веб сервер.
      И после этого, становится понятно, почему в CMS приходится встраивать антивирус…


      1. Irgen
        27.04.2016 18:11

        ~45 000 файлов для CMS-ки это конечно мощно. Причем добрых 20% занимают однострочные конструкции типа


        1. Irgen
          28.04.2016 13:33

          <?
          require_once($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/tools/calendar.php");
          ?>
          


  1. mcvlad
    25.04.2016 07:21

    А что побудило разработчиков именовать, к примеру, атрибуты таблиц БД заглавными буквами?


    1. IgorAdamenko
      26.04.2016 16:38

      Про именование даже не говорите. То, что у них там всё ОРЁТ НА ТЕБЯ, это ещё что. Там в коде есть $arResult, $res, $ar_res — и всё это могут быть переменные для одного и того же, но в разных компонентах/модулях. Кто во что горазд.


  1. lizarge
    25.04.2016 07:21
    +1

    Два года работал на проектах основанных на битрикс, были проекты с интернет магазинами со стандартной и кастомной синхронизацией с 1С, и другими е-коммерц системами. Ничего хорошего в защиту этой поделки сказать не могу.
    Неудобная архитектура (? cкорее даже фреймворк), постоянные сбои с выгрузками со стороны 1C, проблемы со встроенными инструментами (визуальный ректор) огромные размеры дистрибьютивов, и просто фантастические требования к серверу — чем не хейтерство?
    Хотя да, если вы хотите очень быстро открыть простой интернет магазин взяв за основу нормальную базу 1С и шаблонный дизайн, то это правильный выбор. Правда при всех выше указаных вещах скорее всего вам не нужен интернет магазин.
    Все выше сказаное имхо, и на состояние 2 года назад.


  1. eskrano
    25.04.2016 07:21
    +1

    Впустите битрикс в свой дом…


  1. Alexeyslav
    25.04.2016 08:43
    +1

    Платят за систему не те люди которым потом работать с ней, ну а раз заплатили то приходится вертеться чтобы работало, а снаружи-то не видно каких усилий это стоило и на какие костыли пришлось пойти чтобы «через неделю уже должно работать!».


  1. eshimischi
    25.04.2016 10:07

    Тоже пример из жизни: год работал в студии, которая делала сайты на битрикс, причем сайты достаточно серьезных клиентов. Поступив на «службу», был обязан пройти тестирование и сертификацию на сайте 1c.bitrix.ru и овладеть всеми навыками работы. Прошел, получил. Каждый новый проект вызывал рвотные позывы и все убеждения моего шефа, что весь код должен быть реализован только на API Bitrix приводили к часовым спорам и в итоге я брал и писал весь функционал на голом php, с добавлением ООП и фронтенд на jquery и др. Остались даже некоторые сделанные мной компоненты — корзина интернет магазина, система вывода информации по избирательным участкам и новостной агрегатор. Сравнительно недавно вернулся к одному проекту на битриксе и потратил уйму времени, чтобы вспомнить основы работы с API и доделать какие то штуки. Единственное, что мне нравилось в нем — это визуальный редактор, выбираем нужный блок и редактируем его свойства, практически без необходимости лезть в код.


    1. horses
      25.04.2016 16:03
      +1

      Извините, но может быть вам стоило уволиться, чем себя так мучится?
      Это на любой системе, хоть битрикс, хоть джомла, хоть друпал и любая другая, не правильно брать и нарушая все правила писать на голом php, делать прямые запросы и реализовывать свой код внутри системы.
      А потом придет другой разработчик, и будет ругаться, что это за битрикс такой плохой, что тут ничего не понять?


      1. eshimischi
        25.04.2016 16:22
        +1

        Дак я и уволился. Основной API естественно писался на кодобазе битрикса, но все вокруг делалось на голом php — это сберегло мне время и нервы.


        1. horses
          25.04.2016 23:32
          -1

          На голом php не может быть быстрее по определению (но есть нюансы). Вы просто не знали как нужно это правильно делать. Я уверен на 99%, что именно так дело и обстояло.
          Так же не совсем понятно, что значит «голый php»? Вы вместо написания компонентов, прямо php код на публичных страницах размещали, делали прямые запросы к бд (возможно к таблицам инфоблоков запросы?)?
          Приведите пару примеров того, что вы делали на голом php и как вы это все реализовали.


          1. eshimischi
            26.04.2016 09:15

            Код компонентов сейчас не под рукой, но в любом случае вся структура кода самих компонентов реализована на API битрикса. Точно помню, что когда была поставлена задача реализовать простую корзину заказов товаров (без оплаты и прочих наваротов) — добавление товаров и последующая передача этого списка на почтовый адрес магазина с указанием реквизитов заказчика, то вывод товаров сделан с применением (дай Бог памяти) news.list (вывод данных инфоблока товаров), а сам функционал корзины сделан отдельным классом php, с передачей и хранением параметров в localstorage (jquery). Никаких прямых запросов к БД.


            1. horses
              26.04.2016 10:13

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

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

              Но я допускаю вариант того, что у вас идет просто игра слов. Вы используете всю структуру битрикса, его API, а там где функционал битрикса не покрывается задачи заказчика, то все разработчики пишут на «голом PHP». Создают свои компоненты или модули и реализуют там свой код.
              Например, в вашем случае может быть так, что вы реализовали на младшей редакции, без интернет магазина некоторую упрощенную корзину, которая в простом варианте позволяет вам оформлять заказы (если эти две вещи совместить). Но здесь нет ничего сверхъестественного: так делают большинство разработчиков на битриксе.


              1. eshimischi
                26.04.2016 10:27

                Версия действительно была по-моему standart. Повторюсь, не стояла задача делать оформление заказа — простой список с ячейкой количества позиции, кнопка добавить, все это открывается в лайтбоксе с формой ввода контактной информации и кнопкой «Отправить». Про корзину и оплату — это естественно, просто объединил это в 1 единицу в данном случае (процессинг и оформление заказа в идеальном и цельном варианте).


  1. juventino40
    25.04.2016 10:28

    За свою многолетнию практику пришлось использовать битрикс 1 раз — это был госзаказ, и заказчик прямо сказал, что «нужно просто распилить деньги за дорогой продукт, а результат не важен».


  1. Lopar
    25.04.2016 13:57
    +2

    «Недавно прочитал обзор того парня и мне есть что сказать». Мы превращаемся в филиал задолба! ли… ;(


  1. pistol
    25.04.2016 18:39
    +1

    Чувак, ты просто копия всех тех битриксоидов, которые еще не открыли для себя Симфони. Вы ведете себя шаблонно, отстаивая Битрикс, но все равно в скором времени переходите на фреймворки. Обратного пути не существует.

    То, что ты называешь архитектурой, не является таковой. Это просто использование синтаксиса языка — вызов статических методов и т.д. Советую почитать про паттерны проектирования, чтобы понять, что такое архитектура.


    1. horses
      25.04.2016 23:34
      -2

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


      1. Delphinum
        25.04.2016 23:56

        А как вы их предложите тестировать?


        1. horses
          26.04.2016 10:04

          Начиная с версии 5.3 можете использовать позднее статическое связывание.
          А вообще, когда вы пишете код не только для себя, а для других. Когда ваше API будут использовать, то нужно думать и об удобстве использования. Писать десятки строк кода, для того чтобы просто узнать есть ли элемент в таблице с таким ID — это избыточно.
          При этом ваши статические методы могут быть обертками над кодом, выстроенным динамически.


          1. lair
            26.04.2016 10:11
            +2

            Когда ваше API будут использовать, то нужно думать и об удобстве использ2ования.

            И что, работа с экземплярами как-то мешает удобству использования?


            При этом ваши статические методы могут быть обертками над кодом, выстроенным динамически.

            Эм, а вы не в курсе, что антоним "статическому" (методу) — это не "динамический" (метод)?


          1. Delphinum
            26.04.2016 15:14

            Начиная с версии 5.3 можете использовать позднее статическое связывание

            А как это поможет? Ну тобишь имеем мы вот такое взаимодействие:
            class UserController{
              public function loginAction($login, $password){
                ...
                Log::debug(...);
              }
            }
            

            Как я понимаю мне нужно использовать что то вроде:
            class UserController{
              private $log;
            
              public function setLog($logClass){
                $this->log = $logClass;
              }
              
              public function loginAction($login, $password){
                ...
                $this->logClass::debug(...); // Не уверен, будет ли это вообще работать.
              }
            }
            

            Если да, то какой смысл от статики вообще?

            А вообще, когда вы пишете код не только для себя, а для других. Когда ваше API будут использовать, то нужно думать и об удобстве использования

            А что в этом не удобного:
            $userTable = $sl->get('Model\User\UserTable');
            $user = $userTable->find($id);
            echo $user->getFullName();
            


    1. rpsv
      26.04.2016 07:13
      -2

      Я знаком с Yii, Slim и Lumen. Тем не менее это мне не мешает заниматься Битриксом. Занимаюсь я им, потому что на него есть спрос. Зачем переходить на фреймворки, если есть Битрикс и можно на нем зарабатывать деньги?

      Шаблонное поведение как раз таки у большинства тех кто писал здесь комменты, т.к. вы просто ненавидите Битрикс, и пишите переходите на Symfony, на Laravel, никто даже Yii не упомянул(((( А то что не умеете и не хотите в нем разбираться, это как то опускается, при чем большинство писавших и минусовавших вообще никогда не писали на Битрикс.

      То что ты прочитал про паттерны на википедии делает тебя асом в архитектуре? Как по мне, ты знаешь только MVC и считаешь, что это круто, а все остальное это не архитектура вовсе (при чем MVVM, MVP тоже для тебя не архитектуры). Так кому стоит читать про паттерны?


      1. pistol
        26.04.2016 07:30
        +1

        Я знаком с Yii, Slim и Lumen

        Если скинешь линк хоть на один свой модуль какого-то фреймворка на Гитхабе, я верну все слова о Битриксе назад. И вообще, признаю, что я неправильно понимаю этот мир, все устроено иначе.


        1. rpsv
          26.04.2016 10:50

          Членомер начался, ну ладно: https://github.com/irpsv. В репах думаю сам найдешь.
          Сайт http://actorswanted.ru весь на Yii2, но исходники закрытые (так что это недоказуемо, на слово придется поверить что его я делал).
          Сейчас конечно начнешь мазаться, что типа это херня, все криво сделано и т.д. но да ладно.
          P.S. я комменты пишу один раз в неделю уже наверное (спасибо всем большое), так что активной беседы не получиться.


          1. DrPass
            27.04.2016 10:00

            > спасибо всем большое
            По крайней мере, вы собрали адекватную статистику о том, какие чувства разработчики испытывают от работы с Битрикс.


            1. rpsv
              27.04.2016 12:48
              -1

              А я оказался крайний, несправедливо(((( Кстати этот пост скоро наберет такой же рейтинг (только в минус) как статья «оригинал».


              1. lair
                27.04.2016 13:18

                А я оказался крайний, несправедливо

                Что несправедливого в том, что сообщество ответило на вашу публикацию теми инструментами, которые у него есть?


                1. kotomyava
                  27.04.2016 21:06
                  +1

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

                  Глупость называть кашу творящуюся в битриксе архитектурой, цитировать руководство и говорить что там есть MVC, которого там нет и близко.
                  И тем более говорить, что компонент для синхронизации с из коробки 1С годен на что-то большее, чем работать в какой-нибудь демке, в идеальных условиях.

                  Примерно эту мысль, сообщество и донесло всё это стандартным здесь образом. Кто-то в комментариях, а кто-то в рейтинге.


                  1. lair
                    27.04.2016 21:31

                    Вы немножечко уровнем ошиблись, но я думаю, что автор все равно увидит ваш комментарий.


                    1. kotomyava
                      27.04.2016 23:46

                      Прошу прощения, ответ был на комментарий выше, конечно.


      1. lair
        26.04.2016 09:57
        +1

        Как по мне, ты знаешь только MVC и считаешь, что это круто, а все остальное это не архитектура вовсе (при чем MVVM, MVP тоже для тебя не архитектуры)

        Так по вашим же словам, в Битриксе MVC? Зачем в этом контексте поминать MVVM и MVP?


      1. lair
        26.04.2016 13:56
        +1

        Зачем переходить на фреймворки, если есть Битрикс и можно на нем зарабатывать деньги?

        Чтобы развиваться как разработчик, и, потенциально, зарабатывать больше денег?


        1. IgorAdamenko
          26.04.2016 16:36

          Вот это вот ключевая проблема, которую не понимают те, кто разрабатывают под Битрикс. Идеология «зачем мне что-то иное если и здесь платят» делает из программиста обезьяну, которая штампует одинаковые решения для клиента. Программирование под Битрикс — это серьёзный такой вендор-лок. И если вовремя не уйти, то дальше путь, видимо, только в программисты под 1С? Страшно это.


  1. IgorAdamenko
    26.04.2016 16:33
    +6

    К сожалению, не могу минусануть ни пост, ни карму. Пост за его откровенное издевательство над Хабром, карму — за то, что позволили себе такое.


    Статья про минусы Битрикс написана сомнительным программистом, по крайней мере в области Битрикс, который прочитав пару страниц документации, написав один компонент или даже модуль (но вряд ли), считает что он все знает о системе.

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


    По факту: 1С-Битрикс — это компания, которой плевать на разработчиков, потому что она понимает, что не они будут решать, покупать Битрикс или нет. Решать будет заказчик, который, увидя возможности визуального редактирования, зальёт всё кипятком и побежит отдавать свои деревянные. Этим же объясняется отсутствие сколько-либо нормальной документации. По большинству реально полезных фич, которые в находятся на шаг дальше CIBlockElement::GetList её нет и находить её приходится в комментариях на форуме, например. А если говорить про что-то новое, D7, API B24, то тут легче умолить клиента потерпеть ещё пару лет, или наколхозить что-нибудь своё, вокруг всего этого.


    P. S.: А то, что вы называете сомнительными программистами всех, кто не любит Битрикс, учитывая их количество, должно как минимум наводить вас на мысль о своей компетентности в программировании. А вы, похоже, просто считаете себя Д'Артаньяном.


  1. Frimko
    26.04.2016 21:05

    просто за битрикс платят больше в Сибири, вот и кодим на нем). Хомячки покупают, значит есть спрос, а есть спрос… ну вы поняли.


  1. mcvlad
    28.04.2016 16:24

    Вообще, у нас заказчик пожалел о том, что выбрал Битрикс, так как каждый день «отваливается» какой-то модуль/компонент, и быстро дебажить это дело не всегда получается. Проще закрыть бизнес, и открыть заново с другим «Не-Битриксом», чем переводить весь магазин на другую платформу :)


    1. Zhandos
      28.04.2016 19:05

      Ничего себе, неужели бизнес настолько завязан на софте?


      1. DrPass
        29.04.2016 01:53

        Если речь идет об интернет-магазине, для чего, собственно, и покупаются подобные штуки, то такой бизнес на 100% завязан на софте.


        1. mcvlad
          29.04.2016 14:00

          Да, проблема в том, что если заказчик (т. е. владелец бизнеса, изначально ориентированного на продажи в интернете) выбирает себе подходящую CMS для магазина, то как правило он сначала «попадается» на такие вот рекламные кампании как у Битрикса (где рассказывается как все хорошо и круто), а потом ищет программистов, которые этого монстра и будут настраивать. Очень обидно, что далеко не все предприниматели спрашивают совета у программистов, а верят пиару.