[msOptionsPrice2] - теперь с весом товаров.

[msOptionsPrice2] — (1.0.5-beta) небольшое обновление. Добавлен вес для характеристик товара.


Для смены веса на фронте сайта в зависимости от характеристики вес товара необходимо обернуть
<span class="msop2 product_weight-[[*id]]">[[+weight]]</span>
Для удобства
добавлены настройки пакета:
show_count — показывать кол-во товара на странице
show_weight — показывать вес товара на странице
allow_zero_weight — разрешить товар с нулевым весом

В корзине соответственно получаем товар с нужным весом

Особо актуально при расчете стоимости доставки в зависимости от веса покупок.

ps. Всем спасибо за внимание. Новый функционал спонсировал Николай Ермошин — отдельное спасибо ему.
Володя
21 апреля 2015, 08:16
modx.pro
3 775
+5
Поблагодарить автора Отправить деньги

Комментарии: 12

Alexander V
21 апреля 2015, 16:56
0
Если не ошибаюсь, то в планах MS была реализация остатков. Было бы неплохо указывать кол-во на складе по опции товара.
Az1muth
03 июня 2015, 05:32
0
где и как указать свои характеристики(добавленные при помощи возможности после обновы добавлять свои доп характеристики).чтобы можно было их увидеть в списке оптионпрайса вместе с цветом, размером и тегом?
    Володя
    03 июня 2015, 13:26
    0
    Как характеристики устаканятся — так и сделаю…
      Az1muth
      03 июня 2015, 17:34
      0
      просто по другому не догоняем как их добавить, кроме как добавлять характеристики через плагины, как советовалось тут bezumkin.ru/modx/minishop2/classes/910/
      При таком способе вообще пропадает тогда надобность обновления минишопа с системой характеристик)
      Но есть минусы:
      -при большом количестве доп характеристик будет огромный список характеристик( в обновлении назначаются категории, что помогает исключать ненужные)
      -сложность добавления характеристик относительного нового способа
    but1head
    17 июня 2015, 00:50
    0
    Как вывести минимальную цену size в категории товаров?
      Володя
      17 июня 2015, 08:47
      1
      0
      Привет, вот тут сниппет набросал demo.vgrish.ru/manager/?a=element/snippet/update&id=46
      <?php
      /** @var array $scriptProperties */
      /** @var msop2 $msop2 */
      $miniShop2 = $modx->getService('minishop2');
      $msop2 = $modx->getService('msop2', 'msop2', $modx->getOption('msop2_core_path', null, $modx->getOption('core_path') . 'components/msop2/') . 'model/msop2/', $scriptProperties);
      if (!($msop2 instanceof msop2)) return 'Could not load msop2 class!';
      if (empty($product)) {$product = $modx->resource->id;}
      $msProduct = $modx->getObject('msProduct', $product);
      if (!($msProduct instanceof msProduct)) {
      	return 'This resource is not instance of msProduct class.';
      }
      $q = $modx->newQuery('msop2Option');
      $q->where(array('key' => $name, 'active' => 1));
      $q->select('id as option_id');
      if ($q->prepare() && $q->stmt->execute()) {
      	$data = $q->stmt->fetch(PDO::FETCH_ASSOC);
      	$option_id = $data['option_id'];
      }
      $q = $modx->newQuery('msop2Price');
      $q->sortby('CAST(price AS DECIMAL(10,2))', 'ASC');
      $q->where(array('product_id' => $product, 'option' => $option_id,'active' => 1, 'operation' => 1));
      $q->select('price as price_min, value as value');
      $q->limit(1);
      if ($q->prepare() && $q->stmt->execute()) {
      	$data = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
      }
      if (!empty($data)) {
          $priceMin = $data[0]['price_min'];
      }
      else {
          $priceMin = $msProduct->get('price');
      }
      $priceMin = $miniShop2->formatPrice($priceMin);
      if (!empty($toPlaceholder)) {
      	$modx->setPlaceholder($toPlaceholder, $priceMin);
      }
      else {
      	return $priceMin;
      }
      вызов
      [[!msop2GetMinPrice? 
       &product=`[[+id]]`
       &name=`size`
      ]]
        but1head
        17 июня 2015, 14:47
        0
        Круто, спасибо! А случаем к mFilter2 его не привязать?
          Олег
          29 января 2019, 07:07
          0
          Уважаемые, если правильно понимаю это уже не работает в msOptionPrice2 версии 2.5.17
        Андрей
        03 января 2016, 21:13
        0
        А как можно записать одни и те же опции всем товарам сразу? У меня есть порядка 10 опций, наценка на которые по всем товарным позициям одинаковая. А товаров порядка 500 пока, потом еще будут. Подскажите как сделать?
          Володя
          03 января 2016, 22:23
          1
          +1
          вот так примерно
          — выбираем id всех товаров
          — потом создаем им опции
          — потом добавляем опции цены
          <?php
          $msop2 = $modx->getService('msop2', 'msop2', $modx->getOption('msop2_core_path', null, $modx->getOption('core_path') . 'components/msop2/') . 'model/msop2/');
          if (!($msop2 instanceof msop2)) return '';
          /* массив опций продуктов */
          $data = array(
              'class_key' => 'msProduct',
              'context_key' => 'web',
              'size' => array(
                  '100',
                  '200',
                  '300',
                  '400',
                  '500',
                  '600',
                  '700',
                  '800',
                  '900',
                  '1000'
              )    
          );
          /* массив опций и цен */
          $options = array(
              '100' => 10,
                  '200' => 20,
                  '300' => 30,
                  '400' => 40,
                  '500' => 50,
                  '600' => 60,
                  '700' => 70,
                  '800' => 80,
                  '900' => 90,
                  '1000' => '10'
          );
          $q = $modx->newQuery('msProduct');
          $q->where(array('class_key' => 'msProduct'));
          $q->select('id');
          if ($q->prepare() && $q->stmt->execute()) {
          	$ids = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
          }
          foreach($ids as $id) {
              $data['id'] = $id;
              $modx->error->reset();
              $response = $modx->runProcessor('resource/update', $data);
          	if ($response->isError()) {
          		print_r($response->getAllErrors());
          		continue;
          	}
          	
          	foreach ($options as $value => $price) {
          	    $msop = array(
          			'product_id' => $id,
          			'operation' => 1, // операция
          			'option' => 1,    // опция size
          			'value' => $value
          		);
          		
                  if (!$msop2Price = $modx->getObject('msop2Price', $msop)) {
          		    $msop2Price = $modx->newObject('msop2Price');
          		    $msop2Price->fromArray($msop);
          		}
          	    $msop2Price->set('price', $price);
          	    $msop2Price->save();
          	}
          }
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          12