Как Битрикс чуть Новый Год не погубил

Жили мы весело в небольшой веб-студии, делали сайты-визитки, интернет-магазины и небольшие порталы. Были проекты и на платформе 1С-Битрикс. Мы, конечно, не являлись официальным интегратором Битрикс, но делали работоспособные проекты на сколько позволяли силы и опыт. Казалось бы, какие только компоненты не приходилось нам использовать, но сие чудо отечественных мозгов сумело сделать сюрприз под новый год.

Поступил к нам новый заказ – интернет-магазин. К слову, были у нас и еще интернет-магазины, работали они на написанной нами CMS, основанной на Codeigniter фреймворке. Работали неплохо, довольно шустро. Но время брало свое, вышел Laravel4 (как всё просто и чудесно), Yii2 (наконец-то стабильный), Phalcon (Си – это очень быстро) и использовать умерший окончательно CI (кто-нибудь возьмите меня домой) не было больше сил. Переглянувшись с ассистентом, мы сразу поняли, что создавать новый заказ на старой системе совсем не хочется. Были мысли переписать удачные решения интернет-магазина на Yii2, смотрели в сторону Open Cart, CS Cart и PrestaShop, но точку в вопросе поставил заказчик – 1С Битрикс (редакция Бизнес). Светлые надежды аккуратно сложили мыло с веревкой в чемодан и отправились восвояси. С другой стороны, не всё так плохо, подумал я. У нас будет набор готовых качественных решений (ключевое слово — готовых, о чем заказчик был предупрежден), останется лишь внедрить верстку. И спустя пару дней работа закипела.

«Ура! Он загрузился и установился!» – воскликнул я, допивая потерянную в счете чашку чая. «Черт возьми, что за куча файлов?!», – подумал git и задумался.

За основу я взял интернет-магазин одежды, который можно установить вместе с Битриксом.

Сидим мы с товарищем в офисе, натягиваем незначительные компоненты и вдруг получаем первый приз от Битрикса. Есть у этой системы возможность объединять и сжимать css и js файлы, подключенные правильным образом. «Где я напортачил» – первая мыль пришедшая в голову, когда jquery перестал подключаться. Судорожно жму Ctrl+Z, отменяя написанный код, но ничего не помогает. В бой идут немыслимые варианты, но и они не приносят успеха. В голове хаос. Ухожу попить чай. Пока меня не было, Битрикс клятвенно умолял вернуться, говорил, что всё простит и заработал. Когда я снова запустил сайт сборка статики была в полном порядке. Магия, подумал я и хотел было уже забыть про это, как на тот же баг напарывается мой товарищ, сидевший в нескольких метрах от меня. Гугление постановило, что люди сталкиваются с подобным, но решения нет.

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

Кому интересно, head часть выглядела так:
head
<head>
		<meta charset="utf-8"/>
        <?
        $APPLICATION->ShowMeta("robots", false, true);
        $APPLICATION->ShowMeta("keywords", false, true);
        $APPLICATION->ShowMeta("description", false, true);
        ?>
		<link rel="shortcut icon" type="image/x-icon" href="<?= SITE_DIR ?>/favicon.ico"/>
		<link rel="stylesheet"
			  type="text/css"
			  href="<?= CUtil::GetAdditionalFileURL('http://fonts.googleapis.com/css?family=PT+Sans:400,700,400italic,700italic&subset=latin,cyrillic'
			  ) ?>"/>
		<link rel="stylesheet"
			  type="text/css"
			  href="<?= CUtil::GetAdditionalFileURL('http://fonts.googleapis.com/css?family=Noto+Sans&subset=latin,cyrillic'
			  ) ?>"/>
		<link rel="stylesheet"
			  type="text/css"
			  href="<?= CUtil::GetAdditionalFileURL('http://fonts.googleapis.com/css?family=Roboto+Slab:400,300,700&subset=latin,cyrillic'
			  ) ?>"/>
		<?
		$APPLICATION->ShowCSS(true, true);
		?>
		<link rel="stylesheet"
			  type="text/css"
			  href="<?= CUtil::GetAdditionalFileURL(SITE_TEMPLATE_PATH . "/css/jquery.formstyler.css") ?>"/>
		<link rel="stylesheet"
			  type="text/css"
			  href="<?= CUtil::GetAdditionalFileURL(SITE_TEMPLATE_PATH . "/css/jquery.nouislider.css") ?>"/>
		<link rel="stylesheet"
			  type="text/css"
			  href="<?= CUtil::GetAdditionalFileURL(SITE_TEMPLATE_PATH . "/css/jquery.ad-gallery.css") ?>"/>
        <link rel="stylesheet"
              type="text/css"
              href="<?= CUtil::GetAdditionalFileURL(SITE_TEMPLATE_PATH . "/css/keyboard.css") ?>"/>

        <?$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH."/js/jquery-1.11.1.min.js");?>
        <?$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH."/functions.js");?>

		<?
		$APPLICATION->ShowHeadStrings();
		$APPLICATION->ShowHeadScripts();
		?>

        <!--[if lt IE 9]>
        <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
        <![endif]-->

		<title><? $APPLICATION->ShowTitle() ?></title>
	</head>


Следующий подарок был на самом деле последний, но по смыслу он был второй.

У нас были разделы каталога, ничего особенного. Переходя в раздел открывались товары из этого раздела. Адреса совершенно стандартные (#SITE_DIR#/catalog/#SECTION_CODE#/). Так вот, при переходе по адресу #SITE_DIR#/catalog/ я наблюдал грустную мордочку в хроме и сообщение о разрыве соединения. Как и положено в /catalog/index.php было подключение комплексного компонента каталога. «Это просто невероятно» – думал я, тогда уже на последнем издыхании 30 декабря. Но не отступал. Была в этом файле одна особенность. В случае ajax запроса нужно было подключить компонент без вывода шапки и подвала, а в обычном режиме с шапкой и подвалом. Сделано это было проверкой:

if($_REQUEST['ajax']=='Y')

Я не сразу догадался, но методом исключения выяснилось, что при отсутствии $_REQUEST[‘ajax’] мы получали NOTICE, который почему-то отключал дальнейшую работу Битрикса. При добавлении проверки isset каталог заработал.

if(isset($_REQUEST['ajax']) && $_REQUEST['ajax']=='Y')

ТЗ явно указывало на то, что у нас будут использоваться торговые предложения. С ними, честно говоря, раньше не имел дела, но почитав документацию и посмотрев видео уроки понял, что это крутой функционал, который на одном из сайтов мы когда-то делали вручную. Сердце этого функционала — детальная карточка товара и выбор торговых предложений. Естественно от свойств торгового предложения зависит цена и всё из этого вытекающее, а возможно какого-то торгового предложения и вовсе нет, тогда нужно показать вместо кнопки в корзине форму подписки на товар. Я посмотрел стандартный шаблон и обрадовался, когда увидел, что и выбор торгового предложения (с динамическим изменением цены и зависимых блоков) и подписка уже есть и работают, но радость моя была не долгой. За динамическое управление и выбор торговых предложений отвечает js файлик \bitrix\components\bitrix\catalog.element\templates\.default\script.js, 2839 чистого недокументированного яваскрипта, бонусом к нему шел result_modifier.php в компоненте детальной страницы товара, который инициализировал js объект на странице и подготавливал данные.

Два дня я пытался адаптировать это чудо к нашей верстке, еще два дня меня терзали мысли в духе «ну может быть это всё-таки возможно». На исходе четвертого дня я сдался и приступил к своей реализации. Сделал на jquery, конечно, в 1С всё сделано через BX.js, которая тоже мало где описана. Реализация с комментариями заняли порядка 200 строк.

Немного поясню, в чем всё-таки была сложность и почему я сразу не стал писать сам. Свойств торгового предложения может быть сколько угодно, комбинация этих свойств образует какое-то торговое предложение, которое завели через админку. Так вот когда пользователь выбирает, например, аккумулятор с емкостью 1000 mA синего цвета производства «Супер фирмы» нам нужно определить: а какому торговому предложению соответствует эта комбинация выбранных свойств? Найдя торговое предложение нужно либо отобразить цену, проверить скидку и отобразить если нужно, сделать свойства выбранными либо показать подписку на этот товар. Есть ряд других мелочей. Например, при отображении страницы нужно выбрать свойства соответствующие самому дешевому торговому предложению и сделать их выбранными. В корзину, если это торговое предложение, должны добавляться торговые предложения с указанными свойствами.

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

И следующий подвох ждал меня практически за углом. Добавление торгового предложение в корзину тоже отняло много времени из-за нелогичного поведения. Для добавления я использовал метод CSaleBasket::Add, который, как сказано в документации, может принимать массив свойств товара. Это же то, что нужно.

Итак, при добавлении торгового предложения в корзину оно добавлялось, но вот свойства этого торгового предложения никак не сохранялись. Это проблему так и не удалось «нагуглить». Решение оказалось странным. После добавления товара в корзину вызвать метод Update и передать свойства еще раз. На этот раз они запоминались.

$code = Add2BasketByProductID($productID, $QUANTITY, $arRewriteFields, $product_properties);

if (!$code) {
    $response['status'] = 400;
    $response['message'] = 'Не удалось добавить товар в корзину';
} else {
    $response['basket'] = getActualSmallBasket();

    /*fix запоминание какие именно свойства sku были выбраны*/
    if (is_array($productProperties)) {
        $arFields["PROPS"] = $productProperties;
        CSaleBasket::Update($code, $arFields);
     }
}

Следующий неприятный момент был связан с поиском. Результаты поиска, по задумке дизайнера, должны были делиться на три вкладки. Найдено в товарах, найдено в статьях, найдено в новостях. И опять же, казалось бы есть компонент (bitrix:search.page), который умеет искать везде, но массив arResult слегка удивил. Результаты поиска были все вперемешку без особых отличительных признаков статья ли это, товар или вообще раздел. В итоге удалось опереться на странную ячейку в arResult[‘PARAM2’], в которой оказались id инфоблоков для данных, а чтобы отсечь разделы из результатов поиска, мы проверяли ячейку ITEM_ID на наличие буквы S, которая явно была присуща разделам. Тут мне совсем надоели непонятные ячейки в arResult, и я кинулся искать, может где-то они все описаны. Но так ничего и не найдя, я спросил на Тостере. Как видно, проблему это не решило.

И снова каталог. Как вы помните, мы подключали каталог по-разному, в зависимости ajax это запрос или обычная загрузка страницы. Ajax запросы происходили при использовании сортировки или пагинации. Пагинация кстати была в стиле «Показать еще». Естественно, ее пришлось делать самим, потому что дефолтная работала по-другому. И тут мы сами того не подозревая загнали себя в угол. Битрикс передает параметры пагинации в гет параметрах PAGEN_1, PAGEN_2. Конфигурация и значения этих параметров зависят от количества компонентов, которые используют пагинацию на странице. То есть каждому компоненту по своему параметру для пагинации. И получилось так что при отображении страницы обычным хитом у нас подключался хедер, в котором тоже был компонент использующий пагинацию, а при ajax запросе он у нас не подключался. В результате получилась рассинхронизация параметров пагинации. Чтобы решить эту проблему увы пришлось писать костыль, и просто подставлять высчитанную компонентом пагинацию не получилось.

Какой же магазин без умного фильтра. И у нас он тоже был. Не скажу, что были проблемы с самим фильтром, но вот с фильтрацией по цене была загвоздка. Из-за того, что у нас были торговые предложения, то цена могла быть как в торговых предложениях, так и в товаре. Увы нам не удалось найти информации как заставить компонент умного фильтра видеть цены и различать торговые предложения от просто товаров. На помощь пришли наши «любимые» костыли. Решение виделось следующим: Использовать события при создании и редактировании товаров и заполнять программно два свойства – минимальная и максимальная цена. Для обычных товаров значения этих свойств будут равны. И тут меня тоже ждала подстава. Найти на какие же именно события нужно реагировать с первой попытки не удалось. Не буду томить, попался я на такую особенность: Методы, добавляющие товар и цены для товара являются разными. Сначала добавляется товар, затем цены для него. Событие OnAfterIBlockElementAdd как раз между эти двумя действиями. Итоговые обработчики выглядели так:

/*при измении цен в товарах без торговых предложений*/
AddEventHandler("catalog", "OnPriceUpdate", Array("DiEvent", "OnPriceUpdateHandler"));
AddEventHandler("catalog", "OnPriceAdd", Array("DiEvent", "OnPriceAddHandler"));

/*при измении цен в товарах с торговыми предложениями*/
AddEventHandler("catalog", "OnProductAdd", Array("DiEvent", "OnProductAddHandler"));
AddEventHandler("iblock", "OnAfterIBlockElementUpdate", Array("DiEvent", "OnProductUpdateHandler"));

/**
     * Обновление цены в ОБЫЧНЫХ товарах без торговых предложений
     *
     * @param $id
     * @param $arFields
     */
    function OnPriceUpdateHandler($id, $arFields) {
        self::updateFilterPrice($arFields['PRODUCT_ID']);
    }

    /**
     * Добавление цены в ОБЫЧНЫХ товарах без торговых предложений
     *
     * @param $id
     * @param $arFields
     */
    function OnPriceAddHandler($id, $arFields) {
        self::updateFilterPrice($arFields['PRODUCT_ID']);
    }

    /**
     * Добавление цены при создании товара с торговыми предложениями
     *
     * @param $id
     * @param $arFields
     */
    function OnProductAddHandler($id, $arFields) {
        self::updateFilterPrice($id);
    }

    /**
     * Добавление цены при обновлении товара с торговыми предложениями
     * OnProductUpdate какого хрена не работает((
     * @param $arFields
     */
    function OnProductUpdateHandler(&$arFields) {
        if ($arFields['IBLOCK_ID'] == 2) {
            self::updateFilterPrice($arFields['ID']);
        }
    }

/**
     * Высчитываем минимальную и максимальную цену товара и заполняет спец свойства
     * MIN_OFFER_PRICE, MAX_OFFER_PRICE для фильтрации в умном фильтре.
     * ЦЕНЫ БЕРУТСЯ ИЗ ЦЕНЫ ТИПА BASE! Другие типы цен никак не учитываются.
     *
     * @param $PRODUCT_ID id Товара
     */
    public static function updateFilterPrice($PRODUCT_ID) {
        $EL = new CIBlockElement();

        //получаем массив торговых предложений товара
        $arr = CIBlockPriceTools::GetOffersArray(
            array('IBLOCK_ID' => 2),
            array($PRODUCT_ID),
            array(),
            array(),
            array(),
            0,
            CIBlockPriceTools::GetCatalogPrices(2, array('BASE'))
        );

        if (is_array($arr) && count($arr) > 0) {
            $minPrice = null;
            $maxPrice = 0;

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

            foreach ($arr as $offer) {
                $offerMinPrice = $offer['MIN_PRICE']['VALUE'];

                if (is_null($minPrice)) {
                    $minPrice = $offerMinPrice;
                } else {
                    if ($offerMinPrice < $minPrice) {
                        $minPrice = $offerMinPrice;
                    }
                }

                if ($offerMinPrice > $maxPrice) {
                    $maxPrice = $offerMinPrice;
                }
            }

            //обновляем два свойства MIN_OFFER_PRICE, MAX_OFFER_PRICE
            $EL->SetPropertyValuesEx($PRODUCT_ID, 2,
                                     array('MIN_OFFER_PRICE'=>$minPrice,
                                           'MAX_OFFER_PRICE'=>$maxPrice,)
            );
        } else {
            //товар без торговых предложений
            $priceType = CIBlockPriceTools::GetCatalogPrices(2, array('BASE'));
            $cgroup = $priceType['BASE']['SELECT'];

            //получаем данные о товаре с информацией по ценам!
            $result = $EL->GetList(array(), array('IBLOCK_ID'=>2, 'ID'=>$PRODUCT_ID), false, false, array('*', $cgroup));
            $arrElm = $result->GetNextElement();

            if (is_object($arrElm)) {
                $fields = $arrElm->GetFields();

                //информация о цене товара
                $price = CIBlockPriceTools::GetItemPrices(2, $priceType, $fields);

                //обновляем два свойства MIN_OFFER_PRICE, MAX_OFFER_PRICE
                $EL->SetPropertyValuesEx($PRODUCT_ID, 2,
                                         array('MIN_OFFER_PRICE'=>$price['BASE']['VALUE'],
                                               'MAX_OFFER_PRICE'=>$price['BASE']['VALUE'],)
                );
            }
        }
    }

Ну и самой большой подставой я считаю компонент пошагового оформления заказа (sale.order.full). После двух дней интеграции, дизайна, системы EDOST и Робокассы, оказалось, что этот компонент не умеет учитывать никакие скидки. То есть он не мог отображать итоговую сумму с учетом скидки. Вот кстати ссылка на форум от куда я это и узнал. Ответ Юрия Волошина просто шокировал.

Ну и хочется подвести итог. Битрикс очень сильно разрекламированный продукт, не оправдавший ожиданий. При его использовании я неоднократно натыкался на суровые ограничения, с которыми заказчик не хотел мириться, хотя и был предупрежден, что Битрикс – это набор готовых решений и изменяя поведение этих решений мы пишем свой второй велосипед, привнося N багов. Чудесный функционал, который компания 1C показывает на презентациях, совместим только с их дефолтным шаблоном. Свой дизайн внедряется со скрипом. Очень большое количество плохо документированных методов, а к некоторым документации и вовсе нет. Гит порой задумывался очень надолго, индексируя множество файлов. Отсутствие версионирования и миграций БД серьезно докучает, когда разработчиков больше одного. Со всем этим можно было бы смириться, если не знать, сколько стоит этот продукт. Я думаю, профи Битрикса скажут, что я просто не умею его готовить. Мой аргумент таков: компания не позаботилась, чтобы информация о том, как его правильно готовить, была доступной и бесплатной как минимум. Скудные форумы и немногословная техподдержка, вот всё, что было у нас.

Возвращаясь к нашему заказу и, собственно, поясняя, почему пост так называется, хочется сказать, что сроки сдачи были сорваны, проект должен был быть сдан до Нового Года. Я работал над этим интернет-магазином до вечера 30 декабря и молился, чтобы не пришлось сидеть 31, а потом еще и в первых числах января. Интеграция дизайна со всеми «хотелками» заказчика в Битрикс весьма не быстрое занятие и весьма неприятное.
Поделиться публикацией
Похожие публикации
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 175
  • +27
    Когда-то давно мы внедрили у себя такое правило «1.49N»* — если предстоят выходные длиной N дней, никакие новшества ни под каким предлогом не внедрять в течении 1.49N дней. Мы ничего не внедряем в рабочие процессы уже с 15 декабря на протяжении 4 лет. И мы не трогаем продакшн в любые дни, кроме вторника и половины среды.
    ___________________________________
    *1 рубль 49 копеек — цена чекушки водки во времена СССР.
    • +4
      Много кто так делает.
      • +1
        вторника и половины среды — это понятно (хотя у нас можно до середины четверга), но понедельник чем не угодил?
        • +1
          Потому как после выходных действует правило N дней (ничего не трогать N дней). Мы заметили, что куча народу откладывает свою работу в нашей системе на «В понедельник» и «После праздников». Поэтому на понедельник у нас приходится повышенная пользовательская активность. Аналогично с окончанием праздников.
          • +1
            Мерси.
            • 0
              Но ведь если совмещать правила «1.49N до» и «N после», то при стандартных выходных (N=2) между ними остаётся только 5-N-1.49N = 5-2-2.98 = 0.02 дня, когда можно что-то трогать?
        • +44
          Я когда-то был профи битрикса и скажу, что бОльшая часть компонентов сделана из говна и палок.
          • +7
            Ох, как много передано в одной строчке. Я насчитал 4 антипаттерна.
            href="<?= CUtil::GetAdditionalFileURL(SITE_TEMPLATE_PATH . "/css/jquery.ad-gallery.css") ?>"/>
            

            • +1
              Не могли бы Вы перечислить их?
              • 0
                short tags, глобальные переменные, singleton, да и вообще использование php в html не очень хорошая практика, давно придумали шаблонизаторы, например twig
                • +1
                  Это кстати можно всё применить и шаблонизатор подключить. Но у разработчиков на битрикс так типа «не принято». Сколько понадобится времени/ресурсов строк кода, на то чтобы всё это заюзать и потом использовать? +к порогу вхождения, если это реализуют в ядре и нельзя будет иначе, а это значит меньше специалистов, выше цены, да некоторые конторы просто разорятся.

                  Наверно этим битрикс и отличается от многих других фреймворков, cms, — он удовлетворяет потребности рынка, а не эго программистов. Он не для «красивых» систем, в нём практически нет места новым подходам и технологиям. С точки зрения разработки как «культуры» он ужасен, но с точки зрения бизнеса, соотношения деньги/время/качество это идеальный вариант. Качество в данном случае — не качество кода или архитектуры, а качество обслуживания клиента, удовлетворения его потребностей.

                  + habrahabr.ru/post/153225/

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

                    Не получится ли так, что посмотрев на стоимость лицензии, разработки, заказчик вообще выберет WordPress + практически готовое решение на шаблоне за 60$? На перекрашивание которого потратит несколько часов фрилансера? А не Битрикс?

                    • 0
                      Да рынок находится на таком уровне, он совсем недавно вышел из зачаточного состояния.
                      90% заказчиков подумают что это бесплатное говно, и вообще блог, а им нужен магазин, а битрикс это дорогое — значит хорошее и сайт красивый на русском и что-то про 1с, а 1с — это вам не хухры-мухры. У битрикса очень сильный маркетинг, если бы они направили все силы своего рекламного отдела или кто-там у них на аудиторию разработчиков, а не бизнес, вы бы были без ума, а они без денег :)

                      Тут плавно подходим к фундаментальным вопросам что такое хорошо, а что плохо и что лучше, много денег у твоей семьи или суперкод которого никто не видит и не поймёт кроме пары коллег, в ущерб своему материальному благополучию и где этот баланс? Тут я думаю пусть каждый решает сам.
                      • 0
                        И да «прыщавого компьютерщика с засаленными волосами» каким-бы специалистом он не был, никто слушать не будет, а вот серьёзный дядька Рыжиков на презентациях дело говорит. Я бы кстати с подозрением отнёсся к специалисту который мне советует сэкономить на его услугах, а предложение взять бесплатную cms выглядит именно так. «Скупой платит дважды», тупой трижды но такой поговорки почему-то нет.
                        • +1
                          Беспроигрышный вариант. Послушать серьезного дядьку — купить решение — все проблемы свалить на разработчика.
                          Есть правда серьезные дядьки, которые уже купили и напоролись, но так то ж у них свои бестолковые разработчики были. Даже если это официальные интеграторы.
                        • 0
                          Хороший вопрос. Супер код, в конечном итоге, будет следствием отсутствия ряда проблем: отсутствия изжоги разработчиков, позитивного опыта клиентов ну и т.д.

                          Вот возьмем Magento. По статистике (сейчас не найду, извините) самый популярный фреймворк для e-shop. Архитектура в достаточной мере «супер». Изначально так спроектирована. Следствие — и распространненость, и достаточное количество коммерческих решений. Тоже индустрия, причем с деньгами там разработчики шаблонов по 80$ за штуку. Хотя бы за счет количества продаж. И никакой шаблон магазина на Magento за 80$, извините, не сравнится с тем, что я вижу в маркетплейсе Битрикса тыс. за 15 рублей. И ведь поднялась рука у Magento'вцев взять и переписать все на версию 2, делая еще лучше.
                      • 0
                        Зачем в шаблонах нужны программисты? Заюзал twig, который прекрасно знают верстальщики, и стоят они дешевле.
                        • 0
                          Затем что часто сайт делает один человек он и верстальщик и программист и архитектор и сам себе проджект менеджер и иногда ещё и дизайнер и стоимость его труда равна средняя стоимость сайта по рынку/затраченное время.
                          • 0
                            Это в студиях, внедряющих Битрикс? Ужас какой.
                            • +1
                              В студиях часто просто программисту дают проект. Вася делает полностью этот сайт, а Петя этот. У программиста паралельно 2-3 проекта у менеджера 2-3 программиста и 10 клиентов. Разделение труда конечно имеет место быть, студии тоже разные бывают.
                      • +3
                        А где здесь синглтон и как вы можете называть short echo tag антипаттерном, если (цитирую)
                        Starting with PHP 5.4, short echo tag <?= is always recognized and valid, regardless of the short_open_tag setting.
                        • –1
                          Recognized не значит правильно. Вон goto, который запилили в одной из предыдущих версий (вроде 5.3) тоже recognized.
                          • +3
                            В yii2 в View слое во всю используют short_open_tag. И сторонних шаблонизаторов там нет, хотя подключить можно. И назвать это антипаттерном у меня язык бы не повернулся.
                            • –4
                              Это антипаттерн в чистейшем виде.
                              short_open_tag в большинстве своем отключен.
                              И лично мне непонятно, зачем команда Yii так издевнулась над своим комьюнити.
                              • +2
                                Я расскажу вам секрет: начиная с версии 5.4 запись <?= — не short_open_tag. Она доступна всегда.
                                • –2
                                  А теперь посмотрите статистику по версиям PHP и удивитесь.
                                  Да, не спорю, конкретно Yii требует 5.4.
                                  Но не Yii единым.
                                  • +3
                                    Интересная логика называть антипаттерном новые возможности языка. Может у вас и трейты антипаттерн? И неймспейсы вы не юзаете, их же в 5.2 не было
                        • 0
                          Можно вопрос? Какие плюсы дает использование шаблонизатора в html вместо php?
                          • 0
                            Это вопрос, о котором спорят годами ) Лично я всегда придерживался мнения, что PHP — сам отличный шаблонизатор.

                            При решении специфических задач, конечно, можно прикрутить дополнительный. К примеру, если есть команда верстальщиков, которые уже знают Twig, но вообще никак не знают PHP. Или если хочется использовать БЭМ на сервере, можно использовать BH для PHP.
                            • +2
                              Как по мне, так не о чем тут спорить. Для чего может понадобиться костыль, который в разы хуже по функциональности исходного инструмента, да к тому же сильно усложняющий разработку фронтэнда? Разве что для раздутия бюджета.
                              • 0
                                Знаете, я тоже так думал, а потом увидел огромные по популярности проекты типа phpbb 3.1.2. Там просто адовое количество шаблонов с логикой иф иф иф иф и с кучей адового html.

                                Для разработки и правки шаблонов просто достаточно посмотреть в документации, что делает данный шаблон, если не понятно по названию. Читаемость в разы выше, чем нативный разноцветный код и соответствененно верстка.
                                Это дает изоляцию разработки тем для форума независимо от кода ядра и имен всяких переменных, которые могут менять по настроению. То есть темы живут отдельно, ядро тоже.
                                Я считаю в проектах размаха шаблонов как у phpbb это вполне оправдано. Там глаза сломаешь на простом php читать столько шаблонов. В остальных… где шаблонов не так много… шаблонизатор нафиг не нужен, как мне на сегодня кажется.
                                • 0
                                  Мне кажется, отсутствие возможности размахнуться художествами в коде — не особенно плюс, хотя и вынуждает держать логику отдельно от шаблонов.
                                  • 0
                                    Так я про что. Вот элементарный пример
                                    Заголовок спойлера
                                    <!-- IF S_DISPLAY_JUMPBOX -->
                                    
                                    	<div class="dropdown-container dropdown-container-{S_CONTENT_FLOW_END}<!-- IF not S_IN_MCP --> dropdown-up<!-- ENDIF --> dropdown-{S_CONTENT_FLOW_BEGIN} dropdown-button-control" id="jumpbox">
                                    		<span title="<!-- IF S_IN_MCP and S_MERGE_SELECT -->{L_SELECT_TOPICS_FROM}<!-- ELSEIF S_IN_MCP -->{L_MODERATE_FORUM}<!-- ELSE -->{L_JUMP_TO}<!-- ENDIF -->" class="dropdown-trigger button dropdown-select">
                                    			<!-- IF S_IN_MCP and S_MERGE_SELECT -->{L_SELECT_TOPICS_FROM}<!-- ELSEIF S_IN_MCP -->{L_MODERATE_FORUM}<!-- ELSE -->{L_JUMP_TO}<!-- ENDIF -->
                                    		</span>
                                    		<div class="dropdown hidden">
                                    			<div class="pointer"><div class="pointer-inner"></div></div>
                                    			<ul class="dropdown-contents">
                                    			<!-- BEGIN jumpbox_forums -->
                                    				<!-- IF jumpbox_forums.FORUM_ID neq -1 -->
                                    					<li><!-- BEGIN level -->   <!-- END level --><a href="{jumpbox_forums.LINK}">{jumpbox_forums.FORUM_NAME}</a></li>
                                    				<!-- ENDIF -->
                                    			<!-- END jumpbox_forums -->
                                    			</ul>
                                    		</div>
                                    	</div>
                                    
                                    <!-- ELSE -->
                                    	<br /><br />
                                    <!-- ENDIF -->
                                    



                                    Тут как ни крути а логика считай всегда лежит только в одной строчке. Для копипаста это очень удобно, чем нативно. Тем более там половина условий которых я не понимаю, не интересовался, и со временем запомнить и вспомнить их куда легче. Особенно, если они годами! не меняются. Помоему, со смарти переезд в обозначениях не изменился.
                                    • 0
                                      Ну, конкретно этот шаблон (кстати, что это за шаблонизатор?) — совершенно не читаемая каша. Уж лучше было бы применить немного PHP для улучшения читаемости — скажем, составлять длинные списки классов с помощью массивов.

                                      Есть же отличные примеры правильной шаблонизации на чистом PHP — посмотреть на Yii, Kohana или любой другой MVC-фреймворк.
                                      • 0
                                        phpbb 3.1 переписали на симфони. Говорят, это теперь твиг) примеры на чистом php есть, а форумов нет)
                                        А как переписать это шаблон на php, если ядро меняется. Логика у форумов примерно ясна, чо то скрыть, че то показать.
                                  • +1
                                    Понимаете, если кто-то не умеет писать читаемые шалблоны, то это не проблема языка — это проблема разработчика. Phpbb написали почти 15 лет назад, и говорить на его примере о плюсах шаблонизаторов просто некорректно.
                                    • 0
                                      15 лет назад написали и с тех пор его никто не трогал. Да?)))
                                      Переписали его на симфони в прошлом году. Тут понимаете, если никто ничего не пишет, то и проблем нет. Читаемость шаблона, вопрос сложный. Причем на столько, что я его все таки оставляю на совесть компетентности разработчиков, которые как вы сказали 15 лет назад заварили кашу. Они этим занимаются, они получают фидбек, они двигают развитие.
                            • +1
                              1. short tags в php-шаблонах — не антипаттерн
                              2. глобальных переменных в этой строчке нет, только объявленная константа
                              3. синглотона тут тоже нет, есть вызов статического метода из класса-хелпера CUtil
                              4. про шаблонизаторы спорно, но использование php-шаблонов уж точно не антипаттерн
                              • 0
                                Short tag в php это <? ?>, а конструкция <?=?> не является шоттэгом, это аналог <?php echo $somevar; ?> и она вполне валидна.

                                SITE_TEMPLATE_PATH — это константа, а не глобальная переменная.

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

                                Соглашусь про шаблонизатор, его можно было бы подключить. 15 лет назад это мог быть смарти, но за это время было написано столько кода в битриксе, что подключить туда шаблонизатор — это такая головная боль.
                                • 0
                                  не знаю ни одной причины использовать шаблонизатор в php. Это как специально поставить при входе в квартиру палку, о которую постоянно будешь биться головой если не пригнешься.
                            • 0
                              Наверное, ваш комментарий это то, что было сложно сказать и признать самому себе. Что сам профи битрикса и что битрикс все же ужас, а не ты ущерб — не умеешь его готовить.

                              Единственное, что может подкрепить этот вывод — использование в текущем высоконагруженном битрикс проекте из него только API. Все остальное — самостоятельные компоненты, тщательно поддерживаемые кешами (можно насчитать их как минимум трех уровней — статики на поддомене, хтмл-кеш, мемкеш из общего). И все это надо всегда контролировать и держать на пульсе, ибо вылет одной системы в нагрузку убивает все остальное. И да, я умею готовить битрикс, раз все это все еще работает.
                              • 0
                                О, а вот это уже очень интересно. Можете рассказать подробнее?
                                • 0
                                  Мог бы, но что именно интересно и о чем рассказать?
                                  • 0
                                    А вот чтобы не было обвинений в голосновности, просто перечислить наиболее серьезные проблемы и каким образом пришлось обходить.
                                    Очевидно, что автора статьи пытаются потроллить ссылками на доки. В случае реального опыта это уже сложнее.

                                    • +3
                                      Я никогда не стремился что-то осуждать. Поэтому в голове не откладываются неприятные моменты, оставляя место лишь best practice. Которое потом применяя находишь вновь и вновь причины делать именно так.

                                      Задача: вывести example.com/best-feature/ в best-feature.example.com
                                      Правильное решение задачи: использование мультисайтовости (множества доменов на одной копии ядра). Будет на доп. домене промо-страница с фоточками, но все равно так как основная редакция «Бизнес» то и доп. лицензию надо докупать «Бизнес» — 17000 рублей. Дальше создаем новый сайт, привязываем к папке /best-feature/ и все готово.
                                      Как решено на практике:
                                      <?php $_SERVER["DOCUMENT_ROOT"] = '/valid/path/of/example.com/';
                                      require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php");
                                      // it worked!
                                      

                                      + конфиг nginx, у которого root стоит /valid/path/of/example.com/best-feature

                                      Проблема не серьезная, просто неприятная с организационной и правовой точки зрения.

                                      Другая задача: организовать показ баннеров со счетчиком
                                      Проблема: битрикс открывает сессию для каждого гостя со всеми вытекающими последствиями
                                      Решение: считать не битриксом

                                      Задача: корректное обновление html-/композитного кеша
                                      Проблема: кеш-тайм, установленный, пусть даже для стандартного компонента — работает так, как задан кеш-тайм. То есть, полугодовая новость, у которой тоже время жизни кеша 3600 секунд (например) — будет обновляться при входе в нее. Работает эта фишка посредством отдачи html-кеша + javascript-запрос с ?bxrand={timestamp}. Далее какими-то дебрями включается работа Cache Dependies, при котором происходит детектирование наличия измененных данных, чтобы кеш обновился по факту изменения данных ранее тайм-аута в 3600 секунд. И здесь начинается самое интересное — на 2-3 миллиона новостей, с разным cache time от 100 до 3600 секунд сколько уйдет ресурсов на проверку наличия изменений (я не говорю об истечении ttl даже). Отвечу сам — с онлайном в 10к юзеров будет идти порядка 20-30 запросов на наличие изменений.
                                      Решение: заблокировать к черту запросы с ?bxrand= и научить «срочные» компоненты, изменения в которых критично отобразить сразу — чистить за собой по изменению. cron_events раз в 1/5/30/60 минут могут предложить одни из более глубоко копавшихся в битриксе. Разумеется добавив свой скрипт апдейт_чекера. Увы, работает эта тема нестабильно. С одной стороны разобравшись с вылетом CEvent:Util() not found по запуску в cli режиме получаем потенциальную возможность работы более 1/5… а дальше не важно скольких минут. Запуститься дубликатом, сожрать все процессы php5-fpm (достаточно одного в каждом форке, чтобы они не завершались и висели в ожидании пришествия). Или обратная ситуация — когда его излишняя работа вызовет массовое перегенерирование того, что истекло по обычному ttl.

                                      Задача: быстро принять и обработать более 100 запросов в секунду с гарантированным 1-3 запросом в базу (чтение, чтение, запись).
                                      Проблема: банальнейшая — при общей нагрузке черта с два любой типовой компонент битрикса справится с этим.
                                      Решение: а нужен ли битрикс? Пусть наш скрипт работает без него. Читать данные мы будем один раз, сохранив далее их в memcache, проверим (потратим процессорное время) и при успешной проверке запишем все в… монгу. И когда момент приема запросов пройдет (длится фиксированный период времени) — спокойно вторым скриптом все разберем и разложим по полочкам в битриксе. Да, можно и скрптом на основе битрикса юзать мемкеш, но эта архитектура мне кажется чем-то убийственным. Highload-инфоблоки не предлагать. Как иначе сделать это на битриксе я не знаю.

                                      Все постепенно приходит к тому, чтобы использовать битрикс в режиме асинхронного хранилища контента, занимаясь кешированием и выборкой самостоятельно (своими средствами). Когда настанет момент, что есть лучшее хранилище самого разного контента и его выборки лучше чем битрикс (с точки зрения контент-менеджера прежде всего). Тогда мы сможем от него отказаться. А пока платим за две бизнес-лицензии, используя лишь админку и api.
                                      • 0
                                        Спасибо — очень интересно. Особенно последняя задача. Получается, что купив самую дорогую редакцию и надеясь на полноценное решение, по хорошему останется только админка и API?

                                        А можете написать что-то отдельным постом, а то хочется в карму отблагодарить, а без публикации не дает.
                                        • +4
                                          На самом деле не жалко этих денег. Просто потому что я бы сам делал тот же самый функционал API и админки дольше. Если бы вообще смог повторить -). А требовать что-то еще — бессмысленно. Битрикс справится с любой задачей, которую он призван решить. Будто то интернет-магазин, блог, новостной портал. Причем не только функциональную задачу, но и задачу бизнеса. Проблемы начинаются тогда, когда: 1) не хватает штатного функционала — пишем свои решения; 2) нетипичная нагрузка — нельзя полагаться на массовое решение, когда твоя задача и решение специфично и единственна в своей реализации; 3) программирует битрикс начинающий разработчик — не по документации/правилам/паттернам/здравому смыслу. Во всех остальных типичных случаях он по моему мнению лучше других аналогов.
                                          • +1
                                            Касательно отдельного поста — думаю я часть большого количества людей, желающих идеалистично написать на хабр какой-то пост, но всегда терзают сомнения в полном разборе/понимании затрагиваемой темы. Поделиться есть много чем. Как идеями, так и чем-то законченным. Но всегда останавливают как причина выше, так и комплекс несостоятельности своей манеры передачи информации. Уж извините)
                                          • 0
                                            > Решение: считать не битриксом
                                            > Решение: а нужен ли битрикс?
                                            > Решение: конфиг nginx + лицензию надо докупать «Бизнес» — 17000 рублей
                                        • 0
                                          для начала — Что за проект? Под какие задачи создавался? Под какого заказчика? (если что-то из этого можно рассказать)
                                          Далее: на какие модули архитектурно разбили проект, какие технологии кроме Битрикса прикручивали? Сколько серверов, в конце-концов? как организовали мониторинг?
                                          может быть какие-то модули с маркетплейса Битрикса использовали? — тоже было бы интересно.
                                          • 0
                                            Проект действующий, многосторонний, рассчитанный на аудиторию в более 10 млн уников в месяц. Заказчик — мой работодатель) Это все, что я… хотел бы рассказать. Простите)

                                            Архитектурно: CloudFlare (бизнес), nginx, php5-fpm, Percona, Ubuntu, munin на одном сервере 14 ядер по 2 ГГц, 32 Гб оперативки, 1 ТиБ место — хватает. Это веб-сервер. Другие серверы есть и похуже, что-то очень сильно получше — не имеют значения в обсуждении. Они больше заняты обработкой в live-режиме большого контента и раздачу большого контента. Веб-сервер с ними не взаимодействует, кроме статистики munin забрать, да пары мегабайт данных в 5 минут.
                                            Модули с маркетплейса да — минимизация админки. К сожалению, у нас задачи вне рынка маркетплейса. Примеры таких задач: получать картинки с iTunes и Last.fm, взаимодействовать с сотовым оператором по поступающим смс (с программной логикой ответа — опционально), связь с каким-то оборуованием, отправляющим что-то на адрес в режиме raw, post, json — по-разному, банковский билинг (альфа, киви только сейчас), рассылки новостей (попробуйте сделать ее битриксом хотя бы на 10000 получателей), аплоад файлов весом по 200-400 Мб, массовый ресайз картинок в 4 формата, выдача json-ов для разных устройств от мобильных приложений, до медиацентров DuneHD, генерация rss. Все это нетиповые задачи, которых точно нет в маркетплейс, а что есть, с тем особо и не хочется разбираться и лучше сделать самому. Не сказал бы что это все какой-то космолет. Просто ставятся задачи и решаются. Битрикс хорош тем, что у него низкий уровень вхождения по изучению начинающим программистом. Решения в маркетплейсе расширяют штатный функционал или делают какую-то все таки типовую работу (чаще всего связанную с магазинами), которую проще купить, чем написать. У нас проще написать, ибо потом разбираться с чем-то не хочется. Плюс, покупая решение я боюсь в нем увидеть выкидыш зла, которое потом нельзя использовать. Кстати, забыл, есть одно установленное решение — интеграция со службой доставки СДЕК. Но его купили только потому что его стоимость была дешевле, чем чистое время писать интеграцию самим. Да и какой-то дальнейшей доработки функционала доставки не предусматривалось.
                                            • 0
                                              Очень интересно.
                                              Да, задачка, конечно, не «под Битрикс» и понятна описанная вами выше ситуация с нагрузками. Низкий поклон за труд :)

                                              А очереди на обработку-конвертацию на чём реализуете?
                                              • 0
                                                Очереди нет. Есть параллелизация. Три демона ждут обновление специальных ключей в мемкеше и по этому событию выполняют задачи, сохраняя/отправляя/передавая результат необходимым сервисам. В итоге все получатели получают информацию максимально быстро, в зависимости от сложности необходимых обработок. Реализовывать очередь — необходимо что-то вроде ноды, наверное. И вообще, всегда боюсь любых очередей, поэтому даже не старался исследовать этот вариант.
                                              • +1
                                                Похоже ваш твиттер вас выдал www.radiorecord.ru/bitrix
                                                Угадал?)
                                                • 0
                                                  Я знал, что найти через меня ссылку на проект чрезвычайно просто. Таким образом заинтересованный человек получил бы нужное с минимумом движений, а вот все остальные мимо проходящие — поленились бы. Этим и объясняется мое желание умолчать о проекте. Спасибо, что отнеслись с уважением к моему желанию.
                                          • +1
                                            С вашего позволения поделюсь своим опытом.

                                            У нас например были проблемы с производительностью, вроде уже всё что можно переоптимизировали, посещаемость высокая, битрикс тяжёлый, тогда ещё mysql сервер(сейчас mariadb) не выдерживает.
                                            Есть у битрикса вот такая проблема в архитектуре idea.1c-bitrix.ru/takeout-countersshowcounter-in-a-separate-table/ счётчик просмотров хранится в той же таблице/строке что и элемент, из-за этого mysql-кэш запросов фактически не работает. Написали свой модуль отложенного обновления счётчиков просмотра, битриксовый counter из нагруженных страниц выпилили.

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

                                            Нельзя так просто взять и написать в getlist(api) то что тебе нужно. Простой на первый взгляд запрос к бд через api может легко сгененрировать 100 mysql запросов с join'ами, из-за одного казалось бы невинного параметра в фильтре, иногда лучше выполнять доп.обращения к бд через api в цикле, нагрузка получается ниже.

                                            Использование стандартных компонентов стандартным образом на высокой посещаемости просто уложит сервер, т.к. они проверят права на чтение текущего посетителя, учтут все бизнес процессы и документооборот, создадут отдельный кэш для именно этой маски доступа и выведут ссылку «все» в постраничной навигации, потом даже честно попытаются показать все 65000 новостей поисковикам которые её проиндексировали. 90% того что там написано ненужно так что всегда стоит сделать копию и выпилить 100 лишних строк или написать полностью свой компонент.

                                            Обновления на продакшене — это просто ад. Битрикс не даёт списка изменений, нельзя нормально сделать diff, всё что мы зачастую видим «Незначительные исправления», которые порой выливаются в значительные ошибки в своих нестандартных компонентах(без которых как вы поняли выше никак).
                                          • 0
                                            Всё вышеописанное, конечно имеет смысл, но в том случае, когда на битриксе уже есть продолжительное время работающий проект.
                                            Так, например, с banki.ru было. Недавно у них «стукнуло» 2 миллиона уников в сутки, насколько мне известно :)

                                            Но это всё не отменяет того, что «знал бы прикуп...»
                                            • 0
                                              Вы правы. Использование Битрикса — сложилось исторически. Сначала студия, потом был программист, потом его сменил я. Но, к сожалению, я не могу сейчас ответить что бы я выбрал много лет назад, идеально зная то, что есть сейчас. Даже с нятяжкой не придумать того, что могло бы его заменить. Да и, может быть я бы вообще решил бы бросить веб-разработку, зная в ней предел стоимости работы и осознавая в чем порой приходится ковыряться. Вероятно, пошел бы учить что-то более низкоуровневое и более типизированное, объектное)
                                            • 0
                                              Это очень круто. Но зачем? Это равносильно созданию проблем самому себе и героическому их преодолению.
                                              • 0
                                                Зачем что? Свои компоненты? Они нужны тогда, когда требуется функционал совершенно специфический. Например, панель работы дежурного/диджея для отображения текущего трека (кратко: играет лайв микс из Traktor, метаданные треков в силу миксования между панелями могут высылаться любые из активных — поэтому эта панель должна отображать все из активного). Или другой пример, раздел полуновостей музыки. Они могут интегрироваться с новостями, всплывающими виджетами, содержаться во множестве (артисты, альбомы, треки — как угодно могут связываться друг с другом) — стандартным компонентом это можно реализовать, но с большими доработками. А свой компонент суть — контроллер, который подготавливает данные из базы (модели), шаблон компонента — уже представление для страницы раздела, попапа или какого-то виджета. Да даже для банальной задачи страницы со списком новостей и детальная страница новости — свой компонент. Почему? Потому что в этой новости кроме самой новости могут быть различные виджеты, попап-галереи, аудиотреки и тетрис. И при этом совершенно не нужен функционал хлебной дорожки, постраничной навигации, эрмитаж тем более, фильтров и остального прочего. Эта как раз та ситуация, при которой типовая задача требует в себе бОльшей гибкости (ага, шаблон представления этого компонента работает в режиме десктопной версии, версии для WebView, версии json) при этом, даже само наличие доп. возможностей может сделать выстрел в ногу.

                                                Так что свои компоненты — единственный правильный выбор при разработке любых нетиповых хотелок заказчика/руководства именно потому, что код максимально минифицирован и в нем нет того, что не работает. Так или иначе — доработка стандартных компонентов под хотелку — максимальная скорость (не всегда) для выполнения задачи. И превращается после адекватного периода использования и доработок это все в ад, который надо полностью стирать и переписывать с нуля. И хорошо, если этот ад независим от остального — так нет же! Сколько фриланс задач я не смотрел — всегда в каком-то шаблоне представления компонента идет прямой вызов апи и по результату выдачи апи в foreach'е вызывается еще какой-то из любимых стандартных (+ доработанных) компонентов, далее это все загружается по ajax (да, jQuery Ajax, а не чем-то с HistoryAPI) и надо чтобы корректно работала кнопка «назад» в браузере. И ссылка была постоянной на результат этого бреда. Ну и композитный кеш там внедрите, а то тормозит как-то…
                                                • 0
                                                  Я полностью поддерживаю идею с отказом от реализации нестандартной функциональности через стандартные компоненты, абсолютно очевидно, что попытка такой реализации приводит к разведению болота в коде.

                                                  Вопрос в том, зачем вообще использовать в таком проекте Битрикс?
                                                  • 0
                                                    Ответил в ветке выше, процитирую себя же:
                                                    Все постепенно приходит к тому, чтобы использовать битрикс в режиме асинхронного хранилища контента, занимаясь кешированием и выборкой самостоятельно (своими средствами). Когда настанет момент, что есть лучшее хранилище самого разного контента и его выборки лучше чем битрикс (с точки зрения контент-менеджера прежде всего). Тогда мы сможем от него отказаться. А пока платим за две бизнес-лицензии, используя лишь админку и api.

                                                    Если подскажете выход или направление в какую сторону посмотреть — буду благодарен. Я — пока не нашел чего-то лучше.
                                                    • 0
                                                      Я не в курсе, честно говоря, как в текущих версиях, но во времена, когда я работал с этой CMS идеология хранения контента в ней была не лучшей: редактирование статических страниц подразумевало непосредственное изменение php-файлов на жестком диске, админка инфоблоков была приспособлена только для новостей и каталогов.

                                                      Опять же, не очень понятно, как на Битриксе строить процесс деплоя: контент хранится прямо в файлах — о контроле версий можно не мечтать; структура данных описывается настройками инфоблоков — она является непереносимой.

                                                      Мы разрабатывали админку точно под необходимую бизнес-логику. Сначала использовали фреймворк Kohana, потом перешли на Yii.

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

                                                      Дополнительным плюсом этих решений является инфраструктура для юнит- и интеграционных тестов. Битрикс же является просто нетестируемым. Я даже не уверен, что его ядро покрыто тестами.
                                                      • 0
                                                        Ну статичный контент в файлах как раз очень хорошо поддается версионности. Проблема может возникнуть когда в статичном файле помимо include header и footer существует какой-то еще код. Тогда Битрикс его может «преобразовать».
                                                        А вот версионность базы — это беда. Для случая когда в php-коде встречается текст есть штатный функционал подключения языка, при применении которого даже в шаблоне нет ни единой фразы текста. То есть, с этим все ок, вроде, кроме версионности базы.

                                                        Что касается деплоя:
                                                        1) работаем на копии
                                                        2) утверждаем обновление
                                                        3) на продакшене запускаем скрипт миграции, который создаст/изменит инфоблоки и его свойства и далее забирает новые/измененные файлы с git. Опционально, подставляет значения ID созданных инфоблоков/свойств в параметры вызова нового функционала.
                                                        4) Готово

                                                        С тестами — пропасть. Множество файлов ядра имеет какие-то нетехнические комментарии, TO-DO и много просто закомментированных функций, которые были активны до обновления. (люблю иногда полистать git diff после обновления)
                                                        • 0
                                                          на продакшене запускаем скрипт миграции, который создаст/изменит инфоблоки и его свойства и далее забирает новые/измененные файлы с git. Опционально, подставляет значения ID созданных инфоблоков/свойств в параметры вызова нового функционала.

                                                          это вы хорошо придумали.
                                                          подскажите, а как организовано это в подробностях? скрипт миграции лежит тоже под гитом? как организованы ветки для подобной выкатки?
                                                          • 0
                                                            Сейчас это никак не организовано, уж извините) Это просто пример того, что все таки не так сложно организовать деплой в автоматическом режиме. Части проекта, которые недоступны для пользователей — не вызовут аномальную нагрузку. Поэтому чаще всего достаточно просто вести разработку на какой-то скрытой части продакшена, лишь по готовности и утверждению активировав туда доступ. Все таки это самый быстрый режим работы и для него есть почти все инструменты (голова, бекапы, версионность) для нормальной работы без убийства всего остального.

                                                            Скрипт миграции не может быть универсальным. И даже если подумать о том, чтобы его сделать — он будет выполнять или слишком общие задачи, или его придется дорабатывать каждый раз под особую специфику. Поэтому я бы не стал его делать частью проекта и хранить в git. Лично я бы реализовал какой-то подобный патч скриптом на баше.
                                                          • 0
                                                            Проблема хранения контента отдельных страниц в СКВ в диффе между продакшеном и репозиторием. Не коммитить же контент-менеджеру каждый раз при изменении текста.

                                                            Изменение настроек инфоблоков скриптом — это выход, но мне кажется, что уж очень это замороченный способ. Особенно с учетом подстановки ID инфоблоков прямо в код, где добавляются компоненты (кстати, он потом коммитится, как соотносится с dev-копией?)
                                                            • 0
                                                              В идеале, нужно всё же вынести все данные в базу, чтобы контентщик не менял файлы.
                                                              Ну а если уж меняет — то при выкатке почему не делать коммит? это можно даже автоматизировать.

                                                              ID инфоблоков, свойств НЕЛЬЗЯ вставлять в код числом! Это первое правило. Только через символьные коды.
                                                              • 0
                                                                Я уже подзабыл, как в таком случае производится связывание компонента и блока? Кажется, там есть символьный код.
                                                                • 0
                                                                  У стандартных компонентов есть параметр, через который можно передать именно символьный код. Иногда можно даже подставить его в параметр ID и компонент сам преобразует к нужному виду.

                                                                  В своём же коде, конечно, нужно использовать гуляющий по интернетам класс CIBlockTools.
                                                              • 0
                                                                Статика на то и статика, что изменяется от случая к случаю. Поэтому если по очередном git status я вижу изменения в статичном файле, смотрю diff и комиччу его отдельно. Это редко и не вызывает проблем. По крайне мере если бы я был в настроении настраивать оптимизацию рабочих моментов, то начал бы далеко не с этого -)
                                                                • 0
                                                                  Все равно же это лишняя трудность. Ее можно оправдать тем, что несложно с ней справиться, но я придерживаюсь мнения, что никогда не нужно оправдывать неудачные решения.

                                                                  Опять же, Битрикс поддерживает модель наивной разработки на PHP — когда каждый файл является страницей. Это плохо как с точки зрения разработки, так и с точки зрения безопасности.
                                                                  • 0
                                                                    когда каждый файл является страницей

                                                                    Это феерический бред битрикса.) Людям невозможно объяснить что такое index.php и почему его нужно создавать и почему допустив ошибку в этом шаблоне можно положить сайт., а исправить уже через ftp.
                                                                    • 0
                                                                      а ошибка в файле init.php? любая ошибка в этом файле кладёт сайт(ы) на раз-два. исправить можно только через ftp, ssh, или через другой сайт (если повезло, и ошибка init.php произошла в отдельном сайте, а не в глобальном init.php).
                                                                      • 0
                                                                        Да нет, просто открыть страницу в визуальнике в исходном коде, где кинутый какой нить компонент. Он же там вроде так php кодом и лежит… ну подправляют не так и белая страница. Визуальник в битриксе отдельная песня.
                                                • 0
                                                  За последнее время я вижу уже несколько статей с неоднозначными отзывами о продуктах 1С. К чему бы это?
                                                  • +1
                                                    Если вы намекаете на проплату, то я хотел бы узнать адрес кассы :)
                                                    • +3
                                                      Присоединяюсь к вопросу. У меня накопилось много претензий к продукции 1С, чувствую, стану миллионером.
                                                      • 0
                                                        Даже не подумал про это. Может все-таки дело в общем подходе.
                                                        • 0
                                                          Не знаю, несколько лет не работал с битриксом, недавно потребовалось помочь хорошим знакомым. Залез в новую версию — там то же самое, т.е. лапшекод с логикой в шаблонах, около 100 параметров для подключения среднего компонента и т.д. и т.п.
                                                      • 0
                                                        «Наболело». Ну и импортозамещение, мать его.
                                                        • 0
                                                          «За последнее время я вижу уже несколько статей с неоднозначными отзывами о продуктах 1С. К чему бы это?»

                                                          Наверно к тому, что вы веткой ошиблись. Битрикс не является продуктом 1С.
                                                        • 0
                                                          Просто из интереса, на что перешли сейчас?
                                                          • 0
                                                            На ERP/WMS системы :)
                                                        • –21
                                                          У меня сложилось впечатление, что автор возмущается на Битрикс, потому что не умеет с ним работать. Если бы автор имел больше опыта работы с этой CMS то большинства проблем можно бы избежать.

                                                          P.S. Сам я никогда на Битриксе не писал из-за боязни вот таких вот ситуаций. Есть большое количество более предсказуемых в работе CMS. И если интеграция с 1С не является одной из главных задач проекта, то у Битрикса не так много преимуществ перед другими популярными e-commerce движками.
                                                          • +23
                                                            Если бы у автора было больше опыта работы с Битриксом, то он бы отговорил заказчика от этой cms.
                                                            • +5
                                                              По поводу отговорить заказчика.

                                                              Возможно что-то поменялось, но примерно в 2007(+-1) году я работал в небольшой студии. Мы продавали Битрикс. Именно продавали, как оказалось. Я как-то пришел к директору и спросил: Зачем? Зачем мы делаем сайты на Битрикс? Это же полное фигня, а не система. На что получил очень ясный ответ:

                                                              /сразу скажу что цифры выдуманы, так как точных цифр не помню, но они точно передают смысл/

                                                              — Вот смотри, возьмем Битрикс. Битрикс для клиента стоит 200К из которых 50К вернутся в студию (зависит от статуса партнерства), разработка еще 200К, из которых реально уйдет на производство только 100К. Итого прибыль для студии 150К.

                                                              А теперь возьмем самописную CMS (такая тоже была). Ее никто не купит, поэтому тут навара нет. Разработка обойдется заказчику в 150К, из которых прибыль студии только 50К.

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

                                                              Поэтому отговаривать заказчика никто не будет. И разговаривать с руководством студии тоже бесполезно — они себе не враги.
                                                          • +18
                                                            Битрикс лишь на 80% херня, на остальные 20% — просто невыносим. Не знаю даже, стоило ли описывать проблемы так подробно, когда голый дистрибутив весит полгига, а в шаблонах при этом добрая доля логики. Попоболь действительно со всем: от компрессии до адекватной работы под чем-либо, кроме апача. Клиенты понимают все, но интеграцию с 1С ставят во главу угла.

                                                            А вы случаем не копались в их патентованном «композитном сайте»?
                                                            • +4
                                                              Это «композит» можно сделать на любой системе на nginx — кешировании и быстрой генерации страницы + сжатие css и javascript. Будет ещё эффектнее.
                                                              • +6
                                                                и лого убирать за 300к не придётся
                                                                • 0
                                                                  Кстати да, довольно забавно звучат рекламные слоганы об «ускорении сайта в 100 раз». Естественно что статичный файл уделает динамически генерируемую страничку и разрыв будет просто огромным.
                                                              • –17
                                                                Ваш провал свидетельствует только о вашем непрофессионалолизме. Не нужно идти на поводу у заказчика (вы ведь не говорите ему, как лучше продавать металлоконструкции) и браться разрабоатывать продукт на платформе, в знании которой вы не уверены, и уж тем более применять к ней привычные процессы работы, а потом говорить, что git тормозит.

                                                                В своё время я наступил на те же грабли, тоже ныл в блоге по поводу кривизны Битрикса, и пару лет назад я бы с вами даже согласился. Но со временем я понял, что проблема была не в заказчике, не в моём начальстве, настоявшем на изпользовании неизвестной мне платформы, и даже не в Битриксе. Проблема была во мне, в том, что я не смог убедить руководство, что такой подход закончится плохо.
                                                                • –3
                                                                  А у меня руководство бессмыслено в чем то убеждать :)
                                                                  • +1
                                                                    С Битриксом вполне сносно можно работать в .git, нужен только довольно грамотно составленный .gitignore (есть несколько примеров на github).
                                                                    Еще из полезностей:
                                                                    github.com/matiaspub/bxApiDocs/ — этот репозиторий можно склонировав единожды подключать к своей любимой IDE чтобы работали автокомплит и документация
                                                                    github.com/rhamdeew/Bitrix-API-snippets — сниппеты для sublime text
                                                                  • –6
                                                                    Есть у этой системы возможность объединять и сжимать css и js файлы, подключенные правильным образом.


                                                                    А почитать мануалы по работе с системой и отключить этот функционал в настройках главного модуля? joxi.ru/4zANbEdsw0MMA9
                                                                    • +9
                                                                      Если заказчик стал жертвой маркетологов Битрикса — переубедить не удастся, а проблем потом будет немерено
                                                                      • +5
                                                                        Работал с битриксом и моё мнение: Если битрикс из коробки не решает 85% ТЗ, то лучше брать другую систему.
                                                                        Гит порой задумывался очень надолго, индексируя множество файлов.

                                                                        А вот это странно, вы о папке local и gitignore слышали, что нибудь?
                                                                        • +3
                                                                          > Если битрикс из коробки не решает 85% ТЗ, то лучше брать другую систему.
                                                                          Вот да — аналогичный вывод (тоже работал). Единственный неприятный ньюанс — заранее неизвестно, что будет потом. Вот решает битрикс, скажем, 90% ТЗ, а потом заказчик захочет ещё какого-нибудь существенного функционала. Ну, первого разработчика, допустим, это может и не коснётся. Но кто-то другой влипнет :)
                                                                        • +5
                                                                          Я не сразу догадался, но методом исключения выяснилось, что при отсутствии $_REQUEST[‘ajax’] мы получали NOTICE, который почему-то отключал дальнейшую работу Битрикса. При добавлении проверки isset каталог заработал.

                                                                          Только спустя много лет работы с PHP, я начал понимать почему не любят программистов PHP (работал один в команде, в течении лет 6ти)
                                                                          На PHP ушел с C++
                                                                          Сейчас на Java работаю.
                                                                          Так вот. Всю жизнь вписывал в index.php set_error_handler чтобы скрипт падал при любом Notice и подобной лабуде, либо выдавал нужные для отладки данные, но не шел дальше. Стал это делать после довольно большого проекта на PHP, который разрабатывался больше года. И чем больше вещей можно было завернуть в классы, тем больше вещей в эти классы заворачивалось. (хоть какая-никакая типизация).
                                                                          Сейчас работаю с людьми, которые ставят @ вместо isset и проверки на null. Это убивает :)
                                                                          • +2
                                                                            в 1С всё сделано через BX.js, которая тоже мало где описана.

                                                                            На всякий случай для Вас и других читателей оставлю эту ссылку, вдруг пригодится — dev.1c-bitrix.ru/api_help/main/js_lib/index.php
                                                                            • +2
                                                                              Не буду говорить, что Битрикс — это плохо или обратное.
                                                                              Но эту статью могут увидеть те люди, которые попали в похожую ситуацию. Может быть их спасут вот эти ссылки:
                                                                              http://dev.1c-bitrix.ru/api_help/
                                                                              http://dev.1c-bitrix.ru/learning/course/index.php?COURSE_ID=43&INDEX=Y
                                                                              http://dev.1c-bitrix.ru/community/webdev/
                                                                              • +2
                                                                                «Ваш провал свидетельствует только о вашем непрофессионалолизме». — Полностью согласен.
                                                                                Если битрикс такое говно, то почему на нём было решено делать магазин?

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

                                                                                Я вообще не понимаю как можно начинать заказной коммерческий проект не зная как его делать, а это ваш случай. Делайте то что умеете, что не умеете — учитесь не за счёт клиента.
                                                                              • +4
                                                                                при добавлении торгового предложения в корзину оно добавлялось, но вот свойства этого торгового предложения никак не сохранялись

                                                                                dev.1c-bitrix.ru/user_help/content/iblock/components_2/catalog/catalog_element.php
                                                                                В настройках компонента «bitrix:catalog.element»,
                                                                                Параметр ADD_PROPERTIES_TO_BASKET — Добавлять в корзину свойства товаров и предложений ADD_PROPERTIES_TO_BASKET [Y|N] При отмеченной опции становятся доступными настройки выбора свойств товаров и предложений для передачи их в корзину и заказ.

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

                                                                                Я бы поставил 3 компонента search.page(либо объединил их в комплексный) с разными настройками «Где искать».
                                                                                Либо просто вот это решение установить marketplace.1c-bitrix.ru/solutions/infospice.search/

                                                                                И тут мы сами того не подозревая загнали себя в угол. Битрикс передает параметры пагинации в гет параметрах PAGEN_1, PAGEN_2

                                                                                dev.1c-bitrix.ru/community/webdev/user/35986/blog/12074/
                                                                                bxapi.ru/src/?module_id=main&name=CDBResult::GetNavParams
                                                                                global $NavNum; // номер пагинации предыдущего списка элементов
                                                                                

                                                                                Или вот решение marketplace.1c-bitrix.ru/solutions/orion.infinitescroll/

                                                                                наши «любимые» костыли

                                                                                Похоже что опечатка, кавычки лишние.
                                                                                • 0
                                                                                  dev.1c-bitrix.ru/user_help/content/iblock/components_2/catalog/catalog_element.php
                                                                                  В настройках компонента «bitrix:catalog.element»,
                                                                                  Параметр ADD_PROPERTIES_TO_BASKET — Добавлять в корзину свойства товаров и предложений ADD_PROPERTIES_TO_BASKET [Y|N] При отмеченной опции становятся доступными настройки выбора свойств товаров и предложений для передачи их в корзину и заказ.


                                                                                  Вы уж простите, но я не понял как бы мне помогла настройка компонента детальной карточки товара при добавлении товара в корзину. У меня товары добавлялись в моем скрипте используя только методы api, в компонент это никак не попадало. То есть CSaleBasket::Add метод не добавлял свойства товара, о чем я и написал
                                                                                • +10
                                                                                  Судя по посту, на начало проекта, опыт работы с битриксом у вас стремился к нулю, а начало работ было где-то за около «неделю до Нового Года». Так может это ваш опыт и ваша оценка времени чуть не погубила ваш НГ?
                                                                                  • 0
                                                                                    Я не считаю, что это был провал. Я описал те трудности, с которыми мы столкнулись и которых не ожидали. Если бы мы не работали раньше с Битриксом, то конечно не начали бы проект на нем. Не всегда проект на Битриксе это интернет-магазин. А у последнего есть свои особенности. Я свято верю, что кто-нибудь имеющий отношение к созданию Битрикса читает посты о нем и увидит, что у сообщества есть трудности при использовании, и постарается сделать эту систему проще доступнее и удобнее.
                                                                                    • +3
                                                                                      > Я свято верю, что кто-нибудь имеющий отношение к созданию Битрикса читает посты о нем и увидит
                                                                                      Судя по статьям на хабре про тюнинг мускуля, архитекторы битрикса тут есть.
                                                                                      Но это все равно ничем не поможет. Очень наивно полагать что они не знают проблем битрикса.
                                                                                      А проблема у него одна — это тонна говнокода. Такое разгрести и превратить в благоухающую поляну с единорогами не получится. Только если выбросить все и писать заново и с самого начала хорошо.
                                                                                      Но на такое они не пойдут, ибо итак все покупают, и есть армия «сертифицированных битриксоидов» которые умеют есть старый кактус и не израниться насмерть.
                                                                                      Плюс еще не понятно от чего они зарабатывают больше от лицензий за сам битриск или от курсов по битриксу.
                                                                                    • 0
                                                                                      Главная проблема в том, что вы вообще не понимаете как работает битрикс. Но пытаетесь с ним работать как с другой cms. В итоге появляется франкенштейн, который вообще не понятно как работает и, наверняка, как только на сайт пойдут клиенты — он ляжет под нагрузкой просто потому, что забили на кэширование или еще что-нибудь не так сделали, как надо.
                                                                                      А потом — «битрикс плохой», ага.

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

                                                                                      Любимый код из шаблона с маркетплейса — всегда его вспоминаю — это запрос списка разделов 1-го уровня каталога через GetList, внутри цикла по результатам — запрос списка подразделов раздела (через GetList, ага), а внутри второго цикла — третий запрос с циклом. Ну красота же! Хочется взять обнять и у... плакать
                                                                                      • +4
                                                                                        Автору для полного (не)счастья не хватило всего пары вещей: валюты, скидки.
                                                                                        Когда у вас у разных SKU могут быть цены в разных валютах, а на некоторые SKU дана скидка — вот тут начинается настоящий взрыв мозга. А потом этот взрыв догоняет ударная волна в виде фильтрации по цене в умном фильтре с учетом валют.
                                                                                        На самом деле все эти задачки решаемые, но не так быстро и просто как хотелось бы.

                                                                                        Хочется спросить автора сколько в итоге человеко-часов программиста было потрачено
                                                                                      • +3
                                                                                        Немного о себе: Сам лично нашел 2 бага в битриксе один пофиксили второй попросили ждать лучших времен

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

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

                                                                                        Про клиентов: Почему в России много битрикса? в году этак 2005, наш манагер которая все жаловалась на то что программисты ленивые пришла как то с диском битрикса и сказала, вот оказывается есть система когда вы (то есть мы программисты) ненужны, здесь все есть уже и махала перед нашим носом диском.
                                                                                        • +2
                                                                                          Ну, это примерно тоже самое, что php-программист, возьмет задание сроком в неделю, но выполнять его придется на другом ЯП, до селе не известном герою.
                                                                                          Продукт конечно кал, но большинство ваших проблем можно было решить с помощью сторонних компонентов и поиска в гугле (у гугла не только первая страница работает).
                                                                                          • +3
                                                                                            Когда-то, когда я зеленым новичком начинал свою карьеру в маленькой веб-студии, я помимо воли получил опыт по созданию сайтов на Битриксе: по «натягиванию шаблонов», интеграции с 1С, созданию типового сайта, на котором первая партия доработок выливалась в трагедию в трех актах. Поэтому, когда я продолжал карьеру в другой веб-студии, где у меня уже было право голоса, у нас установилось правило всеми силами отговаривать клиента от Битрикса, а при невозможности этого заламывать нереальную цену. По правде говоря, было страшновато, что кто-нибудь согласится-таки, и я рад, что те времена позади, и Битрикс угрожает мне разве что в кошмарных снах.

                                                                                            Позже, уже имея опыт во всех этих паттернах и прочих эджайлах, я вернулся к коду Битрикса… Я сочувствую людям, которым приходится с этим работать, разбираться в документации и хранить в голове знания по «API» этой платформы. И никак не могу я понять, героизм ими движет или мазохизм.
                                                                                            • +2
                                                                                              Он хорошо продается, так как разрекламирован, заработать на проекте легче, «присоседившись» к бренду. С точки зрения бизнеса больше преимуществ использовать его, чем с точки зрения технологий.

                                                                                              Не раз видел, когда клиенты (новички в сайтах) задумываясь о сайте — первым делом покупали Битрикс, а потом уже искали исполнителя.
                                                                                              • 0
                                                                                                Это-то яснее ясного, но какая мотивация у исполнителей, которые, явно имея способности в деле программирования, выбирают такую специализацию? Мне кажется, сейчас в IT не такая бедственная ситуация, чтобы хвататься за любое дело, лишь бы приносило какой-то доход. Да и не самое это прибыльное из любых.
                                                                                            • 0
                                                                                              С точки зрения пользователя, Битрикс очень удобен в управлении, быстрой настройки с точки зрения пользователя контента и т.д. Поэтому сначала берут битрикс, а потом ищут разработчика. Клиенту все равно, он найдет и другого подрядчика, который разработает сайт.

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

                                                                                              Ну а я, как разработчик скажу — пока клиент платит, мы делаем. Смысл сидеть без работы из-за своих предубеждений — развиваться необходимо постоянно и в разных направлениях, на случай того, какая работа попадется с хорошим бюджетом.
                                                                                              • 0
                                                                                                Было бы интереснее, если бы автор спокойно перечислил проблемы с которыми он столкнулся, и показал свои решения проблем, пояснил бы кодом.
                                                                                                Это была бы большая польза для читателей, работающих с Битриксом, которых немало.
                                                                                                (профессиональный) читатель имел бы возможность делать выводы сам.
                                                                                                А так сплошные эмоции, из серии «мы пообещали сделать за один день, но не успели, так как не знали как оно всё работает, но виноваты не мы а сложный, непонятный, глюкавый Битрикс».
                                                                                                Из контекста статьи подразумевается, что у автора, как и в других cms — идеальный код, отсутствие багов и т.п.
                                                                                                Я так понимаю больше всего автора беспокоит один из недостатков, присущий многим системам:
                                                                                                «Фатальный недостаток»
                                                                                                Вобщем судя по статье автор считает себя — Д'артаньяном ;-)
                                                                                                • 0
                                                                                                  Ну вы сделали массу выводов обо мне, не знаю на чем основанных. Код для решения проблем я местами привел, проблемы с которыми столкнулся перечислил. Зачем же писать обо мне кучу всего другого, что вам почудилось. Я нигде не писал, что я гугу программирования и мой код идеален, а вот Битрикс всё испортил.
                                                                                                  • –1
                                                                                                    Я нигде не писал, что… вот Битрикс всё испортил

                                                                                                    Как Битрикс чуть Новый Год не погубил

                                                                                                    =)
                                                                                                • +2
                                                                                                  Послушайте, ну это, неконструктивный, простите, базар.

                                                                                                  Лет восемь назад, мой товарищ, который работал в IT крупной страховой компании, выбирал решение для корпоративного портала. И, после долгих консультаций, остановился на .Net. Мы все спросили — почему? Почему не PHP, он же так крут, и вообще, свободный и замечательный? На что он ответил — для .Net есть методология, есть курсы, есть стандартизированные специалисты. А на PHP каждый пишет как хочет, каждый новый прогер ругает предыдущего и переписывает все под себя, и ни масштабировать, ни поддерживать реально большой проект невозможно.

                                                                                                  Вот тут ругают, типа, кривой битрикс.
                                                                                                  Да, есть момент коммерческой составляющей при внедрении. Работать «только с битриксом» выгоднее, чем поддерживать зоопарк CMS.
                                                                                                  И сейчас интегратор и заказчик стоят перед той же «вилкой» — выбрать непонятно что или выбрать коммерческую CMS? C более-менее коммерческой CMS, на которую есть поддержка, есть «хоть как-то» сертифицированные специалисты, есть курсы и интеграция с 1С — пусть внедрение стоит в два раза дороже, выбирают именно ее.

                                                                                                  Я — программист по образованию, владелец интернет-магазина на Битриксе. И сейчас, когда мне надо сменить поддержку или заказать доработку, я делаю это без страха, что услышу: «Ооо, что за @#%^ здесь все писал? Надо все переписывать....»
                                                                                                  Я не хочу в этом во всем разбираться, я хочу заниматься своим бизнесом.

                                                                                                  Да, я заплачу за другую систему, столько же, сколько за Битрикс.
                                                                                                  Которая будет быстрее, проще во внедрении, проще к доработкам чем Битрикс.
                                                                                                  Но дайте мне ее, и кусочек уверенности в том, что завтра ее не выбросят на помойку и будут вменяемые цены и что мне не надо будет по всей стране разыскивать секретную секту специалистов именно по этой CMS, если вдруг развалится та контора, которая мне все внедряла, или меня начнет динамить поддержка?

                                                                                                  Почему все говорят — да зачем вам учет в Excel, возьмите 1С — тиражное заточенное решение?
                                                                                                  Почему пользуются не Блокнотом, а Evernone — тиражное заточенное решение?

                                                                                                  Все, как бы, ругают, но никто не предложил вменяемой тиражной альтернативы?
                                                                                                  Кто скажет
                                                                                                  — выбросьте Битрикс, возьмите __________ — тиражное заточенное решение?
                                                                                                  • 0
                                                                                                    Странно, что вы без страха меняете, мне один битрикс-разраб говорил, что кодинг-стандарты отсутствуют как класс, и каждый новый разраб велосипедит как хочет
                                                                                                    • 0
                                                                                                      dev.1c-bitrix.ru/docs/php_recommendation.php — кодстайл.
                                                                                                      dev.1c-bitrix.ru/learning/course/?COURSE_ID=43&LESSON_ID=2815 — советы новичкам.
                                                                                                      Или что такое кодинг-стандарты?
                                                                                                      • +1
                                                                                                        Окей, начну издалека.
                                                                                                        Он декларировал возможность проведения множества действий из админки, что эти изменения никак не фиксируются в физическом коде, не попадают в систему контроля версий и т.п. Не могу сказать, как это называется в терминах битрикса.
                                                                                                        В итоге заказчик привязывается к существующему исполнителю, а при смене — каждый новый разраб тупо всё переделывает, так как возможности разобраться практически нулевые.
                                                                                                      • 0
                                                                                                        Если бы можно было обойтись без людей, давно бы обошлись.
                                                                                                        А накосячить и подилетантить можно везде.
                                                                                                        Особенно доставляет аргумент «мне один битрикс-разраб говорил»
                                                                                                        Шикарно!
                                                                                                        • 0
                                                                                                          Странно, что вам доставляет этот «аргумент».
                                                                                                          Вполне допустимо то, что я не общался со всеми существующими разрабами
                                                                                                          • –1
                                                                                                            Доставляет фейсбучность аргументов.
                                                                                                            По моему мнению, вы сделали свой вывод о методологии разработки продукта, основываясь на мнении одного «разраба».
                                                                                                            Корректнее, на мой взгляд, ссылаться на опыт, исследование или статистику.
                                                                                                            • 0
                                                                                                              Да, я сделал свой вывод основываясь на мнении одного «разраба».
                                                                                                              О чём я и писал в первом комментарии.
                                                                                                              Что не так?
                                                                                                              Покажите мне опыт, исследование или статистику.
                                                                                                              Я, например, ознакомился чего пишут по поводу кеширование idea.1c-bitrix.ru/?tag=4566, всё печально, как на мой взгляд
                                                                                                    • +3
                                                                                                      Точка зрения бизнеса и точка зрения разработчика всегда не совпадала во многом.
                                                                                                      Тут как понимаю человек написал пост со вторых позиций.
                                                                                                      А с первых понабежали критиковать.
                                                                                                      Битрикс говно.
                                                                                                      • +2
                                                                                                        Вы знаете, когда мне начинают «настойчиво предлагать» сделать это на Битриске, я привожу очень простой и доходчивый для клиентов пример.

                                                                                                        Пример очень простой:

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

                                                                                                        У Microsoft все их сайты сделаны на ASP.NET, и подняты под Windows Server (и будут подняты, даже если от Linux они будут работать раза в 2 эффективнее)

                                                                                                        Сайт компании Oralce (разработчиков Java) безальтернативно работает на JSP (Java Server Pages)

                                                                                                        При этом основной сайт 1С на Битриксе не работает.

                                                                                                        Вопрос: вы действительно хотите поднимать свой сайт на Битриксе, даже учитывая тот факт, что сама 1С на своём главном ресурсе от его использования отказалась в сторону чужой технологии?

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


                                                                                                        Обычно подавляющее большинство после этого от идеи Битрикса отказываются, а оставшиеся фанатики — просто выявляются (и отправляются в другие места — ибо с ними при разработке больше потеряешь).
                                                                                                        • 0
                                                                                                          А на чём сайты Битрикса?
                                                                                                        • +1
                                                                                                          Согласно wappalyzer.com/ работает сайт 1С-Битрикс. На Битриксе также работают Связной, Эльдорадо, Евросеть, Банки.ру. Хотя уверен, что очень-очень сильно перепиленные и в силу ряда серьезных причин.
                                                                                                          Уже не работают новый m-video, roem.ru.

                                                                                                          • +1
                                                                                                            Как вы тогда можете объяснить подобные ссылки?
                                                                                                            www.1c.ru/rus/products/1c/predpr/budget.jsp
                                                                                                            www.1c.ru/news/newslist.jsp
                                                                                                            www.1c.ru/news/info.jsp?id=19357
                                                                                                            www.1c.ru/news/press.jsp

                                                                                                            Скорее всего он поднят (по крайней мере его ядро) на Java Server Pages.
                                                                                                            • +2
                                                                                                              www.1c.ru и www.1c-bitrix.ru — разные фирмы, разные сайты.
                                                                                                              • +1
                                                                                                                С таким же успехом можно утверждать что рука и нога это два разных человека.
                                                                                                                Компания одна, и она называется 1С.

                                                                                                                Также как и в случае с Microsoft — вполне возможно что .NET Framework разрабатывается отдельным подразделением, и может быть — даже отдельной компанией. Но это — продукт Microsoft.

                                                                                                                Возьмём тот-же Oracle: Java это не их разработка, но на сегодня Sun принадлежит компании Oracle. И именно на ведущей технологии Sun и работает сайт Oracle именно на JSP, а не на, например Ruby
                                                                                                              • 0
                                                                                                                Так — в первом комментарии я не до конца въехал в ваши слова: сайт Битрикса действительно поднят на Битриксе. Но вот сайт 1С — компании, которой принадлежит Битрикс — на нём не работает.

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

                                                                                                                Microsoft, например, пересаживает своих сотрудников уже на вторые бета-версии своих операционных систем. И речь не о тестерах, а о полноправных работниках.
                                                                                                                • 0
                                                                                                                  Яндекс.Деньги принадлежат Сбербанку. Яндекс.Деньги обязаны быть переписаны на технологии Сбербанка?

                                                                                                                  Или Ebay, купивший Magento должен срочно запустится на Magento?

                                                                                                                  1C же скорее характеризует нежелание модернизировать сайт в целом. Хотя и на это может быть 100500 причин.
                                                                                                            • 0
                                                                                                              Ну сайт евросети я бы не сказал что сильно перелопачен. Не знаю как сейчас, но когда его только переносили на битрикс, присутствовал при этом процессе. Особых извращений и чего то необновляемого там как то не наблюдалось. Да, очень много чего пришлось кэшировать, поиск был по сути написан свой, ибо вариант из коробки просто никак не удовлетворял требованиям. Но в целом несмотря на ужасы, баги как в процессе разработки, так и в самом битриксе, неадекватно оцененную нагрузку и прочее что постоянно преследует крупные проекты получилось более менее адекватно.
                                                                                                              То есть тогда это выглядело тихим ужасом, а если смотреть через n лет. То сейчас битрикс и более глючен, и с документацией хуже. И на простых проектах всплывает гораздо больше извращений.
                                                                                                              • 0
                                                                                                                Вот как минимум поиск же. :)
                                                                                                                Выяснить в процессе, что тебя что-то не устраивает и вкладываться в оплату труда разработчиков, которые покрутят то там, тот тут совсем не здорово.
                                                                                                                • 0
                                                                                                                  Не хочу защищать битрикс, даже стыдно как то ;)
                                                                                                                  Но там была очень специфичная задача, которая через битрикс решалась определенным способом, который делал битриксовый поиск ОЧЕНЬ МЕДЛЕННЫМ. то есть до 15 секунд на запрос. Что при имеющийся нагрузке даже не смешно. А если вы делаете проект под себя, то практически со 100% вероятностью вам придется доработывать что то. Нет конечно есть более менее типичные задачи. Но почему то людям постоянно хочется через какое то время что-нибудь допилить. Да метод copy-paste различных сниппетов поможет, да можно подкрутить отдельные параметры, поправить стили. Ну а дальше чуть чуть дописать js код, поправить по нескольким статьям код, поспрашивать на форумах/stackoverflow и иже с ними что и как делать. Но по сути в данном случае вы заменяете труд разработчиков своим, либо же обращаетесь для решениях этих задач к другим.

                                                                                                                  Вечное состояние «все устраивает» возможно только для того что не развивается. ;)
                                                                                                                  Для большинства проектов коробочные продукты подходят на 99%. И чаще всего на этот 1% изначально люди могут и плюнуть. Но пока что «хочу купить универсальное решение, которое будет идеально подходить мне» это утопия на мой взгляд.
                                                                                                                  • 0
                                                                                                                    Не, конечно нет универсального решения. И даже топ-продукты со стоимостью лицензий в десятки-сотни тысяч долларов/евро все не дают все возможности, если точно знать чего ты хочешь.

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

                                                                                                                    А при выборе надо исходить из оценки потребностей и затрат. Составить табличку с требованиями и заполнить. Так где заполнить нельзя — проставить стоимость доработки в деньгах и времени.
                                                                                                                    • 0
                                                                                                                      На «все устраивает», я так понимаю, никто и не рассчитывает.
                                                                                                                      Если бы кто-нибудь предложил коммерческую платформу со скиллами, которые есть у Битрикса, т.е. такую, которая была бы удобна для бизнеса, и еще бы при этом была удобна программистам — я бы перешел.
                                                                                                                      Но сейчас, когда мне нужно делать еще 5-7 сайтов под разные продукты, для описания которых тесен формат интернет-магазина, а продвигать их надо, мне предлагают на выбор — битрикс или чистый HTML??? Я скорее закажу битрикс.
                                                                                                                      Даже при имеющейся разнице в цене.
                                                                                                                      «Убийцу Битрикса» никто не предлагает.
                                                                                                                      • 0
                                                                                                                        «убийцы битрикса» регулярно появляются, только большинство не понимает, что до того момента как они станут убийцами им надо лет 5-10 выпускать обновления, обновлять документацию, создавать сообщество, допиливать новые фичы. Что процесс этот не быстрый. У всех логика, вот сейчас сделаем удобную платформу и все потянутся, и мы заработаем миллионы. Не понимая что люди ленивы и не кинутся на непонятного новичка, неся клиентские деньги. Да и усилий приложить много надо пока по функциональности приблизишься к коробочным решениям. В общем много усилий, опять же маркетинг. Но будем надеяться что появится наш герой убьёт битрикс, и сам станет им ;)
                                                                                                                        • 0
                                                                                                                          Согласен, быстро только Hello Word! пишется, и тот может быть с багами.
                                                                                                                          Это как выйти замуж га генерала — выйти за молоденького лейтенатнта, и помотаться с ним по дальним гарнизонам.
                                                                                                                          Мне — хотя бы вменяемый капитан. До генералов дорастают не все.
                                                                                                                  • 0
                                                                                                                    ..deleted…
                                                                                                                • 0
                                                                                                                  А при чем тут 1С и 1С-битрикс?
                                                                                                                  Это 2 разные кампании. Просто Битрикс видимо решил, что продукт продвинется быстрее, я хз…
                                                                                                                  • 0
                                                                                                                    Это ерунда. 1С Битрикс является частью компании 1С.
                                                                                                                    В комментарии выше я уже написал что мы не имеем права считать руку и ногу двумя разными людьми — как бы этого не хотелось навязать нам различным маркетологам
                                                                                                                    • 0
                                                                                                                      Поясню подробнее.

                                                                                                                      из википедии:
                                                                                                                      «Компания «Битрикс» основана в 1998 году группой специалистов отдела интернет-технологий и финансовых телекоммуникаций АКБ «Инвестбанк» под руководством Сергея Рыжикова.»

                                                                                                                      «В 2007 году компании 1С и Битрикс объявили о создании совместного предприятия ООО «1С-Битрикс» (доли партнеров равны и составляют 50 %). Новая компания получила право распространения продуктов компании Битрикс на территории Российской Федерации. Финансовые детали сделки не разглашаются. При этом условия работы партнеров Битрикс не изменились[1]. Западное направление (рынок англо- и немецкоговорящих стран) компания Битрикс развивает самостоятельно, без компании 1С[2].»

                                                                                                                      Компания 1С имеет долю в 50%, но не владеет 1С-Битрикс, а поэтому считать их одной компанией неправильно.

                                                                                                                      из википедии:
                                                                                                                      «На 2010 год, по заверениям самой же компании, «1С» владела или имела доли более чем в 300 ИТ-компаниях в России, СНГ и за рубежом (к примеру, во Вьетнаме).»