форум общения русскоязычных пользователей CMS Текстпаттерн
Вы не зашли.
Сделал на досуге интернет-магазин. Хотя это скорее витрина, а не интернет-магазин. В настоящий момент он в процессе наполнения, но функционал уже работает. Из плагинов использовались только OtG_Fields для полей к товарам и chh_if_data, чтобы проверять на непустое значение.
Неактивен
Здравствуйте, с наступающим.
на тестирование даете скачать сие прекрасное творение?
как раз в моем случае витрина самый удачный вариант.
Неактивен
Sergey написал:
Из плагинов использовались только OtG_Fields для полей к товарам и chh_if_data, чтобы проверять на непустое значение.
А суммирование в корзине и отправка заказа? Чистый PHP?
Неактивен
advan написал:
А суммирование в корзине и отправка заказа? Чистый PHP?
Да, для корзины там всего пара-тройка строчек. Отправка заказа чуть больше, но ничего сверхсложного там нет.
Отредактированно Sergey (31-12-2010 11:57:46)
Неактивен
Герион написал:
Здравствуйте, с наступающим.
на тестирование даете скачать сие прекрасное творение?
как раз в моем случае витрина самый удачный вариант.
И вас с новым годом!
Это не коробочный продукт, поэтому публичного тестирования не предполагается. Если хотите сделать такой же - задавайте вопросы, я расскажу как реализован функционал.
Неактивен
Sergey написал:
Герион написал:
Здравствуйте, с наступающим.
на тестирование даете скачать сие прекрасное творение?
как раз в моем случае витрина самый удачный вариант.И вас с новым годом!
Это не коробочный продукт, поэтому публичного тестирования не предполагается. Если хотите сделать такой же - задавайте вопросы, я расскажу как реализован функционал.
Ваш ответ, и я сразу в клинч ...а что спрашивать, я не являюсь продвинутым вебмастером, так, любитель. Которому пришла идея в виде витрины разместить весь ассортимент товара, с которым сталкиваюсь по работе. Через интернет не продаем, но как информационно пояснительный ресурс сделать можно.
Ваш продукт осваиваю не давно, и он мне нравится! Особенно как реализован блог, ВП нервно курит в сторонке.
Нравится функциональность (ничего лишнего и умудренного) с созданием сайта, то же все радует. Вот и решил, может и витрину смогу освоить на вашем движке.
Неактивен
Герион написал:
Sergey написал:
Герион написал:
Здравствуйте, с наступающим.
на тестирование даете скачать сие прекрасное творение?
как раз в моем случае витрина самый удачный вариант.И вас с новым годом!
Это не коробочный продукт, поэтому публичного тестирования не предполагается. Если хотите сделать такой же - задавайте вопросы, я расскажу как реализован функционал.Ваш ответ, и я сразу в клинч ...а что спрашивать, я не являюсь продвинутым вебмастером, так, любитель. Которому пришла идея в виде витрины разместить весь ассортимент товара, с которым сталкиваюсь по работе. Через интернет не продаем, но как информационно пояснительный ресурс сделать можно.
Ваш продукт осваиваю не давно, и он мне нравится! Особенно как реализован блог, ВП нервно курит в сторонке.
Нравится функциональность (ничего лишнего и умудренного) с созданием сайта, то же все радует. Вот и решил, может и витрину смогу освоить на вашем движке.
Это не мой движок - это все тот же Textpattern, витрина сделана на его основе. Для реализации витрины на клиентской стороне используется jquery.cycle. С освоением не должно быть никаких проблем
Неактивен
Спасибо за ответ. Буду вгрызаться в реализацию.
Неактивен
Красиво сделали, мне нравится.
Действительно, было бы очень позновательно, если бы Вы привели ваш PHP-код. А то говорят, что на Textpattern нельзя сделать интернет-магазин.
Неактивен
itshaman написал:
Красиво сделали, мне нравится.
Действительно, было бы очень позновательно, если бы Вы привели ваш PHP-код. А то говорят, что на Textpattern нельзя сделать интернет-магазин.
Кто говорит? Магазин обложек http://bookilla.com и магазин кухонных моек http://otmoyka.ru с вами не согласны!
Неактивен
itshaman написал:
Красиво сделали, мне нравится.
Действительно, было бы очень позновательно, если бы Вы привели ваш PHP-код. А то говорят, что на Textpattern нельзя сделать интернет-магазин.
Спасибо!
Там много PHP-кода в силу моей лени упаковывать все в плагин и рыться в мануалах. Давайте расскажу про корзину. Только не все сразу, а то у меня 2 часа до НГ и жена негодует
Мне было важно не привязывать корзину к учетной записи пользователя, позволяя любому человеку без регистрации положить товар в корзину и отправить заявку на его заказ (купить товар).
Моя реализация корзины на уровне логики - это:
1. Возможность сохранить товар с атрибутами в сессии пользователя (добавить товар в корзину).
2. Удалить товар из сессии (удалить товар из корзины).
3. Передать перечень товаров в почтовый скрипт (отправить перечень идентификаторов товара и их свойства в почтовый скрипт).
4. Уничтожить сессию (полностью очистить корзину).
Давайте разбираться как это сделано. Про механизм сессии подробно можно почитать в статье. Если кратко, то PHP, при использовании встроенной функции в момент посещения пользователем сайта, создает на сервере файл с уникальным идентификатором (названием сессии) в духе dq5vlr3ar54etl5hb0pi51lr24 и записывает в браузер пользователя куку с именем этой сессии, связывая пользователя и файл на сервере. Если в качестве эксперимента стереть сессионную куку из браузера, то сервер при следующей перезагрузке страницы уже не узнает этого же пользователя.
Далее, при покупке пользователем товара, с сохраняю в файле на сервере параметры товара. Если мы посмотрим содержимое этого файла, то увидим сериализованный массив вида:
lg-roboking-vr5901kl|a:2:{i:0;s:2:"18";i:1;s:5:"38818";}
Сессия живет очень небольшое время после ухода из пользователя с сайта. Какое именно - я не знаю, так как время жизни не настраивал, а использовал время установленное по умолчанию. Время жизни можно настроить отдельно, если кому-то нужно, я потом могу рассказать как модифицировать код.
Возможность сохранить товар с атрибутами в сессии пользователя (добавить товар в корзину).
Код, реализующий данную возможность очень прост:
<txp:php> session_start(); </txp:php>
Я оформил этот код в форму c именем session и вызываю в шаблоне на каждой странице сайта, где нужно работать с сессией, следующим образом:
<txp:output_form form="session" />
Это позволяет постоянно поддерживать связь пользователя с его сессией на сервере. А в случае, когда сессия по какой-то причине была удалена, то функция просто создает новую сессию.
Для того, чтобы сохранить товар в корзине, нам нужно просто создать массив и записать в него идентификатор товара с его характеристиками. В качестве идентификатора я использую URL товара, потому что он не повторяется, а при попытке создать новый товар Textpattern предупредит редактора, что статья с таким идентификатором уже существует (на самом деле, каждый товар это обычная статья).
Сохранение товара осуществляется следующим образом. На детальной странице товара я вывожу кнопку, которая вызывает javascript-функцию:
function addItem(name,price) { /* если соединение пользователя с сетью медленное, то показываем зацикленную анимацию, чтобы он понимал, что процесс идет */ $(".item > #btn > .add_red").before('<img src="/images/loader.gif" style="width:16px; height=16px;" class="loader" />'); /* С помощью библиотеки jQuery отправляем в текущую секцию переданные в функцию параметры */ $.ajax({ type: "GET", url: "/", data: "name="+name+"&price="+price, /* Если данные успешно отправлены, то делаем кнопку неактивной и выводим ссылку на страницу со списком товара */ success: function(msg){ $('.add_link').replaceWith('<span>Пылесос в корзине</span>'); $('#btn > .add_red').after('<div class="clear"></div><a id="buyNow" href="/basket/">оформить покупку »</a><br />'); $('.item > #btn > .loader').remove(); $(".item > #btn > .add_red").attr("class","add_gray"); } }); }
В шаблоне страницы для данной секции разбираем и сохраняем данные о товаре в корзине следующим образом:
<txp:php> // определяем функцию для сохранения данные о товаре в сессии. function addItem ($id,$price) { $_SESSION[$id] = array($id,$price); } // Устанавливаем проверку: если запрос пришел через AJAX (пользователь добавил товар в корзину), то вызываем // определенную выше функцию и сохраняем массив в сессию. В противном случае тихо умираем и ничего не делаем. if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'){ addItem ($_GET['id'], $_GET['price']); } exit(); } </txp:php>
Таким образом мы положили товар в корзину.
Удаление товара из корзины
В начале разработки магазина мы подразумевали, что пользователь может положить в корзину сколько угодно товара. Но после запуска и первичного тестирования на кошечках выяснили, что специфика ниши не предполагает "оптовых закупок" ввиду достаточно высокой стоимости товара и функционал удаления практически не будет использован. Поэтому секцию корзины я выключил из шагов оформления товара, однако не убрал с сайта (robozine.ru/basket/), так как в недалеком будущем планируется добавить для покупки кучу аксессуаров к пылесосам, тогда-то мне и пригодится возможность удаления.
Сначала рассмотрим вывод товара. Предположим, что мы добавили в корзину два товара.
Чтобы их показать, нужно заглянуть в сессию пользователя.
<txp:php> // в переменную будет сохраняться общая стоимость товаров $sum; // в цикле проходим по массиву товаров, ранее сохраненных в сессии, извлекаем идентификатор для каждого товара и подставляем // в стандартный тег <txp:article />, а в качестве параметров передаем ему идентификатор товара (статьи), и далее он выводит // с помощью формы название товара и кнопку "удалить товар". foreach($_SESSION as $k=>$v){ echo article(array(id => $v[0], 'listform'=>'item.list.basket.asArticle','limit'=>'20')); } // Получаем общую стоимость товара. Для этого опять лезем в сессию и извлекаем в цикле стоимость каждого товара и суммируем ее. function getPrice() { foreach($_SESSION as $z=>$x){ $sum += $x[1]; } return number_format($sum, 0, ',', ' '); } </txp:php>
Форма "item.list.basket.asArticle" содержит оформление с вкраплениями javascript-кода, который будет отправлять идентификатор товара для его удаления из сессии. PHP-код ($pr[...]) позволяет вывести отформатированную стоимость товара и ничего больше.
<tr> <td class="del"><a href="#StayHere" onclick="removeItem('<txp:article_url_title />')"><img src="/images/basket_delete.png" title="Удалить пылесос"></a></td> <td class="title"><txp:permlink><txp:title /></txp:permlink></td> <td class="price"><txp:php>$pr = custom_field(array('name' => 'price')); echo number_format($pr, 0, ',', ' ');</txp:php> руб.</td> </tr>
js-функция позволяет по клику на иконку "x" передать идентификатор товара в php-функцию для удаления.
function removeItem(name) { $.ajax({ type: "GET", url: "/basket/", data: "name="+name, success: function(msg){ document.location.href = "/order/"; } }); }
Сам механизм удаления товара размещается в шаблоне этой же секции и очень похож на добавление товара.
<txp:output_form form="session" /> <txp:php> // определяем функцию удаления товара: при получение идентификатора товара, удаляем его из сессии. function removeItem ($name) { unset($_SESSION[$name]); } // Устанавливаем проверку: если запрос пришел через AJAX (пользователь решил удалить товар), то вызываем // определенную выше функцию и скармливаем ей идентификатор товара. if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest'){ removeItem($_GET['name']); exit(); } </txp:php>
Отредактированно Sergey (05-01-2011 17:51:38)
Неактивен
Чертовски нравится ваш магазин. Единственное, что бы добавил - информацию о доставке и способах оплаты на каждую страницу магазина. Для меня это важно, всегда начинаю нервничать, когда не могу найти ссылку на такую информацию (хотя в меню у вас сразу нашел пункт "доставка"). Можно добавить эту информацию хотя бы в "часто задаваемые вопросы", ведь место в сайдбаре все равно пустует.
И на витрине бы выделил как-нибудь, что предлагается на выбор только 3 пылесоса. Т.к. можно запутаться, увидев только один.
Неактивен
aclorange написал:
Чертовски нравится ваш магазин. Единственное, что бы добавил - информацию о доставке и способах оплаты на каждую страницу магазина. Для меня это важно, всегда начинаю нервничать, когда не могу найти ссылку на такую информацию (хотя в меню у вас сразу нашел пункт "доставка"). Можно добавить эту информацию хотя бы в "часто задаваемые вопросы", ведь место в сайдбаре все равно пустует.
И на витрине бы выделил как-нибудь, что предлагается на выбор только 3 пылесоса. Т.к. можно запутаться, увидев только один.
Спасибо
Информация о доставке есть в наиболее ожидаемых частях сайта: в "часто задаваемых вопросах" и, собственно, секции "доставка". Про способ оплаты тоже указано в "часто задаваемых вопросах". Дублировать эту информации на всех страницах сайта мне кажется неоправданным излишеством. Если пользователь не найдет ответ на свой вопрос, то позвонит или напишет. А если не позвонит и не напишет, то значит не сильно-то и хотел. В магазине нет импульсных продаж, это чуть другой канал. Покупатель робота сначала досконально все изучает, а уже потом принимает решение о покупке.
Витрина да, суровая получилась Чуть позже переделаю - под витриной будет перечень моделей и сама она станет понятнее.
Неактивен
Sergey написал:
Там много PHP-кода в силу моей лени упаковывать все в плагин и рыться в мануалах. Давайте расскажу про корзину. Только не все сразу, а то у меня 2 часа до НГ и жена негодует
Про корзину — спасибо! А можно про отправку ее содержимого на e-mail?
Я пробовал подружить готовую корзинку joe_gcart с zem_contact_reborn, но что-то так и не разобрался до конца
Неактивен
advan написал:
Про корзину — спасибо! А можно про отправку ее содержимого на e-mail?
Я пробовал подружить готовую корзинку joe_gcart с zem_contact_reborn, но что-то так и не разобрался до конца
Да, конечно. Я чуть позже напишу, как разберусь с почтой, накопленной за праздники.
С joe_gcart я не разбирался, потому что простой функционал мне реализовать проще и быстрее, чем копаться в существующем и настраивать его под себя
Отредактированно Sergey (11-01-2011 12:04:22)
Неактивен
Sergey написал:
Да, конечно. Я чуть позже напишу, как разберусь с почтой, накопленной за праздники.
Ждем в нетерпением!
Sergey написал:
С joe_gcart я не разбирался, потому что простой функционал мне реализовать проще и быстрее, чем копаться в существующем и настраивать его под себя
А мне вот проще в плагине разобраться (см. подпись )
Неактивен
Sergey написал:
Да, конечно. Я чуть позже напишу, как разберусь с почтой, накопленной за праздники.
Сергей, не появилось желания/возможности описАть отправку содержимого корзины на e-mail?
Неактивен
оЧЧЧень жду/ждем
Неактивен
Давайте поднимем тему, Сергей, она очень актуальна ) Если есть время — поделитесь пожалуйста.
Неактивен
Спасибо за обмен, хороший сайт
Неактивен