Программисты Битрикса себя явно не ограничивали :D
Хочется HTML в "контроллере" - влепим, нужно подключить JS - прямо в коде его и прописываем, требуется вытащить что-то из базы - пишем ручками SQL, нужно передать параметры в метод - да не вопрос:
<?$APPLICATION->IncludeComponent("bitrix:catalog", "", array( "IBLOCK_TYPE" => "catalog", "IBLOCK_ID" => "#CATALOG_IBLOCK_ID#", "TEMPLATE_THEME" => "site", "HIDE_NOT_AVAILABLE" => "N", "BASKET_URL" => "#SITE_DIR#personal/cart/", "ACTION_VARIABLE" => "action", "PRODUCT_ID_VARIABLE" => "id", "SECTION_ID_VARIABLE" => "SECTION_ID", "PRODUCT_QUANTITY_VARIABLE" => "quantity", "PRODUCT_PROPS_VARIABLE" => "prop", "SEF_MODE" => "Y", "SEF_FOLDER" => "#SITE_DIR#catalog/", "AJAX_MODE" => "N", "AJAX_OPTION_JUMP" => "N", "AJAX_OPTION_STYLE" => "Y", "AJAX_OPTION_HISTORY" => "N", "CACHE_TYPE" => "A", "CACHE_TIME" => "36000000", "CACHE_FILTER" => "Y", "CACHE_GROUPS" => "Y", "SET_TITLE" => "Y", "ADD_SECTION_CHAIN" => "Y", "ADD_ELEMENT_CHAIN" => "Y", "SET_STATUS_404" => "Y", "DETAIL_DISPLAY_NAME" => "N", "USE_ELEMENT_COUNTER" => "Y", "USE_FILTER" => "Y", "FILTER_NAME" => "", "FILTER_VIEW_MODE" => "VERTICAL", "FILTER_FIELD_CODE" => array( 0 => "", 1 => "", ), "FILTER_PROPERTY_CODE" => array( 0 => "", 1 => "", ), "FILTER_PRICE_CODE" => array( 0 => "BASE", ), "FILTER_OFFERS_FIELD_CODE" => array( 0 => "PREVIEW_PICTURE", 1 => "DETAIL_PICTURE", 2 => "", ), "FILTER_OFFERS_PROPERTY_CODE" => array( 0 => "", 1 => "", ), "USE_REVIEW" => "Y", "MESSAGES_PER_PAGE" => "10", "USE_CAPTCHA" => "Y", "REVIEW_AJAX_POST" => "Y", "PATH_TO_SMILE" => "/bitrix/images/forum/smile/", "FORUM_ID" => "11", "URL_TEMPLATES_READ" => "", "SHOW_LINK_TO_FORUM" => "Y", "USE_COMPARE" => "N", "PRICE_CODE" => array( 0 => "BASE", ), "USE_PRICE_COUNT" => "N", "SHOW_PRICE_COUNT" => "1", "PRICE_VAT_INCLUDE" => "Y", "PRICE_VAT_SHOW_VALUE" => "N", "PRODUCT_PROPERTIES" => array( ), "USE_PRODUCT_QUANTITY" => "Y", "CONVERT_CURRENCY" => "N", "QUANTITY_FLOAT" => "N", "OFFERS_CART_PROPERTIES" => array( 0 => "SIZES_SHOES", 1 => "SIZES_CLOTHES", 2 => "COLOR_REF", ), "SHOW_TOP_ELEMENTS" => "N", "SECTION_COUNT_ELEMENTS" => "N", "SECTION_TOP_DEPTH" => "1", "SECTIONS_VIEW_MODE" => "TILE", "SECTIONS_SHOW_PARENT_NAME" => "N", "PAGE_ELEMENT_COUNT" => "15", "LINE_ELEMENT_COUNT" => "3", "ELEMENT_SORT_FIELD" => "desc", "ELEMENT_SORT_ORDER" => "asc", "ELEMENT_SORT_FIELD2" => "id", "ELEMENT_SORT_ORDER2" => "desc", "LIST_PROPERTY_CODE" => array( 0 => "NEWPRODUCT", 1 => "SALELEADER", 2 => "SPECIALOFFER", 3 => "", ), "INCLUDE_SUBSECTIONS" => "Y", "LIST_META_KEYWORDS" => "UF_KEYWORDS", "LIST_META_DESCRIPTION" => "UF_META_DESCRIPTION", "LIST_BROWSER_TITLE" => "UF_BROWSER_TITLE", "LIST_OFFERS_FIELD_CODE" => array( 0 => "NAME", 1 => "PREVIEW_PICTURE", 2 => "DETAIL_PICTURE", 3 => "", ), "LIST_OFFERS_PROPERTY_CODE" => array( 0 => "SIZES_SHOES", 1 => "SIZES_CLOTHES", 2 => "COLOR_REF", 3 => "MORE_PHOTO", 4 => "ARTNUMBER", 5 => "", ), "LIST_OFFERS_LIMIT" => "0", "SECTION_BACKGROUND_IMAGE" => "UF_BACKGROUND_IMAGE", "DETAIL_PROPERTY_CODE" => array( 0 => "NEWPRODUCT", 1 => "MANUFACTURER", 2 => "MATERIAL", ), "DETAIL_META_KEYWORDS" => "KEYWORDS", "DETAIL_META_DESCRIPTION" => "META_DESCRIPTION", "DETAIL_BROWSER_TITLE" => "TITLE", "DETAIL_OFFERS_FIELD_CODE" => array( 0 => "NAME", 1 => "", ), "DETAIL_OFFERS_PROPERTY_CODE" => array( 0 => "ARTNUMBER", 1 => "SIZES_SHOES", 2 => "SIZES_CLOTHES", 3 => "COLOR_REF", 4 => "MORE_PHOTO", 5 => "", ), "DETAIL_BACKGROUND_IMAGE" => "BACKGROUND_IMAGE", "LINK_IBLOCK_TYPE" => "", "LINK_IBLOCK_ID" => "", "LINK_PROPERTY_SID" => "", "LINK_ELEMENTS_URL" => "link.php?PARENT_ELEMENT_ID=#ELEMENT_ID#", "USE_ALSO_BUY" => "Y", "ALSO_BUY_ELEMENT_COUNT" => "4", "ALSO_BUY_MIN_BUYES" => "1", "OFFERS_SORT_FIELD" => "sort", "OFFERS_SORT_ORDER" => "desc", "OFFERS_SORT_FIELD2" => "id", "OFFERS_SORT_ORDER2" => "desc", "PAGER_TEMPLATE" => "round", "DISPLAY_TOP_PAGER" => "N", "DISPLAY_BOTTOM_PAGER" => "Y", "PAGER_TITLE" => "Товары", "PAGER_SHOW_ALWAYS" => "N", "PAGER_DESC_NUMBERING" => "N", "PAGER_DESC_NUMBERING_CACHE_TIME" => "36000000", "PAGER_SHOW_ALL" => "N", "ADD_PICT_PROP" => "MORE_PHOTO", "LABEL_PROP" => "NEWPRODUCT", "PRODUCT_DISPLAY_MODE" => "Y", "OFFER_ADD_PICT_PROP" => "MORE_PHOTO", "OFFER_TREE_PROPS" => array( 0 => "SIZES_SHOES", 1 => "SIZES_CLOTHES", 2 => "COLOR_REF", 3 => "", ), "SHOW_DISCOUNT_PERCENT" => "Y", "SHOW_OLD_PRICE" => "Y", "MESS_BTN_BUY" => "Купить", "MESS_BTN_ADD_TO_BASKET" => "В корзину", "MESS_BTN_COMPARE" => "Сравнение", "MESS_BTN_DETAIL" => "Подробнее", "MESS_NOT_AVAILABLE" => "Нет в наличии", "DETAIL_USE_VOTE_RATING" => "Y", "DETAIL_VOTE_DISPLAY_AS_RATING" => "rating", "DETAIL_USE_COMMENTS" => "Y", "DETAIL_BLOG_USE" => "Y", "DETAIL_VK_USE" => "N", "DETAIL_FB_USE" => "Y", "AJAX_OPTION_ADDITIONAL" => "", "USE_STORE" => "Y", "FIELDS" => array( 0 => "STORE", 1 => "SCHEDULE", ), "USE_MIN_AMOUNT" => "N", "STORE_PATH" => "#SITE_DIR#store/#store_id#", "MAIN_TITLE" => "Наличие на складах", "MIN_AMOUNT" => "10", "DETAIL_BRAND_USE" => "Y", "DETAIL_BRAND_PROP_CODE" => "BRAND_REF", "SIDEBAR_SECTION_SHOW" => "Y", "SIDEBAR_DETAIL_SHOW" => "Y", "SIDEBAR_PATH" => "#SITE_DIR#catalog/sidebar.php", "SEF_URL_TEMPLATES" => array( "sections" => "", "section" => "#SECTION_CODE#/", "element" => "#SECTION_CODE#/#ELEMENT_CODE#/", "compare" => "compare/", ) ), false);?>
Две сотни параметров в массиве и все капсом. Секретари и менеджеры этого и так не увидят, а у программиста полная свобода говнокодить.
Вот вы и подтвердили то, о чем я говорил ранее:
Маркетологи 1С могут сколько угодно рассказывать сказки о "фреймворке", но по факту там даже банального разделения кода на модель, вид и контроллер нет. Все собрано в кучу.
Не всем интересно в этом всем копаться с перспективой работать только на рынке РФ.
С Magento 2 и WooCommerce ситуация совершенно другая. Они объективно написаны лучше, их можно использовать бесплатно, под них огромное количество как платных, так и бесплатных тем и дополнений. В итоге они и стали популярными, а Битрикс - нет.
Вот вы и раскрыли "бизнес-модель" Битрикса :)
Потому что в 1С хороший маркетинг и целая система "бонусов" для студий. Основная целевая аудитория этой системы - это компании с большим бюджетом, который нужно "освоить". Собственно, это одна из причин по которой Битрикс популярен в РФ.
В то же время большинство Интернет-магазинов в мире построены на WordPress (WooCommerce) и Magento.
Sancey, этот файл расположен в корневой папке шаблона. Попробуйте добавить label_submit со значением "Оставьте отзыв" в массив аргументов функции comment_form.
Sancey, посмотрите с какими параметрами у вас вызывается функция comment_form() в файле comments.php темы. За текст на кнопке отправки отвечает параметр label_submit
Попробуйте плотно поработать с какой-то CMS. Как наберетесь опыта, то можно будет взяться за создание приложения на каком-то популярном фреймворке.
В перерывах между чтением документации и руководств по CMS и фреймворкам можно читать базовую литературу по конченым автоматам, теории множеств и паттернам проектирования.
Практически невозможно стать профессиональным разработчиком, изучая только книги или просматривая видеокурсы. Все решает опыт.
Я говорил об организации наполнения сайта, а не о стилях как таковых. Это совершенно разные вещи.
Для заказчика вариант с WordPress выгоднее. Об этом я писал выше.
На небольших сайтах плагины кеширования часто работают из коробки. Проблемы возникают в основном с магазинами и другими сайтами с динамическими блоками вроде корзины. Там действительно требуется дополнительная настройка.
Для дополнительного ускорения генерации страниц сайта можно также использовать такие экзотические приемы как включение английского языка для фронтэнда. Как ни странно, это уменьшает время генерации на 50-100 мс.
Вы так и не ответили на мой вопрос.
Возьмем самый обычный сайт о товаре на 5 страниц. На главной странице у нас как обычно слайдер, краткий список характеристик, галерея с фото и куча сертификатов, на странице с подробной информацией будет фото с дополнительными изображениями, краткое описание и несколько табов ниже с разной информацией. Также будет страница контактов с картой, телефонами и адресами.
За годы работы с WP я видел самые разные способы реализации этого функционала. Менее опытные разработчики не парятся и всю информацию прописывают прямо в шаблонах. Как показывает практика, после нескольких десятков правок они или сами пропадают, или заказчики уходят недовольные тем, что даже для самых маленьких правок нужно обращаться к разработчику и оплачивать его услуги.
Некоторые разработчики идут немного дальше и пихают весь HTML-код в основной редактор. У этого подхода есть вариации, когда блоки с HTML-кодом заменяются шорткодами. К слову, по такому принципу работает VisualComposer.
Более опытные разработчики для некоторых элементов вроде слайдеров, галерей и прочего используют дополнительные типы записей. Это решение весьма средненькое, но у заказчика уже есть возможность самостоятельно изменить слайды, например.
Следующим этапом развития, если так можно выразиться, являются виджеты. Штука полезная, но не универсальная. Менее опытные разработчики прописывают код в текстовый виджет и выводят его где это нужно, более опытные пишут свои виджеты. Это на самом деле несложно.
После виджетов у нас идут дополнительные поля. Они бывают самые разные. Можно использовать стандартные доп. поля, можно использовать более интересные реализации вроде ACF или CMB2. Они позволяют сильно упростить наполнение сайта. Дальнейшим развитием функционала дополнительных полей являются так называемые блоки с гибким содержимым. В ACF это Flexible Content. Благодаря им у пользователя есть возможность в определенных рамках создавать страницы со своей разметкой.
Отдельно от этого всего стоит Customizer. Сейчас этот инструмент очень активно развивается. В 4.7 его сильно обновили.
А теперь самое главное: зачем это все нужно. Да, я полностью согласен с теми, кто говорит, что проще всего 5 страничный сайт сделать на чистом HTML. Это самое оптимальное решение, если точно известно, что сайт существенно изменяться не будет.
Если предполагается внесение изменений в будущем, то лучше всего сделать сайт на том же WordPress. Это связано с тем, что время и разработчика, и заказчика имеет свою цену. Ни один заказчик не будет в восторге от того, что ему приходится для каждой мелкой правки тратить свое время и деньги на программиста. Программисту также не понравится, когда его постоянно по мелочи дергают. В конечном счете сделать все сразу на WordPress получится выгоднее для обеих сторон.
Чтобы это работало, сайт должно быть удобно настраивать и наполнять. Виджеты, собственные типы файлов, стили редактора, шорткоды и дополнительные поля в этом оказывают неоценимую помощь.
Вариантов тут масса. Можно использовать новый Customizer, можно использовать виджеты, можно дополнительные поля. Помимо этого никто не запрещает эти способы комбинировать :)
Костылем можно назвать только постраничное кеширование, когда сохраняется сразу вся страница. В некоторых случаях в нем действительно есть смысл, но оно накладывает существенные ограничения на работу с динамическими блоками. В итоге их приходится тянуть через AJAX, например.
Помимо постраничного есть еще и объектный кеш, который позволяет хранить данные. На уровне движка он очень активно используется. По-умолчанию для его реализации используется класс-заглушка WP_Object_Cache, объект которого хранит данные в обычном массиве.
Также в WP есть и третий вид кеша - Transient API. Он хранит данные в базе данных. Этот механизм кеширования уместен, когда нет возможности полноценно использовать объектный кеш (на сервере нет APC, Memcached, Redis и т.д.)
Дополнительные поля нужны в первую очередь для облегчения наполнения сайта. Это ведь не только телефоны в шапке и футере, но и слайдеры, дополнительные фото, различные повторяющиеся блоки, характеристики товара, выбор пользователей, рубрик, записей и даже расположение на карте. А ведь есть еще и фильтрация...
Как вы предлагаете их наполнять без дополнительных полей?
В WordPress это все можно вынести в дополнительные поля. Дополнений для этого достаточно много. Самые популярные - ACF и CMB2.
Проблема с "тяжеловатостью" решается установкой дополнений для кеширования.