Для сокращения рисков при внедрении для партнеров и программистов и для повышения качества внедрений наших продуктов, мы начинаем цикл статей под общим названием
Технические особенности решений ROMZA или ТОРР.
Обновление типовых решений ROMZA:
Во всех мастерах наших типовых решений есть специальный режим обновления.
Режим обновления станет доступен для определенного сайта (SITE_ID) в том случае если была завершена установка этого мастера в режиме установки, при этом на последнем шаге установки происходит установка Опции "wizard_installed" = "Y" для нужного сайта:
Соответственно режим обновления появится только в том случае — если для выбранного сайта опция "wizard_installed" установлена в "Y".
Режим обновления работает следующим образом:
1. Создается папка
Например для решения Битроник2 версии 2.20.0 это будет такая папка:
в эту папку копируется шаблон решения таким какой он есть в эталонной версии.
Если вносились изменения в шаблон, то все ваши изменения останутся на месте в папке с предыдущим номером версии.
Например
Этот шаблон можно вернуть в любой момент выбрав его в настройках сайта
2. В созданную на предыдущем шаге папку копируется файл для кастомизации стилей.
Из текущего шаблона в новый копируется файл template_styles.css если таковой имеется.
Он автоматически подключается последним из стилей и может быть использован для кастомизации и перезаписи CSS правил для решения.
3. Происходит обновление публичной части.
Алгоритм обновления такой:
Если для файла публичной части необходимо обновление то сначала создается копия файла с текущей датой (датой обновления мастером), затем в этом файле производятся необходимые манипуляции.
Пример:
был файл index.php в корне сайта, после обновления от 26 декабря 2016 года в 13-05 его содержимое будет доступно в файле index-2016_12_26-13_05_00.php который будет лежать в той же папке.
При этом содержимое index.php изменится по нужному алгоритму.
Как правило обновления публичной части добавляют какой либо параметр в arParams компонента, поэтому в файл либо добавляются либо заменяются определенные строки и при этом изменения не влияют на работоспособность.
Но на всякий случай копия файла создается всегда, чтобы в любой момент можно было отменить изменения.
4. Копируется папка ajax из папки мастера с заменой файлов.
При этом если были какие-то изменения в ajax обработчиках в таких файлах — то они потеряются.
Копии в ajax папке не создаются!
Как правило, в AJAX обработчиках не должно быть изменений из вне. Поэтому имейте ввиду что изменения потеряются.
AJAX обработчики типовых решений
все Ajax обработчики в наших типовых решениях всегда находятся в публичной части сайта в папке ajax (SITE_DIR/ajax/)
Если нужно поменять содержимое какого либо обработчиков, то нужно скопировать нужный файл в другую папку (напр. ajax_new)
и сделать 302 редирект либо через .htaccess либо через urlrewrite.php Битрикса (только если включен mod_rewrite для Apache2) либо через настройку ngnix.
В дальнейшем планируется расширить кастомизацию AJAX обработчиков через события.
На данный момент в решениях:
Сохранение параметров компонентов в папку romza_settings и их получение для ajax
в модуле "Служебные инструменты ROMZA" (yenisite.core) есть класс \Yenisite\Core\Ajax при помощи которого мы можем сохранять и загружать нужные данные по определенному ключу.
Чтобы сохранить параметры нужного компонента надо после всех манипуляций с $arParams выполнить следующий код, либо в конце файла result_modifier.php либо в начале выполнения шаблона template.php
Для удобства передачи нужных параметров через JavaScript существует метод который выводит необходимые для получения параметров данные:
Этот метод кодирует необходимые данные в Base64 и выводит их в data атрибуте data-ajax.
В нем закодирован массив:
Теперь мы можем получить эти параметры в Ajax обработчике, для этого используем следующий код:
Тут $arAjax['PAGE'] нужен для fallback режима.
Дело в том что если физически удалить папку bitrix/romza_settings и при этом выполнить ajax к нужному обработчику, без открытия страницы где они сохраняются то параметров не будет.
Чтобы предотвратить такой кейс, метод getParams попробует получить параметры, если он их не найдет в первый раз будет сделан get запрос к целевой странице, чтобы параметры сохранились, затем обработчик попробует получить параметры еще 1 раз.
Это была первая статья в цикле статей по документации и работе наших модулей и типовых решений, про что бы вы хотели еще узнать? напишите в комментариях!
Технические особенности решений ROMZA или ТОРР.
Обновление типовых решений ROMZA:
Во всех мастерах наших типовых решений есть специальный режим обновления.
Режим обновления станет доступен для определенного сайта (SITE_ID) в том случае если была завершена установка этого мастера в режиме установки, при этом на последнем шаге установки происходит установка Опции "wizard_installed" = "Y" для нужного сайта:
COption::SetOptionString($wizard->GetVar('solutionName'), 'wizard_installed', 'Y', false, $siteID); // $wizard->GetVar('solutionName') = код типового решения, например yenisite.bitronic2 // $siteID = ID сайта для которого произведена установка |
Режим обновления работает следующим образом:
1. Создается папка
/bitrix/templates/romza_#КОД_МОДУЛЯ_БЕЗ_YENISITE#_#НОМЕР_ВЕРСИИ# |
/bitrix/templates/romza_bitronic2_2.20.0 |
Если вносились изменения в шаблон, то все ваши изменения останутся на месте в папке с предыдущим номером версии.
Например
/bitrix/templates/romza_bitronic2_2.19.1 |
2. В созданную на предыдущем шаге папку копируется файл для кастомизации стилей.
Из текущего шаблона в новый копируется файл template_styles.css если таковой имеется.
Он автоматически подключается последним из стилей и может быть использован для кастомизации и перезаписи CSS правил для решения.
3. Происходит обновление публичной части.
Алгоритм обновления такой:
Если для файла публичной части необходимо обновление то сначала создается копия файла с текущей датой (датой обновления мастером), затем в этом файле производятся необходимые манипуляции.
Пример:
был файл index.php в корне сайта, после обновления от 26 декабря 2016 года в 13-05 его содержимое будет доступно в файле index-2016_12_26-13_05_00.php который будет лежать в той же папке.
При этом содержимое index.php изменится по нужному алгоритму.
Как правило обновления публичной части добавляют какой либо параметр в arParams компонента, поэтому в файл либо добавляются либо заменяются определенные строки и при этом изменения не влияют на работоспособность.
Но на всякий случай копия файла создается всегда, чтобы в любой момент можно было отменить изменения.
4. Копируется папка ajax из папки мастера с заменой файлов.
При этом если были какие-то изменения в ajax обработчиках в таких файлах — то они потеряются.
Копии в ajax папке не создаются!
Как правило, в AJAX обработчиках не должно быть изменений из вне. Поэтому имейте ввиду что изменения потеряются.
AJAX обработчики типовых решений
все Ajax обработчики в наших типовых решениях всегда находятся в публичной части сайта в папке ajax (SITE_DIR/ajax/)
Если нужно поменять содержимое какого либо обработчиков, то нужно скопировать нужный файл в другую папку (напр. ajax_new)
и сделать 302 редирект либо через .htaccess либо через urlrewrite.php Битрикса (только если включен mod_rewrite для Apache2) либо через настройку ngnix.
В дальнейшем планируется расширить кастомизацию AJAX обработчиков через события.
На данный момент в решениях:
- Битроник2 (yenisite.bitronic2, yenisite.bitronic2pro, yenisite.bitronic2lite);
- Soft (yenisite.soft);
- Monarch (yenisite.furniture);
- Centurion (yenisite.stroymag);
Сохранение параметров компонентов в папку romza_settings и их получение для ajax
в модуле "Служебные инструменты ROMZA" (yenisite.core) есть класс \Yenisite\Core\Ajax при помощи которого мы можем сохранять и загружать нужные данные по определенному ключу.
Чтобы сохранить параметры нужного компонента надо после всех манипуляций с $arParams выполнить следующий код, либо в конце файла result_modifier.php либо в начале выполнения шаблона template.php
\Yenisite\Core\Ajax::saveParams($this, $arParams, $ID); // Где $this объект класса CBitrixComponentTemplate или CBitrixComponent или строка с именем компонента как в IncludeComponent, например — "bitrix:catalog.section" // $arParams — массив сохраняемых параметров // $ID (необязательно) — произвольный ключ определяющий уникальность параметров (например у нас два одинаковых компонента с разными шаблонами на странице) |
\Yenisite\Core\Ajax::printAjaxDataAttr($ComponentTemplate, $ID); // $ComponentTemplate — объект класса CBitrixComponentTemplate // $ID (необязательно) — произвольный ключ определяющий уникальность параметров |
Этот метод кодирует необходимые данные в Base64 и выводит их в data атрибуте data-ajax.
В нем закодирован массив:
array( 'CMP' => 'bitrix:catalog.section', // имя компонента для которого сохраняется параметры 'PAGE' => '/catalog/', // путь к текущей страницы без служебный параметров, нужно для fallback режима 'TMPL' => '.default', // имя текущего шаблона 'ID' => 'main_section'; // произвольный ключ определяющий уникальность параметров (необязательно) } |
Теперь мы можем получить эти параметры в Ajax обработчике, для этого используем следующий код:
// GetDecodedArParams декодирует Base64 если необходимо конвертирует кодировку в UTF-8, возвращает массив $arAjax = \Yenisite\Core\Tools::GetDecodedArParams($_REQUEST['ajax']); // из этих данных получаем нужные нам параметры $arParams = \Yenisite\Core\Ajax::getParams($arAjax['CMP'], $arAjax['ID'], $arAjax['PAGE']); |
Дело в том что если физически удалить папку bitrix/romza_settings и при этом выполнить ajax к нужному обработчику, без открытия страницы где они сохраняются то параметров не будет.
Чтобы предотвратить такой кейс, метод getParams попробует получить параметры, если он их не найдет в первый раз будет сделан get запрос к целевой странице, чтобы параметры сохранились, затем обработчик попробует получить параметры еще 1 раз.
Это была первая статья в цикле статей по документации и работе наших модулей и типовых решений, про что бы вы хотели еще узнать? напишите в комментариях!