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


Кэшируется корзина shopkeeper3

  • Я не грубил, а только указал, что вы слишком много хотите. Зачем вы мне предлагаете доступ к админке, чтобы я за вас там всё сделал, а Вы не утруждали себя предоставлением информации? Задавайте конкретный вопрос и ждите ответа. Если вопросов много, то лучше их пронумеровать.

    Если ваш компонент некорректно работает

    Я открыл ваш сайт и первое, что увидел, это JS ошибки, которые не относятся к шопкиперу, а относятся к какому-то слайдеру. То, что у вас локально всё работает, а на сервере не работает для меня эта информация лишняя, она ничего не дает.

  • Здравствуйте, проблему с кешированием решил. Но столкнулся с другой проблемой. Не появляются заказы в "Управление заказами" и на почту приходят полупустые сообщения (http://prntscr.com/n73fc2). Не передаются параметры: "[[+orderID]]" и "[[+orderOutputData]]". В админке в заказх тоже пусто.
    Товары в корзину добавляются, корзина наполняется, на страницу оформления заказа переходит, после заполнения формы, редиректит на страницу "Спасибо за заказ". Письмо приходит (скрин выше). Но в админке пусто и пустые поля в письме на почте

    Страница оформления заказа: http://prntscr.com/n73h47
    ShopOrderForm: http://prntscr.com/n73hf8
    ShopOrderReport:http://prntscr.com/n73hun
    Большая корзина (bigCart):http://prntscr.com/n73i6a
    Что-нибудь еще скинуть?
    Подскажите, пожалуйста, в чем ошибка
    Ссылка на сайт belvinograd.by
    Заранее спасибо!!

  • Здравствуйте, проблему с кешированием решил.

    Как решили можете поделиться? Недавно тоже такое видел.

    Не появляются заказы в "Управление заказами" и на почту приходят полупустые сообщения

    Нужно проверить сниппет "shk_fihook". Вроде он по умолчанию статичный, но, если у вас изменено название папки "core", то могут быть проблемы. Нужно сделать этот сниппет не статичным, вставить код и сохранить.

  • @Andchir На самом деле ничего сверхъестественного. Действовал так, как Вы советовали.

    1. Сначала убрал session_handler_class
    2. Отключил плагин LastModified

    Вот что еще попробовал:

    1. Отключал кэшируемость чанков
    2. Отключал кэшируемость вообще (в системных настройках)

    Все равно ничего не помогало
    Потом поменял версию php (у меня на хостинге можно от 5.3 до 7 переключать), очистил core (cache), переподключил базу данных и заработало.

  • @Andchir Залез в сниппет shk_fihook (я кстати в нем ничего не менял и не трогал, так как в php не силен). Путь вроде бы корректный, сниппет не статичный: http://prntscr.com/n79f3s
    Вот где находится сам шопкипер: http://prntscr.com/n79fna (вроде все стандартно.

    Код сниппета (еще раз повторюсь ничего не трогал):

    <?php
    /**
     * FormIt hook for Shopkeeper 3.x
     */
    
    //ini_set('display_errors',1);
    //error_reporting(E_ALL);
    
    $output = false;
    
    if(!defined('SHOPKEEPER_PATH')){
        define('SHOPKEEPER_PATH', MODX_CORE_PATH."components/shopkeeper3/");
    }
    
    //Определяем параметры сниппета Shopkeeper
    $sys_property_sets = $modx->getOption( 'shk3.property_sets', $modx->config, 'default' );
    $sys_property_sets = explode( ',', $sys_property_sets );
    $propertySetName = trim( current( $sys_property_sets ) );
    
    $snippet = $modx->getObject('modSnippet',array('name'=>'Shopkeeper3'));
    $properties = $snippet->getProperties();
    if( $propertySetName != 'default' && $modx->getCount( 'modPropertySet', array( 'name' => $propertySetName ) ) > 0 ){
        $propSet = $modx->getObject( 'modPropertySet', array( 'name' => $propertySetName ) );
        $propSetProperties = $propSet->getProperties();
        if(is_array($propSetProperties)) $properties = array_merge($properties,$propSetProperties);
    }
    
    $lang = $modx->getOption( 'lang', $properties, 'ru' );
    $modx->getService( 'lexicon', 'modLexicon' );
    $modx->lexicon->load( $lang . ':shopkeeper3:default' );
    
    if( !empty( $_SESSION['shk_order'] ) ){
        
        require_once SHOPKEEPER_PATH . "model/shopkeeper.class.php";
        $shopCart = new Shopkeeper( $modx, $properties );
        
        $modx->addPackage( 'shopkeeper3', SHOPKEEPER_PATH . 'model/' );
        
        //shopkeeper settings
        $contacts_fields = array();
        $response = $modx->runProcessor('getsettings',
            array( 'settings' => array('contacts_fields') ),
            array( 'processors_path' => $modx->getOption( 'core_path' ) . 'components/shopkeeper3/processors/mgr/' )
        );
        if ($response->isError()) {
            echo $response->getMessage();
        }
        if($result = $response->getResponse()){
            
            $temp_arr = !empty( $result['object']['contacts_fields'] ) ? $result['object']['contacts_fields'] : array();
            if( !empty( $temp_arr ) ){
                
                foreach( $temp_arr as $opt ){
                    
                    $contacts_fields[$opt['name']] = $opt;
                    
                }
                
            }
            
        }
        
        $userId = $modx->getLoginUserID( $modx->context->key );
        if( !$userId ) $userId = 0;
        
        //Контактные данные
        $contacts = array();
        $allFormFields = $hook->getValues();
        foreach( $allFormFields as $key => $val ){
            
            if( in_array( $key, array_keys( $contacts_fields ) ) ){
                
                $temp_arr = array(
                    'name' => $contacts_fields[$key]['name'],
                    'value' => $val,
                    'label' => $contacts_fields[$key]['label']
                );
                
                array_push( $contacts, $temp_arr );
                
            }
            
        }
        
        $contacts = json_encode( $contacts );
        
        $emailField = $modx->getOption( 'fiarToField', $hook->config, 'email' );
        $phoneField = $modx->getOption( 'phoneField', $hook->config, 'phone' );
        $deliveryField = $modx->getOption( 'deliveryField', $hook->config, 'shk_delivery' );
        $paymentField = $modx->getOption( 'paymentField', $hook->config, 'payment' );
        
        //Доставка
        $delivery_price = !empty( $shopCart->delivery['price'] ) ? $shopCart->delivery['price'] : 0;
        $delivery_name = !empty( $shopCart->delivery['label'] ) ? $shopCart->delivery['label'] : '';
        if( !$delivery_name ){
    	$delivery_name = !empty( $allFormFields[$deliveryField] ) ? $allFormFields[$deliveryField] : '';
        }
        
        //Сохраняем данные заказа
        $order = $modx->newObject('shk_order');
        $insert_data = array(
            'contacts' => $contacts,
            'options' => '',
            'price' => Shopkeeper::$price_total,
            'currency' => $shopCart->config['currency'],
            'date' => strftime('%Y-%m-%d %H:%M:%S'),
            'sentdate' => strftime('%Y-%m-%d %H:%M:%S'),
            'note' => '',
            'email' => isset( $allFormFields[$emailField] ) ? $allFormFields[$emailField] : '',
            'delivery' => $delivery_name,
            'delivery_price' => $delivery_price,
            'payment' => isset( $allFormFields[$paymentField] ) ? $allFormFields[$paymentField] : '',
            'tracking_num' => '',
            'phone' => isset( $allFormFields[$phoneField] ) ? $allFormFields[$phoneField] : '',
            'status' => $modx->getOption( 'shk3.first_status', null, '1' )
        );
        if( $userId ){
            $insert_data['userid'] = $userId;
        }
        $order->fromArray($insert_data);
        $saved = $order->save();
        
        //Сохраняем товары заказа
        if( $saved ){
    
            $purchasesData = $shopCart->getProductsData( true );
    
            foreach( $shopCart->data as $key => $p_data ){
    
                $options = !empty( $p_data['options'] ) ? json_encode( $p_data['options'] ) : '';
                $fields_data = !empty( $purchasesData[ $key ] ) ? $purchasesData[ $key ] : array();
                $fields_data['url'] = !empty( $p_data['url'] ) ? $p_data['url'] : '';
                unset( $fields_data['id'] );
                $fields_data_str = json_encode( $fields_data );
    
                $insert_data = array(
                    'p_id' => $p_data['id'],
                    'order_id' => $order->id,
                    'name' => $p_data['name'],
                    'price' => $p_data['price'],
                    'count' => $p_data['count'],
                    'class_name' => $p_data['className'],
                    'package_name' => $p_data['packageName'],
                    'data' => $fields_data_str,
                    'options' => $options
                );
    
                $purchase = $modx->newObject('shk_purchases');
                $purchase->fromArray( $insert_data );
                $purchase->save();
    
            }
    
            $shopCart->setOrderDataSession( $order->toArray() );
    
        }
        
        $modx->invokeEvent( 'OnSHKChangeStatus', array( 'order_ids' => array( $order->id ), 'status' => $order->status ) );
        
        $orderOutputData = $shopCart->getOrderData( $order->id );
        
        //OnSHKsaveOrder
        $evtOut = $modx->invokeEvent('OnSHKsaveOrder',array('order_id' => $order->get('id')));
        if(is_array($evtOut)) $orderOutputData .= implode('',$evtOut);
        
        $hook->setValues(array(
            'orderID' => $order->get('id'),
            'orderDate' => $order->get('date'),
            'orderPrice' => $order->get('price'),
            'orderCurrency' => $shopCart->config['currency'],
            'orderOutputData' => $orderOutputData
        ));
        
        $shopCart->request_empty( false );
        
        $output = true;
        
    }else{
        
        $hook->addError( 'error_message', $modx->lexicon('shk.order_empty') );
        $output = false;
        
    }
    
    return $output;
    
  • Может есть какой-то плагин на событие "OnSHKsaveOrder".

  • @Andchir С плагинами тоже ничего не делал:(
    Как я понял у корзины (http://prntscr.com/n7dim5) с формой отправки данных (http://prntscr.com/n7dj5q) связь есть, потому что если в корзине товаров нет и я пытаюсь ввести данные в форму и отправить их, вылазит сообщение - http://prntscr.com/n7di44
    То есть, можно предположить, что все связано корректно. Но ничего не приходит:(

  • Может происходит какая-то ошибка. Смотрите журнал ошибок и логи.

  • @Andchir Большое спасибо за наводку. Сам не додумался залезть в логи. В итоге нашел корень проблемы. После оформления заказа приходит такая ошибка:

    INSERT INTO modx_shopkeeper3_orders (contacts, options, price, currency, date, sentdate, note, email, delivery, delivery_price, payment, tracking_num, status) VALUES ('[{"name":"fullname","value":"Marcus Firespider","label":"\u0418\u043c\u044f"},{"name":"email","value":"wordbuilder1312@gmail.com","label":"\u0410\u0434\u0440\u0435\u0441 \u044d\u043b. \u043f\u043e\u0447\u0442\u044b"},{"name":"phone","value":"+375(22)222-22-22","label":"\u0422\u0435\u043b\u0435\u0444\u043e\u043d"},{"name":"message","value":"wfwf","label":"\u041a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439"}]', '', '13', 'BYN', '2019-04-05 09:24:31', '2019-04-05 09:24:31', '', 'wordbuilder1312@gmail.com', '', '0', '', '', '1')
    Array
    (
    [0] => 42S02
    [1] => 1146
    [2] => Table 'user2070964_grapedb.modx_shopkeeper3_orders' doesn't exist
    )

    За которой следует множество одинаковых строк:
    [2019-04-05 09:24:30] (ERROR @ /home/user2070964/www/belvinograd.by/core/xpdo/xpdo.class.php : 503) Path specified for package virtunewsletter is not a valid or accessible directory: /home/user2070964/www/belvinograd.by/core/components/virtunewsletter/model/

    Я понял, что таблица shopkeeper-orders не существует. Зашел в phpmyadmin и убедился: ее там действительно нет. Вероятно что-то сломалось, когда переносил файлы на хостинг. Другого объяснения найти не могу.

    Можно как-нибудь без переустановки shopkeeper добавить эту таблицу и связать ее?
    Очень не хочется все заново переустанавливать, большая работа проделана.

    Спасибо.

  • Вот запрос для создания таблицы, только проверьте префикс:

    CREATE TABLE IF NOT EXISTS `modx_shopkeeper3_orders` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `contacts` text,
      `options` text,
      `price` float DEFAULT '0',
      `currency` varchar(10) DEFAULT '',
      `date` datetime DEFAULT NULL,
      `sentdate` datetime DEFAULT NULL,
      `note` text,
      `email` varchar(40) DEFAULT '',
      `delivery` varchar(40) DEFAULT '',
      `delivery_price` float DEFAULT '0',
      `payment` varchar(40) DEFAULT '',
      `tracking_num` varchar(40) DEFAULT '',
      `status` varchar(40) DEFAULT '',
      `userid` int(10) DEFAULT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
    
  • @Andchir Добавил. Заработало. СПАСИБО! Храни Вас вселенная!

 

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

  • Документация: https://modx-shopkeeper.ru/docs/shopkeeper-3/shopkeeper-3
    Там написано какие плейсхолдеры доступны.
    Если имеется ввиду цена одного товара, то [[+price]] - это цена без доп. параметров.

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

    Такой вопрос: как вывести цену без дополнительных атрибутов? В мини-корзине.

    Читать далее
  • в категорию assets/catalogfill/files/ экспорт происходит нормально.

    Что-то в вашем сообщении всё перемешано. Папки или категории? А если папки (с файлами), то какие у них могут быть id...
    Если появляется сообщение про категорию, то это имеется ввиду категория каталога (документ MODX).

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

    Добрый день!

    Искал такой функционал в настройках или в конфигах, найти не получилось. Суть такая: клиент может загружать файлы только в media/ (Источник файлов 1 Filesystem, но есть еще один с полным доступом в корень id 4), таким образом, при загрузке файлов CatalogFill не видит файлы. Возникакет ошибка о том что нет такого каталога. Создаю его в ФС. Загрузка не происходит. в категорию assets/catalogfill/files/ экспорт происходит нормально. Есть какие-то возможности переключить именно для catalogfill возможность загрузить в четверый источник без модификации самого компонента?

    Версия последняя, производил обновление сегодня.

    Заранее благодарен.

    Читать далее