Ubercart. Как показывать цену товара только зарегистрированным?

Главные вкладки

Аватар пользователя yugin yugin 17 ноября 2008 в 19:55

Уж простите, если подобных вопросов море, хорошо искал, но ответа не нашел. Собственно вопрос - можно ли как-то в Уберкарте скрыть цену от глаз незарегистрированных пользователей? Покопавшись в Уберкарте, не обнаружил такой возможности.

Если нет, то можно ли это сделать в E-commerce?

P.s. Ну прям хоть обижайся и уходи на VirtueMart...

Комментарии

Аватар пользователя glu2006 glu2006 18 ноября 2008 в 9:50

А еще бы Вам про темизацию нод почитать и тогда обижаться не будете. ))
Есть в ноде товара конкретная переменная $node->sell_price.
Следовательно ничего не мешает на хуке nodeapi на событии load, а лучше view написать следующее

global $user;
if (!$user->uid) {
 unset($node->sell_price);
}

Либо просто указать аналогичное условие для вывода в шаблоне если вы конечно вытягиваете через шаблон данные по полям а не единой переменной $node->content.

Аватар пользователя yugin yugin 18 ноября 2008 в 16:12

Спасибо за подсказку. Уже разобрался, отписаться здесь не успел. немного другой путь нашел на сайте уберкарта. немного подредактировал и работает.

вставляем в uc_product.module такой вот код:

function uc_product_nodeapi(&$node, $op, $arg3, $arg4){
  global $user;
  $node->content['display_price']['#access'] = $node->content['display_price']['#access'] && $user->uid;
  $node->content['sell_price']['#access'] = $node->content['sell_price']['#access'] && $user->uid;
  if ($user->uid == 0 && $op = 'view') {
    $node->content['add_to_cart']['#value'] = (t('You must login or register to see prices and purchase. Please, <a href="/user/login">login</a><a href="/user/register">Register</a>'));
  }
}

и теперь всем незарегистрированным будет предложено зарегистрироваться, чтобы увидеть цены и кнопку "Корзина". У такого способа есть один недостаток - при выводе модулем Каталог или Views, цены все равно выводятся, а скрываются только тизере и самом товаре.
Думаю, надо через шаблон сделать, правильнее оно как-то.

Да, забыл: Друпал 5, Уберкарт 1.6

Аватар пользователя glu2006 glu2006 18 ноября 2008 в 16:32

Да создайте вы свой модуль, в нем функию my_module_nodeapi() и там допишите предложенную логику и не надо будет темизировать и уж тем более писать в чужих готовых модулях. И при обновлении помнить о том что вы там что-то дописали.
Тем более этот хук может пригодится для других более "высоких" целей. )))

Аватар пользователя yugin yugin 30 декабря 2008 в 11:23

да, viewsом можно либо выводить цену для всех, либо не выводить вообще. в данном случае, он не поможет. можно попробовать аргументы, то что-то сильно сомневаюсь, что это верный путь. я делал без видов, ссылки просто на термины таксономии. так работает.

Аватар пользователя Dimanic Dimanic 30 декабря 2008 в 11:29

Мне без вьюсы нельзя )))
Можно сделать 2 пункта меню, один для всех без цены, а второй с ценой видят только зарегистрированные. Но это если совсем прижмет.

Аватар пользователя yugin yugin 30 декабря 2008 в 11:40

только наверное не пункта, а разных меню вообще. соответственное, и виды дублировать надо, указывая видимость для нужных ролей. и потом блоки меню показывать только определенным ролям. для зарегенных - с ценами, для анонимов - без. но это явно неверное решение. на самый крайний случай можно оставить.
а если будете передавать заказчику, спасибо за такое решение он вам не скажет