Advertisement
bender-nvkz

bx-example-migration

Oct 28th, 2016
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 4.28 KB | None | 0 0
  1. <?php
  2.     die('Это пример сценария миграции!');
  3.  
  4.     /**
  5.      *
  6.      * Это пример сценария миграции. Здесь должно быть описание цели применения миграции, напр.:
  7.      *
  8.      * Миграция добавляет свойство "Класс пункта меню" к инфоблоку "Все компании WiseAdvice CG"
  9.      *
  10.      */
  11.  
  12.     define('BX_BUFFER_USED', true);
  13.     define('NO_KEEP_STATISTIC', true);
  14.     define('NOT_CHECK_PERMISSIONS', true);
  15.     define('NO_AGENT_STATISTIC', true);
  16.     define('STOP_STATISTICS', true);
  17.     define('SITE_ID', 's1');
  18.  
  19.     $_SERVER['DOCUMENT_ROOT'] = realpath(__DIR__ . '/../../');
  20.  
  21.     require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php';
  22.  
  23.     error_reporting(E_ALL);
  24.     ini_set('display_errors', 1);
  25.     set_time_limit(0);
  26.     ignore_user_abort(true);
  27.  
  28.     while (ob_get_level()) {
  29.         ob_end_flush();
  30.     }
  31.  
  32.     if (!CModule::IncludeModule('iblock')) {
  33.         print 'Не удалось подключить модуль инфоблоков <br>' . PHP_EOL;
  34.         exit;
  35.     }
  36.  
  37.     /*
  38.      * Выше находится стандартная служебная часть сценария миграции, не требует комментариев.
  39.      * Далее создается индивидуальный сценарий, требует комментариев выполнения.
  40.      *
  41.      * Во время выполнения миграции необходимо предусмотреть проверку состояния миграции,
  42.      * для того чтобы избежать дублирования данных. То есть на одной копии проекта миграция не должна
  43.      * запускаться дважды.
  44.      *
  45.      * При выводе, для переноса строк используется и <br> и PHP_EOL!
  46.      */
  47.  
  48.     // Объявляю массив добавляемых к инфоблоку свойств
  49.     $properties = array(
  50.  
  51.         array(
  52.             'NAME'             => 'Класс пункта меню',
  53.             'CODE'             => 'MENU_CLASS',
  54.             'SORT'             => 500,
  55.             'PROPERTY_TYPE'    => 'S',
  56.             'IS_REQUIRED'      => 'N',
  57.             'MULTIPLE'         => 'N',
  58.             'WITH_DESCRIPTION' => 'N'
  59.         )
  60.        
  61.     );
  62.  
  63.     // Класс для работы со свойствами ИБ
  64.     $iBlockProperty = new CIBlockProperty;
  65.  
  66.     // Перебираю необходимые свойства
  67.     foreach ($properties as $property) {
  68.  
  69.         // Проверяю уже созданные свойства (проверка состояния миграции на текущей копии проекта)
  70.         if (!$iBlockProperty->GetList(array(), array('CODE' => $property['CODE']))->GetNext()) {
  71.  
  72.             // Для не созданных свойств инициирую создание
  73.             $propertyId = $iBlockProperty->Add(
  74.                 array_merge(
  75.                     $property,
  76.                     // Добавляю к указанным в начале параметрам свойства дополнительные параметры, общие для всех свойств миграции
  77.                     array(
  78.                         'ACTIVE'    => 'Y',
  79.                         // При указаннии инфоблока использую информацию из конфигурации, так как ID инфоблока (раздела, элемента, etc...) не администрируется
  80.                         'IBLOCK_ID' => EnvironmentHelper::getParam('allCompaniesIBlockId'),
  81.                     )
  82.                 )
  83.             );
  84.  
  85.             if ($propertyId) {
  86.                 echo sprintf('Свойство "%s" успешно добавлено <br>' . PHP_EOL,
  87.                     $property['NAME']);
  88.             } else {
  89.                 echo sprintf(
  90.                     'Не удалось создать свойство "%s". Сообщение об ошибке: "%s" <br>' . PHP_EOL,
  91.                     $property['NAME'],
  92.                     $iBlockProperty->LAST_ERROR
  93.                 );
  94.             }
  95.  
  96.         } else {
  97.  
  98.             echo sprintf(
  99.                 'Не удалось создать свойство "%s". Свойство с указанным кодом уже существует. <br>' . PHP_EOL,
  100.                 $property['NAME']);
  101.  
  102.         }
  103.     }
  104.  
  105.     /*
  106.      * Нет закрывающего тега '?>'
  107.      * Обязательно пустая строка в конце (файл заканчивается переносом на новую строку)
  108.      */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement