Выгрузка YML. Помогите разобраться. Возможна оплата

Тема в разделе "PHP", создана пользователем Alexeymelckiy, 22 июн 2017.

  1. Alexeymelckiy

    Alexeymelckiy

    Регистрация:
    4 янв 2017
    Сообщения:
    6
    Симпатии:
    1
    Здравствуйте нанимал фрилансера для того, что бы он создал файл для экспорта в формате YML для приложения flipcat.ru
    А позже пропал и не отвечает. А в коде вероятно есть ошибки...
    Вот что получилось.
    Код:
    <?php
    
    include 'config/settings.inc.php';
    
    
    
    $link = mysqli_connect(_DB_SERVER_,_DB_USER_,_DB_PASSWD_,_DB_NAME_);
    
    
    
    $categories = mysqli_query($link, "SELECT c.*,cl.* FROM `ps_category` c LEFT JOIN `ps_category_lang` cl ON cl.id_category = c.id_category WHERE c.id_parent != 0 AND c.id_parent != 1");
    
    
    
    echo '<?xml version="1.0" encoding="utf-8"?>
    
            <!DOCTYPE yml_catalog SYSTEM "shops.dtd">
    
            <yml_catalog date="'.date('Y-m-d G:i').'">
    
            <shop>
    
                <name>Все для наращивания и дизайна ногтей</name>
    
                <company>TnlShop.by</company>
    
                <url>http://tnlshop.by</url>
    
                <platform>Prestashop</platform>
    
                <version>3.0</version>
    
                <agency>Tnlshop</agency>
    
                <email>[email protected]</email>   
    
                <currencies>
    
                    <currency id="BYN" rate="1"/>
    
                </currencies>
    
                <categories>';
    
    while($r = mysqli_fetch_assoc($categories))
    
    {
    
        echo '<category id="'.$r['id_category'].'" '.(($r['id_parent'] != 2) ? 'parentId="'.$r['id_parent'].'"'    : '').'>'.$r['name'].'</category>';
    
        
    
    }
    
    echo '</categories><offers>';
    
    $products = mysqli_query($link,"SELECT p.id_product,p.id_category_default,p.price,pl.* FROM `ps_product` p LEFT JOIN ps_product_lang pl on pl.id_product = p.id_product WHERE p.active = 1 order by p.id_product desc");
    
    while($r = mysqli_fetch_assoc($products)){
    
          $sql = '
    
                SELECT * FROM `'._DB_PREFIX_.'image_shop` image_shop
    
                WHERE image_shop.`id_product` = '.(int)$r['id_product'].'
    
                AND image_shop.`cover`= 1';
    
            $img = mysqli_fetch_assoc(mysqli_query($link,$sql));
    
         $folders = str_split((string)$img['id_image']);
    
            $path =  implode('/', $folders).'/';
    
    
    
            $sql = '
    
                SELECT pl.`id_lang`, pl.`link_rewrite`, p.`ean13`, cl.`link_rewrite` AS category_rewrite
    
                FROM `'._DB_PREFIX_.'product` p
    
                LEFT JOIN `'._DB_PREFIX_.'product_lang` pl ON (p.`id_product` = pl.`id_product`)
    
                
    
                LEFT JOIN `'._DB_PREFIX_.'lang` l ON (pl.`id_lang` = l.`id_lang`)
    
                LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON (cl.`id_category` = p.`id_category_default`  AND cl.`id_lang` = pl.`id_lang`)
    
                WHERE p.`id_product` = '.(int)$r['id_product'].'
    
                AND l.`active` = 1
    
            ';
    
            $t = mysqli_query($link,$sql) or die(mysqli_error($link));
    
        $t = (mysqli_fetch_assoc($t));
    
        echo '<offer id="'.$r['id_product'].'" available="true" bid="1">
    
                    <url>http://tnlshop.by/'.$t['category_rewrite'].'/'.$r['id_product'].'-'.$t['link_rewrite'].'.html</url>
    
                    <price>'.$r['price'].'</price>
    
                    <currencyId>BYN</currencyId>
    
                    <categoryId>'.$r['id_category_default'].'</categoryId>
    
                    <picture>http://tnlshop.by/img/p/'.$path.$img['id_image'].'-thickbox_default.jpg</picture>   
    
                    <delivery>true</delivery>
    
                    <name>'.htmlspecialchars($r['name']).'</name>
    
                    <vendor></vendor>   
    
                    <description>'.htmlspecialchars(strip_tags($r['description'])).'</description>
    
                </offer>';
    
    }
    
    echo '</offers></shop>
    
            </yml_catalog>
    
            ';
    Проблема в том, что большинству товаров автоматически назначается категория "2" и лишь примерно 50 товаром назначается их настоящая категория в чем может быть причина?
    Код:
        <url>http://tnlshop.by/katalog-tovarov/2719-freza-almaznaya-dlya-manikyura-i-pedikyura-razmer-25-sinij.html</url>
                    <price>3.000000</price>
                    <currencyId>BYN</currencyId>
                    <categoryId>2</categoryId>
                    <picture>http://tnlshop.by/img/p/3/2/1/3/3213-thickbox_default.jpg</picture>   
                    <delivery>true</delivery>
                    <name>Фреза алмазная для маникюра и педикюра (размер 25 синий)</name>
                    <vendor></vendor>   
                    <description></description>
                </offer><offer id="2718" available="true" bid="1">
    <url>http://tnlshop.by/vtirka-khlopya-khameleona/2718-khlopya-serebro-khrom-patal.html</url>
                    <price>7.000000</price>
                    <currencyId>BYN</currencyId>
                    <categoryId>1422</categoryId>
                    <picture>http://tnlshop.by/img/p/3/2/1/2/3212-thickbox_default.jpg</picture>   
                    <delivery>true</delivery>
                    <name>Хлопья серебро (хром) паталь</name>
                    <vendor></vendor>   
                    <description>Хлопья наносятся на остаточную липкость от гель-лака или липкий слой топа &quot;похлопывающими&quot; движениями, после перекрываются топом. Так же есть второй способ использования - перемешать хлопья с топом, полученную гелевую консистенцию нанести тонким слоем на подготовленные ногти (маникюр, база), просушить в лампе LED - 1 мин, УФ - 3 мин. После нанести еще один тонкий слой и так же просушить в лампе. После покрываем топом, хорошо запечатывая торцы. Сушим в лампе LED - 30 сек, УФ - 2 мин</description>
                </offer><offer id="2717" available="true" bid="1">
    Подскажите пожалуйста как это поправить? <categoryId>'.$r['id_category_default'].'</categoryId> Может в этой строчке нужно, что-то поправить?
     
  2. $iD

    $iD Команда форума

    Регистрация:
    13 мар 2012
    Сообщения:
    3.580
    Симпатии:
    1.482
    1. это не yml формат, а xml.
    2. проблема (если вам кажется, что она есть) скорее всего в запросе
    Код:
    SELECT p.id_product,p.id_category_default,p.price,pl.* FROM `ps_product` p LEFT JOIN ps_product_lang pl on pl.id_product = p.id_product WHERE p.active = 1 order by p.id_product desc
    здесь выбирается категория, из поля `p.id_category_default`

    p.s. без базы данных помочь не получится,
     
  3. igro

    igro

    Регистрация:
    15 дек 2012
    Сообщения:
    2
    Симпатии:
    0
    Это YML, выгрузка маркета.
     
  4. $iD

    $iD Команда форума

    Регистрация:
    13 мар 2012
    Сообщения:
    3.580
    Симпатии:
    1.482
    как это называет яндекс - это их проблема.

    формат данных, в котором они это делают называется XML и тому подтверждение эта часть кода:
    PHP:
    echo '<?xml version="1.0" encoding="utf-8"?>