Команда Pixeljets сделала сайт-магазин открыток Apcards.ru, о чем я и спешу поделиться с другими друпалерами
Задача была - сделать интерфейс удобным для масс-закупок, когда человек накидывает по сотне позиций в корзину, и сделать удобный поиск.
С родного уберкартовского "каталога" сразу спрыгнули на views реализацию каталога товаров, чтобы использовать exposed filters для поиска открыток, и спокойно темизировать всё, что понадобится.
Проблему интерфейса масс-закупок решил на базе uc_multibuy + доработки чтобы заставить его красиво работать во вьюсах:
Форма exposed фильтров была прокачана через javascript - был добавлен "живой" подсчет найденных товаров в момент когда заказчик еще тыкает на форме чекбоксы:
В корзине реализован "живой" подсчет скидок, тоже js:
Там же было сделано отслеживание, был ли в предыдущем заказе пользователя этот товар, и если да, то в каком количестве.
Несколько хитроумных "надстроек" над CCK для реализации "раздела загрузок", для реализации "спецпредложений" - которые на самом деле являются просто флагами CCK, но могут менять названия, и деактивироваться - позволили сэкономить немало времени, а не фигачить все с нуля со своими таблицами в бд.
админка "Типов файлов загрузок":
как это выглядит при создании ноды типа "файл":
т.е. по сути форма типов загрузок расширяет allowed values у cck селекта.
фишка в том что у новых прайс листов теперь всегда одно и то же название, выбранное админом:
и флаг спецпредложения при создании продукта теперь выглядит вот так:
т.е. при сохранении формы спецпредложений обновляются лейблы cck поля и происходят еще кой-какие манипуляции чтобы обновился флаг в форме поиска.
Еще был сделан csv импорт из 1С, индикаторы "новинка", и наверняка что-то еще, что я сейчас не помню
При создании сайта ни один сторонний модуль похакан не был.
Магазин сейчас в стадии наполнения контентом.
Дизайн, верстка: Олег Сидашин
Программирование: Антон Сидашин
Адрес сайта: http://www.apcards.ru
Комментарии
Фунционал понравился, достойно!
Молодцы, круто
Да, как всегда качественно сделано.
Мощно!
Очень симпатично. Но есть глюки из-за Boost (насколько я понимаю он используется для кэширования). Блок корзины показывает некорректные данные. Сам сталкивался с такой проблемой и решения её не нашел:(
спасибо за хорошие отзывы!
можно поподробнее? boost не установлен, проблемы не могу воспроизвести
Проблема общая для кэшей. Воспроизвести легко: добавляем в корзину товары. После добавления в блоке корзины видна корректная информация. Переходим на любую другую страницу, например, "новости". Видим в блоке корзины, что товаров в ней нет.
Это скорее всего актуально для анонимов, т.к. кэширование на них распространяется.
действительно, косяк. Спасибо, подумаю как с этим жить, пока отключил кеш. Хостинг (не будем называть какой, но все его тут хвалят) еле ворочается, надеюсь на днях сайт перетащат на другую машину.
Здорово!
Классно:)
Пагинатор специально не переведен?
previous page, next page
не, случайно. зафиксил
А не подулитесь как решили проблему uc_multibuy с отображением вьюхи Grid-ом , в табличном варианте работает, а в сетке нет. Не могу вычислисть проблему.
Табличное представление работает - http://gold-drakon.u2933.titan.vps-private.net/katalog
Представление сеткой нет - http://gold-drakon.u2933.titan.vps-private.net/katalog2
Шаблоны views используются соответственно views-view-grid--Katalog--page.tpl.php и views-view-table--Katalog--page.tpl.php содержимое их одинаково:
<?php
// Node:nid fields in the table are replaced with input fields, and the
$temp_products[] = $content;
// we drop through to default handling
// $Id: views-view-table.tpl.php,v 1.8 2009/01/28 00:43:43 merlinofchaos Exp $
/**
* file views-view-table.tpl.php
* Template to display a view as a table.
*
* - $title : The title of this group of rows. May be empty.
* - $header: An array of header labels keyed by field id.
* - $fields: An array of CSS IDs to use for each field id.
* - $class: A class or classes to apply to the table, based on settings.
* - $row_classes: An array of classes to apply to each row, indexed by row
* number. This matches the index in $rows.
* - $rows: An array of row items. Each row is an array of content.
* $rows are keyed by row number, fields within rows are keyed by field ID.
* ingroup views_templates
*
* 10/01/12 - Horrible views hack by <a href="mailto:trebor@animeigo.com">trebor@animeigo.com</a>. Wraps the table in
* an UberCart form, and hacks node:nid fields so they are checkboxes
* or quantity fields.
*
* REQUIRES uc_multibuy module by Oliver Coleman; thanks Oliver!
*
*/ $temp_products = NULL; // array of product node ids ?>
<form action="" accept-charset="UTF-8" method="post" id="uc-multibuy-grid-form">
<div>
<table class="<?php print $class; ?>">
<?php if (!empty($title)) : ?>
<caption><?php print $title; ?></caption>
<?php endif; ?>
<thead>
<tr>
<?php foreach ($header as $field => $label): ?>
<th class="views-field views-field-<?php print $fields[$field]; ?>">
<?php print $label; ?>
</th>
<?php endforeach; ?>
</tr>
</thead>
<tbody>
<?php foreach ($rows as $count => $row): ?>
<tr class="<?php print implode(' ', $row_classes[$count]); ?>">
<?php foreach ($row as $field => $content): ?>
<?php // depending on the class of the field being emitted, do various things. switch ($field) {
case 'nid' :
// nid is added to our temp_products array.
// if you want a quantity field, use this:
// $content = '<input type="text" maxlength="6" name="qty-' . $content . '" id="edit-qty-' . $content . '" size="5" value="0" class="form-text" />';
// if you want checkboxes, use this. In order for it to work right we have to have a fake hidden element
$content = '<input type="hidden" name="qty-' . $content . '" id="edit-qty-' . $content . '" value="0" class="form-checkbox" /><input type="checkbox" name="qty-' . $content . '" id="edit-qty-' . $content . '" value="1" class="form-checkbox" />';// that returns 0, and a checkbox that returns 1 if checked, otherwise we get errors because uc_multibuy
// expects to get a quantity for each item (apparently getting two is not a problem!)
} ?>
<td class="views-field views-field-<?php print $fields[$field]; ?>">
<?php print $content; ?>
</td>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php
// At this point we have our list of products. We call the multibuy code to generate and// register a form, but we don't output it! The real reason for the call is to set up the
// drupal form state and get the tracking codes. $temp_form = drupal_get_form('uc_multibuy_grid_form', $temp_products); // extract the final part of the the form, and output that; this completes the full form. $temp_form = explode("</table>",$temp_form);
print
$temp_form[1]; ?>с наскока не заметил у вас проблем. надо более детально глядеть..