Обучаю битриксу программистов, интеграторов. Подробнee ⇒

Начальные этапы разработки сайта на 1С-Битрикс



Статья "Как установить Битрикс"

Задача:
На установленном ядре 1С-Битрикс создать сайт с нуля (есть верстка, есть ТЗ со структурой, с функционалом сайта)

Создать пустой шаблон сайта  
/bitrix/admin/template_admin.php



Создать сайт
/bitrix/admin/site_admin.php
Туториалы по созданию сайта:

Битрикса:
Моя статья:


выбираем шаблон созданный
можно для одного сайта несколько шаблонов (для мобилки, для определенного раздела, файла и тд)


Добавить нужные типы меню для сайта
/bitrix/admin/settings.php?lang=ru&mid_menu=1&mid=fileman
Настройки > Настройки продукта > Настройки модулей > Управление структурой



Создать структуру через админку
чтобы автоматом были файлы с описанием раздела, с футером и хедером, добавлены в пункты в нужное меню
Контент > Структура сайта > Файлы и папки
Важно.
не делайте
  • /index.php
  • /edu.php
  • /contact.php
делайте
  • /index.php
  • /edu/index.php
  • /contact/index.php
чтобы клиент открывал ссылки вида:






Настройки для удобной разработки
Важно!
Перед сдачей проекта вернуть все
обратно и протестировать

1. Автокеширование отключаем
/bitrix/admin/cache.php?lang=ru


2. Убираем сжимание и объединение скриптов и стилей

Настройки > Настройки продукта > Настройки модулей > Главный модуль
/bitrix/admin/settings.php?lang=ru&mid=main&mid_menu=1


3. включаем вывод ошибок
/bitrix/.settings.php
в блоке exception_handling
'debug' => true,
4. файл лога, чтобы обработчики событий логировать
init.php  - если нет, то создать
  • или /bitrix/php_interface/init.php
  • или /local/php_interface/init.php
файл лога, например, log.txt удобно создать рядом в папке c init.php, но не обязательно

define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/bitrix/php_interface/log.txt");
//или
define("LOG_FILENAME", $_SERVER["DOCUMENT_ROOT"]."/local/php_interface/log.txt");
если он создан, но неизвестно где, то можно вывести, например. в командной строке
echo LOG_FILENAME;
логировать
AddMessage2Log(1); //можно число
AddMessage2Log("test"); //можно строку
AddMessage2Log(["test1","test2"]); //можно массив

Начинаем менять шаблон сайта

шаблон сайта находится
/bitrix/templates/mytemplatename/
или
/local/templates/mytemplatename/
статьи битрикса
про папку local
как система ищетшаблон





  • /component/ - там измененные шаблоны компонентов
  • /css/,/js/,/img/,/fonts/ -  assets (наборы файлов, которые используются на HTML-странице – это файлы стилей, скрипты, различные изображения и шрифты). Некоторые кладут эти папки в одну папку /assets/ (мне удобнее так)
  • templates_styles.css  - основной файл стилей шаблона сайта
  • header.php, footer.php - шапка (хэдер) и подвал (футер) сайта, которые выводятся на всех страницах

header.php и footer.php c типовыми компонентами

header.php
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); //умирает. если не подключен пролог
IncludeTemplateLangFile($_SERVER["DOCUMENT_ROOT"]."/bitrix/templates/".SITE_TEMPLATE_ID."/header.php"); //ланги, если надо
CJSCore::Init(array("fx")); //ядро битриксовской js библиотеки /bitrix/js/main/core/core_fx.js
\Bitrix\Main\UI\Extension::load(["ui.bootstrap4", "ui.fonts.opensans"]); // можно подключить бутстрап4 и шрифт опенсанс
$curPage = $APPLICATION->GetCurPage(true); // текущая страница для логики показа тех или иных блоков

?><!DOCTYPE html>
<html xml:lang="<?=LANGUAGE_ID?>" lang="<?=LANGUAGE_ID?>"> 
<head>
   <title><?$APPLICATION->ShowTitle(); //заголовок окна браузера?> </title>
   <meta http-equiv="X-UA-Compatible" content="IE=edge" />
   <meta name="viewport" content="user-scalable=no, initial-scale=1.0, maximum-scale=1.0, width=device-width">
   <link rel="shortcut icon" type="image/x-icon" href="<?=SITE_DIR?>favicon.ico" />
   <? $APPLICATION->ShowHead(); //вывод подключенных css, js ?>
   <?   

   // подключение каких-либо css (template_style.css не надо подключать, н автомато подключится)
   Bitrix\Main\Page\Asset::getInstance()->addCss("/bitrix/css/main/bootstrap.min.css");
   Bitrix\Main\Page\Asset::getInstance()->addCss(SITE_TEMPLATE_PATH."css/mycss.css");


   // подключение скриптов
   Bitrix\Main\Page\Asset::getInstance()->addJs(SITE_TEMPLATE_PATH . "/js/myscripts.js");
        Bitrix\Main\Page\Asset::getInstance()->addJs(SITE_TEMPLATE_PATH . "/js/myscripts2.js");


   // подключение мета тегов или сторонних файлов
   Bitrix\Main\Page\Asset::getInstance()->addString("<link rel='shortcut icon' href='/local/images/favicon.ico' />");
   ?>
</head>
<body>
   <div id="panel"><? $APPLICATION->ShowPanel(); //админ-панель битриксовская?></div>
   <header>
      <a href="<?=SITE_DIR?>">
         <?$APPLICATION->IncludeComponent(
            "bitrix:main.include", //компонент включаемой области
            "",
            array(
               "AREA_FILE_SHOW" => "file",
               "PATH" => SITE_DIR."include/company_logo.php"), //лого для компа
            false
         );?>
      </a>
      <a href="<?=SITE_DIR?>">
         <?$APPLICATION->IncludeComponent(
            "bitrix:main.include",//компонент включаемой области
            "",
            array(
               "AREA_FILE_SHOW" => "file",
               "PATH" => SITE_DIR."include/company_logo_mobile.php" //лого для мобилки
            ),
            false
         );?>
      </a>
      <?$APPLICATION->IncludeComponent(
         "bitrix:main.include",//компонент включаемой области
         "",
         array(
            "AREA_FILE_SHOW" => "file",
            "PATH" => SITE_DIR."include/telephone.php" //телефон
         ),
         false
      );?>

      <?$APPLICATION->IncludeComponent(
         "bitrix:sale.basket.basket.line", //корзина в шапке и авторизация
         "bootstrap_v4",
         array(
            "PATH_TO_BASKET" => SITE_DIR."personal/cart/",
            "PATH_TO_PERSONAL" => SITE_DIR."personal/",
            "SHOW_PERSONAL_LINK" => "N",
            "SHOW_NUM_PRODUCTS" => "Y",
            "SHOW_TOTAL_PRICE" => "Y",
            "SHOW_PRODUCTS" => "N",
            "POSITION_FIXED" =>"N",
            "SHOW_AUTHOR" => "Y",
            "PATH_TO_REGISTER" => SITE_DIR."login/",
            "PATH_TO_PROFILE" => SITE_DIR."personal/"
         ),
         false,
         array()
      );?>

      <?$APPLICATION->IncludeComponent(
         "bitrix:search.title", //поиск по сайту (одно поле ввода)
         "bootstrap_v4",
         array(
            "NUM_CATEGORIES" => "1",
            "TOP_COUNT" => "5",
            "CHECK_DATES" => "N",
            "SHOW_OTHERS" => "N",
            "PAGE" => SITE_DIR."catalog/",
            "CATEGORY_0_TITLE" => GetMessage("SEARCH_GOODS") ,
            "CATEGORY_0" => array(
               0 => "iblock_catalog",
            ),
            "CATEGORY_0_iblock_catalog" => array(
               0 => "all",
            ),
            "CATEGORY_OTHERS_TITLE" => GetMessage("SEARCH_OTHER"),
            "SHOW_INPUT" => "Y",
            "INPUT_ID" => "title-search-input",
            "CONTAINER_ID" => "search",
            "PRICE_CODE" => array(
               0 => "BASE",
            ),
            "SHOW_PREVIEW" => "Y",
            "PREVIEW_WIDTH" => "75",
            "PREVIEW_HEIGHT" => "75",
            "CONVERT_CURRENCY" => "Y"
         ),
         false
      );?>
      <?$APPLICATION->IncludeComponent(
         "bitrix:menu",
         "bootstrap_v4",
         array(
            "ROOT_MENU_TYPE" => "left",
            "MENU_CACHE_TYPE" => "A",
            "MENU_CACHE_TIME" => "36000000",
            "MENU_CACHE_USE_GROUPS" => "Y",
            "MENU_THEME" => "site",
            "CACHE_SELECTED_ITEMS" => "N",
            "MENU_CACHE_GET_VARS" => array(),
            "MAX_LEVEL" => "3",
            "CHILD_MENU_TYPE" => "left",
            "USE_EXT" => "Y",
            "DELAY" => "N",
            "ALLOW_MULTI_SELECT" => "N",
            "COMPONENT_TEMPLATE" => "bootstrap_v4"
         ),
         false
      );?>
   </header>
   <main>
      <?if($curPage != SITE_DIR."index.php"):?>
         <?$APPLICATION->IncludeComponent(
            "bitrix:breadcrumb", //хлебные крошки
            "universal",
            array(
               "START_FROM" => "0",
               "PATH" => "",
               "SITE_ID" => "-"
            ),
            false,
            Array('HIDE_ICONS' => 'Y')
         );?>
      
         <h1><?$APPLICATION->ShowTitle(false);//заголовок h1?></h1>
      <?endif;?>
footer.php
        </main>
   <footer>
      <? $APPLICATION->IncludeComponent(
         "bitrix:menu",
         "bottom_menu",
         array(
            "ROOT_MENU_TYPE" => "bottom",
            "MAX_LEVEL" => "1",
            "MENU_CACHE_TYPE" => "A",
            "CACHE_SELECTED_ITEMS" => "N",
            "MENU_CACHE_TIME" => "36000000",
            "MENU_CACHE_USE_GROUPS" => "Y",
            "MENU_CACHE_GET_VARS" => array(),
         ),
         false
      );?>
      <?//ну и включаемые области обычно с контактами, Адресом и тд?>

   </footer>   
</body>
</html>
примечание:
старым апи скрипты и стили подключали так:
// Для подключения скриптов
$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH."/js/myjs.js" );

// Подключение css
$APPLICATION->SetAdditionalCSS(SITE_TEMPLATE_PATH."/css/mycss.css", true);

// Подключение мета тегов или сторонних файлов
$APPLICATION->AddHeadString("name='<meta name='yandex-verification' content='62be9ea1' />'");

Внедряем верстку
Как я делаю:
  • накидываю через публичный раздел подходящий компонент с шаблоном битрикса на странице
  • из публичного раздела в режиме правки копирую в свой шаблон сайта
  • удаляю ненужные стили, скрипты, картинки в шаблоне компонента (мне нужные обычно находятся в папке шаблона сайта, уже подключенные)
  • программирую нужную верстку
Важно!
  • При размещении компонента через публичный раздел правила для него автоматом записываются в /urlrewrite.php
  • Если Вы размещаете через код, то правило надо дописывать вручную
типа такого
array (
    'CONDITION' => '#^/catalog/#',
    'RULE' => '',
    'ID' => 'bitrix:catalog',
    'PATH' => '/catalog/index.php',
    'SORT' => 100,
  )
Что оно значит:
  • если обращение идет до файла, которого физически на сайте не существует
  • битрикс смотрит правила в /urlrewrite.php
  • если адрес удовлетворяет CONDITION, то запускается файл из PATH
  • если таких правил нет (которые удовлетворяют CONDITION), то выводит страницу 404
Обработка адресов UrlRewrite - статья Битрикс
Запрет на перетасовку правил в urlrewrite.php - Если много правил ЧПУ и важен порядок применения правил

Создаем инфоблоки
туториал Битрикса с видосиком про инфоблоки
Важно!
при создании инфоблока важно включить генерацию символьного кода раздела и элемента, потому что они участвуют в генерации урлов
Меню
ссылки меню частично сформировались, когда мы заводили разделы

формирование ссылок из инфоблоков (обычно это левое меню)
/.left.menu.php,  /catalog/.left.menu.php
<?
$aMenuLinks = Array(
);
?>
/catalog/.left.menu_ext.php
<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();

global $APPLICATION;
$aMenuLinksExt=$APPLICATION->IncludeComponent("bitrix:menu.sections", "", array(
   "IBLOCK_TYPE" => "catalog",
   "IBLOCK_ID" => "4", //id инфоблока
   "IS_SEF" => "Y",
   "SEF_BASE_URL" => "/catalog/", //директория каталога
   "SECTION_PAGE_URL" => "#SECTION_CODE#/",
   "DETAIL_PAGE_URL" => "#SECTION_CODE#/#ELEMENT_CODE#/",
   "DEPTH_LEVEL" => "2",
   "CACHE_TYPE" => "A",
   "CACHE_TIME" => "36000"
   ),
   false,
   array("HIDE_ICONS"=>"Y")   
);
$aMenuLinks = array_merge ($aMenuLinksExt, $aMenuLinks);
?>
в инфоблоке настроены так ссылки

компонент bitrix:menu.sections формирует ссылки только на разделы

2 кастомных компонента, которые формируют ссылки и на элементы:

Каталог товаров
Если у Вас планируется интеграция с 1С, то это можно пропустить, а просто выгрузить модулем обмена, он сам все создаст и все настройки проставит
1. необходимо решить: у Вас будут только товары или товары с торг предложениями
статья Битрикса Отличия простых товаров и товаров с торг предложениями
в 1С аналог торг предложений: учет по характеристикам
2. Инфоблок превращаем в торговый каталог
Контент > Инфоблоки > Типы инфоблоков > [нужный тип инфоблока] > [нужный инфоблок]
вкладка "торговый каталог" > ставим галку "является торговым каталогом"

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


3. смотреть товары торгового каталога можно в админке в разделах
  • Контент>Инфоблоки
  • Магазин>[название инфоблока товаров]
Базовые настройки интернет-магазина
делайте через мастер /bitrix/admin/storeassist.php?lang=ru
Документация битрикс про настройку магазина

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

Если блог был полезным, можете угостить меня "чашечкой кофе" :)

Сбер по номеру телефона +7 (953) 585-13-09 Вероника.
Спасибо!