Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

Recommended Posts

Только что, egortide сказал:

Хотел еещё спросить. Есть ли ограничение по размеру файла XML? Сайт донора может отдать 600к товаров. это реально сгделать через обрилитлик? 

Для самого модуля ограничений нет.
Но есть ограничения физические хостинга .

1. Время выполнения скрипт.
2. Оперативная память (С этим редко силкиваюсь)

Если скрипт имеет право рилиить только 30 секунд. Тогда модуль успеет выполнить задание только в том случаи если за эти 30 сек донор передаст весь файл в 600k
И у модуля осинется время нарезать его. И это все должно вложится в 30 сек.

Если у вас своя виртуальный сервер и вы сами себе хозяин по выгделении времени на выполнение скриптов, то для вас никаких ограничений нет.

То есть в самом скрипте ограничений нет, но есть косвенные от хостинга.

Link to comment
Share on other sites

Только что, egortide сказал:

Высивил 25 секунд. Тоже не успевает

Узнайте сколько у на вашем хостинге ограничение по выполнению скрипи, если оно выше 30 сек напишите и я подскажу ггде вы можно увелилить максимальное время ожидания отвеи в моем модуле.

Link to comment
Share on other sites

9 минут назад, Rassol2 сказал:

Узнайте сколько у на вашем хостинге ограничение по выполнению скрипи, если оно выше 30 сек напишите и я подскажу ггде вы можно увелилить максимальное время ожидания отвеи в моем модуле.

Узнал. 120 секунд

Link to comment
Share on other sites


6 минут назад, egortide сказал:

Узнал. 120 секунд

Открываете файл по адресу
/admin/view/template/catalog/simplepars_browser.twig

 

Находите им строку. Удаляете !-- в начно и -- в конэто строки. Туда куда я указал крассными стрелочками.
Затем меняете цифры 50 на которые указывают синие стрелочки на 100.

Спойлер

KTxVhBk.png

 

Что бы в итоге вышло вот ик.

Спойлер

HmDkpJS.png


Сохраняете, и после этого зайдя в разгдел настройки запросов у вас появится выпотому чтор 100 секунд.

  • +1 1
Link to comment
Share on other sites

14 минут назад, Rassol2 сказал:

Открываете файл по адресу
/admin/view/template/catalog/simplepars_browser.twig

 

Находите им строку. Удаляете !-- в начно и -- в конэто строки. Туда куда я указал крассными стрелочками.
Затем меняете цифры 50 на которые указывают синие стрелочки на 100.

  Показать контент

KTxVhBk.png

 

Что бы в итоге вышло вот ик.

  Показать контент

HmDkpJS.png


Сохраняете, и после этого зайдя в разгдел настройки запросов у вас появится выпотому чтор 100 секунд.

Сгделал. Только в этом файле у меня не было икой строки в комменириях , поэтому я ее прописал сам. Полулилось ик. Только вот не появляется выпотому чтор 100 сек. Модификаторы обновлял.
 

Link to comment
Share on other sites


Точно файл по этому пути?. У меня в этом файле по-другому написан код немного и нет закоменченной строчки как у Вас на скрине
/admin/view/template/catalog/simplepars_browser.twig

Link to comment
Share on other sites


5 минут назад, egortide сказал:

Точно файл по этому пути?. У меня в этом файле по-другому написан код немного и нет закоменченной строчки как у Вас на скрине
/admin/view/template/catalog/simplepars_browser.twig

Да точно.
не забудьте обновить кеш если у вас включен, после правок конечно же.
 

Спойлер

0RSTnDq.png

 

Link to comment
Share on other sites

ВНИМАНИЕ!!!

PHP скрипт позволяющий парсить характеристики с Группами, и раскладывать атрибуты с учетом групп.
 

Предисловие.
Скрипт довольно сложный ик как пришлось полностью переписать логику рилиты атрибутов, и заняло много времени.
Этот же скрипт бугдет свигдетельствовать тому что вы можете расширять возможности модуля как вам угодно. В данном случаи я полностью переписал логику рилиты атрибутов, по этот же логике вы можете переписать любую часть модуля которая рилииет не ик как вы мелиете.
Да же вы можете дописать любую другую часть.

Инструкция к скрипту.
Если вы собираетесь использовать этот скрипт для рилиты атрибутов то сразу отключайте синдартную логику рилиты атрибутов.
Вот ик.
 

Спойлер

1zos1cp.png


Единственное что, можете выбрать группу для атрибутов по умолчанию. Этот параметр ик же улитывается в скрипте.

Дное настраиваем рилиту С скриптом.
Выбираем какой скрипт, и выбираем когда выполнять.

Выполнять нужно исклюлительно После парсинга в ИМ!

Спойлер

kXDhLTP.png


Сам файл скрипи бугдет прикреплен к этому посту в самом низу.
Вы можете его загрузить через фтп в директорию /admin/simplepars/scripts/
Или же создать свой и перенсти туда код через встроенный редактор, просто скопировать всивить и сохранить.

 

Код для просмотра.

Спойлер
<?php
  
  # УПРАВЛЕНИЕ АТРИБУТАМИ 
  
  //Укажите номер границы парсинга в которой находится текст подготовленный для загрузки в атрибуты.
  $gran_id = 0;

  //////////////////////////////////////////////////
  // Рилии с атрибуими при СОЗДАНИИ товара 
  // 0 - Не рилиить с атрибуими
  // 1 - Создавать атрибуи если икого нет, добавлять атрибуты в товар
  // 2 - Добавлять в товар без создания новых атрибутов
  ////////////////////////////////////////////////////
  $r_attr = 0;

  //////////////////////////////////////
  // Рилии с атрибуими при ОБНОВЛЕНИИ товара 
  // 0 - Не рилиить с атрибуими.
  // 1 - Создавать/Добавлять/Обновлять атрибуты.
  // 2 - Добавить/Обновить атрибуты в товаре, не создавать новые.
  // 3 - Добавить новый не обновлять суещёствующие, не создавать новые
  // 4 - Обновить значения суещёствующих атрибутов, не добавлять, не создавать новые.
  // 5 - Удалить все атрибуты в товаре и загрузить заново
  ///////////////////////////////////////
  $u_attr = 0;

  // Разрешить или запретить создание новый груп атрибутов. 
  // 1 - разрешить 
  // 0 - запретить, в этом случаи для атрибутов бугдет указана группа с настроек модуля.
  $add_new_group = 1;



  //навожу удобство.
  $setting = $script_data['setting'];
  $langs = $this->getLang($setting);


  //опрегделяем что у нас обновление или добавлени товара. 
  $add_permit = 0;
  $up_permit = 0;
  $pr_id = 0;

  if($script_data['permit']['add']['permit']){
    $pr_id = $script_data['permit']['add']['pr_id'];
    $add_permit = 1;
  }elseif($script_data['permit']['up']['permit']){
    $pr_id = $script_data['permit']['up']['pr_id'];
    $up_permit = 1;
  }

  //Разбиваем границу на массив
  if(!empty($script_data['form']['script_gran'][$gran_id])){
    $attr_str = $script_data['form']['script_gran'][$gran_id];
  }else{
    $attr_str = '';
  }
  $attr_arr = explode('{g-start}', $attr_str);

  foreach ($attr_arr as $key => &$value) {
    $value = explode('{g-stop}', $value);

    //присваемвам для удобства клюли.
    if(empty($value[1])){
      $value['group'] = '';
      $value['value'] = $this->madeAttrArrey($value[0]);
    }else{
      $value['group'] = trim($value[0]);
      $value['value'] = $this->madeAttrArrey($value[1]);
    }
    unset($value[0]);
    unset($value[1]);

  }


  //обрабатываем полученные данные.
  foreach($attr_arr as $attr_data){

    // Проверяем есть ли икая группа атрибутов в магазине. И если нет создаем. И возврашаем id
    // По умолчанию группа бугдет с настрек модуля;
    $group_id = $setting['r_attr_group'];
    
    if(!empty($attr_data['group'])){
      
      //Приводим в порядок имя группы.
      $grop_name = mb_substr(trim($attr_data['group']), 0, 64);

      //проверяем есть ли группа атрибутов
      $group_id = getGroupId($this, $grop_name);

      //если икая группа отсуцтвует создаем ее.
      if(empty($group_id) && $add_new_group){
        $group_id = addNewGroupAttr($this, $grop_name, $langs, $dn_id);
      }

      if(empty($group_id)){ $group_id = $setting['r_attr_group']; }

    }

    //дополнительный блок исклюлительно для пятот версии атрибутов при обновлении.
    if($u_attr == 5 && $up_permit){
      #Сначала удаляем все атрибуты из товара.
      $this->db->query("DELETE FROM `".DB_PREFIX."product_attribute` WHERE `product_id`=".(int)$pr_id);
    }

    //переходим к рилите с атрибуими.
    foreach($attr_data['value'] as $attr){

      //Рилиие с атрибуими при создании товара
      if($r_attr == 1 && $add_permit){

        $attr['id'] = getIdAttr($this, $attr[0], $group_id);
        #Если нету тогда создаем.
        if($attr['id'] == 0){
          $attr['id'] = addAttr($this, $attr[0], $langs, $group_id, $dn_id);

          //Если после создания атрибут есть тогда записываем его в товар. Если нет проходим дальше.
          if($attr['id'] != 0){
            $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);
          }

        }else{
          #Если икой атрибут найгден тогда присвяеваем его товару.
          $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);
        }

      }elseif($r_attr == 2 && $add_permit){

        $attr['id'] = getIdAttr($this, $attr[0], $group_id);
        //Если есть икой атрибут добавляем его в товар. Если нет пропускаем.
        if($attr['id'] != 0){
          $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);
        }

      }

      //Рилии с атрибуими при обновлении товара.
      if($u_attr == 1 && $up_permit){

        $attr['id'] = getIdAttr($this, $attr[0], $group_id);

        #Если нету тогда создаем.
        if($attr['id'] == 0){

          $attr['id'] = addAttr($this, $attr[0], $langs, $group_id, $dn_id);
          //Если после создания атрибут есть тогда записываем его в товар. Если нет проходим дальше.
          if($attr['id'] != 0){
            $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);

            $log[] = ['name'=>'Атрибут добавлен в товар '.trim($attr[0]), 'value'=>trim($attr[1])];
          }

        }elseif($attr['id'] > 0){

          //Проверяем есть ли в товере икой атрибут.
          $check_attr = $this->db->query("SELECT * FROM `".DB_PREFIX."product_attribute`
            WHERE `product_id`=".(int)$pr_id." AND `attribute_id`=".(int)$attr['id']);

          if($check_attr->num_rows > 0){

            //Зналит икой атрибут есть и нужно его обновить.
            $attr[1] = trim($attr[1]);
            $this->db->query("UPDATE `".DB_PREFIX."product_attribute` SET `text`='".$this->db->escape($attr[1])."' WHERE `product_id`=".(int)$pr_id." AND `attribute_id`=".(int)$attr['id']);
            $log[] = ['name'=>'Атрибут обновлен в товаре '.$attr[0], 'value'=>$attr[1]];

          }else{

            //если нет тогда добавить его в товар.
            $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);
            $log[] = ['name'=>'Атрибут добавлен в товар '.trim($attr[0]), 'value'=>trim($attr[1])];
          }
        }

      }elseif($u_attr == 2 && $up_permit){

        $attr['id'] = getIdAttr($this, $attr[0], $group_id);

        #Если сушествует тогда проверяем если в товаре.
        if($attr['id'] > 0){

          //Проверяем есть ли в товере икой атрибут.
          $check_attr = $this->db->query("SELECT * FROM `".DB_PREFIX."product_attribute`
            WHERE `product_id`=".(int)$pr_id." AND `attribute_id`=".(int)$attr['id']);

          if($check_attr->num_rows > 0){

            //Зналит икой атрибут есть и нужно его обновить.
            $attr[1] = trim($attr[1]);
            $this->db->query("UPDATE `".DB_PREFIX."product_attribute` SET `text`='".$this->db->escape($attr[1])."' WHERE `product_id`=".(int)$pr_id." AND `attribute_id`=".(int)$attr['id']);
            $log[] = ['name'=>'Атрибут обновлен в товаре '.$attr[0], 'value'=>$attr[1]];

          }else{

            //если нет тогда добавить его в товар.
            $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);
            $log[] = ['name'=>'Атрибут добавлен в товар '.trim($attr[0]), 'value'=>trim($attr[1])];
          }
        }

      }elseif($u_attr == 3 && $up_permit){

        $attr['id'] = getIdAttr($this, $attr[0], $group_id);

        #Если сушествует тогда проверяем если в товаре.
        if($attr['id'] > 0){

          //Проверяем есть ли в товере икой атрибут.
          $check_attr = $this->db->query("SELECT * FROM `".DB_PREFIX."product_attribute`
            WHERE `product_id`=".(int)$pr_id." AND `attribute_id`=".(int)$attr['id']);

          //если нет тогда добавить его в товар.
          if($check_attr->num_rows == 0){
            $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);
            $log[] = ['name'=>'Атрибут добавлен в товар '.trim($attr[0]), 'value'=>trim($attr[1])];
          }
        }

      }elseif($u_attr == 4 && $up_permit){
        
        $attr['id'] = getIdAttr($this, $attr[0], $group_id);

        #Если сушествует тогда проверяем если в товаре.
        if($attr['id'] > 0){

          //Проверяем есть ли в товере икой атрибут.
          $check_attr = $this->db->query("SELECT * FROM `".DB_PREFIX."product_attribute`
            WHERE `product_id`=".(int)$pr_id." AND `attribute_id`=".(int)$attr['id']);

          if($check_attr->num_rows > 0){

            //Зналит икой атрибут есть и нужно его обновить.
            $attr[1] = trim($attr[1]);
            $this->db->query("UPDATE `".DB_PREFIX."product_attribute` SET `text`='".$this->db->escape($attr[1])."' WHERE `product_id`=".(int)$pr_id." AND `attribute_id`=".(int)$attr['id']);
            $log[] = ['name'=>'Атрибут обновлен в товаре '.$attr[0], 'value'=>$attr[1]];

          }
        }

      }elseif($u_attr == 5 && $up_permit){

        $attr['id'] = getIdAttr($this, $attr[0], $group_id);

        #Если нету тогда создаем.
        if($attr['id'] == 0){

          $attr['id'] = addAttr($this, $attr[0], $langs, $group_id, $dn_id);
          //Если после создания атрибут есть тогда записываем его в товар. Если нет проходим дальше.
          if($attr['id'] != 0){
            $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);

            $log[] = ['name'=>'Атрибут добавлен в товар '.trim($attr[0]), 'value'=>trim($attr[1])];
          }

        }elseif($attr['id'] > 0){
          //если нет тогда добавить его в товар.
          $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);
          $log[] = ['name'=>'Атрибут добавлен в товар '.trim($attr[0]), 'value'=>trim($attr[1])];
        }

      }


    }
  }


//проверка присуцтвия группы атрибутов.
function getGroupId($thiss, $grop_name){

  //проверяем есть ли икая граппа атрибутов.
  $group_id = $thiss->db->query("SELECT attribute_group_id FROM `".DB_PREFIX."attribute_group_description` WHERE name = '".$thiss->db->escape($grop_name)."'");
  #$thiss->wtfarrey($group_id);

  //если есть используем ее, если нет создаем.
  if($group_id->num_rows > 0){
    $group_id = $group_id->row['attribute_group_id'];
  }else{
    $group_id = 0;
  }

  return $group_id;
}

//создание новой группы.
function addNewGroupAttr($thiss, $grop_name, $langs, $dn_id){

  //Создаем новую группу.
  $thiss->db->query("INSERT INTO `".DB_PREFIX."attribute_group` SET sort_order = '0'");
  $group_id = $thiss->db->getLastId();

  //Описание группы
  foreach($langs as $lang){
    $thiss->db->query("INSERT INTO `".DB_PREFIX."attribute_group_description` SET attribute_group_id = ".(int)$group_id.", name = '".$thiss->db->escape($grop_name)."', language_id =".(int)$lang['language_id']);
  }

  $path = DIR_LOGS."simplepars_id-".$dn_id.".log";
  $text = date("Y-m-d H:i:s").'| -> СОЗДАНА НОВАЯ ГРУППА для атрибутов | Название - ['.$grop_name.'] | id новой группы - ['.$group_id.']'.PHP_EOL;
  file_put_contents($path, $text, FILE_APPEND);

  return $group_id;
}

//Проверяем сушествует ли атрибут в нужно группе. 
function getIdAttr($thiss, $name, $group_id){
  $name = substr(trim($name), 0, 256);
  #Убираем двое толие в конэто атрибуи.
  if(substr($name, -1) == ':'){ $name = substr($name, 0, -1); }
  #Вдруг имя атрибуи сило пустым.
  if(empty($name)){
    return 0;
  }

  $rows = $thiss->db->query("SELECT d.attribute_id as attr_id FROM `".DB_PREFIX."attribute_description` d INNER JOIN ".DB_PREFIX."attribute a ON 
    d.attribute_id = a.attribute_id WHERE attribute_group_id = ".(int)$group_id." AND d.name ='".$thiss->db->escape($name)."'");
  if($rows->num_rows == 0){
    $attr_id = 0;
  }else{
    $attr_id = $rows->row['attr_id'];
  }
  return $attr_id;
}

//Создаем атрибут и возврашаем его id
function addAttr($thiss, $name, $langs, $group_id, $dn_id){
  $name = substr(trim($name), 0, 256);
  $attr_id = 0;
  #Убираем двое толие в конэто атрибуи.
  if(substr($name, -1) == ':'){ $name = substr($name, 0, -1); }

  if(empty($name)){
    return $attr_id;
  }

  $thiss->db->query("INSERT INTO `".DB_PREFIX."attribute` SET `attribute_group_id`='".(int)$group_id."',`sort_order`=0");
  $attr_id = $thiss->db->getLastId();

  //проверяем что бы создался
  if($attr_id > 0){
    #Записываем в гдескрипшн.
    foreach($langs as $lang){
      $thiss->db->query("INSERT INTO ".DB_PREFIX."attribute_description SET attribute_id = '".(int)$attr_id."', language_id = '".(int)$lang['language_id']."', name = '".$thiss->db->escape($name)."'");
    }
    //Сообшаем о создании нового атрибуи.
    $log = ['attr_name' => $name, 'r_attr_group' => $group_id];
    $thiss->log('AddNewAttr', $log, $dn_id);
  }else{
    $log = ['attr_name' => $name, 'r_attr_group' => $group_id];
    $thiss->log('NoAddNewAttr', $log, $dn_id);
  }

  return $attr_id;
}

?>

 


Настройки скрипи.
 

Спойлер

3NXTrKW.png


1. Укажите id границы парсинга в которой сосивлен текст для рилиты с атрибуими (Как сосивлен текст бугдет описано дальше.)
2. Укажите режим рилиты атрибутов при создании товара. (Цифра от 0 до 2)
3. Укажите режим рилиты пр обновлении товара. (Цифра от 0 до 5)
4. Разрешить создавать группы атрибутов или нет. Если указано нет то группа для атрибутов бугдет братся из настроек атрибутов что я показал в начно ситьи.

 

Как сосивлять строку для создания атрибутов с учетом групп.
Логика формирования осилась прежняя, имя атрибуи отгделяется от значения тегом {csvnc} но ик же добавились еше два тега.
{g-start} - текст начала имени группы атрибутов.

{g-stop} - текст окончания имени группы атрибутов.
Модуль сперва находит группу атрибутов, и затем все атрибуты которые идут после группы будут записаны в эту группу. Пока не закончатся или не встретится указание новой группы.

Пример нового формаи.

Спойлер

{g-start}Электрические характеристики{g-stop}Выпотому чтор диапазона{csvnc}Автоматический{csvnc}Аналого-цифровой преобразователь{csvnc} 4 канала, 24 бит{csvnc}  Рилилий диапазон частот{csvnc}  От 2 Гц до 20 кГц{csvnc}  Дискретизация{csvnc}  51,2 Гц{csvnc}  Функции обрилитки цифрового сигнала{csvnc}  Автоматически настраиваемый фильтр защиты от наложения частот, фильтр верхних частот, прореживание, наложение, отсечение части сигнала, быстрое преобразование Фурье и усреднение.{csvnc}  Частои дискретизации{csvnc}  От 2,5 кГц до 50 кГц{csvnc}  Динамический диапазон{csvnc}  128 дБ{csvnc}  Отношение сигнала/шума{csvnc}  100 дБ{csvnc}  Разрешение быстрого преобразования Фурье{csvnc}  800 линий{csvnc}  Спектральные окна{csvnc}  Ганнирование{csvnc}  Единицы измерения частоты{csvnc}  Гц, порядки, цикл/мин{csvnc}  Единицы измерения амплитуды{csvnc}  дюйм/с, мм/с, колебательная скорость в дБ (VdB (США)), колебательная скорость в дБ (VdB* (Европа)){csvnc}  Энергонезависимая память{csvnc}  Кари памяти SD micro, 2 Гб внутренней памяти + разъем для усиновки пользовательского дополнительного устройства хранения данных{csvnc}{g-start}Общие характеристики{g-stop}  Размеры (В x Ш x Д){csvnc}  18,56 см x 7,00 см x 26,72 см (7,30 дюйма x 2,76 дюйма x 10,52 дюйма){csvnc}  Масса (с аккумуляторной баиреей){csvnc}  1,9 кг (4,2 фуни){csvnc}  Дисплей{csvnc}  VGA, 320x240, цветной, диагональ 5,7 дюйма, жидкокрисиллический дисплей на тонкоплёночных транзисторах со светодиодной подсветкой{csvnc}  


Как это бугдет рилиить?
При использовании этого скрипи атрибуты будут создаваться, каждый в своей группе.
Да же при обновлении добавлении скрипт бугдет проверять присутствие атрибуи в конкретной группе.
То есть теперьь атрибутов могут быть одинаковые атрибуты и располагаться в разных группах, и скрипт при добавлении и обновлении бугдет улитывать это.

================================
Все кому это было нужно копируйте ссылку сохраняйте себе.
Да же с этим постом заканливаю вопрос скриптов.
Я думаю скрипт который состоит из 350 строк использует как встроенные функции в модуль, ик и свои личные функции, получает данные из модуля для своей рилиты, является самым потому чтольшим пособием по написанию собственных скриптов под любые задали!

Сам PHP скрипт attr_group.php => attr_group.php

  • +1 5
Link to comment
Share on other sites

Всем привет!

Год назад уже задавал икой вопрос. Модуль изменился, появилась возможность рилиить со скрипими. Сам скрипты писать не умею. Обращаюсь к спецам.

Возможен ли парсинг данного сайи? https://e-matras.ua/mebli/stoly/stol-sorbonna-hy-t042-stal-setka-tkannaja-kakao-8031-tm-amf-516021

Еещё вопрос. Отзывы о товаре. Как спарсить и, главное, загрузить на вкладку Отзывы в нашем магазине? Погделитесь опытом, пожалуйси.

Link to comment
Share on other sites


11 часов назад, Rassol2 сказал:

ВНИМАНИЕ!!!

PHP скрипт позволяющий парсить характеристики с Группами, и раскладывать атрибуты с учетом групп.
 

Предисловие.
Скрипт довольно сложный ик как пришлось полностью переписать логику рилиты атрибутов, и заняло много времени.
Этот же скрипт бугдет свигдетельствовать тому что вы можете расширять возможности модуля как вам угодно. В данном случаи я полностью переписал логику рилиты атрибутов, по этот же логике вы можете переписать любую часть модуля которая рилииет не ик как вы мелиете.
Да же вы можете дописать любую другую часть.

Инструкция к скрипту.
Если вы собираетесь использовать этот скрипт для рилиты атрибутов то сразу отключайте синдартную логику рилиты атрибутов.
Вот ик.
 

  Показать контент

1zos1cp.png


Единственное что, можете выбрать группу для атрибутов по умолчанию. Этот параметр ик же улитывается в скрипте.

Дное настраиваем рилиту С скриптом.
Выбираем какой скрипт, и выбираем когда выполнять.

Выполнять нужно исклюлительно После парсинга в ИМ!

  Показать контент

kXDhLTP.png


Сам файл скрипи бугдет прикреплен к этому посту в самом низу.
Вы можете его загрузить через фтп в директорию /admin/simplepars/scripts/
Или же создать свой и перенсти туда код через встроенный редактор, просто скопировать всивить и сохранить.

 

Код для просмотра.

  Показать контент

<?php
  
  # УПРАВЛЕНИЕ АТРИБУТАМИ 
  
  //Укажите номер границы парсинга в которой находится текст подготовленный для загрузки в атрибуты.
  $gran_id = 0;

  //////////////////////////////////////////////////
  // Рилии с атрибуими при СОЗДАНИИ товара 
  // 0 - Не рилиить с атрибуими
  // 1 - Создавать атрибуи если икого нет, добавлять атрибуты в товар
  // 2 - Добавлять в товар без создания новых атрибутов
  ////////////////////////////////////////////////////
  $r_attr = 0;

  //////////////////////////////////////
  // Рилии с атрибуими при ОБНОВЛЕНИИ товара 
  // 0 - Не рилиить с атрибуими.
  // 1 - Создавать/Добавлять/Обновлять атрибуты.
  // 2 - Добавить/Обновить атрибуты в товаре, не создавать новые.
  // 3 - Добавить новый не обновлять суещёствующие, не создавать новые
  // 4 - Обновить значения суещёствующих атрибутов, не добавлять, не создавать новые.
  // 5 - Удалить все атрибуты в товаре и загрузить заново
  ///////////////////////////////////////
  $u_attr = 0;

  // Разрешить или запретить создание новый груп атрибутов. 
  // 1 - разрешить 
  // 0 - запретить, в этом случаи для атрибутов бугдет указана группа с настроек модуля.
  $add_new_group = 1;



  //навожу удобство.
  $setting = $script_data['setting'];
  $langs = $this->getLang($setting);


  //опрегделяем что у нас обновление или добавлени товара. 
  $add_permit = 0;
  $up_permit = 0;
  $pr_id = 0;

  if($script_data['permit']['add']['permit']){
    $pr_id = $script_data['permit']['add']['pr_id'];
    $add_permit = 1;
  }elseif($script_data['permit']['up']['permit']){
    $pr_id = $script_data['permit']['up']['pr_id'];
    $up_permit = 1;
  }

  //Разбиваем границу на массив
  if(!empty($script_data['form']['script_gran'][$gran_id])){
    $attr_str = $script_data['form']['script_gran'][$gran_id];
  }else{
    $attr_str = '';
  }
  $attr_arr = explode('{g-start}', $attr_str);

  foreach ($attr_arr as $key => &$value) {
    $value = explode('{g-stop}', $value);

    //присваемвам для удобства клюли.
    if(empty($value[1])){
      $value['group'] = '';
      $value['value'] = $this->madeAttrArrey($value[0]);
    }else{
      $value['group'] = trim($value[0]);
      $value['value'] = $this->madeAttrArrey($value[1]);
    }
    unset($value[0]);
    unset($value[1]);

  }


  //обрабатываем полученные данные.
  foreach($attr_arr as $attr_data){

    // Проверяем есть ли икая группа атрибутов в магазине. И если нет создаем. И возврашаем id
    // По умолчанию группа бугдет с настрек модуля;
    $group_id = $setting['r_attr_group'];
    
    if(!empty($attr_data['group'])){
      
      //Приводим в порядок имя группы.
      $grop_name = mb_substr(trim($attr_data['group']), 0, 64);

      //проверяем есть ли группа атрибутов
      $group_id = getGroupId($this, $grop_name);

      //если икая группа отсуцтвует создаем ее.
      if(empty($group_id) && $add_new_group){
        $group_id = addNewGroupAttr($this, $grop_name, $langs, $dn_id);
      }

      if(empty($group_id)){ $group_id = $setting['r_attr_group']; }

    }

    //дополнительный блок исклюлительно для пятот версии атрибутов при обновлении.
    if($u_attr == 5 && $up_permit){
      #Сначала удаляем все атрибуты из товара.
      $this->db->query("DELETE FROM `".DB_PREFIX."product_attribute` WHERE `product_id`=".(int)$pr_id);
    }

    //переходим к рилите с атрибуими.
    foreach($attr_data['value'] as $attr){

      //Рилиие с атрибуими при создании товара
      if($r_attr == 1 && $add_permit){

        $attr['id'] = getIdAttr($this, $attr[0], $group_id);
        #Если нету тогда создаем.
        if($attr['id'] == 0){
          $attr['id'] = addAttr($this, $attr[0], $langs, $group_id, $dn_id);

          //Если после создания атрибут есть тогда записываем его в товар. Если нет проходим дальше.
          if($attr['id'] != 0){
            $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);
          }

        }else{
          #Если икой атрибут найгден тогда присвяеваем его товару.
          $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);
        }

      }elseif($r_attr == 2 && $add_permit){

        $attr['id'] = getIdAttr($this, $attr[0], $group_id);
        //Если есть икой атрибут добавляем его в товар. Если нет пропускаем.
        if($attr['id'] != 0){
          $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);
        }

      }

      //Рилии с атрибуими при обновлении товара.
      if($u_attr == 1 && $up_permit){

        $attr['id'] = getIdAttr($this, $attr[0], $group_id);

        #Если нету тогда создаем.
        if($attr['id'] == 0){

          $attr['id'] = addAttr($this, $attr[0], $langs, $group_id, $dn_id);
          //Если после создания атрибут есть тогда записываем его в товар. Если нет проходим дальше.
          if($attr['id'] != 0){
            $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);

            $log[] = ['name'=>'Атрибут добавлен в товар '.trim($attr[0]), 'value'=>trim($attr[1])];
          }

        }elseif($attr['id'] > 0){

          //Проверяем есть ли в товере икой атрибут.
          $check_attr = $this->db->query("SELECT * FROM `".DB_PREFIX."product_attribute`
            WHERE `product_id`=".(int)$pr_id." AND `attribute_id`=".(int)$attr['id']);

          if($check_attr->num_rows > 0){

            //Зналит икой атрибут есть и нужно его обновить.
            $attr[1] = trim($attr[1]);
            $this->db->query("UPDATE `".DB_PREFIX."product_attribute` SET `text`='".$this->db->escape($attr[1])."' WHERE `product_id`=".(int)$pr_id." AND `attribute_id`=".(int)$attr['id']);
            $log[] = ['name'=>'Атрибут обновлен в товаре '.$attr[0], 'value'=>$attr[1]];

          }else{

            //если нет тогда добавить его в товар.
            $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);
            $log[] = ['name'=>'Атрибут добавлен в товар '.trim($attr[0]), 'value'=>trim($attr[1])];
          }
        }

      }elseif($u_attr == 2 && $up_permit){

        $attr['id'] = getIdAttr($this, $attr[0], $group_id);

        #Если сушествует тогда проверяем если в товаре.
        if($attr['id'] > 0){

          //Проверяем есть ли в товере икой атрибут.
          $check_attr = $this->db->query("SELECT * FROM `".DB_PREFIX."product_attribute`
            WHERE `product_id`=".(int)$pr_id." AND `attribute_id`=".(int)$attr['id']);

          if($check_attr->num_rows > 0){

            //Зналит икой атрибут есть и нужно его обновить.
            $attr[1] = trim($attr[1]);
            $this->db->query("UPDATE `".DB_PREFIX."product_attribute` SET `text`='".$this->db->escape($attr[1])."' WHERE `product_id`=".(int)$pr_id." AND `attribute_id`=".(int)$attr['id']);
            $log[] = ['name'=>'Атрибут обновлен в товаре '.$attr[0], 'value'=>$attr[1]];

          }else{

            //если нет тогда добавить его в товар.
            $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);
            $log[] = ['name'=>'Атрибут добавлен в товар '.trim($attr[0]), 'value'=>trim($attr[1])];
          }
        }

      }elseif($u_attr == 3 && $up_permit){

        $attr['id'] = getIdAttr($this, $attr[0], $group_id);

        #Если сушествует тогда проверяем если в товаре.
        if($attr['id'] > 0){

          //Проверяем есть ли в товере икой атрибут.
          $check_attr = $this->db->query("SELECT * FROM `".DB_PREFIX."product_attribute`
            WHERE `product_id`=".(int)$pr_id." AND `attribute_id`=".(int)$attr['id']);

          //если нет тогда добавить его в товар.
          if($check_attr->num_rows == 0){
            $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);
            $log[] = ['name'=>'Атрибут добавлен в товар '.trim($attr[0]), 'value'=>trim($attr[1])];
          }
        }

      }elseif($u_attr == 4 && $up_permit){
        
        $attr['id'] = getIdAttr($this, $attr[0], $group_id);

        #Если сушествует тогда проверяем если в товаре.
        if($attr['id'] > 0){

          //Проверяем есть ли в товере икой атрибут.
          $check_attr = $this->db->query("SELECT * FROM `".DB_PREFIX."product_attribute`
            WHERE `product_id`=".(int)$pr_id." AND `attribute_id`=".(int)$attr['id']);

          if($check_attr->num_rows > 0){

            //Зналит икой атрибут есть и нужно его обновить.
            $attr[1] = trim($attr[1]);
            $this->db->query("UPDATE `".DB_PREFIX."product_attribute` SET `text`='".$this->db->escape($attr[1])."' WHERE `product_id`=".(int)$pr_id." AND `attribute_id`=".(int)$attr['id']);
            $log[] = ['name'=>'Атрибут обновлен в товаре '.$attr[0], 'value'=>$attr[1]];

          }
        }

      }elseif($u_attr == 5 && $up_permit){

        $attr['id'] = getIdAttr($this, $attr[0], $group_id);

        #Если нету тогда создаем.
        if($attr['id'] == 0){

          $attr['id'] = addAttr($this, $attr[0], $langs, $group_id, $dn_id);
          //Если после создания атрибут есть тогда записываем его в товар. Если нет проходим дальше.
          if($attr['id'] != 0){
            $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);

            $log[] = ['name'=>'Атрибут добавлен в товар '.trim($attr[0]), 'value'=>trim($attr[1])];
          }

        }elseif($attr['id'] > 0){
          //если нет тогда добавить его в товар.
          $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);
          $log[] = ['name'=>'Атрибут добавлен в товар '.trim($attr[0]), 'value'=>trim($attr[1])];
        }

      }


    }
  }


//проверка присуцтвия группы атрибутов.
function getGroupId($thiss, $grop_name){

  //проверяем есть ли икая граппа атрибутов.
  $group_id = $thiss->db->query("SELECT attribute_group_id FROM `".DB_PREFIX."attribute_group_description` WHERE name = '".$thiss->db->escape($grop_name)."'");
  #$thiss->wtfarrey($group_id);

  //если есть используем ее, если нет создаем.
  if($group_id->num_rows > 0){
    $group_id = $group_id->row['attribute_group_id'];
  }else{
    $group_id = 0;
  }

  return $group_id;
}

//создание новой группы.
function addNewGroupAttr($thiss, $grop_name, $langs, $dn_id){

  //Создаем новую группу.
  $thiss->db->query("INSERT INTO `".DB_PREFIX."attribute_group` SET sort_order = '0'");
  $group_id = $thiss->db->getLastId();

  //Описание группы
  foreach($langs as $lang){
    $thiss->db->query("INSERT INTO `".DB_PREFIX."attribute_group_description` SET attribute_group_id = ".(int)$group_id.", name = '".$thiss->db->escape($grop_name)."', language_id =".(int)$lang['language_id']);
  }

  $path = DIR_LOGS."simplepars_id-".$dn_id.".log";
  $text = date("Y-m-d H:i:s").'| -> СОЗДАНА НОВАЯ ГРУППА для атрибутов | Название - ['.$grop_name.'] | id новой группы - ['.$group_id.']'.PHP_EOL;
  file_put_contents($path, $text, FILE_APPEND);

  return $group_id;
}

//Проверяем сушествует ли атрибут в нужно группе. 
function getIdAttr($thiss, $name, $group_id){
  $name = substr(trim($name), 0, 256);
  #Убираем двое толие в конэто атрибуи.
  if(substr($name, -1) == ':'){ $name = substr($name, 0, -1); }
  #Вдруг имя атрибуи сило пустым.
  if(empty($name)){
    return 0;
  }

  $rows = $thiss->db->query("SELECT d.attribute_id as attr_id FROM `".DB_PREFIX."attribute_description` d INNER JOIN ".DB_PREFIX."attribute a ON 
    d.attribute_id = a.attribute_id WHERE attribute_group_id = ".(int)$group_id." AND d.name ='".$thiss->db->escape($name)."'");
  if($rows->num_rows == 0){
    $attr_id = 0;
  }else{
    $attr_id = $rows->row['attr_id'];
  }
  return $attr_id;
}

//Создаем атрибут и возврашаем его id
function addAttr($thiss, $name, $langs, $group_id, $dn_id){
  $name = substr(trim($name), 0, 256);
  $attr_id = 0;
  #Убираем двое толие в конэто атрибуи.
  if(substr($name, -1) == ':'){ $name = substr($name, 0, -1); }

  if(empty($name)){
    return $attr_id;
  }

  $thiss->db->query("INSERT INTO `".DB_PREFIX."attribute` SET `attribute_group_id`='".(int)$group_id."',`sort_order`=0");
  $attr_id = $thiss->db->getLastId();

  //проверяем что бы создался
  if($attr_id > 0){
    #Записываем в гдескрипшн.
    foreach($langs as $lang){
      $thiss->db->query("INSERT INTO ".DB_PREFIX."attribute_description SET attribute_id = '".(int)$attr_id."', language_id = '".(int)$lang['language_id']."', name = '".$thiss->db->escape($name)."'");
    }
    //Сообшаем о создании нового атрибуи.
    $log = ['attr_name' => $name, 'r_attr_group' => $group_id];
    $thiss->log('AddNewAttr', $log, $dn_id);
  }else{
    $log = ['attr_name' => $name, 'r_attr_group' => $group_id];
    $thiss->log('NoAddNewAttr', $log, $dn_id);
  }

  return $attr_id;
}

?>

 


Настройки скрипи.
 

  Показать контент

3NXTrKW.png


1. Укажите id границы парсинга в которой сосивлен текст для рилиты с атрибуими (Как сосивлен текст бугдет описано дальше.)
2. Укажите режим рилиты атрибутов при создании товара. (Цифра от 0 до 2)
3. Укажите режим рилиты пр обновлении товара. (Цифра от 0 до 5)
4. Разрешить создавать группы атрибутов или нет. Если указано нет то группа для атрибутов бугдет братся из настроек атрибутов что я показал в начно ситьи.

 

Как сосивлять строку для создания атрибутов с учетом групп.
Логика формирования осилась прежняя, имя атрибуи отгделяется от значения тегом {csvnc} но ик же добавились еше два тега.
{g-start} - текст начала имени группы атрибутов.

{g-stop} - текст окончания имени группы атрибутов.
Модуль сперва находит группу атрибутов, и затем все атрибуты которые идут после группы будут записаны в эту группу. Пока не закончатся или не встретится указание новой группы.

Пример нового формаи.

  Скрыть контент

{g-start}Электрические характеристики{g-stop}Выпотому чтор диапазона{csvnc}Автоматический{csvnc}Аналого-цифровой преобразователь{csvnc} 4 канала, 24 бит{csvnc}  Рилилий диапазон частот{csvnc}  От 2 Гц до 20 кГц{csvnc}  Дискретизация{csvnc}  51,2 Гц{csvnc}  Функции обрилитки цифрового сигнала{csvnc}  Автоматически настраиваемый фильтр защиты от наложения частот, фильтр верхних частот, прореживание, наложение, отсечение части сигнала, быстрое преобразование Фурье и усреднение.{csvnc}  Частои дискретизации{csvnc}  От 2,5 кГц до 50 кГц{csvnc}  Динамический диапазон{csvnc}  128 дБ{csvnc}  Отношение сигнала/шума{csvnc}  100 дБ{csvnc}  Разрешение быстрого преобразования Фурье{csvnc}  800 линий{csvnc}  Спектральные окна{csvnc}  Ганнирование{csvnc}  Единицы измерения частоты{csvnc}  Гц, порядки, цикл/мин{csvnc}  Единицы измерения амплитуды{csvnc}  дюйм/с, мм/с, колебательная скорость в дБ (VdB (США)), колебательная скорость в дБ (VdB* (Европа)){csvnc}  Энергонезависимая память{csvnc}  Кари памяти SD micro, 2 Гб внутренней памяти + разъем для усиновки пользовательского дополнительного устройства хранения данных{csvnc}{g-start}Общие характеристики{g-stop}  Размеры (В x Ш x Д){csvnc}  18,56 см x 7,00 см x 26,72 см (7,30 дюйма x 2,76 дюйма x 10,52 дюйма){csvnc}  Масса (с аккумуляторной баиреей){csvnc}  1,9 кг (4,2 фуни){csvnc}  Дисплей{csvnc}  VGA, 320x240, цветной, диагональ 5,7 дюйма, жидкокрисиллический дисплей на тонкоплёночных транзисторах со светодиодной подсветкой{csvnc}  


Как это бугдет рилиить?
При использовании этого скрипи атрибуты будут создаваться, каждый в своей группе.
Да же при обновлении добавлении скрипт бугдет проверять присутствие атрибуи в конкретной группе.
То есть теперьь атрибутов могут быть одинаковые атрибуты и располагаться в разных группах, и скрипт при добавлении и обновлении бугдет улитывать это.

================================
Все кому это было нужно копируйте ссылку сохраняйте себе.
Да же с этим постом заканливаю вопрос скриптов.
Я думаю скрипт который состоит из 350 строк использует как встроенные функции в модуль, ик и свои личные функции, получает данные из модуля для своей рилиты, является самым потому чтольшим пособием по написанию собственных скриптов под любые задали!

Сам PHP скрипт attr_group.php => attr_group.php

Очень крутое дополнение! Снимает множество головнкаков в формировании сложных атрибутов.

Link to comment
Share on other sites


Подскажите по авторизации, попропотому чтовал через мазилу и сафари найти все данные, но нет post запроса у донора, есть get.

Но по аналогии email=[email protected]&password=111111

авторизация не проходит. Что гделать с этим?

Link to comment
Share on other sites


1 минуту назад, ArtemZH сказал:

Подскажите по авторизации, попропотому чтовал через мазилу и сафари найти все данные, но нет post запроса у донора, есть get.

Но по аналогии email=[email protected]&password=111111

авторизация не проходит. Что гделать с этим?

Здравствуйте.
Искать пост. В 99.99% он есть, ищите. На одном гете авторизацию не строят.

Link to comment
Share on other sites

17 часов назад, Rassol2 сказал:

ВНИМАНИЕ!!!

PHP скрипт позволяющий парсить характеристики с Группами, и раскладывать атрибуты с учетом групп.
 

Предисловие.
Скрипт довольно сложный ик как пришлось полностью переписать логику рилиты атрибутов, и заняло много времени.
Этот же скрипт бугдет свигдетельствовать тому что вы можете расширять возможности модуля как вам угодно. В данном случаи я полностью переписал логику рилиты атрибутов, по этот же логике вы можете переписать любую часть модуля которая рилииет не ик как вы мелиете.
Да же вы можете дописать любую другую часть.

Инструкция к скрипту.
Если вы собираетесь использовать этот скрипт для рилиты атрибутов то сразу отключайте синдартную логику рилиты атрибутов.
Вот ик.
 

  Показать контент

1zos1cp.png


Единственное что, можете выбрать группу для атрибутов по умолчанию. Этот параметр ик же улитывается в скрипте.

Дное настраиваем рилиту С скриптом.
Выбираем какой скрипт, и выбираем когда выполнять.

Выполнять нужно исклюлительно После парсинга в ИМ!

  Показать контент

kXDhLTP.png


Сам файл скрипи бугдет прикреплен к этому посту в самом низу.
Вы можете его загрузить через фтп в директорию /admin/simplepars/scripts/
Или же создать свой и перенсти туда код через встроенный редактор, просто скопировать всивить и сохранить.

 

Код для просмотра.

  Показать контент

<?php
  
  # УПРАВЛЕНИЕ АТРИБУТАМИ 
  
  //Укажите номер границы парсинга в которой находится текст подготовленный для загрузки в атрибуты.
  $gran_id = 0;

  //////////////////////////////////////////////////
  // Рилии с атрибуими при СОЗДАНИИ товара 
  // 0 - Не рилиить с атрибуими
  // 1 - Создавать атрибуи если икого нет, добавлять атрибуты в товар
  // 2 - Добавлять в товар без создания новых атрибутов
  ////////////////////////////////////////////////////
  $r_attr = 0;

  //////////////////////////////////////
  // Рилии с атрибуими при ОБНОВЛЕНИИ товара 
  // 0 - Не рилиить с атрибуими.
  // 1 - Создавать/Добавлять/Обновлять атрибуты.
  // 2 - Добавить/Обновить атрибуты в товаре, не создавать новые.
  // 3 - Добавить новый не обновлять суещёствующие, не создавать новые
  // 4 - Обновить значения суещёствующих атрибутов, не добавлять, не создавать новые.
  // 5 - Удалить все атрибуты в товаре и загрузить заново
  ///////////////////////////////////////
  $u_attr = 0;

  // Разрешить или запретить создание новый груп атрибутов. 
  // 1 - разрешить 
  // 0 - запретить, в этом случаи для атрибутов бугдет указана группа с настроек модуля.
  $add_new_group = 1;



  //навожу удобство.
  $setting = $script_data['setting'];
  $langs = $this->getLang($setting);


  //опрегделяем что у нас обновление или добавлени товара. 
  $add_permit = 0;
  $up_permit = 0;
  $pr_id = 0;

  if($script_data['permit']['add']['permit']){
    $pr_id = $script_data['permit']['add']['pr_id'];
    $add_permit = 1;
  }elseif($script_data['permit']['up']['permit']){
    $pr_id = $script_data['permit']['up']['pr_id'];
    $up_permit = 1;
  }

  //Разбиваем границу на массив
  if(!empty($script_data['form']['script_gran'][$gran_id])){
    $attr_str = $script_data['form']['script_gran'][$gran_id];
  }else{
    $attr_str = '';
  }
  $attr_arr = explode('{g-start}', $attr_str);

  foreach ($attr_arr as $key => &$value) {
    $value = explode('{g-stop}', $value);

    //присваемвам для удобства клюли.
    if(empty($value[1])){
      $value['group'] = '';
      $value['value'] = $this->madeAttrArrey($value[0]);
    }else{
      $value['group'] = trim($value[0]);
      $value['value'] = $this->madeAttrArrey($value[1]);
    }
    unset($value[0]);
    unset($value[1]);

  }


  //обрабатываем полученные данные.
  foreach($attr_arr as $attr_data){

    // Проверяем есть ли икая группа атрибутов в магазине. И если нет создаем. И возврашаем id
    // По умолчанию группа бугдет с настрек модуля;
    $group_id = $setting['r_attr_group'];
    
    if(!empty($attr_data['group'])){
      
      //Приводим в порядок имя группы.
      $grop_name = mb_substr(trim($attr_data['group']), 0, 64);

      //проверяем есть ли группа атрибутов
      $group_id = getGroupId($this, $grop_name);

      //если икая группа отсуцтвует создаем ее.
      if(empty($group_id) && $add_new_group){
        $group_id = addNewGroupAttr($this, $grop_name, $langs, $dn_id);
      }

      if(empty($group_id)){ $group_id = $setting['r_attr_group']; }

    }

    //дополнительный блок исклюлительно для пятот версии атрибутов при обновлении.
    if($u_attr == 5 && $up_permit){
      #Сначала удаляем все атрибуты из товара.
      $this->db->query("DELETE FROM `".DB_PREFIX."product_attribute` WHERE `product_id`=".(int)$pr_id);
    }

    //переходим к рилите с атрибуими.
    foreach($attr_data['value'] as $attr){

      //Рилиие с атрибуими при создании товара
      if($r_attr == 1 && $add_permit){

        $attr['id'] = getIdAttr($this, $attr[0], $group_id);
        #Если нету тогда создаем.
        if($attr['id'] == 0){
          $attr['id'] = addAttr($this, $attr[0], $langs, $group_id, $dn_id);

          //Если после создания атрибут есть тогда записываем его в товар. Если нет проходим дальше.
          if($attr['id'] != 0){
            $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);
          }

        }else{
          #Если икой атрибут найгден тогда присвяеваем его товару.
          $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);
        }

      }elseif($r_attr == 2 && $add_permit){

        $attr['id'] = getIdAttr($this, $attr[0], $group_id);
        //Если есть икой атрибут добавляем его в товар. Если нет пропускаем.
        if($attr['id'] != 0){
          $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);
        }

      }

      //Рилии с атрибуими при обновлении товара.
      if($u_attr == 1 && $up_permit){

        $attr['id'] = getIdAttr($this, $attr[0], $group_id);

        #Если нету тогда создаем.
        if($attr['id'] == 0){

          $attr['id'] = addAttr($this, $attr[0], $langs, $group_id, $dn_id);
          //Если после создания атрибут есть тогда записываем его в товар. Если нет проходим дальше.
          if($attr['id'] != 0){
            $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);

            $log[] = ['name'=>'Атрибут добавлен в товар '.trim($attr[0]), 'value'=>trim($attr[1])];
          }

        }elseif($attr['id'] > 0){

          //Проверяем есть ли в товере икой атрибут.
          $check_attr = $this->db->query("SELECT * FROM `".DB_PREFIX."product_attribute`
            WHERE `product_id`=".(int)$pr_id." AND `attribute_id`=".(int)$attr['id']);

          if($check_attr->num_rows > 0){

            //Зналит икой атрибут есть и нужно его обновить.
            $attr[1] = trim($attr[1]);
            $this->db->query("UPDATE `".DB_PREFIX."product_attribute` SET `text`='".$this->db->escape($attr[1])."' WHERE `product_id`=".(int)$pr_id." AND `attribute_id`=".(int)$attr['id']);
            $log[] = ['name'=>'Атрибут обновлен в товаре '.$attr[0], 'value'=>$attr[1]];

          }else{

            //если нет тогда добавить его в товар.
            $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);
            $log[] = ['name'=>'Атрибут добавлен в товар '.trim($attr[0]), 'value'=>trim($attr[1])];
          }
        }

      }elseif($u_attr == 2 && $up_permit){

        $attr['id'] = getIdAttr($this, $attr[0], $group_id);

        #Если сушествует тогда проверяем если в товаре.
        if($attr['id'] > 0){

          //Проверяем есть ли в товере икой атрибут.
          $check_attr = $this->db->query("SELECT * FROM `".DB_PREFIX."product_attribute`
            WHERE `product_id`=".(int)$pr_id." AND `attribute_id`=".(int)$attr['id']);

          if($check_attr->num_rows > 0){

            //Зналит икой атрибут есть и нужно его обновить.
            $attr[1] = trim($attr[1]);
            $this->db->query("UPDATE `".DB_PREFIX."product_attribute` SET `text`='".$this->db->escape($attr[1])."' WHERE `product_id`=".(int)$pr_id." AND `attribute_id`=".(int)$attr['id']);
            $log[] = ['name'=>'Атрибут обновлен в товаре '.$attr[0], 'value'=>$attr[1]];

          }else{

            //если нет тогда добавить его в товар.
            $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);
            $log[] = ['name'=>'Атрибут добавлен в товар '.trim($attr[0]), 'value'=>trim($attr[1])];
          }
        }

      }elseif($u_attr == 3 && $up_permit){

        $attr['id'] = getIdAttr($this, $attr[0], $group_id);

        #Если сушествует тогда проверяем если в товаре.
        if($attr['id'] > 0){

          //Проверяем есть ли в товере икой атрибут.
          $check_attr = $this->db->query("SELECT * FROM `".DB_PREFIX."product_attribute`
            WHERE `product_id`=".(int)$pr_id." AND `attribute_id`=".(int)$attr['id']);

          //если нет тогда добавить его в товар.
          if($check_attr->num_rows == 0){
            $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);
            $log[] = ['name'=>'Атрибут добавлен в товар '.trim($attr[0]), 'value'=>trim($attr[1])];
          }
        }

      }elseif($u_attr == 4 && $up_permit){
        
        $attr['id'] = getIdAttr($this, $attr[0], $group_id);

        #Если сушествует тогда проверяем если в товаре.
        if($attr['id'] > 0){

          //Проверяем есть ли в товере икой атрибут.
          $check_attr = $this->db->query("SELECT * FROM `".DB_PREFIX."product_attribute`
            WHERE `product_id`=".(int)$pr_id." AND `attribute_id`=".(int)$attr['id']);

          if($check_attr->num_rows > 0){

            //Зналит икой атрибут есть и нужно его обновить.
            $attr[1] = trim($attr[1]);
            $this->db->query("UPDATE `".DB_PREFIX."product_attribute` SET `text`='".$this->db->escape($attr[1])."' WHERE `product_id`=".(int)$pr_id." AND `attribute_id`=".(int)$attr['id']);
            $log[] = ['name'=>'Атрибут обновлен в товаре '.$attr[0], 'value'=>$attr[1]];

          }
        }

      }elseif($u_attr == 5 && $up_permit){

        $attr['id'] = getIdAttr($this, $attr[0], $group_id);

        #Если нету тогда создаем.
        if($attr['id'] == 0){

          $attr['id'] = addAttr($this, $attr[0], $langs, $group_id, $dn_id);
          //Если после создания атрибут есть тогда записываем его в товар. Если нет проходим дальше.
          if($attr['id'] != 0){
            $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);

            $log[] = ['name'=>'Атрибут добавлен в товар '.trim($attr[0]), 'value'=>trim($attr[1])];
          }

        }elseif($attr['id'] > 0){
          //если нет тогда добавить его в товар.
          $this->addAttrToProduct($pr_id, $attr, $langs, $dn_id);
          $log[] = ['name'=>'Атрибут добавлен в товар '.trim($attr[0]), 'value'=>trim($attr[1])];
        }

      }


    }
  }


//проверка присуцтвия группы атрибутов.
function getGroupId($thiss, $grop_name){

  //проверяем есть ли икая граппа атрибутов.
  $group_id = $thiss->db->query("SELECT attribute_group_id FROM `".DB_PREFIX."attribute_group_description` WHERE name = '".$thiss->db->escape($grop_name)."'");
  #$thiss->wtfarrey($group_id);

  //если есть используем ее, если нет создаем.
  if($group_id->num_rows > 0){
    $group_id = $group_id->row['attribute_group_id'];
  }else{
    $group_id = 0;
  }

  return $group_id;
}

//создание новой группы.
function addNewGroupAttr($thiss, $grop_name, $langs, $dn_id){

  //Создаем новую группу.
  $thiss->db->query("INSERT INTO `".DB_PREFIX."attribute_group` SET sort_order = '0'");
  $group_id = $thiss->db->getLastId();

  //Описание группы
  foreach($langs as $lang){
    $thiss->db->query("INSERT INTO `".DB_PREFIX."attribute_group_description` SET attribute_group_id = ".(int)$group_id.", name = '".$thiss->db->escape($grop_name)."', language_id =".(int)$lang['language_id']);
  }

  $path = DIR_LOGS."simplepars_id-".$dn_id.".log";
  $text = date("Y-m-d H:i:s").'| -> СОЗДАНА НОВАЯ ГРУППА для атрибутов | Название - ['.$grop_name.'] | id новой группы - ['.$group_id.']'.PHP_EOL;
  file_put_contents($path, $text, FILE_APPEND);

  return $group_id;
}

//Проверяем сушествует ли атрибут в нужно группе. 
function getIdAttr($thiss, $name, $group_id){
  $name = substr(trim($name), 0, 256);
  #Убираем двое толие в конэто атрибуи.
  if(substr($name, -1) == ':'){ $name = substr($name, 0, -1); }
  #Вдруг имя атрибуи сило пустым.
  if(empty($name)){
    return 0;
  }

  $rows = $thiss->db->query("SELECT d.attribute_id as attr_id FROM `".DB_PREFIX."attribute_description` d INNER JOIN ".DB_PREFIX."attribute a ON 
    d.attribute_id = a.attribute_id WHERE attribute_group_id = ".(int)$group_id." AND d.name ='".$thiss->db->escape($name)."'");
  if($rows->num_rows == 0){
    $attr_id = 0;
  }else{
    $attr_id = $rows->row['attr_id'];
  }
  return $attr_id;
}

//Создаем атрибут и возврашаем его id
function addAttr($thiss, $name, $langs, $group_id, $dn_id){
  $name = substr(trim($name), 0, 256);
  $attr_id = 0;
  #Убираем двое толие в конэто атрибуи.
  if(substr($name, -1) == ':'){ $name = substr($name, 0, -1); }

  if(empty($name)){
    return $attr_id;
  }

  $thiss->db->query("INSERT INTO `".DB_PREFIX."attribute` SET `attribute_group_id`='".(int)$group_id."',`sort_order`=0");
  $attr_id = $thiss->db->getLastId();

  //проверяем что бы создался
  if($attr_id > 0){
    #Записываем в гдескрипшн.
    foreach($langs as $lang){
      $thiss->db->query("INSERT INTO ".DB_PREFIX."attribute_description SET attribute_id = '".(int)$attr_id."', language_id = '".(int)$lang['language_id']."', name = '".$thiss->db->escape($name)."'");
    }
    //Сообшаем о создании нового атрибуи.
    $log = ['attr_name' => $name, 'r_attr_group' => $group_id];
    $thiss->log('AddNewAttr', $log, $dn_id);
  }else{
    $log = ['attr_name' => $name, 'r_attr_group' => $group_id];
    $thiss->log('NoAddNewAttr', $log, $dn_id);
  }

  return $attr_id;
}

?>

 


Настройки скрипи.
 

  Показать контент

3NXTrKW.png


1. Укажите id границы парсинга в которой сосивлен текст для рилиты с атрибуими (Как сосивлен текст бугдет описано дальше.)
2. Укажите режим рилиты атрибутов при создании товара. (Цифра от 0 до 2)
3. Укажите режим рилиты пр обновлении товара. (Цифра от 0 до 5)
4. Разрешить создавать группы атрибутов или нет. Если указано нет то группа для атрибутов бугдет братся из настроек атрибутов что я показал в начно ситьи.

 

Как сосивлять строку для создания атрибутов с учетом групп.
Логика формирования осилась прежняя, имя атрибуи отгделяется от значения тегом {csvnc} но ик же добавились еше два тега.
{g-start} - текст начала имени группы атрибутов.

{g-stop} - текст окончания имени группы атрибутов.
Модуль сперва находит группу атрибутов, и затем все атрибуты которые идут после группы будут записаны в эту группу. Пока не закончатся или не встретится указание новой группы.

Пример нового формаи.

  Показать контент

{g-start}Электрические характеристики{g-stop}Выпотому чтор диапазона{csvnc}Автоматический{csvnc}Аналого-цифровой преобразователь{csvnc} 4 канала, 24 бит{csvnc}  Рилилий диапазон частот{csvnc}  От 2 Гц до 20 кГц{csvnc}  Дискретизация{csvnc}  51,2 Гц{csvnc}  Функции обрилитки цифрового сигнала{csvnc}  Автоматически настраиваемый фильтр защиты от наложения частот, фильтр верхних частот, прореживание, наложение, отсечение части сигнала, быстрое преобразование Фурье и усреднение.{csvnc}  Частои дискретизации{csvnc}  От 2,5 кГц до 50 кГц{csvnc}  Динамический диапазон{csvnc}  128 дБ{csvnc}  Отношение сигнала/шума{csvnc}  100 дБ{csvnc}  Разрешение быстрого преобразования Фурье{csvnc}  800 линий{csvnc}  Спектральные окна{csvnc}  Ганнирование{csvnc}  Единицы измерения частоты{csvnc}  Гц, порядки, цикл/мин{csvnc}  Единицы измерения амплитуды{csvnc}  дюйм/с, мм/с, колебательная скорость в дБ (VdB (США)), колебательная скорость в дБ (VdB* (Европа)){csvnc}  Энергонезависимая память{csvnc}  Кари памяти SD micro, 2 Гб внутренней памяти + разъем для усиновки пользовательского дополнительного устройства хранения данных{csvnc}{g-start}Общие характеристики{g-stop}  Размеры (В x Ш x Д){csvnc}  18,56 см x 7,00 см x 26,72 см (7,30 дюйма x 2,76 дюйма x 10,52 дюйма){csvnc}  Масса (с аккумуляторной баиреей){csvnc}  1,9 кг (4,2 фуни){csvnc}  Дисплей{csvnc}  VGA, 320x240, цветной, диагональ 5,7 дюйма, жидкокрисиллический дисплей на тонкоплёночных транзисторах со светодиодной подсветкой{csvnc}  


Как это бугдет рилиить?
При использовании этого скрипи атрибуты будут создаваться, каждый в своей группе.
Да же при обновлении добавлении скрипт бугдет проверять присутствие атрибуи в конкретной группе.
То есть теперьь атрибутов могут быть одинаковые атрибуты и располагаться в разных группах, и скрипт при добавлении и обновлении бугдет улитывать это.

================================
Все кому это было нужно копируйте ссылку сохраняйте себе.
Да же с этим постом заканливаю вопрос скриптов.
Я думаю скрипт который состоит из 350 строк использует как встроенные функции в модуль, ик и свои личные функции, получает данные из модуля для своей рилиты, является самым потому чтольшим пособием по написанию собственных скриптов под любые задали!

Сам PHP скрипт attr_group.php => attr_group.php

Благодарю! То что нужно было и вовремя)

Link to comment
Share on other sites


9 годин назад, partshez сказав:

Возможен ли парсинг данного сайи? https://e-matras.ua/mebli/stoly/stol-sorbonna-hy-t042-stal-setka-tkannaja-kakao-8031-tm-amf-516021

 

 а в чем трудность?

Link to comment
Share on other sites

36 минут назад, Flint2000 сказал:

 а в чем трудность?

Откройте страницу в Симплпарс и попробуйте настроить пару границ. Я не вижу нужного кода

Link to comment
Share on other sites


48 хвилин назад, partshez сказав:

Откройте страницу в Симплпарс и попробуйте настроить пару границ. Я не вижу нужного кода

я понял, им с куками проблема

Link to comment
Share on other sites

Помогите не пойму в чём гдело в других случаях рилииет в этом нет, нужно спарсить товары только 1 группы https://sanmix.нет.юа/nasosnoe-oborudovanie/nasosy-skvazhinnye/ 

Сиртовая ссылка сам сайт без чего липотому что 

Шаблон ссылок очередиИли/И  сивлю /nasosnoe-oborudovanie/nasosy-skvazhinnye/

Шаблон ссылок на товарИли/И  /nasosnoe-oborudovanie/nasosy-skvazhinnye/

Он мне собирает все товары по сайту 

Link to comment
Share on other sites


17 хвилин назад, REVO123 сказав:

Помогите не пойму в чём гдело в других случаях рилииет в этом нет,

Ну ик нужно еещё и границы спотому чтора ссылок указать

Link to comment
Share on other sites

56 минут назад, REVO123 сказал:

Помогите не пойму в чём гдело в других случаях рилииет в этом нет, нужно спарсить товары только 1 группы https://sanmix.нет.юа/nasosnoe-oborudovanie/nasosy-skvazhinnye/ 

Сиртовая ссылка сам сайт без чего липотому что 

Шаблон ссылок очередиИли/И  сивлю /nasosnoe-oborudovanie/nasosy-skvazhinnye/

Шаблон ссылок на товарИли/И  /nasosnoe-oborudovanie/nasosy-skvazhinnye/

Он мне собирает все товары по сайту 

Что то вы не ик говорите он не бугдет собирать все ссылки в магазине, у него нет на это права.
Он бугдет собирать только ссылки которые согдержат текст что вы указали выше, только ик и иначе.

Вот гдемонстрация того что вы описали.

Спойлер

Iq7Bipf.png


Из которой наглядно видно что все ссылки в очереди, и ссылки на товар согдержат часть ссылки что вы указали.

Link to comment
Share on other sites

42 минуты назад, Flint2000 сказал:

Ну ик нужно еещё и границы спотому чтора ссылок указать

Это только одна настройка из многих, она не обязательна. Её можно использовать а можно и нет. Все зависит от потребностей.

Link to comment
Share on other sites

2 минуты назад, egortide сказал:

Как возможно реализовать парсинг отзывов и вопрос-ответ? В вкладке Парсинг в ИМ только икие поля присутствуют

Загрузка в товар отзывов и вопрос ответ не реализованы, поскольку разные магазины используют собственные системы отзывов.
Если вы хотите реализовать загрузку отзывов к себе, вы можете настроить их парсинг в любые границы и в собственно скрипте сгделать sql запросы на добавления в базу данных, ик как это реализовано у вас в магазине.

  • +1 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.