Нашел в исходниках пресет, который позволяет получать товары и разделы для конкретной скидки, очень необходимый функционал, если знаете другой способ, прошу поделиться
Как то спонтанно решили организовать встречу по битриксу в Челябинске. Пообсуждали, набрались доклады:
1. Вадим Исаканов (southbridge.ru) расскажет про highload в битрикс. О том с какими проблемами они столкнулись и как их решали при работе с проектами на битрикс с месячной аудиторией (MAU) в 2.5 миллиона человек
2. Евгений Микулич (shantilab.ru) расскажет про опыт использования composer в битрикс
3. Алексей Коваленко (kuznica74.ru) расскажет про изменения в каталоге битрикс 17 версии, bxready и элементарные области
4. Я, Шубин Александр (verstaem.com) планирую рассказать о простом способе автоматической развертки сайта при создании ветки в git, а так же немного про схемы ветвления
Хочется организовать регулярные встречи. Без излишнего пафоса, большой сцены и со спокойным обсуждением. Если народу это будет интересно, то повторим через какое-то время, посмотрим на первый опыт. Даже если конкретно эти доклады вас не заинтересовали возможно стоит прийти, чтобы просто поговорить на общие темы с новыми людьми, услышать новые идеи. Попробуем немного объединить ИТ сообщество в Челябинске
Приглашаем всех кто связан с разработкой на битриксе, а так же с созданием и обслуживанием сайтов в целом.
Если вы решили пойти, то пожалуйста зарегистрируйтесь вот тут:
Участие бесплатное. Встреча будет в пятницу вечером 2 февраля, в 18:30, г. Челябинск, ул. Северная, д.48а, 2 этаж, оф.3 (коворкинг WooDo.Work)
В битрикс24 из коробки есть меню "Телефонный Справочник" там все сотрудники компании, в компании появились розничные магазины, добавил отдельное меню Магазины на основе телефонного справочника. Как мне обрезать список что бы там были только магазины и без сотрудников.
Не так давно на одном проекте наткнулся на такой метод-хелпер:
use Bitrix\Main\Loader;
if (file_exists($_SERVER["DOCUMENT_ROOT"] . "/bitrix/php_interface/include/sale_delivery/delivery_shoplogistics.php")) {
require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/php_interface/include/sale_delivery/delivery_shoplogistics.php");
}
class Helper
{
public static function getPickupListByBitrixLocation($location)
{
$pickupList = array();
if ((int)$location) {
$obCache = new CPHPCache();
$cacheLifetime = 86400*7; $cacheID = 'pickupItems'.$location; $cachePath = '/'.$cacheID;
if( $obCache->InitCache($cacheLifetime, $cacheID, $cachePath) )
{
$vars = $obCache->GetVars();
$pickupList = $vars['pickupList'];
}
elseif( $obCache->StartDataCache() )
{
$pickupList = CDeliveryShoplogistic::getPickupListByBitrixLocation($location);
$obCache->EndDataCache(array('pickupList' => $pickupList));
}
}
return $pickupList;
}
}
т.е. написан хелпер, который добавляет поддержку кэширования методу CDeliveryShoplogistic::getPickupListByBitrixLocation . А не судьба было отнаследоваться от класса CDeliveryShoplogistic и переопределить метод getPickupListByBitrixLocation ?
С версии 7.2.2 битрикс-машины появилась возможность подключать бесплатные валидные SSl-сертификаты от Lets Encrypt прямо из меню виртуальной машины.
Let’s Encrypt — центр сертификации, начавший работу в бета-режиме с 3 декабря 2015 года, предоставляющий бесплатные криптографические сертификаты для HTTPS. Процесс выдачи сертификатов полностью автоматизирован. Сертификаты выдаются только на 3 месяца для предотвращения инцидентов безопасности.
Первая попытка установить сертификат прошла с отладкой и выяснениями.
Компания «BIECOM» - одно из ведущих агентств маркетинговых решений основано в 2009 году.
Основной сферой деятельности компании является разработка и внедрение стратегий продвижения продуктов и услуг заказчика с созданием всего необходимого сопутствующего материала.
В штате компании насчитывается более 20 квалифицированных сотрудников, в том числе и проектных специалистов, осуществляющих деятельность на всей территории России и стран СНГ
С 2017 года компания была масштабировала свою деятельность, введя отдельное направление, связанное с международным консалтингом и оказанием брокерских услуг в части продажи готовых бизнес структур
Среди приоритетных направлений оказываемых услуг компании «BIECOM» можно выделить:
БИЗНЕС ПРЕЗЕНТАЦИИ
Разработка и создание рекламного и презентационного материала для бизнес задач. Презентации представляются как для печатных форматов (буклетный вариант), так и в цифровом формате
ФОТО ПРОДУКЦИЯ
Производство коммерческих фотографий любого типа сложности. От простейших репортажных до сложных постановочных, в том числе с последующей обработкой и наложением эффектов
ВИДЕО ПРОДУКЦИЯ
Создание рекламных и имиджевых видеороликов, рассчитанных как для трансляции на наружных видеоэкранах и INDOOR LED панелях, так и для размещения в интернете в качестве обучающего или вирусного контента
ОБУЧЕНИЕ ПЕРСОНАЛА
Проведение специализированных обучающих программ в области основных сфер деятельности компании. Тренинги – для корпоративных заказчиков, курсы – открытые программы для всех желающих
WEB ДИЗАЙН
Разработка дизайна Web страниц, сайтов, сервисов и e-mail форм с учетом требований интернет среды и распространения в сетях. А также работы по интеграции созданных продуктов с системами управления предприятием
ДИЗАЙН И ПЕЧАТЬ ПОЛИГРАФИИ
Подготовка и верстка печатной продукции - каталогов, буклетов, брендбуков, рекламных листовок с последующим выпуском их в цифровую или офсетную печать. Предпечатная подготовка любых цифровых материалов
РЕКЛАМА И ПРОДВИЖЕНИЕ
Создание и сопровождение рекламных компаний в WEB и SMM посредством современных маркетинговых инструментов. Анализ целевой аудитории, контекстная реклама, e-mail рассылки, SEO аудит, парсинг данных и анализ конкурентов, расчеты бюджетов и прибыли
Наша миссия – способствовать старту, продвижению и развитию бизнеса заказчика, путем создания самых востребованных маркетинговых материалов, используя которые можно получить максимальный и измеримый эффект даже в краткосрочной перспективе.
Наша задача – обеспечить клиента необходимым уровнем сопровождения, в том числе и в сфере подготовки его персонала методам и особенностям использования нашей продукции, а также персонализации всех решений под конкретные потребности и пожелания клиента
Компания «BIECOM» работает более чем с 25 отраслевыми направлениями: от простейших розничных точек продаж до сегмента стратегической ресурсодобывающей промышленности
Успешно выполнено более 200 проектов
Более 70 выигранных тендеров
Обучено более 2000 человек на курсах и тренингах
Более 120 крупных клиентов
Значимые факты о компании
1 Единственное маркетинговое агентство в России являющееся членом стоматологической ассоциации «АРСТОМ» и экспертом в области создания стоматологических презентаций
2 Рамочный договор с гигантом российской индустрии ПАО «АЛРОСА» (Алмазы России)
3 Единственная компании в России комплексно занимающаяся созданием презентационных материалов, проведением презентаций, а также обучением по данной тематике
ЗНАЧИМЫЕ КЛИЕНТЫ КОМПАНИИ
АЛРОСА -АЛМАЗЫ РОССИИ
ПРОМСВЯЗЬБАНК
СБЕРБАНК
СТРАХОВАЯ КОМПАНИЯ «СОГАЗ»
ЮВЕЛИРНАЯ КОМПАНИЯ «ЯШМА ЗОЛОТО»
ЮВЕЛИРНАЯ КОМПАНИЯ «АДАМАС»
ТОРГОВАЯ КОМПАНИЯ «CALIPSO»
ТОРГОВАЯ КОМПАНИЯ «KARI»
РОССИЙСКАЯ АССОЦИАЦИЯ СТОМАТОЛОГОВ «СТАР»
КОМПАНИЯ «ROCS»
КОМПАНИЯ «COLGATE»
КОМПАНИЯ «LOCALUT»
КОМПАНИЯ «SPLAT»
ГИПЕРМАРКЕТЫ «ЛЕНТА»
АЭРОПОРТ «ДОМОДЕДОВО»
В общей сложности 120 крупных компаний и более 250 клиентов среднего и малого бизнеса
При разработке сайта часто возникает ситуация нехватки штатных средств управления меню, например, встроенных средств управления многоуровневыми меню, можно сказать, нет. Вариант с вложенными уровнями в подразделах часто не подходит, если нужно сделать многоуровневое меню для страниц с ЧПУ, а структура меню не соответствует структуре инфоблока и т.д. Параметры для пунктов меню существуют, но редактируются только через расширенный режим в административной части. Модуль позволяет решить обе эти проблемы, причем без замены штатных компонентов "bitrix:menu" на какие-то другие.
После установки модуля, укажите в его настройках типы меню для которых должен использоваться модуль, и при нажатии на кнопку редактирования меню в админ. панели вместо стандартного окна будет использоваться окно модуля:
Меню может быть любого уровня вложенности.
Окно редактирования пунктов меню по умолчанию выглядит так:
Но при , будут также добавлены дополнительные поля:
Параметры могут быть следующих типов: строка, текст, выпадающий список, флажок, путь к файлу с возможностью выбора из медиабиблиотеки или структуры сайта.
Эти дополнительные параметры (также как и параметры, добавляемые в штатном расширенном режиме редактирования меню) будут доступны в шаблоне компонента "bitrix:menu" в массиве с ключом "PARAMS" внутри массива каждого пункта меню.
Это предварительная версия списка, в дальнейшем будет дополняться более подробными описаниями пакетов. Пакеты по мере надобности можно задействовать на рабочих проектах и по результатам работы с ними добавлять детальное описание. Просто если сейчас взяться и детально начать испытывать все-все пакеты, то этот процесс займет десятилетие.
Некоторые пакеты можно использовать как отправную точку, для собственных разработок. [good]
composer require bitrix-expert/bbc Сборка базовых битриксовых компонетов Подробная документация здесь Компоненты и модуль, необходимый для работы компонента, ставятся в папку bitrix Хук, который перемещает модуль и компоненты из папки bitrix в папку local
На параметр SEF_URL_TEMPLATES компонент не отреагировал , а ссылки на детальные страницы элементов строятся в соответствии с настройками инфоблока Возможно, комплексный компонент в будущем придётся допиливать. В документации заявлена обработка исключений, приведение параметров, работа с ajax-ом, кэширование, поисковая оптимизация, постраничная навигация. Короче, джентельменский набор типичного компонента.
Если при вызове "bbc:elements" возникает ошибка Cannot find '' template with page 'list' , то создаём файл list.php и в него переносим код из index.php
[good]
composer require lacodda/bxcomponent-demo
Подобие предыдущего компонента, только с более скромными возможностями. В качестве зависимостей ставится модуль и компоненты bbc Имеется поддержка кэширования и пагинация. Нет работы с ajax. Функционал более чем скромный, подойдёт как заготовка для разработки более сложного компонента.
[good]
composer require cjp2600/system.empty
Пустой компонент Притом компонент пустой-пустой, в файле компонента только подключается шаблон остальную логику пилим сами.
[good]
composer require cjp2600/composite.shape
Позволяет отложенно вывести данные после загрузки страницы. На странице есть инструкция по установке и пример вызова Поймал ошибку Fatal error: Class 'Bitrix\Security\Filter\Request' not found in /local/components/cjp2600/composite.shape/class.php on line 107 В файле local/components/cjp2600/composite.shape/class.php перед $security = new Bitrix\Security\Filter\Request(); вписать подключение модуля CModule::IncludeModule('security');
Пример вызова
$APPLICATION->IncludeComponent(
'cjp2600:composite.shape',
'',
array(
"ID" => "UniqueShapeComponentID", # ID -shape (Required, unique parameter)
"CACHE_TIME" => 604800, # Time caching (not required)
"USE_PRELOADER" => false, # Use preloader (true / false) (Optional - default false)
"PRELOADER_IMG" => " ... ", # The path of a custom preloader for (the default one that is in the images)
"CACHE_TAG" => array("Pro"), # The tag for the cache.
"CALL_FUNCTION" => function () {
global $DB;
echo date($DB->DateFormatToPHP("DD.MM.YYYY HH:MI:SS"), time());
sleep(3);
}
), # The anonymous function (body -shape)
null,
array(
'HIDE_ICONS' => 'Y'
)
);
Пример отложенного вывода компонента
$APPLICATION->IncludeComponent(
'cjp2600:composite.shape',
'',
array(
"ID" => "UniqueShapeComponentID", # ID -shape (Required, unique parameter)
"CACHE_TIME" => 604800, # Time caching (not required)
"USE_PRELOADER" => false, # Use preloader (true / false) (Optional - default false)
"PRELOADER_IMG" => " ... ", # The path of a custom preloader for (the default one that is in the images)
"CACHE_TAG" => array("Pro"), # The tag for the cache.
"CALL_FUNCTION" => function () {
?>
<?
global $APPLICATION;
$APPLICATION->IncludeComponent(
"bitrix:news.list",
"staff",
array(
// region Основные параметры
"IBLOCK_TYPE" => "company", // Тип информационного блока (используется только для проверки) : array ( '-' => ' ', 'catalog' => '[catalog] Каталоги', 'news' => '[news] Новости', 'offers' => '[offers] Торговые предложения', 'services' => '[services] Сервисы', 'references' => '[references] Справочники', )
"IBLOCK_ID" => "17", // Код информационного блока : array ( 1 => 'Новости', 2 => 'Одежда', 3 => 'Одежда (предложения)', )
"NEWS_COUNT" => "20", // Количество новостей на странице
// endregion
// region Источник данных
"SORT_BY1" => "SORT", // Поле для первой сортировки новостей : array ( 'ID' => 'ID', 'NAME' => 'Название', 'ACTIVE_FROM' => 'Дата начала активности', 'SORT' => 'Сортировка', 'TIMESTAMP_X' => 'Дата последнего изменения', )
"SORT_ORDER1" => "ASC", // Направление для первой сортировки новостей : array ( 'ASC' => 'По возрастанию', 'DESC' => 'По убыванию', )
"SORT_BY2" => "ID", // Поле для второй сортировки новостей : array ( 'ID' => 'ID', 'NAME' => 'Название', 'ACTIVE_FROM' => 'Дата начала активности', 'SORT' => 'Сортировка', 'TIMESTAMP_X' => 'Дата последнего изменения', )
"SORT_ORDER2" => "DESC", // Направление для второй сортировки новостей : array ( 'ASC' => 'По возрастанию', 'DESC' => 'По убыванию', )
"FILTER_NAME" => "", // Фильтр
"FIELD_CODE" => array(''), // Поля : array ( 'ID' => 'ID', 'CODE' => 'Символьный код', 'XML_ID' => 'Внешний код', 'NAME' => 'Название', 'TAGS' => 'Теги', 'SORT' => 'Сортировка', 'PREVIEW_TEXT' => 'Описание для анонса', 'PREVIEW_PICTURE' => 'Картинка для анонса', 'DETAIL_TEXT' => 'Детальное описание', 'DETAIL_PICTURE' => 'Детальная картинка', 'DATE_ACTIVE_FROM' => 'Начало активности (дата)', 'ACTIVE_FROM' => 'Начало активности (время)', 'DATE_ACTIVE_TO' => 'Окончание активности (дата)', 'ACTIVE_TO' => 'Окончание активности (время)', 'SHOW_COUNTER' => 'Количество показов', 'SHOW_COUNTER_START' => 'Дата первого показа', 'IBLOCK_TYPE_ID' => 'Тип информационного блока', 'IBLOCK_ID' => 'ID информационного блока', 'IBLOCK_CODE' => 'Символьный код информационного блока', 'IBLOCK_NAME' => 'Название информационного блока', 'IBLOCK_EXTERNAL_ID' => 'Внешний код информационного блока', 'DATE_CREATE' => 'Дата создания', 'CREATED_BY' => 'Кем создан (ID)', 'CREATED_USER_NAME' => 'Кем создан (имя)', 'TIMESTAMP_X' => 'Дата изменения', 'MODIFIED_BY' => 'Кем изменен (ID)', 'USER_NAME' => 'Кем изменен (имя)', )
"PROPERTY_CODE" => array('POSITION'), // Свойства
"CHECK_DATES" => "Y", // Показывать только активные на данный момент элементы
// endregion
// region Шаблоны ссылок
"DETAIL_URL" => "", // URL страницы детального просмотра (по умолчанию - из настроек инфоблока)
// endregion
// region Управление режимом AJAX
"AJAX_MODE" => "N", // Включить режим AJAX
"AJAX_OPTION_JUMP" => "N", // Включить прокрутку к началу компонента
"AJAX_OPTION_STYLE" => "Y", // Включить подгрузку стилей
"AJAX_OPTION_HISTORY" => "N", // Включить эмуляцию навигации браузера
"AJAX_OPTION_ADDITIONAL" => "", // Дополнительный идентификатор
// endregion
// region Настройки кеширования
"CACHE_TYPE" => "A", // Тип кеширования : array ( 'A' => 'Авто + Управляемое', 'Y' => 'Кешировать', 'N' => 'Не кешировать', )
"CACHE_TIME" => "36000000", // Время кеширования (сек.)
"CACHE_NOTES" => "", //
"CACHE_FILTER" => "N", // Кешировать при установленном фильтре
"CACHE_GROUPS" => "N", // Учитывать права доступа
// endregion
// region Дополнительные настройки
"PREVIEW_TRUNCATE_LEN" => "", // Максимальная длина анонса для вывода (только для типа текст)
"ACTIVE_DATE_FORMAT" => "j F", // Формат показа даты : array ( 'd-m-Y' => '22-02-2007', 'm-d-Y' => '02-22-2007', 'Y-m-d' => '2007-02-22', 'd.m.Y' => '22.02.2007', 'd.M.Y' => '22.Фев.2007', 'm.d.Y' => '02.22.2007', 'j M Y' => '22 Фев 2007', 'M j, Y' => 'Фев 22, 2007', 'j F Y' => '22 Февраля 2007', 'f j, Y' => 'Февраль 22, 2007', 'd.m.y g:i A' => '22.02.07 7:30 AM', 'd.M.y g:i A' => '22.Фев.07 7:30 AM', 'd.M.Y g:i A' => '22.Фев.2007 7:30 AM', 'd.m.y G:i' => '22.02.07 7:30', 'd.m.Y H:i' => '22.02.2007 07:30', 'SHORT' => 'Формат сайта', 'FULL' => 'Формат сайта (включая время)', )
"SET_TITLE" => "N", // Устанавливать заголовок страницы
"SET_BROWSER_TITLE" => "N", // Устанавливать заголовок окна браузера
"SET_META_KEYWORDS" => "N", // Устанавливать ключевые слова страницы
"SET_META_DESCRIPTION" => "N", // Устанавливать описание страницы
"SET_STATUS_404" => "N", // Устанавливать статус 404, если не найдены элемент или раздел
"INCLUDE_IBLOCK_INTO_CHAIN" => "N", // Включать инфоблок в цепочку навигации
"ADD_SECTIONS_CHAIN" => "N", // Включать раздел в цепочку навигации
"HIDE_LINK_WHEN_NO_DETAIL" => "N", // Скрывать ссылку, если нет детального описания
"PARENT_SECTION" => "", // ID раздела
"PARENT_SECTION_CODE" => "", // Код раздела
"INCLUDE_SUBSECTIONS" => "Y", // Показывать элементы подразделов раздела
// endregion
// region Настройки постраничной навигации
"PAGER_TEMPLATE" => ".default", // Шаблон постраничной навигации : array ( '.default' => '.default (Встроенный шаблон)', 'arrows_adm' => 'arrows_adm (Встроенный шаблон)', 'modern' => 'modern (Встроенный шаблон)', 'orange' => 'orange (Встроенный шаблон)', 'visual' => 'visual (Встроенный шаблон)', 'blog' => 'blog (Общий шаблон)', 'forum' => 'forum (Общий шаблон)', 'arrows' => 'arrows (Новый адаптивный шаблон интернет-магазина)', )
"DISPLAY_TOP_PAGER" => "N", // Выводить над списком
"DISPLAY_BOTTOM_PAGER" => "Y", // Выводить под списком
"PAGER_TITLE" => "Новости", // Название категорий
"PAGER_SHOW_ALWAYS" => "N", // Выводить всегда
"PAGER_DESC_NUMBERING" => "N", // Использовать обратную навигацию
"PAGER_DESC_NUMBERING_CACHE_TIME" => "36000", // Время кеширования страниц для обратной навигации
"PAGER_SHOW_ALL" => "N", // Показывать ссылку 'Все'
// endregion
)
);?>
<?
}
), # The anonymous function (body -shape)
null,
array(
'HIDE_ICONS' => 'Y'
)
);
[bad]
composer require bxuni/bxuni
Упрощённые компоненты Перед установкой в composer.json дописать "minimum-stability": "dev", "prefer-stable": true , т.к. версия у пакета только dev
Сам код компонента далёк от совершенства , при беглом осмотре наткнулся на такой участок PAGEN_1 - задан жёстко, если на странице будет ещё один компонент с пагинацией, то проблем не избежать. Поддержка кэширования есть, но отсутствует приведение и проверка входных параметров.
Два оставшихся компонента uni.form.list и uni.form.detail я тестировать не стал после того как посмотрел код.
Качество кода очень посредственное, большой ценности эти компоненты из себя на представляют. Может сойти как заготовка для компонент, но переписывать придётся подавляющую часть кода.
[good]
composer require 1gt/staticarea
Компонент для добавления статических областей на сайт Суть задачи, которую решает компонент, описана здесь
<?$APPLICATION->IncludeComponent('1gt:staticarea',
'example',
array(
"TITLE" => "ИСТОРИЯ",
"SUBTITLE" => "НОВОЙ КУХНИ",
"DESCRIPTION" => "Итальянцы обладают уникальной способностью сделать застолье
моментом получения истинного удовольствия. Именно поэтому коллекции названы по
аналогии с известными итальянскими винами, которые прекрасно сочетаются с вашими
любимыми блюдами.")
);?>
composer require lacodda/bxcomponent
Базовые компоненты, поддерживающие MVC
composer require digitalwand/mvc.base
Базовый компонент, предназначенный для простой реализации MVC
Модули
[good]
composer require notagency/notagency.base
Модуль, содержащий набор типовых компонентов.
materials.list - для вывода списков (элементы, секции инфоблока)
materials.detail - на основе materials.list с ограничением в 1 элемент
catalog.list - на основе materials.list + данные каталога (цены, кол-во товара и т.д.)
catalog.detail - на основе materials.detail тоже самое что и catalog.list с ограничением в 1 элемент
form.result.new - вывод формы из модуля веб-форм
После установки через композер в bitrix/modules появится модуль Далее идём сюда /bitrix/admin/partner_modules.php?lang=ru и устанавливаем модуль.
Компоненты
+ есть заготовка для шаблона сайта
composer require prominado/redirect
Модуль, позволяющий настраивать редиректы в админке.
composer require olof-ltd/olof_iblock
Модуль, добавляющий возможность получать доступ к свойствам инфоблока на d7
(Примечание : не работает с множественными свойствами)
composer require lacodda/bxmodule-demo
Демо модули
composer require citfact/filter.subscribe
Модуль позволяет осуществлять подписку на фильтр с дальнейшим уведомлением по почте
composer require bitrix-expert/bbc-module
Модуль с классами для базовых компонентов
Хелперы
[good]
composer require wlbl/bitrix.tools
Получение id инфоблока по символьному коду <? echo Wlbl\Tools\Iblock\Iblock::getId("IBLOCK_SHOPS_REVIEWS_ID"); ?>
Получение строки, содержащей полное имя класса HighloadBlock'а
Вставка на страницу кода svg файла.
Добавление к свойствам инфоблока типа "Ссылка на youtube видео" (Примечание: в дальнейшем можно использовать как заготовку для написания модуля, который добавляет кастомные типы к свойтвам инфоблока)
Функция dump(var) - выводящая в удобном виде данные на экран или в консоль.
composer require rere/bitrix-helper
composer require stanislav-dremin/modules
composer require bitrix-expert/tools
composer require arrilot/bitrix-iblock-helper
Хэлперы для упрощения работы с инфоблоками/хайлоадблоками
composer require techart/bitrix.tao
набор классов, позволяющий упростить работу с Bitrix
composer require cjp2600/hiwrapper
Highloadblock Helper class
composer require falur/bitrix-iblock
Классы помошники для работы с api инфоблоками битрикса
composer require arrilot/bitrix-collectors
Пакет позволяет собрать из различных коллекций и элементов (обычно полученных через какой-нибудь CIblockElement::GetList()) идентификаторы и удобным образом дополучить по ним дополнительные данные одним запросом, а не в цикле как это обычно заканчивается
composer require shantilab/bxtools
composer require rschweppes/bitrix-helpers
composer require ilflask/bitrix_tools
composer require falur/bitrix-helpers
composer require mikeborisov/bitrix-utils
composer require marvin255/bxfoundation
composer require dok/bx
composer require vitaliisestrenskiy/sest
composer require stenhigh/bxhelp
composer require machaon/utils
Работа с параметрами и данными
composer require wlbl/bitrix.config
Модуль для хранения общих данных сайта Данные только строковые (примечание: добавить возможность хранения не только строковых данных, а, например, массивов.)
composer require aak74/bx-data Классы для удобного доступа к данным
composer require serginhold/bitrix-favorites Модуль для хранения избранных элементов
composer require rey/simplesettings
Бибилиотека для расширения стандартного .settings.php Получение доступа к параметрам
2) Подключение на уровне ядра с помощью Loader::registerAutoLoadClasses(...) (CModule::AddAutoloadClasses(...)) Пример:
CModule::AddAutoloadClasses(
'', // не указываем имя модуля
array(
// ключ - имя класса, значение - путь относительно корня сайта к файлу с классом
'CMyClassName1' => '/path/cmyclassname1file.php',
'CMyClassName2' => '/path/cmyclassname2file.php',
)
);
Как я понимаю, разница в том, что spl_autoload_register подключает класс динамически, на основе имени, а Loader::registerAutoLoadClasses требует прописать явно класс и путь до файла.
Хотелось бы выяснить какой способ предпочтителен, их плюсы и минусы. Жду Ваших комментарий, коллеги. Возможно вы предложите альтернативные варианты.
P.S. Замечал, что при spl_autoload_register как-то не сразу новый класс подключает (может, конечно, я что-то не так делал), но метод класса зачастую начинают работать спустя какое-то время...
Экспорт xml файла с ценами и остатками по товарам.
Приветствую господа! Недавно столкнулся с задачей экспорта цен и остатков по товарам. Хочу поделиться своим решением, вдруг кому пригодится...
Итак, имеем около 500 товаров. Разом обработать такое кол-во элементов не позволяли ресурсы сервера, выходит надо разбивать по-шагам. С выбором формата экспорта, решил использовать xml, сформировав html таблицу и задав расширение .xml (Битриксовый экспорт в excel именно так и работает). Поскольку экспорт запускается вручную, то по-шаговость сделал на js.
Здравствуйте, друзья! Скоро наступит Новый 2018 Год. А это значит, что пришла пора подводить итоги года уходящего. И, конечно же, строить планы на будущее.
В целом, год был интересным и насыщенным на события. Наверное, за 4 года нашей работы это был первый год нашего полноценного становления, первый год больших перемен. А если быть точным, то не весь год был годом перемен, а только последнее полугодие. Мы очень долго запрягали. Первые полгода прошли под знаком стабильности, что нас явно не устраивало. И лишь после определенных изменений в наших головах начали происходит большие изменения и в Сотбит: структура компании, штат, офис, продукт и прочее. Но давайте обо всем по порядку.
Не так давно столкнулся с проблемой. Партнерский модуль на разрабатываемом сайте подключал jquery с помощью CJSCore::init(). Это привело к тому, что при работе сайта подключалась устаревшая и вобщем-то ненужная в проекте битриксовая версия jquery (1.8.3). Это в дополнение к версии jquery, подключаемой в шаблоне. Как же заставить подключать нужную версию jquery?
Решено было переделать подключение моей версии jquery посредством регистрации в CJSCore расширения с таким же именем:
Поместил этот код в шапку шаблона сайта - и мой jquery перестал вообще загружаться. Зато стал грузиться исключительно битриксовый. Даже когда я отключил партнерский модуль для проверки - все равно в итоге инициализируется битриксовый jquery.
Стало очевидно, что проблема в битриксе, точнее его внутренностях. Немножко нырнул в глубины ядра и сразу наткнулся на следующее:
public static function Init($arExt = array(), $bReturn = false)
{
global $USER;
if (!self::$bInited)
{
self::_RegisterStandardExt();
self::$bInited = true;
}
Осознав причину, нашелся и выход из ситуации. 1. Сначала инициализировать каким-либо способом любое расширение. Можно пустое. 1.2. Автоматически зарегистрируются стандартные расширения (их список можно найти в /bitrix/modules/main/jscore.php). 2. Инициализировать свою версию расширения, обозвав ее также, как и стандартное расширение. Это позволит переопределить содержимое расширения. В моем случае - размещение и версию библиотеки.
Получился такой метод
public static function registerJquery ()
{
//Hack: when init first extension - bitrix register standart extensions
$emptyHack = [
'css' => "",
'skip_core' => true,
];
\CJSCore::RegisterExt('emptyHack', $emptyHack);
\CJSCore::Init('emptyHack');
$jquery = [
'js' => "https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js",
'skip_core' => true,
];
\CJSCore::RegisterExt('jquery', $jquery);
}
Вешаем этот код на такое событие, чтобы обойти возможные попытки другого кода подключить одноименное расширение:
И подключаем расширение в нужном нам месте (в моем случае это был хедер шаблона):
\CJSCore::Init('jquery');
Теперь будет загружено уже переопределенное расширение.
Аналогично можно действовать и с остальными стандартными расширениями. В частности, это также способ предоставлять более свежие версии js-библиотек, загружаемых битриксом.
В новом решении мы применили особую схему расширения возможностей Битрикс. Помимо штатных возможностей BXReady мы расширили и ряд возможностей Битрикс, что позволило ввести в бой особого игрока, который у многих еще находится на скамейке запасных.
P.S. Небольшое уточнение Больше, конечно, информация предназначена будет веб-разработчикам и компаниям внедряющим Битрикс. Особенно компаниям, осуществляющим продажи готовых магазинов на Битрикс и сопровождающих их. Однако, для общего развития лучше будет следить всем желающим.
Бизнес процессы в Битрикс 24 - блолк "Пауза в выполнении"
Приветствую коллеги! Кто работал с Бизнес процессами, помогите разобраться с одним моментом из-за которого не получается настроить правильную работу Бизнес процесса.
Этот Бизнес процесс создан для сущности "Сделка" с автозапуском на добавление (сделки). У сделки имеется поле "Дата окончания договора" следующего формата: дд:мм:год , и есть блок "Пауза в выполнении" который настроен следующим образом:
В поле "Дата:" пробую подставлять это поле документа (сделки) так {=Document:UF_CRM_1485468884} или так =dateadd({=Document:UF_CRM_1485468884}, "+0d")
Суть в том что бы блоки ниже этого блока паузы выполнения выполнялись точно в момент наступления даты указанной в поле сделки "Дата окончания договора".
Например дата окончания срока договора указана как 06.12.2017
Т.е блоки ниже этой паузы должны выполнится сегодня 06.12.2012, но этого не происходит!
И если запустить для этой сделки этот БП, то в журнале бизнес процесса этой сделки я вижу что добавляются паузы выполнения но еще и с минутами и секундами!
Вот скрин
откуда там взялись часы минуты секунды 12:07:25 ??? в курсах написано, что если дата для паузы в выполнении в прошлом, то БП выполняется дальше "перескакивая" через эту паузу, что по идее нам и нужно! Но вот откуда эти ч\м\с взялись я не могу понять...
Также не понятно какие форматы вводимых данных поддерживает это поле "Дата:" в этом блоке "Пауза в выполнении".
Для наглядности скриншот части БП с которой эта проблема связана
Доброго времени суток. Помогите разобраться. Есть инфоблоки, в котором сразу выводятся элементы, поздразделы не выводятся. Как вывести описание инфоблока, которое задается при его создании. <?=$arResult["DESCRIPTION"];?> Не помогает.
При формировании вручную списка доставок столкнулся с тем, что не выбирались автоматизированные доставки СДЭК Использовал стандартный метод получения, через
Стандартные доставки выбирались, СДЭКовские через мой AJAX не хотели. При том, что компонент первоначально их формировал нормально. Умные статьи вроде и "обширная" документация по D7 не помогали. Путём долгого копания в sale.order.ajax удалось найти решение - обязательно нужно задавать свойство заказа типа LOCATION, которое использует СДЭК для расчётов Примерно так:
$propertyCollection = $order->getPropertyCollection(); $propertyCollection->setValuesFromPost(array('PROPERTIES' => array('2' /* ID свойства */ => "0000073738" /* Символьный код города */)),array());
Протестировать можно написав в result_modifier.php можно использовать аналогично CCrmContact
<? if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
if (\Bitrix\Main\Loader::includeModule('crm')) {
$IDCON = ид компании;
$res = CCrmCompany::GetByID($IDCON, false //false означает что права проверять не нужно); // например $res["ASSIGNED_BY_ID"] содержит ID ответственного за компанию
var_dump($res); // так можно посмотреть все поля карточки компании соответствующего id
}
Я провел большое количество собеседований с кандидатами на должность битрикс программиста. Однако многие не дошли и до первой несгораемой суммы. Делюсь своим мнением, что же должен знать битрикс программист уровня тех. лида на самом деле.
Некоторые требования выходят далеко за стандартные границы битрикса — это необходимо, чтобы кандидат был в состоянии собрать действительно сложный проект.
Полноценный веб-разработчик (даже на битриксе) должен знать все, что касается жизненного цикла сайта от верстки, до настройки всех необходимых функций веб-сервера, чтобы работало быстро и стабильно. Иначе чуть что - сразу тупик.