1. Уважаемые пользователи, прежде чем ответить в теме или создать новую,
    внимательно ознакомьтесь с правилами раздела

    Кому лень работать или руки не оттуда - пользуйтесь услугами специалистов
  2. Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.."

    Есть JED!!! Ищите там!!!

Помощь Повторение записи с одним ID

Тема в разделе "Joomla", создана пользователем LaEDGE, 27 сен 2011.

Информация :
  • Уважаемые пользователи, прежде чем ответить в теме или создать новую, внимательно ознакомьтесь с правилами раздела
  • Не задавайте глупых вопросов "Посоветуйте какой-нибудь компонент.." Есть JED!!! Ищите там!!!
  • Аналоги ищите там же - на JED!!!
  • Новая версия? - У кого будет - тот выложит!
Статус темы:
Закрыта.
Модераторы: arman29, DMS, Genk0, NightHunter
  1. LaEDGE

    LaEDGE Создатель

    Регистр.:
    24 июл 2009
    Сообщения:
    27
    Симпатии:
    0
    Здравствуйте, экспортирую в эксель список заказов виртуемарт, по средством такого кода:

    PHP:
    $cfg_url 'www.mysite.ru';
    header('Content-Type: text/x-csv; charset=utf-8');
    header("Content-Disposition: attachment;filename=".date("d-m-Y")."-otchet.xls");
    header("Content-Transfer-Encoding: binary ");
    echo 
    '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf8" />
    <meta name="author" content="mysite" />
    <title>Отчет для бухгалтерии</title>
    </head>
    <body>'
    ;
    echo 
    '<table border="1"><tr><th>Порядковый номер заказа</th><th>&nbsp;</th><th>Номер заказа</th><th>Название товара</th><th>Кол-во товара</th><th>Цена единицы без НДС</th><th>Стоимость заказа без НДС</th><th>НДС</th><th>Стоимость заказа с НДС</th><th>НАЛ./БЕЗНАЛ.</th><th>Имя</th><th>Название организации</th><th>Телефон первый</th><th>Телефон второй</th><th>email</th><th>Адрес</th><th>Статус заказа</th><th>Комментарий покупателя</th><th>Время заказа</th><th>Артикул товара</th><th>Название прайса товара</th><th>ip покупателя</th><th>Адрес страницы товара в интернет</th></tr>';
    include 
    'configuration.php';
    $cfg = new JConfig();





    $hostname                 $cfg->host;
    $username                 $cfg->user;
    $password                 $cfg->password;
    $dbName                 $cfg->db;


    mysql_connect($hostname,$username,$password) OR DIE("Не могу создать соединение ");
    mysql_select_db($dbName) or die(mysql_error());
    mysql_query('set names utf8');
    $query ="
    SELECT * FROM jos_vm_orders
    LEFT JOIN jos_vm_order_item  ON  jos_vm_order_item.order_id = jos_vm_orders.order_id
    LEFT JOIN jos_vm_product ON jos_vm_product.product_id = jos_vm_order_item.product_id
    LEFT JOIN  jos_vm_product_category_xref ON jos_vm_product_category_xref.product_id = jos_vm_order_item.product_id
    LEFT JOIN jos_vm_order_payment ON jos_vm_order_payment.order_id = jos_vm_order_item.order_id
    LEFT JOIN jos_vm_user_info ON jos_vm_user_info.user_id = jos_vm_orders.user_id
    "
    ;
    $row d2a($query);
    $product_log = Array();
    for(
    $i=0;$i<count($row);$i++) {
    if (
    $row[$i]['payment_method_id'] == 20) {
    $payment_method_id="Наличными курьеру при получении"; } 
    else {
    $payment_method_id="Безналичный расчет"; } 
    if (
    $row[$i]['order_status'] == "P") {
    $status="В обработке"; } 
    $product_cat_id $row[$i]['category_id'];
    if (
    $product_cat_id == 695) {
    $price="uti-note"; }
    if (
    $product_cat_id == 696) {
    $price="uti-projector"; }
    if ( 
    $product_cat_id <= 694) {
    $price="Основной прайс";
    }
    $date strftime("%d.%m.%Y"$row[$i]['mdate']);
    $price_without_nds=$row[$i]['product_item_price']-$row[$i]['product_item_price']*18/100;
    $zakaz_without_nds=$row[$i]['product_final_price']-$row[$i]['product_final_price']*18/100;
    $url="http://$cfg_url/index.php?page=shop.product_details&flypage=flypage_new.tpl&product_id=".$row[$i]['product_id']."&option=com_virtuemart";

    echo   
    "<tr><td>".$row[$i]['order_item_id']."</td><td>&nbsp;</td><td>".$row[$i]['order_id']."</td><td>".$row[$i]['order_item_name']."</td><td>".$row[$i]['product_quantity']."</td><td>".$price_without_nds."</td><td>".$zakaz_without_nds."</td><td>18%</td><td>".$row[$i]['product_final_price']."</td><td>".$payment_method_id."</td><td>".$row[$i]['first_name']."</td><td>".$row[$i]['company']."</td><td>".$row[$i]['phone_1']."</td><td>".$row[$i]['phone_2']."</td><td>".$row[$i]['user_email']."</td><td>".$row[$i]['address_1']."</td><td>".$status."</td><td>".$row[$i]['customer_note']."</td><td>".$date."</td><td>".$row[$i]['product_sku']."</td><td>".$price."</td><td>".$row[$i]['ip_address']."</td><td>".$url."</td></tr>";
    }
    function 
    d2a($query){
        
    $result mysql_query($query) or die("Query failed : " mysql_error());
        while (
    $line mysql_fetch_array($resultMYSQL_ASSOC)) {$res[] = $line;}
        
    mysql_free_result($result);
        return 
    $res;
    }
    echo 
    "</table></body></html>";

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

    Заранее благодарен за помощь
     
  2. septor

    septor Постоялец

    Регистр.:
    25 июн 2011
    Сообщения:
    131
    Симпатии:
    12
    Возможно тут проблема в цикле - "while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {$res[] = $line;}".
    Дальше у тебя простой цикл for, который опирается на количество полученных данных из функции, так что там не дублирует.

    Попробуй просто проверить, что вернула функция - print_r($row);, и если там будет дубляж, то однозначно надо копать функцию.
     
  3. LaEDGE

    LaEDGE Создатель

    Регистр.:
    24 июл 2009
    Сообщения:
    27
    Симпатии:
    0
    Действительно, в цикле while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) {$res[] = $line;} выводятся дубликаты, но с чем это может быть связано, учитывая, что такой же точно скрипт экспортирует товары и дубликатов там нет
     
  4. septor

    septor Постоялец

    Регистр.:
    25 июн 2011
    Сообщения:
    131
    Симпатии:
    12
    Не могу по этому поводу не чего сказать, я не большой спец в пхп и мускульных запросах. Возможно, есть какая ошибка в этой строке цикла, возможно в базе заказы продублированы, возможно запрос к базе данных с ошибкой.

    Сказать честно, такого вида получения данных из базы для джумлы я не встречал, обычно это делается встроенными средствами, типа такого:
    PHP:
    $query "
    SELECT * FROM jos_vm_orders
    LEFT JOIN jos_vm_order_item  ON  jos_vm_order_item.order_id = jos_vm_orders.order_id
    LEFT JOIN jos_vm_product ON jos_vm_product.product_id = jos_vm_order_item.product_id
    LEFT JOIN  jos_vm_product_category_xref ON jos_vm_product_category_xref.product_id = jos_vm_order_item.product_id
    LEFT JOIN jos_vm_order_payment ON jos_vm_order_payment.order_id = jos_vm_order_item.order_id
    LEFT JOIN jos_vm_user_info ON jos_vm_user_info.user_id = jos_vm_orders.user_id
    "
    ;
    $db->setQuery$query );
    $rows $db->loadObjectList();
    ...
    foreach (
    $rows as &$row) {
    $i++;
    if (
    $row[$i]['payment_method_id'] == 20) { 
    ...
    }
    }
    Попробуй переделать весть твой вариант по приведённому примеру, и думаю ошиок не будет больше. Если примера не остаточно, открой любой компонент или модуль джумлы, и посмотри как там идёт получение данных из базы. Возьми к примеру получение из базы список категорий или список ещё чего, из имеющихся расширений.
     
Статус темы:
Закрыта.