Выгрузка товара из Prestashop 1.6 на Prom.ua

Тема в разделе "PrestaShop", создана пользователем kozukhar, 8 мар 2016.

Информация :
Приветствую гость, обрати внимание! Темы которые закреплены в разделах, в скором времени будут откреплены. Правила раздела PrestaShop

(Не актуальные темы) Каталоги:Модули PrestaShop 1.7Модули PrestaShop 1.5 - 1.6Шаблоны PrestaShop 1.7Шаблоны PrestaShop 1.5 - 1.6
(Не актуальные темы) Поиск / Запросы:Модули PrestaShop 1.7Модули PrestaShop 1.5 - 1.6Шаблоны PrestaShop 1.7Шаблоны PrestaShop 1.5 - 1.6
Полезная информация:Поддержка и помощь c PrestaShopУбираем ПрестаТраст, стучалки и прочую рекламуСовместные покупки модулей и шаблоновПеревод Prestashop и модулей
Модераторы: trace
  1. cahbe

    cahbe Создатель

    Регистр.:
    30 июн 2016
    Сообщения:
    13
    Симпатии:
    1
    Тоже столкнулся с мягко скажем неадекватностью ПромЮа. Залить характеристики товара автоматом почти нереально. Списка их характеристик и свойств нет, нужно вручную дербанить из формы заполнения характеристик, а после всего этого ужаса оказывается что ещё и в свойствах цифровых характеристик нужно указывать единицу измерения, для чего нужно пол магазина переломать и яндексмаркетовую выгрузку править.
    Выгрузить их базу и подправить тоже не реально. В общем, походу, нет смысла заморачиваться и оставить товар без характеристик ибо переписать пол магазина, а затем ещё плясать с бубном заводя характеристики вручную выдёргивая параметры копировать\вставить ради одной площадки вообще не вариант.
    Это же их деньги - чем удобнее ими пользоваться тем вероятнее к ним обратятся - почему нет фирменой выгрузки под престу?
     
    _sashok нравится это.
  2. invader

    invader Серый кардинал в отставке :)

    Moderator
    • Супермодератор
    Регистр.:
    3 апр 2006
    Сообщения:
    2.641
    Симпатии:
    5.857
    https://www.nulled.cc/pages/forum-violation
    Сейчас под расклад попадёте за столь содержательные ответы в теме и дальнейший бессмысленный флуд.
     
  3. mazapuras

    mazapuras Создатель

    Регистр.:
    10 сен 2011
    Сообщения:
    11
    Симпатии:
    4
    Сорри, после слова "идиотизм" строку п.3 не дочитал

    Предварительно, установите перл-модуль Spreadsheet::WriteExcel (или успользуйте из прикрепленного архива)

    Код:
    #!/usr/bin/perl
    
    use strict;
    use DBI;
    use Encode;
    use lib '/home/USER/perl-lib';
    use Spreadsheet::WriteExcel;
    # USER - замените
    # в папку /home/USER/perl-lib покласть перл-модуль (в прикреплении)
    
    # Connect to database
    my $user = "DB-USER";
    my $pass = "DB-PASS";
    my $database = "DB-NAME";
    my $hostname = "127.0.0.1";
    my $source = "dbi:mysql:$database";
    my ($dbh,$sth,$sql,$stherror);
    
    $dbh = DBI -> connect( $source, $user, $pass, { PrintError => 0, RaiseError => 1 }) or die "connecting: $DBI::errstr";
    $dbh -> do("set character set utf8");
    
    # create image-path for prom.ua
    # добавить колонку promua в таблицу ps_image
    # или перенести код ниже
    $sql="UPDATE ps_image SET promua = CONCAT('http://site-name.ua/img/p/',
            MID(id_image,1,1),'/',MID(id_image,2,1),'/',MID(id_image,3,1),'/',MID(id_image,4,1),'/',MID(id_image,5,1),'/',MID(id_image,6,1),'/',MID(id_image,7,1),'/',
            id_image,'-large_default.jpg') WHERE promua = '';";
    
    $sth = $dbh->prepare( $sql ) or die "preparing: ", $dbh->errstr;
    $sth->execute or die "executing: ", $sth->errstr;
    
    # Create a new Excel file
    my $FileName = "/home/USER/public_html/prom/prom-import.xls";
    my $workbook = Spreadsheet::WriteExcel->new($FileName);
    
    # Add a worksheet
    my $worksheet1 = $workbook->add_worksheet('Export Products Sheet');
    
    # Set a Unicode font.
    my $uni_font  = $workbook->add_format(font => 'Arial Unicode MS');
    
    $worksheet1->write( 0, 0, Encode::decode('UTF-8', "Код_товара"), $uni_font);
    $worksheet1->write( 0, 1, Encode::decode('UTF-8', "Название_позиции"), $uni_font);
    $worksheet1->write( 0, 2, Encode::decode('UTF-8', "Ключевые_слова"), $uni_font);
    $worksheet1->write( 0, 3, Encode::decode('UTF-8', "Описание"), $uni_font);
    $worksheet1->write( 0, 4, Encode::decode('UTF-8', "Тип_товара"), $uni_font);
    $worksheet1->write( 0, 5, Encode::decode('UTF-8', "Цена"), $uni_font);
    $worksheet1->write( 0, 6, Encode::decode('UTF-8', "Валюта"), $uni_font);
    $worksheet1->write( 0, 7, Encode::decode('UTF-8', "Единица_измерения"), $uni_font);
    $worksheet1->write( 0, 8, Encode::decode('UTF-8', "Минимальный_объем_заказа"), $uni_font);
    $worksheet1->write( 0, 9, Encode::decode('UTF-8', "Ссылка_изображения"), $uni_font);
    $worksheet1->write( 0, 10, Encode::decode('UTF-8', "Наличие"), $uni_font);
    $worksheet1->write( 0, 11, Encode::decode('UTF-8', "Идентификатор_товара"), $uni_font);
    $worksheet1->write( 0, 12, Encode::decode('UTF-8', "Номер_группы"), $uni_font);
    $worksheet1->write( 0, 13, Encode::decode('UTF-8', "Название_Характеристики"), $uni_font);
    $worksheet1->write( 0, 14, Encode::decode('UTF-8', "Измерение_Характеристики"), $uni_font);
    $worksheet1->write( 0, 15, Encode::decode('UTF-8', "Значение_Характеристики"), $uni_font);
    $worksheet1->write( 0, 16, Encode::decode('UTF-8', "Название_Характеристики"), $uni_font);
    $worksheet1->write( 0, 17, Encode::decode('UTF-8', "Измерение_Характеристики"), $uni_font);
    $worksheet1->write( 0, 18, Encode::decode('UTF-8', "Значение_Характеристики"), $uni_font);
    $worksheet1->write( 0, 19, Encode::decode('UTF-8', "Название_Характеристики"), $uni_font);
    $worksheet1->write( 0, 20, Encode::decode('UTF-8', "Измерение_Характеристики"), $uni_font);
    $worksheet1->write( 0, 21, Encode::decode('UTF-8', "Значение_Характеристики"), $uni_font);
    $worksheet1->write( 0, 22, Encode::decode('UTF-8', "Название_Характеристики"), $uni_font);
    $worksheet1->write( 0, 23, Encode::decode('UTF-8', "Измерение_Характеристики"), $uni_font);
    $worksheet1->write( 0, 24, Encode::decode('UTF-8', "Значение_Характеристики"), $uni_font);
    $worksheet1->write( 0, 25, Encode::decode('UTF-8', "Название_Характеристики"), $uni_font);
    $worksheet1->write( 0, 26, Encode::decode('UTF-8', "Измерение_Характеристики"), $uni_font);
    $worksheet1->write( 0, 27, Encode::decode('UTF-8', "Значение_Характеристики"), $uni_font);
    $worksheet1->write( 0, 28, Encode::decode('UTF-8', "Название_Характеристики"), $uni_font);
    $worksheet1->write( 0, 29, Encode::decode('UTF-8', "Измерение_Характеристики"), $uni_font);
    $worksheet1->write( 0, 30, Encode::decode('UTF-8', "Значение_Характеристики"), $uni_font);
    $worksheet1->write( 0, 31, Encode::decode('UTF-8', "Название_Характеристики"), $uni_font);
    $worksheet1->write( 0, 32, Encode::decode('UTF-8', "Измерение_Характеристики"), $uni_font);
    $worksheet1->write( 0, 33, Encode::decode('UTF-8', "Значение_Характеристики"), $uni_font);
    $worksheet1->write( 0, 34, Encode::decode('UTF-8', "Название_Характеристики"), $uni_font);
    $worksheet1->write( 0, 35, Encode::decode('UTF-8', "Измерение_Характеристики"), $uni_font);
    $worksheet1->write( 0, 36, Encode::decode('UTF-8', "Значение_Характеристики"), $uni_font);
    $worksheet1->write( 0, 37, Encode::decode('UTF-8', "Название_Характеристики"), $uni_font);
    $worksheet1->write( 0, 38, Encode::decode('UTF-8', "Измерение_Характеристики"), $uni_font);
    $worksheet1->write( 0, 39, Encode::decode('UTF-8', "Значение_Характеристики"), $uni_font);
    $worksheet1->write( 0, 40, Encode::decode('UTF-8', "Название_Характеристики"), $uni_font);
    $worksheet1->write( 0, 41, Encode::decode('UTF-8', "Измерение_Характеристики"), $uni_font);
    $worksheet1->write( 0, 42, Encode::decode('UTF-8', "Значение_Характеристики"), $uni_font);
    
    # IF (LENGTH(pl.meta_keywords) > 0, pl.meta_keywords, IF(LENGTH(GROUP_CONCAT(t.name)) > 0, GROUP_CONCAT(DISTINCT t.name), '')),
    $sql = "SELECT p.reference, pl.name,
                CONCAT( pl.meta_keywords, IF(LENGTH(pl.meta_keywords) > 0,',',''), GROUP_CONCAT(DISTINCT t.name)), pl.description,
                IF( p.price = 0, '1', p.price), GROUP_CONCAT( DISTINCT i.promua ORDER BY i.position ASC SEPARATOR ', ' ),
                IF( p.active = 1, IF(sav.quantity > 0, '+', '-'), '-'), c.id_promua, p.id_product
            FROM ps_product AS p
            LEFT JOIN ps_product_lang AS pl ON (pl.id_product = p.id_product )
            LEFT JOIN ps_image AS i ON (p.id_product = i.id_product)
            LEFT JOIN ps_stock_available AS sav ON (sav.id_product = p.id_product)
            LEFT JOIN ps_category AS c ON (p.id_category_default = c.id_category)
            LEFT JOIN ps_product_tag AS pt ON (pt.id_product = p.id_product AND pl.id_lang = pt.id_lang)
            LEFT JOIN ps_tag AS t ON (t.id_tag = pt.id_tag)
            WHERE pl.id_lang = 2
            GROUP BY p.id_product";
    
    $sth = $dbh->prepare( $sql ) or die "preparing: ", $dbh->errstr;
    $sth->execute or die "executing: ", $sth->errstr;
    
    my $i=1;
    while(( my @row )= $sth->fetchrow_array ){
        $worksheet1->write( $i, 0, Encode::decode('UTF-8', $row[0]), $uni_font);    # Код_товара        = p.reference
        $worksheet1->write( $i, 1, Encode::decode('UTF-8', $row[1]), $uni_font);    # Название_позиции  = pl.name
        $worksheet1->write( $i, 2, Encode::decode('UTF-8', $row[2]), $uni_font);    # Ключевые_слова    = pl.meta_keywords, t.name
        $worksheet1->write( $i, 3, Encode::decode('UTF-8', $row[3]), $uni_font);    # Описание          = pl.description
        $worksheet1->write( $i, 4, Encode::decode('UTF-8', "r"), $uni_font);        # Тип_товара        = "r"
        $worksheet1->write( $i, 5, $row[4]);                                        # Цена              = p.price
        $worksheet1->write( $i, 6, "UAH" );                                          # Валюта           = "UAH"
        $worksheet1->write( $i, 7, Encode::decode('UTF-8', "шт."), $uni_font);      # Единица_измерения = "шт."
        $worksheet1->write( $i, 8, "1" );                                           # Минимальный_объем_заказа = "1"
        $worksheet1->write( $i, 9, $row[5]);                                        # Ссылка_изображения = i.promua
        $worksheet1->write( $i, 10, $row[6]);                                       # Наличие           = p.active
        $worksheet1->write( $i, 11, $row[0]);                                       # Идентификатор_товара = p.reference
        $worksheet1->write( $i, 12, $row[7]);                                       # Номер_группы      = c.id_promua
     
        my $sql2 = "SELECT agl.name, GROUP_CONCAT(DISTINCT al.name SEPARATOR '|')
                    FROM ps_product AS p
                    LEFT JOIN ps_product_attribute AS pa ON ( pa.id_product = p.id_product )
                    LEFT JOIN ps_product_attribute_combination AS pac ON (pac.id_product_attribute = pa.id_product_attribute)
                    LEFT JOIN ps_attribute AS a ON (a.id_attribute = pac.id_attribute)
                    LEFT JOIN ps_attribute_lang AS al ON (al.id_attribute = pac.id_attribute)
                    LEFT JOIN ps_attribute_group_lang AS agl ON (agl.id_attribute_group = a.id_attribute_group )
                    WHERE al.id_lang = 2 AND pa.id_product = '".$row[8]."'
                    GROUP BY a.id_attribute_group;
                ";
        my $sth2 = $dbh->prepare( $sql2 ) or die "preparing: ", $dbh->errstr;
        $sth2->execute or die "executing: ", $sth2->errstr;
        my $y=12;
        while(( my @row2 )= $sth2->fetchrow_array ){
            $worksheet1->write( $i, $y+1, Encode::decode('UTF-8', $row2[0]), $uni_font);  # Название_Характеристики
            $worksheet1->write( $i, $y+2, Encode::decode('UTF-8', ""), $uni_font);        # Измерение_Характеристики
            $worksheet1->write( $i, $y+3, Encode::decode('UTF-8', $row2[1]), $uni_font);  # Значение_Характеристики
            $y=$y+3;
        }
        $i++;
    }
    $workbook->close();
    
    
     

    Вложения:

    • Spreadsheet.zip
      Размер файла:
      241,4 КБ
      Просмотров:
      27
  4. Riva

    Riva Папочка

    Регистр.:
    2 мар 2013
    Сообщения:
    491
    Симпатии:
    543
    Для prom.ua не появился часом модуль? Если платник то готовы внести пару копеек. Пишите в личку.
     
  5. _sashok

    _sashok PrestaShop Expert

    Регистр.:
    15 июл 2011
    Сообщения:
    2.129
    Симпатии:
    3.524
    модуль Яндекс.Maркет подходит для экспорта на пром
     
  6. Riva

    Riva Папочка

    Регистр.:
    2 мар 2013
    Сообщения:
    491
    Симпатии:
    543
    не проходит, файл xml с ошибками ругается пром

    yamarket 1.7.7, 2.0, 2.2 использовал с ps 1.6.1.4
     
    Последнее редактирование: 24 янв 2017
  7. _sashok

    _sashok PrestaShop Expert

    Регистр.:
    15 июл 2011
    Сообщения:
    2.129
    Симпатии:
    3.524
    после звонка "привязанному к аккаунту" манагеру прома всё прекрасно становиться дружным :)

    ну или вывод полей лишних можно уже в модуле вполне легко под проект и его структуру подправить
     
  8. Riva

    Riva Папочка

    Регистр.:
    2 мар 2013
    Сообщения:
    491
    Симпатии:
    543
    Ну поделись уже подправленной версией :) Можно в личку :)
     
  9. _sashok

    _sashok PrestaShop Expert

    Регистр.:
    15 июл 2011
    Сообщения:
    2.129
    Симпатии:
    3.524
    под конкретные проекты правится, типа назначение основной валюты, реальное наличие и т.д.
    на 1.6.1.11 работает

     
    Demon90 и Riva нравится это.
  10. cahbe

    cahbe Создатель

    Регистр.:
    30 июн 2016
    Сообщения:
    13
    Симпатии:
    1
    Не перебороли промку?