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

Синхронизация Diafan и 1с

  • 09 апреля 2018 г.
  • Цитата
    При выгрузки товара из 1с на сайте создается папка /tmp/1c/ туда подгружаются картинки и 2 файла: import.xml (информация о товарах) и offers.xml (цены товаров) с этим все понятно. Дальше в работу включается скрипт: /modules/shop/shop.1c.php

    Так. Во-первых, не "создается папка" и "дальше включается скрипт", а всё изначально делает скрипт /modules/shop/shop.1c.php
    Это один единственных файл синхронизации с 1С, который работает и всё делает. Именно этот файл дергается, когда запрашивается синхронизация. Достаточно его просто открыть, чтобы увидеть
    Код
    /**
    * Стартует интеграцию
    *
    * @return void
    */
    public function start()
    {
    File::create_dir('tmp/1c', true);

    if(empty($_GET["type"]) || ! in_array($_GET["type"], array('sale', 'catalog')))
    {...

    И т.д. То есть, этот файл создает папку /tmp/1c/, а не она сама.
    В этот каталог закидываются все полученные от 1С файлы, картинки, XML-ки, это видно там же, в файле
    Код
    /**
    * Выгрузка каталогов продукции: пошаговая загрузка каталога
    *
    * @return void
    */
    private function catalog_import()
    {
    $filename = basename($_GET['filename']);
    $xml = simplexml_load_file(ABSOLUTE_PATH.'tmp/1c/'.$filename);

    для последующей обработки.

    Во-вторых, после загрузки файлов их обработка пошаговая, так что время скрипта не должно быть причиной проблемы, хотя смотря сколько там "ограничено" на хостинге. Скорее всего проблема какая-нибудь в memory_limit, т.е. загружаемый файл xml не умещается в память, чтобы потом быть записан полностью в /tmp

    А по поводу времени играйтесь с переменной
    Код
    private $max_i = 50;

    она отвечает за количество строк, пройденных за одну итерацию. Пробуйте уменьшить.

    Цитата
    как скрипт узнает какие записи он уже обработал?

    Вы вообще открывали файл /modules/shop/shop.1c.php?
    Код
    /**
    * Проверяет достижение максимума обрабытываемых записей за один проход скрипта
    *
    * @return void
    */
    private function check_max()
    {
    $this->i++;
    if($this->i < $this->min_i)
    {
    return false;
    }
    if($this->i == $this->max_i + 1)
    {
    $this->diafan->configmodules("1c_progress_i", "shop", 0, false, $this->i);
    echo 'progress
    Выгружено '.($this->i - 1);
    exit;
    }
    return true;
    }

    Жирная строка записывает номер итерации в конфиг сайта. В БД. И при очередной итерации скрипт читает это значение
    Код
    private function catalog_import()
    {
    $filename = basename($_GET['filename']);
    $xml = simplexml_load_file(ABSOLUTE_PATH.'tmp/1c/'.$filename);
    if($this->diafan->configmodules("1c_progress_i", "shop"))
    {
    $this->min_i = $this->diafan->configmodules("1c_progress_i", "shop");
    $this->max_i += $this->diafan->configmodules("1c_progress_i", "shop") - 1;
    }...
  • 09 апреля 2018 г. , редакция: 09 апреля 2018 г.
  • private $max_i = 50;
    • 09 апреля 2018 г.
    • Цитата
      У меня не удаляется.
      У всех удаляется, у Вас не удаляется?
      Вы же код привели.
      Код
      File::delete_file('tmp/1c/'.$filename);

      Если не работает File::delete_file, то лучше на хостинге спросить, почему РНР его не исполняет. Может ограничение на работу скриптов есть, на удаление, на права файлов или ещё что-то. Вслепую гадать дело неблагодарное.
      Ну либо проблема в
      Код
      if(empty($_GET["no_delete"]))

      То есть, переменная no_delete приходит не пустая и не доходит до удаления, очевидно.

Новости

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

Форум