• A
    alexanderr

    Случайно зашел на этот форум и увидел что многих интересует как реализовать Список доставки в виде radio-списка.
    Я этот способ реализовал очень давно и уже не помню деталей. Показываю код для реализации этой фишки. Не спрашивайте как и зачем. Просто изучите код сравните со своим и внедряйте.
    У меня задача была такая: сделать список доставки и список способов оплаты в виде блоков (с заголовками и иконками). Именно выбор через radio позволили реализовать идею. Вот что получилось http://timotrader.ru/oformlenie-zakaza

    Вызов shkOptions

    [!shkOptions?
    &get=`delivery,payments`
    &post_name=`shk_delivery,payment`
    &toPlaceholders=`1`
    &pl_prefix=`shkopt_`
    &tpl=`select_option_2`
    ]]
    

    // tpl select_option_2

    <label class="op_[[+name]]">
    <input name="[[+name:is=`delivery`:then=`shk_delivery`:else=`payment`]]" type="radio" value="[[+value]]" [[+checked]] ><span>[[+label]]
    <div>
    	[[+value:is=`Доставка курьером (по Москве)`:then=`<i class="fa fa-truck" aria-hidden="true"></i>`]]
            [[+value:is=`Доставка курьером до ПВЗ (по России)`:then=`<i class="fa fa-truck" aria-hidden="true"></i>`]]
    	[[+value:is=`Самовывоз (Москва)`:then=`<i class="fa fa-archive" aria-hidden="true"></i>`]]
    	[[+value:is=`Наличными при получении`:then=`<i class="fa fa-rub" aria-hidden="true"></i>`]]
    	[[+value:is=`Банковской картой`:then=`<i class="fa fa-credit-card" aria-hidden="true"></i>`]]
    	[[+value:is=`Банковской картой при получении`:then=`<i class="fa fa-tablet" aria-hidden="true"></i>`]]
    	</div></span>
    </label>
    

    // html разметка

    <div class="opt_delivery">
    	<span>Выберите способ доставки</span>
    		[[!+shkopt_delivery]]
    </div>
    <div class="opt_payment">
    	<span>Выберите способ оплаты</span>
    		[[!+shkopt_payments]]
    </div>
    

    // модифицированный код снипета shkOptions

    <?php
    /**
     * shkOptions
     * Сниппет выводит данные из конфигурации Shopkeeper
     *
     */
    
    $output = array();
    
    $get = $modx->getOption( 'get', $scriptProperties, '' );
    $post_name = explode( ',', $modx->getOption( 'post_name', $scriptProperties, $get ) );
    $get = explode( ',', $get );
    $get = array_map( 'trim', $get );
    $post_name = array_map( 'trim', $post_name );
    $tpl = $modx->getOption( 'tpl', $scriptProperties, '' );
    $toPlaceholders = $modx->getOption( 'toPlaceholders', $scriptProperties, false );
    $pl_prefix = $modx->getOption( 'pl_prefix', $scriptProperties, 'shkopt_' );
    
    if( empty( $get ) ) return '';
    
    if( class_exists('Shopkeeper') ){
        
        $config = Shopkeeper::getConfig( $get );
        
        //echo '<pre>' . print_r( $config, true ) . '</pre>';
        
        if( !empty( $config ) ){
            
            foreach( $get as $index => $opt_name ){
                
                if( !empty( $config[ $opt_name ] ) ){
                    
                    $output[ $opt_name ] = '';
                    
                    foreach( $config[ $opt_name ] as $key => $conf ){
                        
                        if( empty( $conf['value'] ) ){
                            $conf['value'] = $conf['label'];
                        }
                        if( empty( $conf['name'] ) ){
                            $conf['name'] = $opt_name;
                        }
                        $conf['checked'] = ( isset( $post_name[$index] ) && isset( $_POST[ $post_name[$index] ] ) && $_POST[ $post_name[$index] ] == $conf['value'] ? 'checked="checked"' : '' );
                        
                        $output[ $opt_name ] .= $modx->getChunk( $tpl, $conf ) . PHP_EOL . "\t";
                        
                    }
                    
                }
                
            }
            
        }
        
    }
    
    if( $toPlaceholders ){
        
        foreach( $output as $pl_name => $out ){
            $modx->setPlaceholder( $pl_prefix . $pl_name, $out );
        }
        
        $output = array();
        
    }
    
    return implode( '', $output );
    

    написал в Поддержка Читать далее
  • A
    alexanderr

    Разобрался сам. Оказывается недостаточно просто изменить номер последнего заказа в таблице, а необходимо скопировать в таблицах shopkeeper3_orders и shopkeeper3_purchases строку с последним заказом и присвоить новому заказу свой номер. Номер заказ, естественно, должен совпадать в обеих таблицах.

    написал в Поддержка Читать далее
  • A
    alexanderr

    Добрый день.
    Кто-нибудь знает как в shopkeeper3 изменить номер заказа? Сейчас номер заказа допустим 420, нужно чтобы следующие за ним заказы были от 800 или 1420. Пробовал менять номера последних заказов в таблице shopkeeper3_orders и shopkeeper3_purchases. Не помогло. Новые заказам присваивается старая последовательность.

    написал в Поддержка Читать далее
  • A
    alexanderr

    Добрый день.
    Вопрос больше к @Andchir, т.к. его плагин. Но если кто знает решение, буду благодарен.
    Есть плагин "Подарочные карты и скидки". Все работает отлично, и скидка применяется. В управлении заказами, общая сумма заказа показывается верно.
    0_1486731409661_2017-02-10_15-56-26.png .
    Но, если открыть подробное описание заказа, там общая сумма заказа показывается без учета скидки.

    0_1486731520661_2017-02-10_15-58-19.png

    Так и должно быть? Или это все же ошибка? И если это ошибка, как ее исправить?
    Спасибо.

    написал в Поддержка Читать далее
  • A
    alexanderr

    Поставьте знак "-" перед ценой. Иначе говоря поставьте минус.

    написал в Документация Читать далее
  • A
    alexanderr

    Действительно, спасибо.
    @Gulik, Tinkoff рекомендует логировать все входящие параметры. Считаю, что нужно обязательно добавить логирование.
    Вот пример того, как я это делаю. Код очень кривой, но работает.

    // логирование
    class Logger {
     
    	protected $fh;
     
    	public function __construct() {
    		$this->fh = fopen('core/logs/log.log', 'a+');
    	}
     
    	public function log($msg) {
    		if(!$this->fh) {
    			throw new Exception('Unable to open log file for writing');
    		}
    		if(fwrite($this->fh, $msg . "\n") === false) {
    			throw new Exception('Unable to write to log file.');
    		}
    	}
     
    	public function __destruct() {
    		fclose($this->fh);
    	}
    }
     
    $logger = new Logger();
    $logger->log(date('m-d-Y H:i:s') . ' ' . $_SERVER['REMOTE_ADDR']);
    $logger->log('$_POST: ' . print_r($_POST, true));
    $logger->log('$_GET: ' . print_r($_GET, true));
    

    Я его вставил перед проверкой токена. Предлагаю вам включить логирование в ваш снипет. Если получится, прошу вас поделиться кодом того, что получилось.

    написал в Недокументированные решения отдельных задач Читать далее
  • A
    alexanderr

    @anton83 Совершенно верно. В чанке письма должно отражаться ваше поле tracking_num.

    написал в Поддержка Читать далее
  • A
    alexanderr

    @anton83 Чтобы обновленные данные пришли в письме, необходимо изменить статус заказа. После этого клиенту поступит письмо с обновленными данными.

    написал в Поддержка Читать далее
  • A
    alexanderr

    @atrox Часть старого форума безвозвратно похерилась. И web.archive.org здесь не поможет. Вы бы сами попробовали открыть любую тему в форуме из под web.archive.org!

    написал в Поддержка Читать далее
  • A
    alexanderr

    Кто-нибудь знает как реализовать блок "Недавно просмотренные товары"? На старом форуме была информация. Но старый форум...

    написал в Поддержка Читать далее
  • A
    alexanderr

    @slaad Пару лет назад, мне потребовалось сделать обычный интернет магазин. На тот момент, я обладал знаниями только в HTML, очень поверхностно JavaScript и так-же PHP. После прочтения кучи отзывов и мнений, решил сделать магазин на OpenCart (OcStore). Кстати, кто-то однажды заметил что OpenCart это не так CMS, как оболочка для интернет магазина. В общем, установил начал разбираться и углубляться. Установил тему, стал вносить изменения. Чем больше углублялся в создание интернет магазина, тем больше требовалось специфических плагинов, таких как импорт/эскпорт товаров, раздел "Блог(Новости)", фильтры для товаров, и т.д. Все эти типовые плагины можно найти. Но все они прекрасно устанавливаются на стандартную тему. Если же тема не стандартная, возникают проблемы. Приходилось много времени тратить на подгонку плагинов к теме.
    В итоге все сделал. Магазин прекрасно работал.
    Через некоторое время потребовалось сделать еще один магазин. К тому времени я уже познакомился с MODX. И решил делать магазин на MODX. Я потратил очень много времени на изучение Shopkeeper, сниппетов, плагинов. Подтянул знания в PHP и JS. И сделал то, что не смог бы сделать на OpenCart. Кто-то где-то сказал, что на MODX можно сделать все! Были бы знания и время. Мне очень нравится MODX, потому как здесь можно легко реализовать очень много классных идей возникающих у тебя в голове, или голове заказчика или просто следуя тенденциям. Добавлять на сайт новые фишки.

    Я сделал вывод. Если нужно быстро сделать простой интернет-магазин без заморочек и всяких доделок, то необходимо делать на OpenCart.
    Но, если вы хотите нечто большее, то только MODX.

    На счет безопасности и обсуждаемой всеми темы критической уязвимости MODX. Я думаю, что любую систему можно взломать. Modx, OpenCart, WP, Bitrix и т.д. Всегда будут люди, которые будут находить дыры. Эти дыры будут закрываться рано или поздно. Это круговорот. И от него не уйти. Многие так испугались и стали думать на какую CMS переходить))). Вы думаете, другая CMS лучше? Та уязвимость, которая найдена, вскоре будет устранена. Так что не стоит так переживать.
    Кстати на тему безопасности OpenCart. Некоторое время назад заметил что сайт на котором сделан OpenCart открывается по 10 сек. А в админку вообще доступа нет!!! Начал гуглить. Оказалось что в исходном коде, был некий баг, который заставлял сайт кучу раз обращаться на сторонний сервер. Проблему решил по инструкции, удалив часть плохо кода.
    Я к чему это? Да к тому, что нет идеальной системы. Везде есть плюсы и минусы.

    написал в MODX - Вопросы и обсуждения Читать далее
  • A
    alexanderr

    Покажите чанк формы которую заполняет покупатель при оформлении заказа.

    написал в Поддержка Читать далее
  • A
    alexanderr

    Все получилось. Если кому интересно как реализовать выбор способа доставки и выбор способа оплаты используя radio button через сниппет "shkOptions", пишите - помогу.

    написал в Поддержка Читать далее
  • A
    alexanderr

    @rebroff Как все решилось? Столкнулся с той же проблемой. значение выбранного инпута не записывается. Покажите код tpl сниппета shkOptions

    написал в Поддержка Читать далее
  • A
    alexanderr

    Добрый день.
    Произвожу интеграцию сервиса Яндекс доставка с SHK3. Данные типа номер заказа, контактные данные, общая сумма заказа получилось интегрировать. Проблема возникла с передачей списка покупок.
    Вот как беру данные одного заказа одного товара

    $purchases = $modx->getCollection('shk_purchases', array('order_id' => $order->id));
    foreach ($purchases as $p) {
       $tovar = $p->get('name');
       $tovprice = $p->get('price');
       $count = $p->get('count');
    }
    

    Вот куда его необходимо вставить

    $data['order_items'] = array
        (
            0 => array
            (
    		'orderitem_article' => '', //Артикул товара. Значение содержится в массиве order_items. Example: GHY1234. String
            'orderitem_name' => $tovar, //Наименование товара. Значение содержится в массиве order_items. Example: Товар. String
            'orderitem_quantity' => $count, //Количество товара. Значение содержится в массиве order_items. Example: 1. String
            'orderitem_cost' => $tovprice, //Стоимость одной единицы товара. Значение содержится в массиве order_items. Example: 1000.
            ),        
        );
    

    Без проблем передаю информацию если товар один. Но если в заказе 2 товара или более, то передается информация только о последнем товаре. Я понимаю что проблема в неправильной конструкции массива. Я не силен в массивах и прошу вас помочь.
    Как правильно вставить в массив $data['order_items'] информацию о всех товарах из заказа?

    написал в Поддержка Читать далее