Задать вопрос
Ответы пользователя по тегу 1С-Битрикс
  • Как автоматизировать очистку кэша битрикс?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Увы, очищать папку через cron не лучшая идея. По факту Вы боретесь не с проблемой, а с симптомом.
    Почему разрастается папка кеша?
    1) У Вас очень большой и сложный сайт.
    Например при 10 тысячах товаров в одной категории, если Вы будете пытаться кешировать каждую страницу, то размер будет большой. Предположим на страницу с 10 товарами уходит 10КБ кеша (на самом деле, все зависит от верстки и может достигать и бОльшего размера), тогда общий кеш каталога будет 10КБ * 10 000 = ~100МБ (учетных, на самом деле около 90МБ).
    Теперь посчитаем, что может быть 2 вида отображения: списком или плиткой. Соответственно уже 180МБ. А если товаров не 10 тысяч, а 100 ? А если есть еще и фильтр и его результаты могут быть кешированы? И это мы посчитали только каталог и довольно малый размер кеша.

    Решение: подобрать время кеширования и увеличить дисковое пространство

    2) Неправильно определено время кеширования.
    Например: у Вас ttl кеша стоит 3 месяца. И даже если за 3 месяца на него никто не зашел, он все-равно хранится. Например у Вас очень объемный кеш (что очень плохо), который занимае 500КБ (а иной раз и 1 МБ), получается что этот 1МБ будет хранится на протяжении длительного времени, даже если к нему нет обращения.

    Решение: подобрать время кеширования (возможно где-то стоит уменьшить) и параметры компонентов (возможно что-то не стоит кешировать)

    3) Неправильно настроен кеш собственных или битриксовых компонентов.
    Например есть очень большой пунктик в битриксе с кешем меню - если указать MENU_CACHE_VARS (вроде так пишется, по памяти писал), то он будет под каждый набор параметров создавать кеш. И тогда кеш меню начинает сильно пухнуть и еще и кешироваться на длительное время.

    Решение: нужно проверить параметры кеширования в компонентах. Возможно в своих компонентах переписать или посмотреть на основании чего он формируется

    4) Ошибка с механизмом очищения кеша.
    Например, когда кеш не успевает удаляться, и накапливается. Таким образом происходит дублирование одного и того же кеша в разных компонентах.
    Ответ написан
    Комментировать
  • Какой компонент Битрикс подойдет для отправки заявки в личном кабинете?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Здесь дело не в компоненте, а в способе реализации, которая в свою очередь зависит от редакции.
    Например для Битрикс24 их много. Навскидку варианты следующие:
    1) Универсальный список с бизнес-процессом на нем
    2) Элемент инфоблока с бизнес-процессом на нем (есть и в БУС)
    3) Веб-формы и этапы прохождения (есть и в БУС)
    4) Собственная реализация на инфоблоках
    5) Релаизация на основе собственного кода

    Например если взять вариант 1, то там вообще делать ничего не нужно. Только права правильно настроить и бизнес-процесс описать.
    А вот, например в форме 4 - bitrix:iblock.element.add и собственный код согласования.
    Ответ написан
    Комментировать
  • Как сгруппировать элементы по разделам в Битрикс?

    gromdron
    @gromdron
    Работаю с Bitrix24
    А не пробовали воспользоваться штатной возможностью группировки: arGroupBy (3 параметр в getList, который у вас в значении false)

    Массив полей для группировки элемента. Если поля указаны, то выборка по ним группируется (при этом параметр arSelectFields будет проигнорирован), а в результат добавляется поле CNT - количество сгруппированных элементов. Если указать в качестве arGroupBy пустой массив, то метод вернет количество элементов CNT по фильтру. Группировать можно по полям элемента, а также по значениям его свойств. Для этого в качестве одного из полей группировки необходимо указать PROPERTY_, где PROPERTY_CODE - ID или символьный код свойства.
    Необязательное. По умолчанию false - записи не группируются.


    Группировать по ID секции.
    Ответ написан
    Комментировать
  • Как реализовать настраиваемые виджеты на сайте?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Навскидку, Вы упустили самый интересный вариант:Реализация на базе включаемых областей для страниц.
    Плюсы:
    + Реализация требований на основе стандартной функциональности продукта
    + Гибкие возможности по расширению (вы можете использовать любые компоненты на любых страницах с любыми параметрами)
    + Используете только необходимый минимум без прослоек в виде инфоблоков и бд
    + Простое и понятное управления для разработчика

    Минусы:
    - Без соответствующего интерфейса решение для простых контент редакторов превращается в АД. Если Вы будете сами это все поддерживать, то проблем не возникнет, а вот для других потребуется разработать интерфейс создания включаемой области.
    Ответ написан
    Комментировать
  • Не выполняются агенты на событиях в битрикс 1С?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Для начала:
    1) Выполнялись ли агенты на хитах или на кроне? Может быть кто-то начал перенос агентов на крон и не закончил перенос.
    2) Определены ли константы: BX_CRONTAB_SUPPORT и BX_CRONTAB ? Может быть агенты были на хитах и кто-то определил константы и не перенес на крон. Или наоборот определил константы, без параметров ниже.
    3) Какие значения заданы у agents_use_crontab и check_agents ?
    Ответ написан
    Комментировать
  • Как подключить глобальную переменную $DB в битрикс в отдельном файле?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Покажите код вашего файла.
    Возможно Вы не подключили prolog_before - служебную часть битрикса.
    Делается это следующим образом: в начале скрипта прописывается:
    require $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php";
    Ответ написан
  • Как реализовать голосование за отдельный элемент с помощью инфоблоков в битрикс?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Штатный механизм голосования за элемент инфоблоков не подразумевают запись времени и ip, только факт голосования. Если Вы хотите делать сделать такое голосование, Вам нужно либо создавать опросы, либо использовать свою таблицу.

    Давайте разберемся с Вашей ситуацией:
    создала отдельный файл voting.php в шаблоне компонента

    Скорее всего Вы просто создали файл. И в нем соответственно НЕ подключили служебную часть.
    Я бы рекомендовал Вам использовать ORM Битрикса для такой ситуации (очен....
    Но как быстрое решение, можно и прямой запрос в базу (хотя это будет менее элегантное решение).
    В таком случае код будет выглядеть как-то так:

    <?
    require $_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php";
    
    /**
     * Тут можете проверить, что все переменные пришли
     * Я для себя буду использовать переменные:
     * - ELEMENT_ID 
     * - USER_ID
     * 
     * Просто писать факт голосования.
     * В таблицу project_element_vote ( ID, ELEMENT_ID, USER_ID )
     */
    
    global $USER;
    
    /* @var object Объект приложения */
    $oApplication = \Bitrix\Main\Application::getInstance();
    
    /* @var object Объект соединения с БД */
    $oConnection = $oApplication->getConnection();
    
    /* @var object Хелпер для безопасной записи в БД*/
    $oHelper = $oConnection->getSqlHelper();
    
    /* @var object Объект для работы с входящими переменными */
    $oRequest = $oApplication->getContext()->getRequest();
    
    
    if ( $oRequest->isAjaxRequest() && !empty( $oRequest->get('ELEMENT_ID') ) )
    {
    	$iUser    = $USER->GetId();
    	$iElement = $oHelper->forSql( $oRequest->get('ELEMENT_ID') );
    
    	$sql = "INSERT INTO project_element_vote('ELEMENT_ID','USER_ID') VALUES ('{$iElement}','{$iUser}')";
    	$res = $oConnection->query($sql);
    
    	if ( $res )
    	{
    		echo 'ok';
    		die();
    	}
    }
    echo 'bad';
    Ответ написан
    Комментировать
  • Как в свойстве привязка к пользователю во всплывающем окне были пользователи из определенной группы,?

    gromdron
    @gromdron
    Работаю с Bitrix24
    1) Выносите /bitrix/admin/user_search.php (исходный код, а не ссылку), куда-нибудь в /local/tools/
    2) Делаете класс-наследник от CIBlockPropertyUserID ( /bitrix/modules/main/tools/prop_userid.php )
    3) Перекрываете методы GetUserTypeDescription и (GetPropertyFieldHtml или FindUserIDNew)
    4) Правите в новом файле из п.1 Вашу группу

    Это вариант fix.
    В идеале: в своем наследнике CIBlockPropertyUserID добавить параметром группу пользователей, все запросы дополняете этой группой, а в своем файле user_search.php делаете доп. проверку. Так получается уже отличное свойство.
    Ответ написан
    Комментировать
  • Кто подключал онлайн-кассу в битрикс? Можно ли это сделать без обновления?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Можно ли подключить онлайн кассы для старого Битрикса?
    Да, можно.

    Можно ли подключить онлайн кассы для старого Битрикса, не привлекая разработчика или иных специалистов?
    Нет, нельзя.

    Какие есть варианты кроме обновления?
    1) При помощи разработчиков (заказать) свою реализацию. В этом случае обновлять битрикс не придется, но все проблемы с работой касс будут только головной болью
    2) Можно поискать доступные расширения для битрикса, если производители касс их выпускают. Скорее всего такие модули будут требовать наличие стандартных интеграций, т.е. обновленного битрикса, но чем черт не шутит, может найдете иную реализацию. (я пока таких не встречал).
    В итоге, Вы все равно скорее придете к покупке обновления.
    Ответ написан
    Комментировать
  • Как создать кастомное действие с привязкой к элементу?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Впринципе не сложно.

    Для начала Вы подписываетесь на событие OnAdminListDisplay модуля Main.
    Именно оно отвечает за действие ДО вывода любого списка элементов в административной панели (за исключением под-листов у инфоблоков и модуля производительности).
    На вход оно принимает лишь 1 параметр - экзепляр класса CAdminList (см. /bitrix/modules/main/interface/admin_list.php)

    Чтобы обрабатывать нужную таблицу, нужно ограничить выборку. Т.е. Ваш обработчик будет выглядеть как-то так:

    <?php
    AddEventHandler("main", "OnAdminListDisplay", "MyOnAdminContextMenuShow");
    function MyOnAdminContextMenuShow(&$oAdminList)
    {
        /**
         * $type - тип кода инфоблока, например news, events и т.д.
         * $iblock - идентификатор инфоблока
         * 
         * Если интересует каталог, то вместо tbl_iblock_list_ нужно использовать tbl_product_list_
         */
        if ( $oAdminList->table_id == "tbl_iblock_list_".md5($type.".".$iblock) )
        {
            // полезные действия
        }
    }
    ?>


    Собственно так, мы получаем возможность работать с выводом.
    Для более подробного пояснения лучше прочитать про заказные элементы в административной панели в документации: https://dev.1c-bitrix.ru/api_help/main/general/adm...

    Собственно добавим нужные нам данные для работы. Предположим, я хочу логгировать выделенные элементы на странице, тогда мой код будет выглядеть так:
    AddEventHandler("main", "OnAdminListDisplay", "MyOnAdminContextMenuShow");
    function MyOnAdminContextMenuShow(&$oAdminList)
    {
        /**
         * $type - тип кода инфоблока, например news, events и т.д.
         * $iblock - идентификатор инфоблока
         * 
         * Если интересует каталог, то вместо tbl_iblock_list_ нужно использовать tbl_product_list_
         */
        if ( $oAdminList->table_id == "tbl_iblock_list_".md5("structure.4") )
        {
        	$arActions = $oAdminList->arActions;
    
        	$arActions['alert'] = 'Ругаться!';
    
        	$oAdminList->AddGroupActionTable($arActions);
        }
    }
    
    AddEventHandler("main", "OnAfterEpilog", "iblockAlert");
    
    function iblockAlert()
    {
    	$oRequest = \Bitrix\Main\Application::getInstance()->getContext()->getRequest();
    
    	// Проверяем, что работает только в админке
    	if ( $oRequest->isAdminSection() )
    	{
    		if (
    			// Интересуют только интерактивные запросы
    			$oRequest->get('mode')=='frame'
    			// Где передана переменна IBLOCK_ID
    			&& $oRequest->get('IBLOCK_ID')==4
    			// Соответствующие нашему action
    			&& $oRequest->get('action')=='alert'
    			)
    		{
    			/**
    			 * Вот тут можно сделать что угодно
    			 * Можно получить выделенные ID
    			 * через $oRequest->get('ID')
    			 * Если он пуст, значит действие на всех элементах инфоблока
    			 */
    		}
    	}
    }


    На самом деле параметров гораздо больше - есть еще custom области, которые можно выводить, но суть та же. Если захотите добавить свое поле (я добавлял простой action), то лучше глянуть в исходники и там уже по аналогии разрбраться
    Ответ написан
    3 комментария
  • Как грамотней добавить лендинг на страницу 1с bitrix?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Есть пряморукое, но сомнительное решение: поработать через urlrewriter

    Если, как было выяснено в комментариях,

    /akcii/ - базовая страница компонента
    /akcii/skidka/ - страница, где выводится список элементов из инфоблока с кодом "skidka"
    /akcii/nacenka/ - страница, где выводится список элементов из инфоблока с кодом "nacenka"

    Тогда в urlrewrite.php можно внести правило:

    array(
    "CONDITION" => "#^/akcii/skidka/\\?#",
    "RULE" => "",
    "ID" => "",
    "PATH" => "/beginners/skidka/index.php",
    ),

    И проконтролировать, чтобы оно было выше обработчика самого /akcii/
    Тогда должно сработать и по адресу /akcii/skidka/ показывать директорию лендинга
    Ответ написан
    Комментировать
  • Как настроить права доступа на группу пользователей?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Предположим, что обе группы имеют доступ в административную панель.
    Проблем с группой 2 быть не должно, все настраивается в рамках стандартных прав.

    А вот с группой 1 будет интересный вопрос: Вам на событиях придется отлавливать добавление и изменение элемента инфоблока (я бы посоветовал принудительно ставить флаг активности в N состояние).

    Или у Вас проблемы с непосредственным написанием кода?
    Ответ написан
  • Как правильно начинать новый проект на битрикс?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Если Вы работаете с 1С-Битрикс и вы делаете "шаблонки", то бОльшая часть всего уже есть.
    Вообще вопрос сильно отличается от содержания и не очень понятно что изначально вы имеете ввиду.
    Вы хотите узнать можно ли решить данный кейс без написания собственного кода (т.е. без написания компонентов, а только правками шаблона)? Да можно.
    Можно ли сделать какие-либо сложные вещи без написания кода? Зависит от того что именно. Многие решения уже сделаны, а реализация других потребует сильного или значительного изменения кода.

    Можете уточнить вопрос?
    Ответ написан
  • Есть php скрипт, надо записать его в крон. как сделать?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Для начала, ознакомьтесь с имеющийся документацией: https://dev.1c-bitrix.ru/learning/course/?COURSE_I...
    Внизу странице (по ссылке выше) есть код агента, исполняющегося под cron. Он подойдет.

    Первое на что нужно обратить внимание: константа SITE_ID. Если предполагается работа из админ панели, то это константа языка, иначе - константа сайта (лучше задать вручную)
    Второе: проверьте $_SERVER["DOCUMENT_ROOT"] (если у Вас bitrix vm то это скорее всего тот же путь)
    И третье - вместо echo в cli режиме лучше использовать: fwrite( STDOUT, 'Строка' );
    Ответ написан
    Комментировать
  • Что нужно сделать чтобы убрать дублирование h1 тайтла?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Во-первых, в данный момент title и h1 у Вас различаются. Т.е. скорее всего Вы либо решили вопрос, либо "зашили" его в код страницы.
    Во-вторых, согласно документации и примечаниям, в месте вывода h1 вы можете прописать: $APPLICATION->ShowTitle(), а в title: $APPLICATION->ShowTitle(false)
    Тогда у Вас получить отложенный механизм и стандартный. (можете поменять местами как Вам нужно)
    Ответ написан
    Комментировать
  • Что лучше выбрать для интеграции интернет-магазина на 1С Битрикс с Amocrm и c Roistat?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Прежде всего давайте разберемся зачем Вам это нужно и что это такое.

    Что такое '1С-Битрикс Управление сайтом (ред. "Малый Бизнес")' - это интернет магазин. Витрина товаров с их оформлением.
    Пользователь создает заказ, видит его в кабинете, оплачивает и ждет доставку. Может ознакомиться с ассортиментом и т.п.
    По факту в Вашем случае это поставщик данных для CRM.

    AmoCRM - это CRM система для ведения клиентской базы, отслеживания заказов, бонусных программ и прочего.

    Roistat - это система аналитики для бизнеса. Работает она на основе полученных из других источников данных.

    Соответственно, для корректной и полной работы Вам нужно сделать следующее:

    1) Интеграция Битрикса -> AmoCRM. Передавать данные маркера (см ниже), сделках, клиентах. (можно двухстороннюю)
    2) Интеграция AmoCRM -> Roistat (передача маркера, данных сделки, статусов и т.п.)
    3) Интеграция Битрикса -> Roistat (передача маркеров, отслеживание событий и аналитики)

    Только при такой интеграции у вас получиться:
    1) Полная картина в Roistat (вы сможете отследить покупателя от момента захода на сайт, до финальных покупок)
    2) Получить необходимые данные в CRM системе
    3) Не нарушить стандартных механизмов работы системы.
    Ответ написан
    Комментировать
  • Где посмотреть файл XML, который импортировался c 1С (УТ11) в Битрикс?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Если Вы выгружали пачкой сразу на сайт и больше выгрузок не делали, то смотрите в /upload/1c_exchange/ там будут и xml и картинки и все что нужно.
    Но только с последней выгрузки.
    Ответ написан
    Комментировать
  • Как найти фрагмент кода в Битрикс?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Универсальный алгоритм поиска:

    1) Открываем urlrewrite.php, смотрим есть ли правило для данной страницы. Если есть - открываем страницу из правила, если нет - ищем физическую страницу
    2) Смотрим наличие кода компонентов на данной странице, проверяем включаемые области. Если проект тестовый, то можно по одному убирать компоненты, пока не найдете.
    Если убрали все компоненты, а надпись выводится, то идем дальше
    3) Открываем настройки сайта и смотрим какой шаблон выводится на данной странице. Открываем его по ssh (как header.php так и footer.php) смотрим компоненты, включаемые области, области с отложенными функциями (ShowViewContent)
    4) Если надпись все еще не выводится, смотрим события страницы

    Делая все 3 шага Вы сможете найти что угодно в Битриксе.
    Как пример, данная область может быть:
    1) Физическим тестом на странице
    2) Включаемой обастью подключаемой на странице
    3) Результатом работы компонента
    4) Отложенным результатом компонента
    5) Физическим текстом в шаблоне
    6) Результатом работы компонента в шаблоне
    7) Результатом работы отложенной функции в footer.php
    8) Результатом работы отложенной функции на событиях страницы
    Ответ написан
    2 комментария
  • Google PageSpeed показывает низкий коэффициент на оптимизированный сайт почему?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Все просто: открываем https://developers.google.com/speed/pagespeed/insi...
    И смотрим.

    Навскидку:
    1) Переместить JS+CSS вниз страницы (есть опция)
    2) Оптимизировать изображения (фотошоп в помощь)
    3) Объединять css в один файл
    4) Поработайте с версткой, чтобы она проходила легче (может кое-где подчистить стоит, от лишних узлов)
    Ответ написан
  • Арендуем сервер, на нем стоит VM Bitrix, как можно найти и скачать резервные копии БД?

    gromdron
    @gromdron
    Работаю с Bitrix24
    В BitrixVM по-умолчанию не создаются резервные копии.
    Т.е. чтобы они были, нужно настроить автоматическое создание.
    Резеврная копия штатно создается двумя способами:
    1) Средствами bitrixVM
    2) Средствами битрикса (бекапится то что в настройках).

    Сделать резервную копию можно зайдя по пути: Настройки -> Настройки сайта -> Резервное копирование

    На всякий случай:
    https://dev.1c-bitrix.ru/learning/course/?COURSE_I...
    https://dev.1c-bitrix.ru/learning/course/?COURSE_I...
    Ответ написан
    Комментировать