Несколько цен в товаре

Есть два дополнительных поля TV. Идея в том что каждый пользователь группы имеет свою цену.

Примеры того как реализовано в шаблонах
Тут чанк tpl.msCart
[[!+modx.user.id:memberof=`UserOpt`:then=`{$product.optprice}`:else=`[[!+modx.user.id:memberof=`UserAut`:then=`{$product.korpprice}`:else=`{$product.price}`]] `]]
Тут чанк tpl.msProducts.row.
[[!+modx.user.id:memberof=`UserOpt`:then=`[[+tv.optprice]]`:else=`[[!+modx.user.id:memberof=`UserAut`:then=`[[+tv.korpprice]]`:else=`{$price}`]] `]]

Сниппет msCart фрагмент присвоения TV к группе пользователя
$groups = $modx->user->getUserGroupNames();
    $groups = implode(',',$modx->user->getUserGroupNames());
        // Получние тв поля
    $wherestvopt = array (
            'contentid' => $entry['id'], // id ресурса
            'tmplvarid' => 3 // id поля
        );
    $wherestvkor = array (
        'contentid' => $entry['id'], // id ресурса
        'tmplvarid' => 6 // id поля
    );

    $tv = $modx->getObject('modTemplateVarResource', $wherestvopt); // получение tv.объекта
    if(!$tv) return;
    $valopt = $tv->get('value'); // получение значения
     $tv = $modx->getObject('modTemplateVarResource', $wherestvkor); // получение tv.объекта
     if(!$tv) return;
    $valkor = $tv->get('value'); // получение значения
    if ($groups == 'UserOpt') {$d = $valopt;} 
    elseif ($groups == 'UserAut') {$d = $valkor;}
    else {$d =  $entry['price'];}
$product['cost'] = $miniShop2->formatPrice($entry['count'] * $d);
$total['cost'] += $entry['count'] * $d;
Вопрос таков как быть дальше? Revo пользуюсь впервые.
При открытии страницы итоговая цена соответствует TV но при изменении количества все встает на свои места(остается поле «Price»). И как быть с msOrder?

Есть ли альтернативный вариант? И в какую сторону капать
Кирилл
17 октября 2017, 12:43
modx.pro
1 696
0

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

man
man
17 октября 2017, 18:16
+1
Ну если вы начали использовать fenom, то почему бы это не делать везде)
Яб зделал так:
{switch $_modx->user.id | ismember}
	{case 'group1'}
		{$newPrice = $_modx->resource.tvPriceOne}
	{case 'group2', 'group3'}
		{$newPrice = $_modx->resource.tvPriceTwo}
	{case 'group4'}
		{$newPrice = $_modx->resource.tvPriceThree}
	{case default}
		{$newPrice = $price}
{/switch}
Ну а $newPrice соответственно вставить в нужное место.
Если я конечно правильно понял…
P.S. Не тестировал, но работать должно.
    Евгений Лазарев
    16 октября 2018, 16:49
    0
    Кто нибудь проверял? По-моему такая конструкция не работает.
      Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
      3