Сохранить
Сохраняем
  • 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 Чтобы обновленные данные пришли в письме, необходимо изменить статус заказа. После этого клиенту поступит письмо с обновленными данными.

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