Подключение к двум modx для синхронизации

Может кто сталкивался?
Есть 2 проекта на одном серваке. Есть ли возможность с нового проекта через modalConsole подключиться к старому имея на вооружении такие же конструкции как и в новом: $modx_old->getObject('modResource', $id) — но с данными от старого проекта.
P.S. Хочу забрать данные с базы старого проекта, но перебрав и видоизменив загрузить на новый.
Евгений Лазарев
24 июня 2022, 18:36
modx.pro
1
929
0

Комментарии: 4

Артур Шевченко
24 июня 2022, 21:50
+1
Ну если напрямую с БД работать не хочется, я бы сделал так:
1. на доноре написал бы скрипт, который заберут нужные данные и подготовят(переберут) к отправке на новый сайт.
2. на новом сайте написал бы скрипт, который отправлял бы POST запрос на донор и запускал скрипт из пункта 1.
    Николай Савин
    25 июня 2022, 20:06
    +1
    Я обычно на доноре делаю скрипт, который складывает требуемые данные в json файл.
    А сайт-приемник просто в удобное время читает этот json и парсит данные.
      vectorserver
      27 июня 2022, 13:16
      0
      Если единоразово можно использовать компонент к примеру catalogfill-2.4.10-pl.transport
      на доноре делаешь экспорт, на основном импорт из файла.

      Описание (автор шлепнул свой сайт)
      ## Описание
      
      Импорт/экспорт товаров (документов MODX) в/из CSV, XLS, XLSX.
      
      ## Возможности
      
      - Импорт и экспорт товаров (документов MODX).
      - Импорт и экспорт данных для любых лаблиц БД (в т.ч. созданных с помощью MIGXDB).
      - Поддерживаются форматы файлов для импорта и экспорта: CSV, XML (только импорт), XLS, XLSX.
      - Простая конфигурация. Можно настроить какой столбец куда (контент/TV-параметр) импортировать.
      - Возможность создания конфигурационных файлов для разных задач. Конфигурацию можно выбрать перед импортом и экспортом.
      - Удобная загрузка файлов.
      - Режимы обновления (очистка до импорта) и добавления.
      - Архивирование файлов. Все импортированные и экспортированные файлы хранятся на диске. Их можно удалить в любой момент.
      - Поддержка категорий. Неограниченная вложенность.
      - Возможность обновления данных товаров без их удаления (проверка соответствия по полю или значению TV).
      - Возможность загрузки товаров по группам (можно подстроить под ресурсы сервера).
      - Импорт и обновление товаров по Cron-у.
      
      ## Требования
      
      - MODX Revolution 2.1 или выше
      - кодировка сайта UTF-8
      - PHP версии 5.2.0 или выше
      - PHP расширение php_zip
      - PHP расширение php_xml
      - PHP расширение php_xmlwriter
      - PHP расширение php_gd2
      
      ## Установка
      
      1. Загрузите архив "catalogfill-2.x-pl.transport.zip" в папку core/packages/ вашего сайта. В панеле управления перейти "Система" -> "Управление пакетами" -> "Загрузить дополнения" -> "Искать пакеты локально" -> "Да".
      
      2. В таблице пакетов появится пакет "catalogfill". Нажать кнопку "Установить".
      
      3. Закончить установку.
      
      4. Установить права 0777 на папку ``/assets/components/catalogfill/files/``.
      
      5. В Настройках системы вашего сайта включите загрузку csv файлов ("Файловая система" -> "Разрешённые к загрузке файлы" (setting_upload_files)).
      
      ## Инструкция по использованию
      
      1. Открыть компонент "Импорт/экспорт".
      2. Нажать на поле "Родительский ресурс" и в дереве документов кликнуть документ-категорию, в/из которого нужно импортировать/экспортировать товары.
      
      ### Импорт
      3. В списке "Файл для импорта" выбрать файл, которые находятся в папке ``/assets/components/catalogfill/files/`` на сервере. Нажав кнопку "Загрузить файлы", можно загрузить новый файл.
      4. Выбрать конфигурацию для импорта в списке и нажать кнопку "Импортировать". В браузере появится индикация выполнения загрузки, нужно подождать завершения операции.
      
      ### Экспорт
      5. В дереве документов выберите родительский ресурс (категорию), из которой нужно экспортировать товары.
      6. Выбрать конфигурацию экспорта в списке "Конфигурация". Выбрать тип (формат) файла и нажать кнопку "Экспортировать".
      7. Можно сразу скачать файл на жесткий диск вашего компьютера. Также экспортированные файлы хранятся в папке ``/assets/components/catalogfill/files/``.
      
      ## Конфигурирование
      
      Для импорта и экспорта значений полей (таблица "site_content" в БД) товаров (документов) в конфигурационном файле в массиве ``$cf_config['content_row']`` нужно указать название столбца в файле, имя поля и тип содержимого.
      Пример:
      ~~~
      1 => array('Наименование',array('pagetitle','content')),
      ~~~
      
      Для импорта и экспорта TV-параметров (таблица "site_tmplvar_contentvalues" в БД) нужно указать название столбца в файле, ID TV-параметра и тип содержимого.
      Пример:
      ~~~
      2 => array('Цена',array(7,'tv'))
      ~~~
      
      Для импорта и экспорта категорий нужно указать название столбца в файле, ID шаблона категории и тип содержимого.
      Пример:
      ~~~
      0 => array('Категория',array(7,'category')),
      ~~~
      7 - ID шаблона для категории.
      Категории в файле должны идти последовательно от верхнего уровня к нижнему.
      
      ---
      
      Предусмотрена возможность обновления данных товаров без их удаления (сохраняются ID).
      Проверку на соответствие существующего товара и импортируемого можно осуществлять по полям (в БД) товара или значениям его TV-параметров.
      
      Примеры:
      ~~~
      $cf_config['imp_chk_field'] = 'pagetitle'; //Если найден товар с названием соответствующим названию импортируемого товара, его данные будут обновлены.
      ~~~
      ~~~
      $cf_config['imp_chk_tvid_val'] = 10; //Проверка соответствия происходит по значению TV-парамтера с ID 10. Например это может быть артикул.
      ~~~
      
      ---
      
      Для программистов есть возможность сделать обработку значений перед импортом или экспортом. Смотреть пример в конфигурационном файле.
      
      ---
      
      Имена всех полей таблицы "site_content" (ресурсы) можно посмотреть, например, здесь: [http://bobsguides.com/modx-object-full-reference.html#modResource](http://bobsguides.com/modx-object-full-reference.html#modResource).
      
      ### Отмена публикации или изменение значения TV для товаров, которых нет в новом прайс-листе
      
      Пример:
      ~~~
      $cf_config['imp_before_change'] = '[{"published":0},{}]';
      ~~~
      В данном случае перед импортом будет отменена публикация всех вложенных товаров и при импорте товары, которые есть в прайс-листе будут обновлены и опубликованы (использовать параметр "imp_content_default").
      Таким образов старые товары будут сняты с публикации (можно также поместить в корзину - "deleted").
      ~~~
      $cf_config['imp_before_change'] = '[{"tv.inventory":0},{}]';
      ~~~
      В данном случае для всех вложенных товаров будет изменено значение TV-параметра "Кол-во на складе" (inventory) на "0".
      При импорте если старых товаров нет в новом прайс-листе, они так и останутся с нулевым значением.
      
      ## Импорт товаров из XML
      
      Для импорта товаров из XML-файла в конфигурационный файл нужно скопировать кусок XML (один товар) со структурой и указать названия полей. Для TV параметров (доп.полей) указывать ID TV с префиксом "tv".
      
      Пример:
      ~~~
      $cf_config['imp_xml_structure'] = <<<EOF
      <Good>
          <Kod>tv8</Kod>
          <Name>pagetitle</Name>
          <Options>
              <Stock>tv5</Stock>
              <Image>tv2</Image>
          </Options>
          <Prices>
              <RegularPrice>tv1</RegularPrice>
              <OldPrice>tv20</OldPrice>
          </Prices>
      </Good>
      EOF;
      ~~~
      Здесь "pagetitle" - это наименование товара. Остальные поля это TV-параметры.
      
      Если товары находятся дальше первого уровня вложенности, можно указать вложенность в параметре ``$cf_config['imp_xml_itemsparent_path']``.
      Пример:
      ~~~
      $cf_config['imp_xml_itemsparent_path'] = '/catalog/shop/offers';
      ~~~
      
      ## Импорт и обновление товаров по Cron-у
      
      Для импорта товаров по Cron-у использовать скрипт ``core/components/catalogfill/cron.php``.
      Можно использовать, например, для обновления цен и т.п. с определенной периодичностью.
      
      Аргументы:
      1 - ID документа-контейнера или название контекста.
      2 - название конфигурации без ".php"
      3 - название файла в папке ``assets/components/catalogfill/files/``
      
      Пример использования:
      ~~~
      [путь папки сайта]core/components/catalogfill/cron.php 2 default example1.xls
      ~~~
      
      Пример настройки Cron-а в текстовом формате. Запускать импорт каждый день в 00:00:
      ~~~
      0 0 * * * [путь папки сайта]core/components/catalogfill/cron.php 2 default example1.xls
      ~~~
      
      ~~~
      * * * * * выполняемая команда
      - - - - -
      | | | | |
      | | | | ----- День недели (0 - 6) (Воскресенье =0 или =7)
      | | | ------- Месяц (1 - 12)
      | | --------- День (1 - 31)
      | ----------- Час (0 - 23)
      ------------- Минута (0 - 59)
      ~~~
      
      ---
      
      При необходимости добавить в файл ``.htaccess`` (сервер Apache) строки, чтобы снять ограничения:
      
      php_value memory_limit 128M
      php_value upload_max_filesize 15M
      php_value post_max_size 15M
      php_value max_input_time 1200
      php_value max_execution_time 1200
        Евгений Лазарев
        27 июня 2022, 13:31
        0
        Почитал я все тут (api, json файлы и просто файлы). Самым простым способом будет из этого api. Его писать не охото было.
        Я думал, что если сайты лежат на одном серваке, то можно будет подключиться из одного проекта к index.php другого и все — мол есть объект $modx_old — вращай им как хочешь.
        Но если выбора иного нет, то проще будет тогда на старом сайте работать из консоли и на новом делать записи через rest, Таким образом не придется с 2х сторон писать обработчики (грубо говоря rest подключить времени нужно меньше).
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          4