насчет незарегистрированных пользователей не подскажу, там надо с сессией работать, под рукой нет никаких наработок, а насчет зарегистрированных:
Добавляем новое поле в типе данных пользователь.
Название поля: товары пользователя.
Название на аглийском: fav.
Тип данных: ссылка на дерево
пишем скрипт для добавления товара в этот список и для удаления его из корзины
public function makeFavourite($elementId=NULL) {
if(!$elementId) $elementId = getRequest('param0');
$perm = permissionsCollection::getInstance();
$fav=array();
$user_id=$perm -> getUserId();
if($user_id){
$user = umiObjectsCollection::getInstance()->getObject($user_id);
if($user){
$fav=$user->getValue('fav');
foreach($fav as $item){
if($item->id==$elementId){return;}
}
$fav[]=$elementId;
$user->setValue('fav',$fav);
$user->commit();
}
}
return true;
}
public function delFavourite($elementId=NULL) {
if(!$elementId) $elementId = getRequest('param0');
$perm = permissionsCollection::getInstance();
$fav=array();
$fav_new=array();
$user_id=$perm -> getUserId();
if($user_id){
$user = umiObjectsCollection::getInstance()->getObject($user_id);
if($user){
$fav=$user->getValue('fav');
foreach($fav as $item){
if($item->id!=$elementId){$fav_new[]=$item->id;}
}
$user->setValue('fav',$fav_new);
$user->commit();
}
}
return '';
}
добавляем права на эти макросы в файл /classes/modules/catalog/permissions.custom.php:
<?php
$permissions = Array(
'view' => Array('makeFavourite','delFavourite')
);
?>
добавляем кнопку под товар типа <a href="#" onclick="makeFavourite(%id%);return false;">Добавить товар</a>
которая при нажатии обращается к функции js для добавления товара в список товаров пользователя (незабываем что jQuery должен быть подлючен)
function makeFavourite(id){
$.ajax({
url: "/catalog/makeFavourite/"+id+"/",
success: function(){
alert('товар добавлен');
}
});
return false;
}
function delFavourite(id){
$.ajax({
url: "/catalog/delFavourite/"+id+"/",
success: function(){
jQuery('#id_'+id).remove();
}
});
return false;
}
теперь осталось прописать страницу (корзину), на которой ты выведешь форму обратной связи с полем в которое подставишь содержимое поля fav данного пользователя
ну и переписать макрос отправки формы, чтобы при отправке формы она очищала поле fav, так как заказ фактически ушел и корзину надо очистить
первый скрипт кладем в /classes/modules/catalog/__custom.php
насчет js функций, подключите их внутри тега <head> , но после строчки подключения jQuery (если он у вас еще не подключается, то подключите его например так <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
)
насчет скриптом могут быть и проблемы, если у вас js библиотека prototype подключается (на версиях 2.7 обычно так и было), тогда можете выкинуть весь js и ссылки к добавлению товара сделать такими
<a href="/catalog/makeFavourite/%id%/" >Добавить товар</a>
все будет работать, только появиться перезагрузка страниц при нажатии на ссылку "Добавить товар"