Миграция с Shopkeeper 2 на Shopkeeper 3



  • Во второй версии класс SHK.grid.orders определялся в orders.grid.js. В 3 в папке widgets лежит только shk_grid.js.
    Где искать?


  • Администраторы

    @rebroff

    Где искать?

    Зачем?



  • @Andchir у меня на сайте в таблице заказов в админке в поле ID на каждом айдишнике юзера висела ссылка, по которой можно было скачать его заказ в .txt для загрузки в 1С.
    0_1462961415932_zzzz.png
    0_1462961490381_xxxxxx.png


  • Администраторы

    Сейчас таблицу заказов можно редактировать тут:
    /core/components/shopkeeper3/templates/home.tpl

    Там есть такой участок:

    <tr ng-repeat="order in $data" ng-class="{'active': order.$selected}">
            <td class="ng-table-check" header="'ng-table/headers/checkbox.html'">
                    <span class="glyphicon glyphicon-ok" ng-click="order.$selected = !order.$selected; changeSelection(order)"></span>
            </td>
    ...
    </tr>
    

    Можно в таблицу, в <tbody>, добавить колонку:

    <td>
            <a href="[тут ваша ссылка]">{{order.id}}</a>
    </td>
    

    В <thead> тоже добавить колонку.

    <th> ID </th>
    


  • @Andchir спасибо.


  • Администраторы

    Ещё вариант создать свой рендерер для нужной колонки. Они находятся в файле
    /assets/components/shopkeeper3/mgr/js/controllers/home_controller.js

    /* renderFieldValue */
    app
    .directive('renderFieldValue', ['$compile','$rootScope',function( $compile, $rootScope ) {
    ...
    

    Там есть примеры.



  • В второй версии у меня был плагин, который менял цену товара в момент добавления в корзину в зависимости от количества товара

    $e = &$modx->event;
    $output = "";
    /*Функция для определения цены исходя из заказанного кол-ва товара*/
    function Get_Price($id,$count) {
      global $modx;
      $resource = $modx->getObject('modResource',array('id'=>$id));
      $price = $resource->getTVValue('price');
      $price_50 = $resource->getTVValue('price_50');
      $price_100 = $resource->getTVValue('price_100');
      $price_200 = $resource->getTVValue('price_200');
      $price_500 = $resource->getTVValue('price_500');
    
      if ($count < 50)  $price = $price; //скидки нет
    
      elseif ($count < 100){
      	if ($price_50 > 0) $price = $price_50; 
      }
      elseif ($count < 200){
      	if ($price_100 > 0) $price = $price_100;
      	elseif ($price_50 > 0 ) $price = $price_50;
      }
      elseif ($count < 500){
      	if 		($price_200 > 0) $price = $price_200;
      	elseif 	($price_100 > 0) $price = $price_100;
      	elseif 	($price_50 > 0) $price = $price_50;
      }
      elseif ($count >= 500){
      	if 		($price_500 > 0) $price = $price_500;
      	elseif 	($price_200 > 0) $price = $price_200;
      	elseif 	($price_100 > 0) $price = $price_100;
      	elseif 	($price_50 > 0) $price = $price_50;
      }
         return $price;
    }
    
    /*Собственно плагин, который повешен на OnSHKbeforeCartLoad*/
    if ($e->name == 'OnSHKbeforeCartLoad'){
      
      if(!empty($_SESSION['shk_purchases'])){
       
        $purchases = $_SESSION['shk_purchases'];
    
    	foreach($purchases as $key => $product){
    
    	  $id = $product['id']; 
              if (empty($id)) break;
    	  $count=$product['count'];
    		if (isset($id_tmp[$id])) {
    			$count= $id_tmp[$id]['count']+$count;
    			$uns=$id_tmp[$id]['id'];
    			unset ($_SESSION['shk_purchases'][$uns]);
    
    		} 
    		$id_tmp[$id]['id']= $key;
    		$id_tmp[$id]['count']=$count;
    		$price = Get_Price($id,$count);
    		$_SESSION['shk_purchases'][$key]['price']=$price;
    		$_SESSION['shk_purchases'][$key]['count']=$count;
    
    	}
      }
    

    В 3 версии не работает. Пересчета цены не происходит.
    Чанк корзины уже заменил на стандартный. С JS все ок.


  • Администраторы

    @rebroff

    В SHK 3.x сессия с товарами называется так:

    $_SESSION['shk_order']
    

    Выведите содержимое этой сесии и будет понятно как обновлять.

    echo '<pre>' . print_r($_SESSION['shk_order'], true) . '</pre>';
    


  • @Andchir спасибо большое. Остальные переменные в сессии - те же. Все получилось.



  • Еще вопрос возник. Был сниппет, который печатал для покупателя счет на оплату. Во второй версии для этого использовался класс SHKmanager

    require_once MODX_CORE_PATH.'components/shopkeeper/model/shopkeeper.class.php';
    require_once MODX_CORE_PATH."components/shopkeeper/model/shk_mgr.class.php";
    $SHKmanager = new SHKmanager($modx);
    $SHKmanager->getModConfig();
    $SHKmanager->config['orderDataTpl'] = $modx->getOption('orderDataTpl',$scriptProperties,'@FILE orderData.tpl');
    $SHKmanager->config['additDataTpl'] = $modx->getOption('additDataTpl',$scriptProperties,'@FILE additData.tpl');
    
    $c = $modx->newQuery('SHKorder');
    $c->where(array('userid:=' => $user_id));
    if($on_request && isset($_GET[$on_request]) && is_numeric($_GET[$on_request])){
        $c->where(array('id:=' => $_GET[$on_request]));
    }
    $count = $modx->getCount('SHKorder',$c);
    $c->sortby('date','DESC');
    if ($limit) $c->limit($limit,$start);
    $orders = $modx->getCollection('SHKorder', $c);
    

    В третьей версии я его не нахожу. Подскажите, пожалуйста, как получить данные.



  • @rebroff Добрый день.
    А вы можете поделиться кодом файла, который формировал заказ в формат txt.
    По примеру вашего решения, пытаюсь создать снипет, который по клику id товара будет открывать страницу с данными по этому заказу. Но не знаю как взять информацию по заказу и вывести на страницу. Вот и хочу посмотреть на код вашего решения.



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

Похоже, подключение к Форум | MODX Shopkeeper было разорвано, подождите, пока мы пытаемся восстановить соединение.