Добавляем функционал избранное к опенкарт
Хотя в заголовке и указано, что для опенкарт, но в принципе должно работать на любой кмс. Рассмотрим функционал добавления в избранное, основанный на сессиях и базе данных. Упрощенно схема такая: клиент заходит – пишется его сессия – специальный скрипт отслеживает нажатия на кнопку избранное – заносит в базу их. Но самом деле все это не так уж и сложно.
Ремарка: в опенкарт есть закладки, но только для зарегистрированных пользователей. Это ограничение можно обойти, но тогда избранные становятся общими для всех. В общем, проще написать необходимый функционал самостоятельно.
Итак, приступим. Сначала создаем табличку в нашей базе данных с названием 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 - то есть могу доработать ваш сайт или помочь с веб-программированием. Пишите сюда.
Отправляя сообщение я подтверждаю, что ознакомлен и согласен с политикой конфиденциальности данного сайта.