Последние темы


Как парсить количество товаров в корзине?

  • Делаю смс уведомления для shopkeeper3.
    Всё это дело работает через хук в formIt, код которого пишу снизу.

    <?php
    global $phone;
    global $name;
    global $email;
    global $message;
    global $payment;
    global $shk_delivery;
    global $address;
    
    $phone = $hook->getValue('phone');
    $name = $hook->getValue('fullname');
    $email = $hook->getValue('email');
    $message = $hook->getValue('message');
    $payment = $hook->getValue('payment');
    $shk_delivery = $hook->getValue('shk_delivery');
    $address = $hook->getValue('address');
    
    global $zakaz;
    
    require_once $modx->getOption('core_path') . "components/shopkeeper3/model/shopkeeper.class.php";
    
    $shopCart = new Shopkeeper($modx, $scriptProperties, true);
    
            $shk_data = array(
                'price_total' => number_format(Shopkeeper::$price_total, 2, '.', ''),
                'items_total' => Shopkeeper::$items_total,
                'items_unique_total' => Shopkeeper::$items_unique_total,
                'delivery_price' => $delivery_price,
                'delivery_name' => $delivery_name,
                'ids:' => $shopCart->getProdIds()
            );
    
    $col = $shk_data['items_total'];
    $sum = $shk_data['price_total'];
    $zakname = '';
    foreach ( $shk_data["ids:"] as $key => $value ) {
        $resource = $modx->getObject('modResource',$value);
        $title = $resource->get('pagetitle');
        $zakname = $zakname . $title . '.';
    }
    global $zakaz;
    $zakaz = str_replace (' ', '%20', $zakname);
    
    global $phone;
    $phone = str_replace (' ', '%20', $phone);
    
    global $name;
    $name = str_replace (' ', '%20', $name);
    
    global $email;
    $email = str_replace (' ', '%20', $email);
    
    global $message;
    $message = str_replace (' ', '%20', $message);
    
    global $shk_delivery;
    $shk_delivery = str_replace (' ', '%20', $shk_delivery);
    
    global $address;
    $address = str_replace (' ', '%20', $address);
    
    global $payment;
    $payment = str_replace (' ', '%20', $payment);
    
    
    
    
    
    $tot = 'Всего:%20'. $col .'%20шт.';
    $tot_sum =  'На%20сумму:'.$sum.'руб.';
    $zakaz = $zakaz . $tot . $tot_sum;
    global $zakaz;
    
    function sendSMS()
    {
        global $phone;
        global $name;
        global $email;
        global $message;
        global $payment;
        global $shk_delivery;
        global $address;
        global $zakaz;
        
        $result = @file_get_contents('http://bytehand.com:3800/send?id=27907&key=4FB570CE82E0B665&to=79231588266&from=test&text='.$zakaz.'%20От%20-%20'.$name.'.%20Номер%20-%20'.$phone.'.%20Адрес%20-%20'.$address.'.%20Доставка%20-%20'.$shk_delivery.'.%20Оплата%20-%20'.$payment.'.%20Почта%20-%20'.$email.'.%20Примечание%20-%20'.$message);
        echo $result;
        if ($result === false)
            return false;
        else
            return true;
    }
    sendSMS("79231588266", "Test");
    
    header('Location: http://doca-pizza.ru/spasibo.html');
    

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

  • Оффтопом, редактирование не работает, я сразу хотел отредактировать. И ошибка "Вы можете редактировать запись только в течение 15 мин. после публикации."

  • Кстати, код желательно бы поправить (или убрать его с глаз долой, чтобы другие не использовали). Все global надо убрать, в них нет необходимости. Передавайте переменные, которые нужны внутри функции sendSMS(), как аргументы. Можно сделать один аргумент - массив.

    sendSMS("79231588266", "Test");
    

    Тут вы передаете данные, но внутри функции их не используете.
    Пример:

    function sendSMS( $options )
    {
        //код функции, использующий данные из массива $options
    }
    
    $options = array(
        'phone' => $phone,
        'name' => $name,
        'email' => $email
        // и так далее
    );
    
    sendSMS( $options );
    
  • @Andchir Большое спасибо за подсказку с массивом, можно хорошо оптимизировать код.
    А тот код, что вы скинули выше, я уже видел. Страница не загружается с оператором Public.
    Без него пустоту выдает, если код вызвать просто через сниппет.
    Если через хук, то при отправке заказа ошибка появляется, сайт вообще не загружается.
    Может попробуете у себя, наверняка давно не тестили.. :)) Буду очень благодарен.

  • По идее, после подключения класса Shopkeeper и создания объекта вам должны быть доступны все методы, т.е. можно просто вот так сделать:

    $purchases = $shopCart->getPurchases( $order_id )
    

    Только не знаю, где у вас $order_id заказа, хотя это вроде основной параметр.

  • Участник @slaad написал в Как парсить количество товаров в корзине?:

    $purchases = $shopCart->getPurchases( $order_id )

    C такой строчкой сайт не загружается.

    Давайте посмотрим на минимальном простом примере:

    require_once $modx->getOption('core_path') . "components/shopkeeper3/model/shopkeeper.class.php";
    
    $shopCart = new Shopkeeper($modx, $scriptProperties, true);
    
    $shk_data = array(
        'price_total' => number_format(Shopkeeper::$price_total, 2, '.', ''),
        'items_total' => Shopkeeper::$items_total,
        'items_unique_total' => Shopkeeper::$items_unique_total,
        'delivery_price' => $delivery_price,
        'delivery_name' => $delivery_name,
        'ids:' => $shopCart->getProdIds()
    );
            
    print_r ($shk_data);
    

    Получаем следующее:

    Array ( [price_total] => 1700.00 [items_total] => 3 [items_unique_total] => 2 [delivery_price] => [delivery_name] => [ids:] => Array ( [0] => 129 [1] => 128 ) )
    

    ID так хорошо выводятся, так бы и количество каждого товара))

    Для наглядности скрин:

    alt text

  • Такое ощущение, что надо вытаскивать количество скриптом и отправлять в php. Но этот план я оставил на крайний случай.

  • Помогли ребята из поодержки bytehand.

    Таком вот кодом:

    $zakname = '';
    $purchases = !empty($_SESSION['shk_order']) ? $_SESSION['shk_order'] : array();
    if ($purchases) {
        foreach ($purchases as $p) {
            $zakname .= $p['name'] . ":" . $p['count'] . "; ";
        }
    }
    
  • Участник @kostya_slam написал в Как парсить количество товаров в корзине?:

    $purchases = $shopCart->getPurchases( $order_id )

    C такой строчкой сайт не загружается.

    Он и не будет загружаться ведь нужно $order_id передать...

    Ладно, нашли решение и отлично, через год перепишите))

 

Последние комментарии

  • а редактируются они через CMP

    Покажите скриншот. Не понял что за CMP. Но если и не подвязаны, оставьте значение, которое было.
    Вот мой скриншот:
    0_1565682115311_screenshot_179.png

    Читать далее
  • D

    Участник @Andchir написал в Экспорт/импорт данных из таблиц пакетов MIGX db через плагин CatalogFill:

    MIGXDB

    какие родители в элементах migx db?
    это элементы, которые к ресурсам никак не подвязаны!
    а редактируются они через CMP

    Читать далее
  • //Название поля ID родителя $cf_config['parent_field'] = false;

    Почему так? В MIGXDB документы должны иметь родителя. Иначе как вы их добавляете/редактируете в админке?

    Читать далее
  • D

    отключил, очистил
    далее http://joxi.ru/12MEdEvtloelG2 -> http://joxi.ru/VrwXwXZt7RN7Mm
    в журнале ошибок - пусто
    код настройки

    <?php //Название класса таблицы товаров в БД $cf_config['className'] = 'delivery_flight'; //Название пакета таблицы товаров в БД $cf_config['packageName'] = 'delivery_schedule'; //Название поля ID родителя $cf_config['parent_field'] = false; //разбивка по столбцам при импорте и экспорте (content|tv|category) $cf_config['content_row'] = array( array('ID',array('id','content')), array('Наименование',array('name','content')), array('Время',array('time','content')), array('Откуда',array('from','content')), array('Время в пути',array('duration','content')), array('Куда',array('to','content')), array('Время прибытия',array('arrival_time','content')), array('Стоимость',array('price','content')), array('Тариф',array('delivery_rate_id','content')), array('Сортировка',array('sort','content')), ); //значения по умолчанию при импорте или проверка при экспорте $cf_config['imp_content_default'] = array( 'content' => array( 'deleted' => 0, 'published' => 1, //'template' => 9 'createdon' => strtotime("now") //'publishedon' => strtotime("now") //'pub_date' => strtotime("now") //'editedby' => 1 //'editedon' => strtotime("now") ), 'tv' => array( //7 => 0 ) ); //первая строка - названия полей $cf_config['include_captions'] = true; //число товаров импортируемых за один раз (загрузка по группам). 0 - не ограничивать. $cf_config['batch_import'] = 300; //разбивать по категориям $cf_config['include_categories'] = false; //удалять дочерние категории при очистке и обновлении каталога $cf_config['delete_subcategories'] = true; //по какому полю проверять соответствие товара при обновлении. false - не проверять (очистка категории при обновлении). $cf_config['imp_chk_field'] = false; //проверять соответствие товара при обновлении по значению TV. Указать ID TV. false - не проверять (очистка категории при обновлении). $cf_config['imp_chk_tvid_val'] = false; //Добавлять товары, которые не найдены при обновлении по TV (imp_chk_tvid_val) или полю (imp_chk_field) $cf_config['imp_if_not_exist'] = true; //удалять HTML-теги при экспорте $cf_config['exp_strip_tags'] = false; //автоматически генерировать псевдоним (alias) при импорте //false - выключено; true - генерировать с переводом в транслит; 'notranslit' - генерировать без перевода в транслит. $cf_config['imp_autoalias'] = false; //Изменить значения поля для всех вложенных товаров до начала импорта. //Например можно отменить публикацию для всех товаров и публиковать только те, которые есть в новом прайс-листе. //первый массив - какие поля и на какие значения менять, второй массив - условия которые нужно проверять (можно сделать пустым) $cf_config['imp_before_change'] = false;//'[{"tv.inventory":0},{}]';//'[{"published":0},{"tv.pricename":"Поставщик1"}]';//false - для отмены //удалить файл после экспорта (скачивания) $cf_config['exp_delete_file'] = false; //кодировка CSV-файла при экспорте $cf_config['exp_csv_charset'] = 'UTF-8'; //'windows-1251' //Импортировать (обновлять) пустые значения $cf_config['imp_empty'] = true; //Имя файла процессора, который использовать для импорта. Если пусто, используется стандартный процессор "import". $cf_config['imp_custom_processor'] = ''; //путь (xpath) в XML структуре до товаров $cf_config['imp_xml_itemsparent_path'] = '';//'/catalog/shop/offers'; //Структура XML файла для импорта $cf_config['imp_xml_structure'] = ''; //тестирование конфигурации (без записи в БД). Отчёты -> Журнал ошибок. $cf_config['imp_testmode'] = true; //функция для фильтрации значений при ИМПОРТЕ function filter_import($value_arr){ $output_arr = $value_arr; /* if(isset($output_arr['content']['pagetitle'])) $output_arr['content']['pagetitle'] = mb_strtoupper($output_arr['content']['pagetitle'], 'UTF-8'); */ return $output_arr; } //функция для фильтрации значений при ЭКСПОРТЕ function filter_export($value_arr,$doc_id=0){ $output_arr = $value_arr; //var_dump($value_arr,$output_arr); //exit; /* if(isset($output_arr['price'])) $output_arr[1] = floatval($output_arr[1]) - 200; */ return $output_arr; } ?>

    shema пакета, для которого написана настройка

    <model package="delivery_schedule" baseClass="xPDOObject" platform="mysql" defaultEngine="MyISAM" version="1.1"> <object class="delivery_rate" table="delivery_rates" extends="xPDOSimpleObject"> <field key="name" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="color" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="desc" dbtype="text" phptype="string" null="false" default="" /> <field key="sort" dbtype="int" precision="10" phptype="integer" null="false" default="500"/> <field key="deleted" dbtype="tinyint" precision="1" attributes="unsigned" phptype="integer" null="false" default="0" /> <field key="published" dbtype="tinyint" precision="1" attributes="unsigned" phptype="integer" null="false" default="1" /> <field key="createdon" dbtype="datetime" phptype="datetime" null="true"/> </object> <object class="delivery_flight" table="delivery_flights" extends="xPDOSimpleObject"> <field key="name" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="from" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="time" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="duration" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="to" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="arrival_time" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="price" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="sort" dbtype="int" precision="10" phptype="integer" null="false" default="500"/> <field key="delivery_rate_id" dbtype="int" precision="10" phptype="integer" null="false" default="0"/> <field key="deleted" dbtype="tinyint" precision="1" attributes="unsigned" phptype="integer" null="false" default="0" /> <field key="published" dbtype="tinyint" precision="1" attributes="unsigned" phptype="integer" null="false" default="1" /> <field key="createdon" dbtype="datetime" phptype="datetime" null="true"/> <aggregate alias="Delivery_rate" class="delivery_rate" local="delivery_rate_id" foreign="id" cardinality="one" owner="foreign" /> </object> </model>

    Читать далее