ms2_price_snippet как это работает?

В общем прочитал информацию тут . Добавил настройку ms2_price_snippet, сам сниппет назвал changePrice. Вот его код:
<?php  
   if (isset($_REQUEST['price']) && !empty($_REQUEST['price']) ){
    $product = $modx->getObject('msProduct', $_REQUEST['id']);
    $product->set('price', $_REQUEST['price']);   
    return $product->get('price');
} else{   
    return 0;
}

Чтобы он работал только при добавлении в корзину добавил это
case 'msOnBeforeAddToCart':
        $modx->runSnippet('changePrice');
    break;
И цена не перезаписывается.
Артур
31 августа 2019, 13:44
modx.pro
75
0

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

Баха Волков
31 августа 2019, 14:03
0
Немного опоздали, насколько я помню, данного функционала уже нет
    Артур
    31 августа 2019, 14:04
    0
    Ну допустим, как тогда переписать стоимость перед добавление в корзину?
      Баха Волков
      31 августа 2019, 15:20
      0
      Через систему событий minishop2
        Артур
        31 августа 2019, 15:25
        0
        А можно как-то конкретнее каких именно событий?
      Артур
      31 августа 2019, 14:06
      0
      Просто если этот код вставить напрямую в плагин OnBeforeAddToCart то результат тот же.
        Евгений Webinmd
        01 сентября 2019, 12:57
        0
        Вот вам пример для изменения цены для юзера из группы.
        Создать плагин, повесить на 2 события
        msOnAddToCart
        msOnChangeInCart


        <?php
        switch($modx->event->name){
            
            case 'msOnAddToCart':
            case 'msOnChangeInCart':
                
                if($modx->user  && $modx->user->isMember('Opt')){
                    
                    $tmp = $cart->get();
           
                    foreach ($tmp as $key1 => $value) {
                        if ($product = $modx->getObject('msProduct', $value['id'])) {
                            if($opt_price = $product->get('opt_price')){
                                $tmp[$key1]['price'] = $opt_price;
                            }
                        }
                    }
                    
                    $cart->set($tmp); 
                } 
        	break;
        }
      Артур
      07 сентября 2019, 10:53
      0
      В общем долгое копание в поиске дало следующий результат.
      1. Нужно ставить своему плагину самый высокий приоритет.
      2. Для изменения цены подходит только плагин на событие msOnGetProductPrice
      3. ms2_price_snippet это штука действительно устаревший вариант.
      Вот рабочее решение, предельно простое как и сама задача
      <?php
      
      switch ($modx->event->name) {
      	case 'msOnGetProductPrice':
      
      	
      		// Плагин принимает:
      		// $product - объект msProductData
      		// $data - массив со свойствами товара, может отсутствовать
      		// $price - текущая цена товара
      
      		// Подключаем массив значений по ссылке - так удобнее
      		$values = & $modx->event->returnedValues;
      
      		// Цена может меняться несколькими плагинами сразу, поэтому проверяем:
      		if (isset($values['price'])) {
      			$price = $values['price'];
      		}
      
      		// Меняем цену:
      		$values['price'] = $_REQUEST['price'] / $_REQUEST['count'];
      		$modx->log(modX::LOG_LEVEL_ERROR, $modx->event->name . '. Цена2 ' . $values['price'] . print_r($values, true));
      	break;	
      }
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        7