Сообщения блогов сайта "Рекламное Агентство 'Гермес'" (ra-germes.ru) Сообщения блогов сайта "Рекламное Агентство 'Гермес'" (ra-germes.ru) http://ra-germes.ru ru http://backend.userland.com/rss2 Mon, 19 Apr 2021 03:53:07 +0300 Андрей Чурсин: Как публиковать UserID в Yandex метрику (1C-Bitrix) $GLOBALS["USER"]->GetParam('XML_ID');  // или  $GLOBALS["USER"]->GetID(); ============= Для передачи параметров пользователя в Yandex метрику можно использовать код JS: ====code====
window.onload = function () {
    try {
        if ({{Полученный в PHP UserID пользователя}}) {
            ym({{код счётчика}}, 'userParams', {
                vip_status: false,
                UserID: {{Полученный в PHP UserID пользователя}}
            });
        }
    } catch (e) {
        console.log("Ошибка отправки UserID");
    }
};

=============
Вопросы и замечания прошу писать ниже в комментариях
Подробнее...]]>
http://ra-germes.ru/blog/web-dev/kak-publikovat-userid-v-yandex-metriku-1cbitrix/ http://ra-germes.ru/blog/web-dev/kak-publikovat-userid-v-yandex-metriku-1cbitrix/ Fri, 06 Nov 2020 09:36:10 +0300
Андрей Чурсин: Пресет в main.ui.filter
Фокус в том, что пресет задаётся до вызова этих компонентов, и выбранный "по умолчанию" должен примениться к выборке main.ui.grid.
Что бы это реализовать в компоненте в месте где получаем и проверяем значения фильтра делаем так: ====code====
$arResult['GRID']['FILTER_ID'] = (str)$arParams['FILTER_ID];
$arResult['GRID']['FILTER_FIELDS'] =  $arParams['FILTER_FIELDS] // массив полей фильтра
$arResult['GRID']['FILTER_OBJ'] = new Bitrix\Main\UI\Filter\Options($arResult['GRID']['FILTER_ID'], $arParams['FILTER_PRESETS']); // либо запилить пресет прямо в компонент.
$filterData = $arResult['GRID']['FILTER_OBJ']->getFilter($arResult['GRID']['FILTER_FIELDS']); // получили массив для фильтрации

Фильтруем! :)

=============
Подробнее...]]>
http://ra-germes.ru/blog/web-dev/preset-v-mainuifilter/ http://ra-germes.ru/blog/web-dev/preset-v-mainuifilter/ Fri, 25 Sep 2020 17:19:18 +0300
Андрей Чурсин: Ошибка v17.8.25 "b_sale_trading_platform doesn't exist" [Bitrix\Main\DB\SqlQueryException] Mysql query error: (1146) Table 'sitemanager.b_sale_trading_platform' doesn't exist (400) SEL ECT `sale_tradingplatform_order_trading_platform`.`NAME` AS `SOURCE_NAME`, `sale_tradingplatform_order`.`ID` AS `UALIAS_0`, `sale_tradingplatform_order_trading_platform`.`ID` AS `UALIAS_1` FR OM `b_sale_tp_order` `sale_tradingplatform_order` LEFT JOIN `b_sale_trading_platform` `sale_tradingplatform_order_trading_platform` ON `sale_tradingplatform_order`.`TRADING_PLATFORM_ID` = `sale_tradingplatform_order_trading_platform`.`ID` WHERE `sale_tradingplatform_order`.`ORDER_ID` = 11 /var/www/www-root/data/www/your_site.ru/bitrix/modules/main/lib/db/mysqliconnection.php:137 #0: Bitrix\Main\DB\MysqliConnection->queryInternal(string, array, NULL) /var/www/www-root/data/www/your_site.ru/bitrix/modules/main/lib/db/connection.php:330 #1: Bitrix\Main\DB\Connection->query(string) /var/www/www-root/data/www/your_site.ru/bitrix/modules/main/lib/orm/query/query.php:3357 #2: Bitrix\Main\ORM\Query\Query->query(string) /var/www/www-root/data/www/your_site.ru/bitrix/modules/main/lib/orm/query/query.php:825 #3: Bitrix\Main\ORM\Query\Query->exec() /var/www/www-root/data/www/your_site.ru/bitrix/modules/main/lib/orm/data/datamanager.php:500 #4: Bitrix\Main\ORM\Data\DataManager::getList(array) /var/www/www-root/data/www/your_site.ru/bitrix/modules/sale/lib/helpers/admin/blocks/orderstatus.php:272 #5: Bitrix\Sale\Helpers\Admin\Blocks\OrderStatus::prepareData(object) /var/www/www-root/data/www/your_site.ru/bitrix/modules/sale/lib/helpers/admin/blocks/orderstatus.php:336 #6: Bitrix\Sale\Helpers\Admin\Blocks\OrderStatus::getScripts(object, string) /var/www/www-root/data/www/your_site.ru/bitrix/modules/sale/admin/order_view.php:453 #7: require_once(string) /var/www/www-root/data/www/your_site.ru/bitrix/admin/sale_order_view.php:2 =============
Решением стало удаление файла: /bitrix/modules/sale/lib/tradingplatform.php
Подробнее...]]>
http://ra-germes.ru/blog/web-dev/error-v17825-bsaletradingplatform-doesnt-exist/ http://ra-germes.ru/blog/web-dev/error-v17825-bsaletradingplatform-doesnt-exist/ Thu, 06 Aug 2020 10:37:54 +0300
Андрей Чурсин: Как сбросить пароль mysql на CentOS 1. Остановим mysql: bash> systemctl stop mysqld 2. Установим опцию для mySQL bash> systemctl set-environment MYSQLD_OPTS="--skip-grant-tables" 3. Запустим mysql с обновлёнными настройками bash> systemctl start mysqld 4. Авторизуемся в mysql под root bash> mysql -u root 5. Обновим root пароль используя следующие команды (замените ТУТНОВЫЙПАРОЛЬ на ваш пароль) mysql> UPDATE mysql.user SET authentication_string = PASSWORD('ТУТНОВЫЙПАРОЛЬ') WHERE User = 'root' AND Host = 'localhost'; mysql> FLUSH PRIVILEGES; mysql> quit *** Для mysql 5.7.6 и старше нужно использовать mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'ТУТНОВЫЙПАРОЛЬ'; mysql> FLUSH PRIVILEGES; mysql> quit 6. Остановим mysql systemctl stop mysqld 7. Уберём настройку mySQL systemctl unset-environment MYSQLD_OPTS 8. Запустим mysql в стандартном режиме systemctl start mysqld Попробуем авторизоваться с новым паролем: 7. mysql -u root -p =============
Подробнее...]]>
http://ra-germes.ru/blog/web-dev/how-to-reset-mysql-password-in-centos/ http://ra-germes.ru/blog/web-dev/how-to-reset-mysql-password-in-centos/ Tue, 04 Aug 2020 12:56:48 +0300
Андрей Чурсин: Проверяем логи, битрикс окружение BitrixEnv В процессе жизнедеятельности сайт и сервер оставляют после себя различные записи в лог-файлах. Данные из этих файлов желательно периодически разгребать и анализировать, что бы сайт работал быстро и бесперебойно

Для BitrixEnv на centos пути к логам обычно будут такими (зависит от настроек):

  1. Битрикс: __bx_log.log или log.txt в корне сайта. Зависит от переменной LOG_FILENAME в файле /bitrix/php_interface/dbconn.php
  2. Apache: /var/log/httpd/error_log
  3. Nginx: /var/log/nginx/error.log
  4. PHP: /var/log/php/exceptions.log
  5. Почта: /home/bitrix/msmtp_default.log
  6. bash, cron: /var/spool/mail/root и /var/spool/mail/bitrix
  7. bitrixvm: /opt/webdir/temp (логи запущенных задач)

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

И как бонус стоит проверить файл /var/log/btmp командой last -f /var/log/btmp если там очень много попыток авторизации, значит доступ к ssh кто-то пытается подобрать (brute force). Стоит изменить порт доступа к ssh (в файле /etc/ssh/sshd_config поменять строку "Port 22" на другое значение, разрешить доступ к новому порту в iptables и перезагрузить sshd) Что бы сбросить лог авторизации нужно выполнить команду cat /dev/null > /var/log/btmp


Подробнее...]]>
http://ra-germes.ru/blog/web-dev/check-the-logs-bitrix-environment-bitrixenv/ http://ra-germes.ru/blog/web-dev/check-the-logs-bitrix-environment-bitrixenv/ Tue, 04 Aug 2020 12:56:48 +0300
Андрей Чурсин: MYSQL on update TIMESTAMP and DATETIME не работает? Предыстория: загружаю остатки по товарам на складах из 1С в базу сайта через файл XML, если нет остатков по товару - тогда нужно удалять то, что осталось на сайте. Решил сделать метку последнего обновления и буду чистить что давно не обновлялось... А вот и нет! Пришлось ломать мозг.... в общем вот цитата из доки MYSQL:

====quote====
An auto-updated column is automatically updated to the current timestamp when the value of any other column in the row is changed from its current value. An auto-updated column remains unchanged if all other columns are set to their current values. To prevent an auto-updated column from updating when other columns change, explicitly set it to its current value. To update an auto-updated column even when other columns do not change, explicitly set it to the value it should have (for example, set it to CURRENT_TIMESTAMP).

=============
Если кратко и по делу: команда ON UPDATE работает для типов TIMESTAMP и DATETIME только если любая другая ячейка изменилась(!) в любом другом случае следует задать своё значение поля в UPDATE.  
Подробнее...]]>
http://ra-germes.ru/blog/web-dev/mysql-on-update-timestamp-and-datetime-does-not-work/ http://ra-germes.ru/blog/web-dev/mysql-on-update-timestamp-and-datetime-does-not-work/ Thu, 02 Jul 2020 17:47:04 +0300
Андрей Чурсин: Использование Vue.JS в Битрикс. Доступна с версии ui 18.5.1
\Bitrix\Main\UI\Extentions::Load("ui.vue");

Подключение vuex:
Доступна с версии ui 18.5.1
\Bitrix\Main\UI\Extentions::Load("ui.vue.vuex");

Подключение дебаг информации от vue
Добавить в init.php - подключение версии для разработки
define('VUEJS_DEBAG', true)

Для использования функций vue в битрикс, нужно использовать не Vue.xxx
а BX.Vue.xxx - где xxx нужная функция
Исключение. Для создания экземпляра писать не
new Vue(...)
а
BX.Vue.create(...)

Для использования функций vuex правила теже
а BX.Vuex.xxx - где xxx нужная функция
Vuex.Store(...) заменить на BX.Vuex.store(...)
Подробнее...]]>
http://ra-germes.ru/blog/web-dev/use-vuejs-in-bitrix/ http://ra-germes.ru/blog/web-dev/use-vuejs-in-bitrix/ Thu, 02 Jul 2020 17:46:12 +0300
Андрей Чурсин: Где документация по bitrix:main.ui.grid Гриды - Интересный инструмент в Битрикс но опять без документации...


Как я выяснил, это уже старый инструмент (статьи по main.interface.grid нашёл за 2010 год, а по новым гридам (main.ui.grid) самые первые за 2018 год)
Но поскольку документации нет почти нет, я решил отписываться сюда по реализованному функционалу, добавил тег #main.ui.grid
Подробнее...]]>
http://ra-germes.ru/blog/web-dev/232/ http://ra-germes.ru/blog/web-dev/232/ Tue, 16 Jun 2020 11:55:58 +0300
Андрей Чурсин: Как работает bitrix:main.ui.grid
Основная идея:
есть компонент (component.php) со своей логикой выборки и обновления данных.
есть шаблон, где подключены компоненты bitrix:main.ui.filter и bitrix:main.ui.grid - они только отображают полученные данные и реализуют интерфейс для взаимодействия с сервером (отправка запросов происходит через js шаблона либо штатными методами грида)

итак, вот примеры вызова наших компонентов в шаблоне (templates.php):
====code====
<? $APPLICATION->IncludeComponent('bitrix:main.ui.filter', '', [
        'FILTER_ID' => $arResult['GRID']['ID'].'_filter',
        'GRID_ID' => $arResult['GRID']['ID'],
        'FILTER' => $arResult['GRID']['FILTER'],
        'ENABLE_LIVE_SEARCH' => true,
        'ENABLE_LABEL' => true
]); ?>
============= ====code====
<? $APPLICATION->IncludeComponent(
        'bitrix:main.ui.grid',
        '',
        [
            'GRID_ID' => $arResult['GRID']['ID'],
            'COLUMNS' => $arResult['GRID']['COLUMNS'],
            'ROWS' => $arResult['GRID']['DATA'],
            'SHOW_ROW_CHECKBOXES' => true,
            'NAV_OBJECT' => $arResult['GRID']['NAV'],
            'AJAX_MODE' => 'Y',
            'AJAX_ID' => \CAjax::getComponentID('bitrix:main.ui.grid', '.default', ''),
            'PAGE_SIZES' => [
                ['NAME' => "5", 'VALUE' => '5'],
                ['NAME' => '10', 'VALUE' => '10'],
                ['NAME' => '20', 'VALUE' => '20'],
                ['NAME' => '50', 'VALUE' => '50'],
                ['NAME' => '100', 'VALUE' => '100']
            ],
            'AJAX_OPTION_JUMP'          => 'N',
            'SHOW_CHECK_ALL_CHECKBOXES' => true,
            'SHOW_ROW_ACTIONS_MENU'     => true,
            'SHOW_GRID_SETTINGS_MENU'   => true,
            'SHOW_NAVIGATION_PANEL'     => true,
            'SHOW_PAGINATION'           => true,
            'SHOW_SELECTED_COUNTER'     => true,
            'SHOW_TOTAL_COUNTER'        => true,
            'SHOW_PAGESIZE'             => true,
            'SHOW_ACTION_PANEL'         => true,
            'ACTION_PANEL'              => $arResult['GRID']['ACTION_PANEL'],
            'ALLOW_COLUMNS_SORT'        => true,
            'ALLOW_COLUMNS_RESIZE'      => true,
            'ALLOW_HORIZONTAL_SCROLL'   => true,
            'ALLOW_SORT'                => true,
            'ALLOW_PIN_HEADER'          => true,
            'AJAX_OPTION_HISTORY'       => 'N',
            "SORT" => $arResult['GRID']["SORT"],
            "SORT_VARS" => $arResult['GRID']["SORT_VARS"],
            "FOOTER" => array(array("title" => "Всего", "value" => $arResult['GRID']["ROWS_COUNT"])),
            "FILTER" => $arResult['GRID']["FILTER"],
        ]
); ?>
=============
Можно заметить, что вся информация по гридам разнесена в свойстве массива $arResult['GRID'] - это позволит интегрировать гриды в дефолтные компоненты без ущерба другим шаблонам.

Чуть позже найду время расписать все параметры этих компонентов (ведь их тоже нигде не найти в открытом виде)
Подробнее...]]>
http://ra-germes.ru/blog/web-dev/how-does-bitrixmainuigrid1/ http://ra-germes.ru/blog/web-dev/how-does-bitrixmainuigrid1/ Tue, 16 Jun 2020 11:55:58 +0300
Андрей Чурсин: Все JS события в Bitrix
Скрипт, которым можно пропустить через себя вызовы JS битриксовских событий.
Выполняем в консоли и начинаем видеть поток событий. Благодаря замыканиям, все объекты в логе доступны для инспекции.
====code====
let originalBxOnCustomEvent = BX.onCustomEvent;

BX.onCustomEvent = function (eventObject, eventName, eventParams, secureParams)
{
    // onMenuItemHover например выбрасывает в другом порядке
    let realEventName = BX.type.isString(eventName) ?
        eventName : BX.type.isString(eventObject) ? eventObject : null;

    if (realEventName) {
        console.log(
            '%c' + realEventName, 
            'background: #222; color: #bada55; font-weight: bold; padding: 3px 4px;'
        );
    }

    console.dir({
        eventObject: eventObject,
        eventParams: eventParams,
        secureParams: secureParams
    });

    originalBxOnCustomEvent.apply(
        null, arguments
    );
};
=============
Подробнее...]]>
http://ra-germes.ru/blog/web-dev/all-js-event-in-bitrix/ http://ra-germes.ru/blog/web-dev/all-js-event-in-bitrix/ Thu, 11 Jun 2020 11:35:32 +0300