1с битрикс — Нужно убрать одно единственное слово из шаблона.


Содержание

7 смертных грехов разработки на 1С-Битрикс

1. Изменять все стандартное/Изменять содержимое папки Bitrix

Изменение всего, что лежит в папке /bitrix/ — табу.

Если вам нужно изменить шаблон компонента — копируйте его в шаблон сайта.

Если вам нужно изменить компонент — используйте result_modifier.php, component_epilog.php (про них я подробно писал в этой статье), напишите свой компонент, в конце концов.

Если вам нужно изменить модуль — медицина бессильна пишите свой, наследуйтесь от стандартных.

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

Для пользовательских модулей/компонентов/шаблонов/обработчиков должна использоваться папка /local/.

Добавляйте папку /bitrix/ в .gitignore. Если в вашем git репозитории есть файлы /bitrix/, значит, скорее всего, что-то вы делаете не так. Вы можете подумать, что есть исключения. Да, но прибегать к созданию чего-либо в папке Bitrix нужно только если по-другому никак.

2. Получать данные в template.php

Никогда, слышите, никогда не делайте этого! Я говорю о CIBlockElement::GetList (и подобных им функциях) в template.php.

Если вам нужно получить какие-то дополнительные данные используйте result_modifier.php или component_epilog.php. Серьезно. Все что Вам нужно — лишь создать файл в папке шаблона. Это займет не на много больше времени, чем писать код в самом шаблоне.

Шаблон должен быть использован только для вывода информации. Ни для чего больше. Если вычисления (получение дополнительных данных, их модификация) находятся в шаблоне, вы становитесь сильно зависимы от порядка выполнения кода.

Допустим, необходимо посчитать общее количество просмотров всех статей на странице и вывести значение. Если вы разместите вычисления в цикле вывода статей, полученное значение можно будет использовать только после последней статьи. Простая задача по переносу блока наверх страницы превратится в ад.

3. Неверное подключение скриптов и стилей сайта

Откройте свой сайт, найдите основной шаблон и откройте файл header.php.

Если вы видите что-то похожее — гоните Вашего разработчика взашей.

В Битриксе вполне неплохой механизм автоматического объединения и минификации скриптов, кроме того, Битрикс умеет перемещать JS в конец страницы, благодаря чему сайт быстрее грузится. Если кто вдруг не знал, вся эта годнота включается в настройках Главного модуля:

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

Соберите скрипты из шаблона сайта, поместите их в JS файл, а потом подключите его с помощью AddHeadScript().

Тоже самое касается и стилей. Если вам необходимо подключить стили, вынесите их в отдельный файл, а потом используйте SetAdditionalCSS().

В итоге получится нечто похожее:

. или, если вы используете D7, так:

4. Неверное подключение скриптов и стилей компонента

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

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

И Вы правильно подумали, что переносить стили (и скрипты) в основной шаблон сайта (/local/templates/[ваш сайт]/template_styles.css и /local/templats/[ваш сайт]/script.js) не стоит — иначе они будут подключаться на каждой странице.

Но многие разработчики просто помещают css и js в файл template.php шаблона компонента и на этом успокаиваются. Правильным же подходом будет создание файлов script.js и style.css в папке шаблона. Они подключатся автоматически и избавят от головной боли при разработке.

5. Отключение кеширования

Кеширование позволяет значительно снизить нагрузку на БД. Это более остро чувствуется при росте аудитории (и соответственно запросов к БД).

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

Мой совет: перед сдачей проекта прогнать сайт через монитор производительности. Он покажет ошибки в разработке и вам не придется искать проблемные компоненты вручную.

6. Вложенные циклы при получении элементов инфоблока

Очень часто при разработке нового компонента возникает необходимость получать данные из двух (или больше) связанных Инфоблоков.

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

Код упрощен для простоты восприятия, матерые разработчики найдут в нем сразу несколько ошибок;)

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

В этом случае, вне зависимости от количества элементов инфоблока, будет всего 2 SQL запроса: получение моделей и получение деталей. А уже дальше в цикле должна быть проведена работа по распределению деталей на соответственные модели автомобилей.

Вообще, подобных ошибок очень много:

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

Перечислять все ушло бы очень много времени.

7. Бездумная разработка компонентов Bitrix

Не самым лучшим решением будет разрабатывать весь сайт на самописных компонентах. Мотивация может быть разная: «Стандартный компонент делает слишком мало», «Стандартный компонент делает слишком много», «Шаблон слишком массивный, а в данных не разобраться», «Работает не так как я хочу», «Работает так как я хочу, но не очень».

Почему не стоит делать это? По целому ряду причин:

  • От ошибок никто не застрахован. Но в случае стандартных компонентов можно расcчитывать, что их рано или поздно исправят, а ваша (если вы разработчик) ответственность закончится после сдачи проекта.
  • Компоненты Битрикс в некоторых случаях сложны и запутаны. Сделано это ради гибкости. Уверен, если делать упор на универсальность, в конечном итоге компонент получится похожим на стандартный (а то и будет еще запутаннее:)).
  • Если в будущем изменится структура данных, логика работы, а бОльшая часть сайта была написана сторонними разработчиками, поддержка проекта превратится в настоящий ад с постоянным переписыванием десятка компонентов.

В общем, прежде чем приступить к созданию очередного компонента, задайте себе вопрос: «А не возникнет ли проблем у Заказчика через год или два?».

Вместо заключения

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

Использование название раздела новостей в Title битрикс

Если нужно вывести название раздела инфоблока новостей в Title, например использовать для вывода заголовка первого уровня из названия раздела в Битрикс. Для этого создаем инфоблок новостей, создаем необходимые разделы и подразделы, наполняем элементами и выводим в соответствующий раздел сайта. Далее в папке шаблона news.list добавляем файл component_epilog.php со следующим содержимым:

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

Цитата
Андрей пишет:
А в шаблоне сайта нужно вставить

Чтобы в это место подставилось название раздела?

А как вывести название раздела\подраздела для конкретного элемента?
Например:
Каталог — подкаталог-под_подкаталог
В catalog:section при переходе в «подкаталог» выводится список товаров, в том числе и из «под_подкаталога»
Задача вывести для каждого товара его «подкаталог» или «под_подкаталог», в котором лежит данный товар.

Подскажите, а то что-то ума не приложу как получить ссылку и имя для раздела, в котором лежит элемент(((

Цитата
Ант написал:
А как вывести название раздела\подраздела для конкретного элемента?
Например:
Каталог — подкаталог-под_подкаталог
В catalog:section при переходе в «подкаталог» выводится список товаров, в том числе и из «под_подкаталога»
Задача вывести для каждого товара его «подкаталог» или «под_подкаталог», в котором лежит данный товар.

Подскажите, а то что-то ума не приложу как получить ссылку и имя для раздела, в котором лежит элемент(((

Цитата
Михаил Базаров пишет:
Цепочка навигации не подходит? Просто сверстать так как надо по дизайну


Цитата
Михаил Базаров пишет:

Цепочка навигации не подходит

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

при просмотре «подраздел1» выводятся все эелменты нижестоящих подразделов. И требуется, чтобы каждый элемент показывал из какого он подраздела и по клику переходил в свой подраздел. А цепочка навигации строится до текущего просматриваемого «подраздела1» для всех элементов (

ShowTitle(false);?>

), галка в настройках снята.

При первой загрузке страницы заголовок отображается корректно, если перезагрузить страницу, заголовок пропадает.
Далее если почистить КЭШ, и снова обновить, появляется вновь.

Отключаю кэширование компонентов, всё работает корректно. Включаю обратно, происходит всё вышеописанное.

Файл из данной статьи уже пробовал, разместить в папке news.list — не помогает.

В чём ещё может быть причина?

Цитата
Алексей Клёнин написал:
Михаил, добрый день.
Подскажите пожалуйста у меня проблема следующая:
в шаблоне news.list выводиться заголовок (

ShowTitle(false);?>

), галка в настройках снята.

При первой загрузке страницы заголовок отображается корректно, если перезагрузить страницу, заголовок пропадает.
Далее если почистить КЭШ, и снова обновить, появляется вновь.

Отключаю кэширование компонентов, всё работает корректно. Включаю обратно, происходит всё вышеописанное.

Файл из данной статьи уже пробовал, разместить в папке news.list — не помогает.

В чём ещё может быть причина?

ShowTitle(false);?>

Заметки разработчика

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

На одном из проектов, нужно было единоразово заполнить цены товаров из свойства инфоблока. Сделать это можно через API, методами CPrice::Update и CP.

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

Иногда, необходимо вывести имя пользователя добавившего элемент инфоблока. Например, автора новости или автора объявления на информационной доске объя.

Часто бывает нужно вывести свойство привязка к Яндекс карте в детальном описании элемента. Например в детальной новости или в детальном элементе катал.

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

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

© 2011—2020 Разработка сайтов: ИП Базаров, ОГРНИП: 315784700173692.
Работает на 1С-Битрикс: Бизнес.
Сайт может содержать материалы 18+ Политика конфиденциальности

Информация на сайте, не является публичной офертой.
Копирование материалов сайта запрещено.
Дизайн, верстка и сборка сайта: Михаил Базаров

Урок 3. Создание шаблона 1С Битрикс (Foundation)

403 Forbidden You don’t have permission to access / on this server

Отлично! Начнем свое повествование с ошибки )). Дело в том, что я сам растерялся получив эту ошибку, уже думал у меня перестало работать Веб-окружение Битрикс или порт заблокировался. Но оказалось все проще, мы просто в прошлом уроке удалили файл index.php из папки сайта, а сервер по умолчанию не дает просматривать содержимое папки и выдает ошибку доступа.
По этому чтобы больше не пугаться и не пугать вас проверим работу веб-сервера apache командой phpinfo() .
Для этого создадим в корневой папке нашего проекта файл index.php и заполним его простым содержанием.

Вот такой у нас будет файл. И теперь если выполнить открытие сайта через веб-окружение мы уведем информацию о настройках php.

Устройство шаблона Битрикс

Минимальный набор шаблона Битрикс

Т.е. все что выше разделителя #WORK_AREA# попадает в header.php, а что ниже в файл footer.php. Вместо разделителя выводится контент сайта через какой-либо компонент, например news (новости).
Не очень понятная структура скажете вы. И я соглашусь. Например, в joomla примерно такое же устройство шаблона, как и в Bitrix, как бы это было не парадоксально. Но файл шаблона один, а вывод контента сделал через вызов специального компонента. Почему так не сделал Битрикс? Я думаю такое устройство шаблона эта дань традициям, ведь Битрикс поддерживает совместимость со всеми предыдущими своими редакциями. И в связи с этим они не могут поменять структуру шаблона, как основу проектирования сайтов.

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

Магазин Start Shop

Внедрение собственной верстки в шаблон Битрикс

Копирование исходников шаблона

Теперь нужно подключить добавленный шаблон в админки Битрикса. Авторизуемся если вы этого ещё не сделали добавив адресной строке к адресу сайта bitrix/ . Например так http:/localhost:6449/bitrix/. Затем нужно авторизоваться, перейти в раздел администрирования Настройки продукта — Сайты — Список сайтов. Выбрать единственный сайт и открыть его на изменение.

В открывшийся форме Параметры сайта выбрать наш единственный шаблон.

Нажать Сохранить.
Но наша страничка не изменится. Во-первых в индексной страничке нет никаких данных, а во-вторых пока что в файлах Битрикс шаблона header.php и footer.php у нас пусто. Заполнением их мы и займемся в первую очередь.

Верстка шаблона Битрикс

Зеленым квадратом выделены данные которые попадут в шапку (header.php), синим, то что попадет в подвал (footer.php) и желтым выделен контент, т.е. то что будет выводится компонентом Битрикс, который мы разместим в файле index.php. При навигации по сайту переходя в разделы шапка и подвал будут оставаться всегда одинаковыми, а контент меняться на вывод содержимого файла index.php того раздела в который вы перешли.
Чтобы открыть файлы, которые мы будем верстать я их специально оставил в шаблоне. Это два файла ecommerce-grid-x.html и product-page-grid-x.html. Вы можете их просто открыть двойным кликом мыши в браузере. Использоваться в работе шаблона они не будут, но мы будем из них брать верстку и помещать в файлы шаблона Битрикс. Ну и сравнивать результат.

$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH . ‘/js/vendor/jquery.js’);
$APPLICATION->AddHeadScript(SITE_TEMPLATE_PATH . ‘/js/vendor/foundation.min.js’);
?>

Ну а теперь вставим код меню, который в последствии мы заменим на вызов компонента Битрикс.
Код:

Вот такая панель появляется вверху если пользователь авторизовался, как администратор. Очень удобно и в дальнейшем мы её будем постоянно пользоваться.
.
На этом пока работу с head.php закончим и перейдем к foter.php. В подвал мы скопируем конец файла нашего исходного примера ecommerce-grid-x.html.
Код:

Vivamus Hendrerit Arcu Sed Erat Molestie

Curabitur vulputate, ligula lacinia scelerisque tempor, lacus lacus ornare ante, ac egestas est urna sit amet arcu. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Sed molestie augue sit.

Создание HTML шаблона в 1С Битрикс

  • CSS / CSS3
  • Flexbox CSS
  • JavaScript
    • JavaScript с нуля
    • JS и Jquery
  • Уроки по 1С-Битрикс
    • Контент менеджер
      • Авторизация на сайте
      • Элементы управления
      • Работа с информацией
      • Управление структурой
    • Сайт на 1С-Битрикс
      • Создание landing page

  • Видео новости
  • Модули расширений
  • Расширения и плагины
    • Bootstrap

Дополнительное видео

ПОДПИСКА на УРОКИ

Видео урок по Создание HTML шаблона в 1С Битрикс, это четвертое видео из серии уроков «Интеграция шаблона в систему 1С Битрикс».

В видео мы с Вами разберем:

  • Как перенести готовую верстку HTML шаблона в Битрикс
  • Подключим скрипты и перенесем структуру сайта в битрикс
  • Подключим языковые файлы и проверим, как это работает
  • Разберем часто встречающие ошибки

Создаем шаблон через административный раздел

Мы не будем использовать текущий установленный шаблон из маркеплейса, а создадим свой с нуля на примере того что есть сейчас. Для этого перейдем в административную часть сайта, Настройки, Настройки продуктов, выбираем Шаблоны сайтов. Добавляем новый шаблон.

Задаем основные настройки шаблона, ID пропишем «lendtv» , в поле название «Лендинг», в описании прописываем «Наш шаблон лендинга», порядок указываем «1», Тип оставляем по умолчанию «Шаблон сайта». Спускаемся ниже.

В данное поле, нам нужно вставить код нашей HTML страницы, который будет разделен макросом #WORK_AREA# , верхняя часть у нас пойдем в header.php , а нижняя часть после макроса в файл footer.php .

Открываем нашу страницу верстки HTML шаблона в редакторе, выделяем код, копируем и вставляем в нашу форму. Мы с Вами условились, что все рабочие блоки отнесем в header . Для этого спускаемся до закрытия секции . Ставим курсор между section и footer , жмем #WORK_AREA# , добавился маркер.

При помощи вставки данного маркера система Битрикс создаст автоматически файлы header.php и footer.php с размещенным в них нашим кодом. Вкладку «Стили сайта» оставляем пустой, в «Стили шаблона» копируем наш основной код стилей из файла style.css, и сохраняемся.

Далее все работы будем проводить через FTP.

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

Пропишем код проверки

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

if(!defined(‘B_PROLOG_INCLUDED’) || B_PROLOG_INCLUDED !== true) die(); // проверка

Подключение перевода

Подключаем ленговские файлы, отвечающие за перевод нашего шаблона. Вставляем данный код.

IncludeTemplateLangFile(__FILE__); // перевод файлов

Подключаем скрипты

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

$APPLICATION->ShowHead(); // подключения скриптов со страницы шаблона

Подключение title

Следующим этапом подключаем title при помощи метода «ShowTitle» .

$APPLICATION->ShowTitle(); // вывод title

Подключение директорий файлов

Затем укажем путь к нашим файлам при помощи константы «SITE_TEMPLATE_PATH» , она помогает определить директорию, где они находятся.

// путь к директории шаблона (обязательно поставить флешь в конце).

Вставляем константу к нашим стилям шаблона и обязательно за ней, вставляем флешь. У файла style.css мы код перенесли в templates_styles.css поэтому, он нам не нужен, и можем его удалить.

Укажем данную константу по всему шаблону у подключаемых файлов скриптов, стилей, картинок. Поместим favicon в основную директорию шаблона, заменим в атрибуте type=»png» на x-icon и укажем расширение файла .ico .

При помощи данного сервиса http://www.tools.dynamicdrive.com/favicon/ преобразуем ее в наше расширение и зальем в основную директорию, а favicon.png удалим.

Не забываем в footer.php прописать подключение файлов к текущему шаблону.

Подключение административной панели

Далее сразу за тегом body , подключаем административную панель при помощи метода «ShowPanel» .

$APPLICATION->ShowPanel(); //панель админки

Выносим языковое фразы

Теперь вынесем языковые файлы, которые будем подключать без компонентов, то есть напрямую через шаблон. Для этого создадим соответствующею директорию, где они будут храниться. Создаем папку lang , в ней поддиректории ru и en .

Открываем директорию ru и создаем в ней файл, с которого будем выносить языковые фразы, пишем header.php . В основном шаблоне смотрим, что нам нужно вынести в ленговские файлы. Возьмем из header.php шаблона заголовки наших блоков, открываем leng , формируем массив с первой нашей фразой «В настоящее время мы работаем над удивительным проектом» с ключом «WORKING_PROJECT» , а в header.php пропишем вместо фразы функцию «GetMessage» с нашим ключом «WORKING_PROJECT» .

Далее вынесем «Характеристика», прописываем массив с ключом «CHARACTERISTIC» и вставляем функцию «GetMessage» где передаем параметр данного ключа.

Затем заменим заголовок «Контакт», создаем массив с ключом «CONTACT» , и меняем заголовок на функцию с нашим ключом.

Переходим в footer , тут можно вывести данный блок как есть через включаемую область, но для примера давайте вынесем эти фразы в Leng . Переходим в директорию ru и создаем новый файл с названием, у которого будем выносить фразы, пишем footer.php . В нем создаем массив с нашей фразой «ДАЛЬВЕБСТРОЙ» с ключом «COPY_DWS» и вставляем функцию «GetMessage» в основной файл с нашим параметром ключа.

Переносим следующую фразу «Все Права Защищены. Разработанный» в leng с ключом «COPY_RIGHTS» и не забываем заменить фразу в footer на функцию «GetMessage»

Английская версия языковых файлов

Для английской версии, нам нужно создать в директории en соответствующие файлы с такими же массивами только с английским переводом.

Копируем массив из файла header , переходим в нашу директорию en , создаем файл header.php , вставляем массив и вставляем переведенные фразы.

Тоже проделаем с footer , копируем массив, переходим в директорию en, и создаем файл footer.php в который вставляем наш массив и переводим фразы.

Включим шаблон в настройках сайта

Перейдем в административный раздел, Настройки продукта, Cайты, Список сайтов, открываем текущий сайт, спускаемся в самый низ и в Шаблонах укажем наш созданный шаблон «Лендинг», сохраняемся.

Переходим в визуальную часть и смотрим, что у нас получилось.

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


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

Давайте это поправим, перейдем в наш шаблон, откроем template_styles.css , находим код для вывода картинки, убираем [../] , так как текущий файл находится в основной директории шаблона. Сохранимся, перейдем на сайт и посмотрим отображение. Видим, появилась иконка загрузки и картинка слайдера.

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

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

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

Если из основного шаблона меняем путь файла style.css , тогда изменяем этот путь в самом коде, так как относительно данного файла картинки будут находиться в другой директории.

Прописывая путь, с помощью константы «SITE_TEMPLATE_PATH» , не забывайте ставить в конце ее флешь.

На этом урок по Установке HTML заканчиваю, в следующих видео будем выводить некоторые блоки в отдельные включаемые области. С программируем компоненты, форму и так далее.

Создаём шаблон 1С-Битрикс на базе Bootstrap вёрстки

Введение

Уважаемый читатель, данная статья является по сути своей продолжением статьи «Как сверстать веб-страницу. Часть 2 — Bootstrap» и здесь мы отойдём от собственно вёрстки, занявшись интеграцией HTML шаблона в CMS 1С-Битрикс.

В предыдущей части Хабраюзер Mirantus сверстал шаблон Corporate Blue от студии Pcklaboratory с помощью Bootstrap 3.

Для данной статьи мы воспользуемся одним из форков репозитория на GitHub, приведённого в конце предыдущей статьи, поскольку в нём были исправлены некоторые баги.

Создание каркаса шаблона

Шаблон сайта с точки зрения 1С-Битрикс – это папка с набором определённых файлов внутри, поэтому шаблон может быть создан как через файловую структуру (инструментами 1С-Битрикс, по FTP или SSH), так и с помощью раздела.

  • Первым делом создадим в папке /bitrix/templates/ раздел, название которого в дальнейшем будет использоваться в качестве ID нашего шаблона, например whitesquare-bootstrap (в дальнейшем в рамках статьи мы будем всегда по умолчанию подставлять именно это значение в качестве ID шаблона).
  • Перенесём в папку шаблона общие ресурсы (JS, CSS, изображения, шрифты) из шаблона страницы:

Теперь наша задача создать HTML каркас шаблона. Фактически он состоит из 2 частей, каждая из которых будет лежать в отдельном файле в папке шаблона:

  • /bitrix/templates/whitesquare-bootstrap/header.php
  • /bitrix/templates/whitesquare-bootstrap/footer.php

Если смотреть на шаблон через административный раздел 1С-Битрикс (), то мы увидим шаблон целиком, header.php будет отделён от footer.php с помощью тега #WORK_AREA#.

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

Таким образом мы можем распределить код index.html из исходного статического шаблона по трём файлам:

(это будет пример рабочей страницы на котором мы будем проверять работоспособность нашей рабочей области) в котором помимо Html разметки мы добавим вызов header’а и footer’а (они создадутся автоматически, если создавать страницу средствами 1С-Битрикс):

Элементы 1С-Битрикс

  • Добавим подключение пролога и языковых файлов. Это необходимо сделать как в header.php, так и в footer.php (т.е. в начале шаблона и сразу после #WORKAREA#)
  • Заменим текст внутри тега на вызов функции:
  • Заменим текст внутри тега

на вызов функции:
Как видите используютcя разные параметры для вызова одной отложенной функции, чтобы можно было задать разные значения для заголовка браузера и заголовка видимой части страницы, если это потребуется SEO специалистам.
  • Добавим вывод мета-данных (ключевых слов и описания для поисковых систем):
  • Зададим относительный путь ко всем файлам шаблона (картинка, CSS, JS, шрифтам) — — данная функция задаёт путь к шаблону относительно корня сайта (и позволяет не прописывать в явном виде идентификатор шаблона, что полезно при копировании или переименовании оного). В результате мы получим:
    Аналогичным образом мы можем использовать SITE_TEMPLATE_PATH и в index.php, однако следует помнить о том, что при смене шаблона в настройках сайта, применяемого к странице, изменится и этот путь!
  • ShowMeta(«description»)?>
    Добавим вызов функции $APPLICATION->ShowHead();, которая служит сразу нескольким целям (в частности динамическому подключению CSS и JS библиотек, объявленных в компонентах в теле страниц с помощью отложенных функций в заголовке, а так же объединяет и сжимает эти библиотеки, если используется соответствующая настройка 1С-Битрикс)
    С помощью отложенных функций SetAdditionalCSS и AddHeadScript мы можем всегда подключить CSS и JS в , а так же избежать повторного подключения одинаковых библиотек (это особенно актуально, например для JQuery, если вы подключаете её не централизованно в шаблоне сайта, в соответствующих компонентах и таких компонентов окажется на странице несколько).
    Важно помнить, что мы не можем таким образом воспроизвести конструкции типа для устаревших браузеров, поэтому целиком конструкция будет иметь вид:

  • Добавляем панель инструментов 1С-Битрикс сразу после открытия тега —
  • Фактически мы создали статичный HTML каркас с минимальным набором элементов 1С-Битрикс, который уже работает.
    Дальнейшая наша задача – перевод отдельных функциональных блоков на работу с компонентами 1С-Битрикс.

    Компоненты 1С-Битрикс

    В рамках данной статьи мы остановимся только на процессе интеграции вёрстки со стандартными компонентами 1С-Битрикс. Мы не будем создавать свои компоненты и не будем кастомизировать типовые.

    Мы создадим отдельную страницу (например, 1.php) на которой будем размещать по 1 компоненту для упрощения работы средствами 1С-Битрикс.

    Разместим компонента (например, форму поиска — bitrix:search.form) с помощью визуального редактора:

    Используя включенный режим правки скопируем шаблон компонента в шаблон сайта. Для этого наведём курсор мыши на область с компонентом, дождёмся пока появится контекстное меню с шестерёнкой и нажмём на стрелку выпадающего списка:

    В появившемся диалоге нам необходимо указать имя шаблона компонента и выбрать шаблон сайта в котором будет хранится шаблон компонента (в нашем случае это whitesquare-bootstrap):

    В результате наших действий в Шаблоне компонента /bitrix/templates/whitesquare-bootstrap/ появилась ещё одна папка – components – в ней будут находиться шаблоны всех компонентов, используемых в рамках шаблона сайта.
    Первый появившийся шаблон компонента будет расположен по адресу /bitrix/templates/whitesquare-bootstrap/components/bitrix/search.form/top/
    Опытные разработчики могут сразу создавать шаблон компонента, копируя его в шаблон сайта из компонента.

    Иногда для дальнейшей работы больше подходит один из шаблонов компонента, поставляемых вместе с системой. Тогда имеет смысл посмотреть каждый из них в работе. Это можно сделать в визуальном редакторе по нажатию на кнопку шестерёнки:

    Включаемые области (лого, копирайт, соц сети)

    Компонент включаемой области позволяет вложить внутрь себя любой текст, HTML или php код, а так же другие компоненты и вывести этот контент для определённой страницы, раздела или везде, где вызывается включаемая область.
    Для всех указанных выше объектов мы считаем рациональным использование включаемой области с целью вынести эти блоки из шаблона. Т.е. для их редактирования по прежнему необходимо будет владеть минимумом познаний в HTML.
    Профессионалы могут возразить, что для блока с кнопками соц сетей следовало бы сделать свой компонент, однако нам это кажется не рациональным. Проще загнать этот блок за 10 минут во включаемую область и отредактировать при необходимости, ведь адрес сообщества Facebook не меняется каждый день!

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

    • /bitrix/templates/whitesquare-bootstrap/include/bottom-logo.php
    • /bitrix/templates/whitesquare-bootstrap/include/copyright.php
    • /bitrix/templates/whitesquare-bootstrap/include/social-networks.php
    • /bitrix/templates/whitesquare-bootstrap/include/top_logo.php

    Код вызова компонента включаемой области будет выглядеть в этом случае так:

    Внутри файла включаемой области просто помещаем кусок HTML кода:

    Мы не будем в данной статье рассматривать вопрос интеграции Twitter Ленты, поскольку самое простое решение – положить виджет твиттера во включаемую область, аналогично описанным выше решениям.
    Так же в Marketplace 1С-Битрикс хватает компонентов, выводящих твиттер ленту, которыми вы так же можете воспользоваться.

    Форма поиска

    Мы воспользовались компонентом bitrix:search.form и скопировали suggest шаблон компонента в шаблон сайта.
    HTML код шаблона компонента находится в файле /bitrix/templates/whitesquare-bootstrap/components/bitrix/search.form/top/template.php

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

    Комплексный компонент
    1. Создадим в папке /bitrix/templates/whitesquare-bootstrap/components/bitrix/search.form/top/ папку bitrix
    2. Переместим шаблон компонента /bitrix/templates/whitesquare-bootstrap/components/bitrix/search.suggest.input/ в /bitrix/templates/whitesquare-bootstrap/components/bitrix/search.form/top/bitrix/. Таким образом получив:
      /bitrix/templates/whitesquare-bootstrap/components/bitrix/search.form/top/bitrix/search.suggest.input/top/
    3. В параметрах компонента bitrix:search.suggest.input укажем шаблон top:
    Вернёмся к форме поиска

    На наш взгляд русские версии очень «корявые», однако мы создали их лишь для демонстрации механизма языковых файлов. При желании в них можно разместить английский текст или оставить пустыми.

    Теперь осталось лишь разместить код вызов компонента вместо вёрстки в шаблоне:


    Верхнее меню

    Для создания верхнего меню воспользуемся компонентом bitrix:menu. Скопируем шаблон .default этого компонента в шаблон нашего сайта под именем top. Он практически не содержит ничего лишнего, поэтому мы легко адаптируем его под нашу вёрстку:

    Теперь заменим блок верхнего меню в шаблоне на вызов компонента меню:

    Левое меню

    Аналогично верхнему меню возьмём за основу компонент компонентом bitrix:menu. Скопируем шаблон .default этого компонента в шаблон нашего сайта под именем left.
    После правки шаблона получим:

    Заменим блок левого меню в шаблоне вызовом компонента:

    Пользуясь тем, что в 1С-Битрикс меню наследуется мы можем положить файлы левого меню .left.menu.php во все разделы, где они нужны с разным содержимым, а в корне, например, вовсе убрать. Вёрстка не пострадает, а меню будет отображаться лишь там, где это необходимо.

    Нижнее меню

    Нижнее меню (в разделе SiteMap) отображается в 2 колонки. Можно конечно сделать универсальный компонент меню в шаблоне которого пункты будут делиться по столбцам (автоматически, либо по наличию какого-либо параметра, установленного для пунктов в режиме расширенного редактирования меню).
    Однако, мы понимаем, что подвал – не самая часто редактируемая часть и нет смысла тратить значительные усилия на его разработку.
    Поэтому мы пойдём по простому пути (за который любители идеального кода, вероятно, нас проклянут) – мы создадим 2 меню: bottomL и bottomR.
    Несмотря на то, что меню будет 2 шаблон мы для них будем использовать 1.

    Вновь возьмём за основу компонент компонентом bitrix:menu. Скопируем шаблон .default этого компонента в шаблон нашего сайта под именем bottom.
    Шаблон:

    Сайдбар – наши офисы

    Честно говоря без демо контента не понятно какую функцию оный сайдбар выполняет. Рискнём предположить, что всё-таки в нём показывается не картинка (уж больно несовременно), а полноценная карта Google. Наверное она маловата, чтобы располагать на ней элементы управления, так что она будет манималистичной.
    Если же я не прав, то пожалуй один из самых простых способов реализации сайдбара – включаемая область, о которых мы уже говорили.
    Возьмём компонент bitrix:map.google.view и скопируем шаблон .default в шаблон сайта, переименовав в sidebar-map.
    Мы весь сайдбар сделаем частью компонента, включая заголовок. А значит, чтобы упростить работу редакторов необходимо вынести текст заголовка в параметры компонента.
    Создадим в шаблоне компонента файл .parameters.php следующего содержания:

    • RU (/bitrix/templates/whitesquare-bootstrap/components/bitrix/map.google.view/sidebar-map/lang/ru/.parameters.php):
    • EN (/bitrix/templates/whitesquare-bootstrap/components/bitrix/map.google.view/sidebar-map/lang/en/.parameters.php):

    Шаблон компонента в таком случае модифицируется совсем незначительно (поместим карту внутрь сайдбара и добавим заголовок):
    ‘; $APPLICATION->IncludeComponent(‘bitrix:map.google.system’, ‘.default’, $arTransParams, false, array(‘HIDE_ICONS’ => ‘Y’)); ?>

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

    Теперь пришла пора взяться за рабочую область!

    Список членов команды

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

    • Имя
    • Фото (миниатюра)
    • Должность
    • Порядок относительно других членов команды

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

    • Символьный код инфоблока – TEAM
    • Символьный код свойства «Должность» — POSITION

    Может показаться, что на этом этапе нам подойдёт компонент catalog.section с шаблоном board (этот шаблон генерирует таблицу с заданным количеством столбцов), однако в процессе эксплуатации такое решение весьма вероятно окажется сложнее. Поэтому мы всё же воспользуемся bitrix:news.list (скопировав шаблон .default в шаблон сайта под именем team-list) и допишем немного собственного кода.
    Добавим в .parameters.php нашего шаблона новое значение:

    Не забудем добавить значения в языковые файлы!

    Помимо счётчика нам понадобится вывести значение нашего свойства «Должность», для которого мы задали код POSITION. В массиве с данными, которые отдаёт компонент это свойство хранится в $arResult[«ITEMS»][«PROPERTIES»][«POSITION»][«VALUE»], поскольку мы будем выводить свойство в перебираемом по ITEMS элементам, то это будет выглядеть:

    Сам шаблон тогда будет выглядеть так:

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

    Не забудьте удалить ненужную более папку /bitrix/templates/whitesquare-bootstrap/images/team/ с картинками в шаблоне после перевода блока с персонами на инфоблок!

    Текст страницы ABOUT

    Поскольку у нас нет понимания какие функции выполняют остальные элементы страницы, должна ли появляться случайная цитата или, скажем, должны ли картинки вести в фотогалерею, мы пойдём по простому пути.
    Весь контент останется статичным, мы лишь добавим несколько стилей, чтобы будущие редакторы могли работать со страницей с большим удобством.
    Для этого воспользуемся файлом стилей сайта, приложенном к нашему шаблону /bitrix/templates/whitesquare-bootstrap/styles.css (или административным разделом):
    Поскольку этот файл используется для применения CSS к контенту в том числе в визуальном редакторе, нам придётся «забыть» о каскадности CSS и прописать стили без учёта вложенности элементов.
    Например, цитата станет выглядеть так:

    Для того, чтобы редакторы могли сами применить этот стиль с помощью виз редактор необходимо добавить в файл .styles.php в корне шаблона массив стилей:

    Или через инструмент редактирования шаблона (вкладка «стили сайта»):

    С целью немного облегчить работу редакторов можно создать в шаблоне сайта папку /page_templates/, где будут находиться шаблоны страниц, которые можно создавать ан проекте по умолчанию.
    Шаблон страницы представляет из себя обычный php файл, идентичный странице в публичной части.
    Помимо шаблонов необходимо так же разместить файл .content.php с массивом всех возможных шаблонов страниц. В нашем случае это будет:

    Не забудем создать языковые файлы!

    • /bitrix/templates/whitesquare-bootstrap/lang/ru/page_templates/.content.php
    • /bitrix/templates/whitesquare-bootstrap/lang/ru/page_templates/.content.php

    Для того чтобы шаблон не был неопознанным объектом для имеющих доступ к административному разделу оформим файл описания и приложим скриншот! Они подхватятся автоматически:

    • Описание — description.php в корне шаблона
    • Скриншот — screen.gif в корне шаблона

    Вот собственно и всё!

    Мы натянули готовую HTML вёрстку Bootstrap на 1С-Битрикс, сверстали страницу и получили полноценный шаблон!

    Удаление сайта из панели 1С-Битрикс

    Тривиальная задача удаления лишнего сайта из списка сайтов в 1С-Битрикс может оказаться не такой уж и простой. Пройдемся по процедуре на практике.

    Шаг 1. Удаление сайта

    Идем в Настройки — Сайты — Список сайтов

    Ставим галочку возле ненужного сайта

    Жмем удалить записи, получаем . ошибка по типу 1

    Шаг 2. Ошибка при удалении в CForumNew::OnBeforeLangDelete

    Сие сообщение — Ошибка при удалении в CForumNew::OnBeforeLangDelete (forum), значит, что нужно отправиться в Сервисы — Форумы и удалить не нужный форум (форум принадлежащий удаляемому сайту). Скорее всего это форум «Отзывы о товарах».
    После удаления форума возвращаемся в Настройки — Сайты — Список сайтов
    Ставим галочку возле ненужного сайта
    Жмем удалить записи, получаем . ошибка по типу 2

    Шаг 3. Ошибка при удалении в CIBlock::OnBeforeLangDelete (iblock):

    Система сообщает нам об ошибке CIBlock::OnBeforeLangDelete (iblock) и даже подсказывает, что надо удалить несколько инфоблоков:

    Идентификаторы в каждом случае свои, но метод решения одинаковый.

    Идем в Контент — Инфоблоки — Типы инфоблоков и удаляем инфоблоки с указанными id (у нас это 11, 20, 21, 22, 23, 24).
    Скорее-всего нужные нам «жертвы» раскиданы по разным типам инфоблоков и проверить придется все.
    При удалении инфоблока — Каталог вероятно появление ошибки по типу 3

    Шаг 4. Ошибка удаления. Возможно есть ссылающиеся объекты.

    Данная ошибка более таинственна, для ее решения необходимо войти в инфоблок (нажать изменить)
    Перейти на вкладку «Торговый каталог» и снять галочку у параметра Инфоблок имеет торговые предложения
    Cохранить изменения
    Повторить попытку удалить инфоблок
    После удаления инфоблоков возвращаемся в Настройки — Сайты — Список сайтов
    Ставим галочку возле ненужного сайта
    Жмем удалить записи, получаем . ошибка по типу 4

    Шаг 5. Ошибка при удалении в CSalePersonType::OnBeforeLangDelete

    Очередная ошибка связана с наличием лишних типов плательщиков от которых тоже нужно избавиться.
    Идем в Магазин — Типы плательщиков
    Ставим галочки у лишних плательщиков
    Жмем удалить записи, получаем . ошибка по типу 5

    Шаг 6. В заказах используется тип плательщика с > Как все догадались — нужно стереть заказы. Идем в Магазин — Заказы и удаляем лишние заказы
    Возвращаемся в Магазин — Типы плательщиков
    Удаляем плательщиков привязанных к удаляемому магазину
    Возвращаемся в Настройки — Сайты — Список сайтов
    Ставим галочку возле ненужного сайта
    Жмем удалить записи, получаем . ошибка по типу 6


    Шаг 7. Ошибка при удалении в CRubric::OnBeforeLangDelete

    Ошибка на данном этапе снова снабжена подсказкой:

    Для решения проблемы отправляемся в Сервисы — Рассылки — Список рассылок и удаляем лишние рассылки
    Возвращаемся в Настройки — Сайты — Список сайтов
    Ставим галочку возле ненужного сайта
    Жмем удалить записи, . ВАУУУУ — сайт удален

    Итоги

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

    Краткий алгоритм удаления лишнего сайта в 1С-Битрикс

    • «Отвязать» друг от друга и удалить все инфоблоки связанные с сайтом
    • Удалить все рассылки и форумы
    • Удалить все заказы
    • Удалить лишние типы плательщиков
    • Удалить сам сайт

    Тайтлы и заголовки H1 в Битрикс

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

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

    Выход сформировал следующий :

    для сайтов с небольшим объёмом контента и магазинов с количеством товара до 200 — 300 наименований — лучше тайтлы прописывать в ручную, индивидуально для каждого элемента и раздела, это позволяет модуль СЕО, если не прописать для конкретного элемента — наследуется из родительского раздела, если прописать — то можно добиться уникальности тайтлов — для удовольствия роботов яндекса.
    Если тайтлы были прописаны раньше свойствами, то в настройках каталога — указываем откуда брать

    Всё вышеописанное применимо к динамическим страницам компонентов ( каталог, новости), для статичных страниц же есть свои настройки :

    Всё это должно выводиться без проблем . Но ! Есть ещё один ньюанс — если в файлах включаемых областей ( папка /include/ ) по ошибке визуального редактора случайно попала строчка :

    То никаких прописанных заголовков вы на сайте не найдёте — всё будет выводиться из названия элемента !

    Вот такой вот баг редактора иногда случается , в этом случае необходимо в ручную через фтп или с админки сайта (Контент/Структура сайта/Файлы и папки/ и обязательно открывать файлы в режиме PHP!) перебрать все файлы из папки /include/ — и удалить эти строки.

    Тогда вывод заголовков в хидере :

    AddBufferContent(«ShowTitleOrHeader»);?>

    заработает как надо — если прописано свойство или в модуле СЕО прописан заголовок — он и выведется , если нет — то выведется название элемента или раздела, или страницы(статичной)

    Рекомендации интегратору 1с-Битрикс

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

    Логика и представление.

    Необходимость разделять процессы формирования и вывода результа нужно запомнить как аксиому. Архитектура системы Битрикс дает нам возможность изменять результаты работы компонента (если по каким-либо причинам не хочется его копировать) на этапе вывода — в файле result_modifier.php его шаблона. Следует помнить, что он кешируется наряду с template.php, т.е. допускает использование в разумных пределах дополнительных выборок через API системы. Разумеется, это справедливо только при включенном кешировании в настройках компонента.

    Некоторые сложности использования дополнительных файлов шаблона компонента (script.js, result_modifier.php, component_epilog.php) создает сам Битрикс — во-первых, из административной части в 1 клик невозможно создать обычный файл, без подключенного хедера и футера. Во-вторых, неплохо бы добавить кнопки «Создать result_modifier.php» и «Создать component_epilog.php» из меню компонента.

    Лишняя информация

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

    Например, вывод дополнительных полей в news.list. Код шаблона компонента при невыбранных полях в настройках ничего не выводит, но по сути он там лишний! Если в ТЗ и макете нет упоминания об этих полях, код лучше удалить. При этом улучшится читабельность (чтобы понять насколько все может быть запутано, загляните в стандартный шаблон форума или блога) и снизится порог вникания в шаблон. В любом случае, при необходимости недостающие части легко добавить.

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

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

    Проектирование шаблона

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

    1. Вся информация внутри шаблона. Этот вариант следует использовать когда точно известно, что шаблон сайта будет один или когда все они радикально отличаются друг от друга. Плюсом такого размещения являяется возможность скачать шаблон сайта целиком. К слову, для больших сайтов необходимость этого стремится к нулю в силу сильной интеграции с инфоблоками, форумами и другой информации из БД.

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

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

    Битриксовед

    Подписаться на этот блог

    Follow by Email

    Новый шаблон sale.order.ajax: кастомизация

    • Получить ссылку
    • Facebook
    • Twitter
    • Pinterest
    • Электронная почта
    • Другие приложения
    • Получить ссылку
    • Facebook
    • Twitter
    • Pinterest
    • Электронная почта
    • Другие приложения

    Кастомизация импорта 1С при помощи обработчиков событий Битрикс

    • Получить ссылку
    • Facebook
    • Twitter
    • Pinterest
    • Электронная почта
    • Другие приложения

    У клиента появилась интересная задача: после обмена данных с 1С автоматически выставлять флаг «Новинка» для тех товаров, количество которых изменилось в большую сторону.
    Было несколько вариантов реализации. Первый, что пришел в голову — использовать событие OnBeforeIblockUpdate, сравнивать сколько было- сколько стало, и выставлять флаг «Новинка».

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

    Коллега с форума Битрикса посоветовала наследовать класс импорта и переопределить в нем функцию ImportElement.

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

    Самым разумным решением показалось всё же использовать события. Правда, это было все же не OnBeforeIblockUpdate, а OnBeforeProductUpdate, так как поле «Доступное количество» относится именно к классу CProduct (как и другие свойства, касающиеся интернет-магазина), а в IBlock хранятся описания, название, свойства товара (кстати, поле «Новинка» как раз среди них).

    Работаем с seo-шаблонами в 1С-Битрикс

    Уже достаточно давно, еще с 14-й версии модуля «Информационные блоки» в 1С-Битрикс появилась возможность задавать шаблоны автоматической генерации мета-данных. Но не все до сих пор умеют пользоваться данным инструментом. В данном посте собраны основные моменты по созданию шаблонов мета-данных.

    Механизм автоматических шаблонов мета-данных позволяет задать description, title,keywords для элементов и разделов, а также для элементов доступны шаблоны для установки alt, title и шаблона имени файла детального и анонсового изображений.

    В шаблоне может быть несколько вариантов данных.

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

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

    Вот список зарезервированных слов:

    • this — означает текущий объект;
    • parent — родительский объект. Пример: <=parent.PreviewText>— анонсовый текст родительского раздела;
    • sections — родительские секции начиная с верхнего уровня. пример: <=this.sections.name>— названия родительских разделов;
    • iblock — инфоблок текущего объекта. Пример: <=iblock.PreviewText>— описание инфоблока;
    • property — свойство текущего объекта. Пример: <=this.property.CML_ARTICLE>— выведет значение свойства с артикулом. Для того чтобы у элемента показать пользовательское свойство, заданное для раздела, можно воспользоваться шаблоном: <=this.parent.property.name>— выдаст значение свойства UF_NAME;
    • Для редакций, имеющих модуль Торговый каталог, можно также получить свойство торгового предложения: <=this.catalog.sku.property.COLOR>— выдаст значение свойства «Цвет» торгового предложения. Чтобы получить значения данного свойства у торговых предложений, но без повторяющихся значений, можно воспользоваться функцией: <=distinct this.catalog.sku.property.COLOR>;
    • Чтобы получить цены торговых предложений, необходимо указать тип цены, которая должна быть выведена: <=this.catalog.sku.price.BASE;>— выдаст все цены, либо так: <=min this.catalog.sku.price.BASE>можно получить минимальную цену;
    • Для получения габаритов товара, необходимо обратиться к соответствующим данным: <=this.catalog.weight>— вес товара, <=this.catalog.measure>— единица измерения, <=concat catalog.store ", ">— склады, перечисленные через запятую

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

    • lower — приведет значение к нижнему регистру. Пример: <=lower this.Name>;
    • upper — приведет значение к верхнему регистру. Пример: <=upper this.Name>;
    • limit — ограничить элементы по разделителю. Пример: <=limit <=this.PreviewText>«.» 2> — оставит текст до 2 точки, начиная с начала;
    • concat — задаётся разделитель и несколько строк объединяются через разделитель. Пример: <=concat this.sections.name " / ">— все названия родительских разделов будут соединены с помощью слэша;
    • min — находит минимальный элемент. Пример: <=min this.catalog.sku.price.BASE>;
    • max — находит максимальный элемент. Пример: <=max this.catalog.sku.price.BASE>;
    • distinct — оставит только значения без повторения(уникальные).;
    • translit — транслитерация значения. Пример: <=translit this.Name>;

    Конечно же список функций можно расширять до бесконечности. Для этого, нужно воспользоваться обработчиком события OnTemplateGetFunctionClass модуля «Информационные блоки».

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

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

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

    В результате, если в свойстве HEADER контент-менеджер ввел какое-то значение — будет выведено оно, если же нет — будет выведено название товара.

    Благодарю за внимание! Делитесь вашими замечаниями в комментариях ниже.

    Цукерберг рекомендует:  5 разочарований программиста
    Понравилась статья? Поделиться с друзьями:
    Все языки программирования для начинающих