Вход • Регистрация

Добавление custom полей в Импорт/экспорт

  • 23 октября 2019 г.
  • Всем привет. Появилась необходимость в экспорт/импорт добавить кастомное поле. Кто-либо уже проделывал такие манипуляции со своим сайтом. Может есть какой порядок действий? Ну или подскажите куда копать.
    • 23 октября 2019 г.
    • Самому бы такое сделать. Но код ковырять ппц как лень. Послушаем что корифеи скажут :)
    • 24 октября 2019 г.
    • На старом импорте делал, все достаточно не сложно. Если не ошибаюсь в admin.import.config поле прописать и save функцию добавить
      • 25 октября 2019 г.
      • В новой версии 4 файла :)
        Мне необходимо подтянуть данные в категории. Пытаюсь по аналогии, как в файле размещаются поля, добавит свое. Не выходит.
      • 26 октября 2019 г.
      • Цитата
        На старом импорте делал, все достаточно не сложно. Если не ошибаюсь в admin.import.config поле прописать и save функцию добавить
        Новый импорт/экспорт был написан так, чтобы максимально сохранить действующий на тот момент старый механизм импорта/экспорта. Так что сложностей не должно быть.
  • 26 октября 2019 г. , редакция: 27 октября 2019 г.
  • Код
    Основные классы Импорта/экспорта описаны в модуле service:
    - класс импорта - modules/service/service.express.import.php
    - класс экспорта - modules/service/service.express.export.php
    В этих файлах описаны функции, которые распространяются на все модули.

    Для того, чтобы организовать импорт/экспорт для любого модуля, достаточно создать, например, для модуля shop следующие файлы:
    - класс импорта для модуля shop - modules/shop/shop.express.import.php
    - класс экспорта для модуля shop - modules/shop/shop.express.export.php
    В указанных файлах файлах можно изменить поведение общих функций.

    В качестве примера просто посмотрите следующие файлы:
    - modules/news/news.express.import.php
    - modules/news/news.express.export.php
    - modules/clauses/clauses.express.import.php
    - modules/clauses/clauses.express.export.php

    И так, например, нужен импорт для модуля ab. Для этого кидаем два файла в директорию modules/ab/:
    - modules/ab/ab.express.import.php
    - modules/ab/ab.express.export.php

    Содержание файла modules/ab/ab.express.import.php:
    Код
    <?php
    /**
    * Импорт данных
    *
    * @package DIAFAN.CMS
    * @author diafan.ru
    * @version 6.0
    * @license http://www.diafan.ru/license.html
    * @copyright Copyright (c) 2003-2018 OOO «Диафан» (http://www.diafan.ru/)
    */

    if (! defined('DIAFAN'))
    {
    $path = __FILE__;
    while(! file_exists($path.'/includes/404.php'))
    {
    $parent = dirname($path);
    if($parent == $path) exit;
    $path = $parent;
    }
    include $path.'/includes/404.php';
    }

    /**
    * Ab_express_import
    */
    class Ab_express_import extends Service_express_import
    {

    }


    Содержание файла modules/ab/ab.express.export.php:
    Код
    <?php
    /**
    * Экспорт данных
    *
    * @package DIAFAN.CMS
    * @author diafan.ru
    * @version 6.0
    * @license http://www.diafan.ru/license.html
    * @copyright Copyright (c) 2003-2018 OOO «Диафан» (http://www.diafan.ru/)
    */

    if (! defined('DIAFAN'))
    {
    $path = __FILE__;
    while(! file_exists($path.'/includes/404.php'))
    {
    $parent = dirname($path);
    if($parent == $path) exit;
    $path = $parent;
    }
    include $path.'/includes/404.php';
    }

    /**
    * Ab_express_export
    */
    class Ab_express_export extends Service_express_export
    {

    }


    Этого достаточно, чтобы организовать импорт экспорт модуля ab. Все остальные изменения в этих файлах будут связаны лишь с добавлением нестандартный полей, которые свойственны только этому модулю. Примеры в файлах:
    Цитата
    В качестве примера просто посмотрите следующие файлы:
    - modules/news/news.express.import.php
    - modules/news/news.express.export.php
    - modules/clauses/clauses.express.import.php
    - modules/clauses/clauses.express.export.php


    Есть еще один обязательный штрих.
    В основной таблице модуля должны присутствовать поля: import, import_id.
    Для этого дополняем файл modules/ab/ab.install.php
    Код
    /**
    * @var array таблицы в базе данных
    */
    public $tables = array(
    array(
    "name" => "ab",
    "comment" => "Объявления",
    "fields" => array(
    ...
    array(
    "name" => "import",
    "type" => "ENUM( '0', '1' ) NOT NULL DEFAULT '0'",
    "comment" => "элемент только что импортирован: 0 - нет, 1 - да",
    ),
    array(
    "name" => "import_id",
    "type" => "VARCHAR(100) NOT NULL DEFAULT ''",
    "comment" => "собственный идентификатор элемента при импорте",
    ),
    ...
    ),
    ...
    ),
    ...
    );

    Далее жмем кнопку восстановления структуры БД в CMS, чтобы поля автоматом появились в таблицах модуля. Сбрасываем кеш сайта. И всё. Смотрим, что получилось: можем импортировать/экспортировать стандартные поля. Если нужно что-то добавить, то смотрим примеры.
    • 27 октября 2019 г.
    • Спасибо, за подробное разъяснение. Буду пробовать.

Новости

  • 18 июня
  • В сборке большое обновление demo-шаблона, дополнительная защита от спама, улучшение YML-импорта и еще много важного и интересного.
  • 24 апреля
  • В новой сборке совершили революцию в структурировании кастомизированной информации в шаблонах, добавили авторегистрацию пользователей, усовершенствовали защиту от спама, актуализировали накопительную скидку, а также улучшили производительность и стабильность работы системы.
  • 12 января
  • После выхода сборки 7.1 мы выпустили уже три патча, в каждом из которых улучшаем административную часть сайта. Сборка DIAFAN.CMS 7.1.3 уже доступна к установке. 

Форум