Добавляем функционал избранное к опенкарт


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



Ремарка: в опенкарт есть закладки, но только для зарегистрированных пользователей. Это ограничение можно обойти, но тогда избранные становятся общими для всех. В общем, проще написать необходимый функционал самостоятельно.

Итак, приступим. Сначала создаем табличку в нашей базе данных с названием liked и 4-мя полями: id (int(11)), sesion (text), tovar (text), dat(text). Теперь на страничке товара добавляем кнопку «в избранное» и скрипт обработчик её.

<script>
function saveform (id)
{
      $.ajax({
                type: 'post',
               url: "../ajax/liked.php", 
                data: {'referal':id},
                response: 'text',
                success: function(data){			
	if (data==0)	 alert ("Удалено из избранного!");				
		else	 alert ("Добавлено в избранное!");
            }	
})
}
</script>
<button type="button" id="button-heart" onclick="saveform('<?php echo $product_id; ?>')">
Здесь функция saveform() на вход принимает ид товара (здесь пример конретно для опенкарт, у вас мжет быть другой $product_id), обращается к некоему загадочному файлу liked.php, а затем выводит в случае успеха алерт с сообщением. А вот примерный текст файла liked.php:

<?php
//подключаемся к базе
$db = @mysql_connect ("localhost","лог","пар");
mysql_select_db ("баз",$db);

//устанавливаем куки
$ses = $_COOKIE['PHPSESSID'];	
$referal = $_POST["referal"];//ид товара
  
$result = mysql_query("SELECT * FROM `liked` WHERE sesion = '$ses'") or die (mysql_error());
$num_ans=mysql_fetch_row ($result);

//если такого юзера нет
if ($num_ans==0) {
$dat = date("d-m-Y");
$db_referal = mysql_query("INSERT INTO `liked` (`id`, `sesion`, `tovar`, `dat`) VALUES ('', '".$ses."', '".$referal."', '".$dat."')") or die (mysql_error());	
echo 1;
}
	
else {
$result = mysql_query("SELECT * FROM `liked` WHERE sesion = '$ses'") or die (mysql_error());
$row=mysql_fetch_array($result);
$tovar = $row["tovar"];	
$pos = strpos($tovar, $referal);

//если такого товара нет
if ($pos === false) {
$result = mysql_query("SELECT * FROM `liked` WHERE sesion = '$ses'") or die (mysql_error());
$row=mysql_fetch_array($result);
$tovar = $row["tovar"];	
$tovar = $tovar.",".$referal;
$clean = trim($tovar, ",");
$result = mysql_query("UPDATE `liked` SET tovar = '$clean' WHERE sesion = '$ses'") or die (mysql_error());	
echo 1;	
}	
//если есть такой товар, то удаляем его
else {
$tovar2 = str_replace($referal, "", $tovar);
$tovar2 = preg_replace('/([!();:,.?])\\1+/', '$1', $tovar2);
$clean = trim($tovar2, ",");	
$result = mysql_query("UPDATE `liked` SET tovar = '$clean' WHERE sesion = '$ses'") or die (mysql_error());	
echo 0;
}
}
?>
Комментарии в листинге довольно подробные, хочется обратить внимание только на пару моментов: получающиеся значения 1 или 0 – это нужно для дальнейшей обработки полученных результатов запроса (пример взят с рабочего сайта), также строки с операторами preg_replace и тд в конце – это для удобства, так как в одной ячейке tovar может храниться много товаров.

Вот, собственно, и все. Правда, надо бы добавить вывод всех товаров в избранном на отдельной страничке – но это тема уже другой статьи – там я одновременно покажу, как делать дополнения для опенкарта. Есть вопросы? Задавайте. За небольшую плату также помогу вам с настройкой, расширением функционала опенкарт, пишите на up777up@yandex.ru.
Автор этого материала - я - Пахолков Юрий. Я оказываю услуги по написанию программ на языках Java, C++, C# (а также консультирую по ним) и созданию сайтов. Работаю с сайтами на CMS OpenCart, WordPress, ModX и самописными. Кроме этого, работаю напрямую с JavaScript, PHP, CSS, HTML - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.

тегистатьи IT, php, javascript, скрипты, opencart




Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.




Создание сайтов с помощью php, или CMS vs самописный
Когда заработает поддомен?
Оптимизация программ