Магазин открыток на Ubercart

15 февраля 2011 в 1:15
Аватар пользователя restyler restyler 0 13

Команда Pixeljets сделала сайт-магазин открыток Apcards.ru, о чем я и спешу поделиться с другими друпалерами Smile

Задача была - сделать интерфейс удобным для масс-закупок, когда человек накидывает по сотне позиций в корзину, и сделать удобный поиск.

С родного уберкартовского "каталога" сразу спрыгнули на views реализацию каталога товаров, чтобы использовать exposed filters для поиска открыток, и спокойно темизировать всё, что понадобится.

Проблему интерфейса масс-закупок решил на базе uc_multibuy + доработки чтобы заставить его красиво работать во вьюсах:

Форма exposed фильтров была прокачана через javascript - был добавлен "живой" подсчет найденных товаров в момент когда заказчик еще тыкает на форме чекбоксы:

В корзине реализован "живой" подсчет скидок, тоже js:

Там же было сделано отслеживание, был ли в предыдущем заказе пользователя этот товар, и если да, то в каком количестве.

Несколько хитроумных "надстроек" над CCK для реализации "раздела загрузок", для реализации "спецпредложений" - которые на самом деле являются просто флагами CCK, но могут менять названия, и деактивироваться - позволили сэкономить немало времени, а не фигачить все с нуля со своими таблицами в бд.

админка "Типов файлов загрузок":

как это выглядит при создании ноды типа "файл":

т.е. по сути форма типов загрузок расширяет allowed values у cck селекта.

фишка в том что у новых прайс листов теперь всегда одно и то же название, выбранное админом:

админка "спецпредложений":

и флаг спецпредложения при создании продукта теперь выглядит вот так:

т.е. при сохранении формы спецпредложений обновляются лейблы cck поля и происходят еще кой-какие манипуляции чтобы обновился флаг в форме поиска.

Еще был сделан csv импорт из 1С, индикаторы "новинка", и наверняка что-то еще, что я сейчас не помню Smile

При создании сайта ни один сторонний модуль похакан не был.
Магазин сейчас в стадии наполнения контентом.

Дизайн, верстка: Олег Сидашин
Программирование: Антон Сидашин

Адрес сайта: http://www.apcards.ru

Комментарии

Очень симпатично. Но есть глюки из-за Boost (насколько я понимаю он используется для кэширования). Блок корзины показывает некорректные данные. Сам сталкивался с такой проблемой и решения её не нашел:(

15 февраля 2011 в 10:16

спасибо за хорошие отзывы!

"<a href="mailto:Dock@drupal.org">Dock@drupal.org</a>" wrote:
Очень симпатично. Но есть глюки из-за Boost (насколько я понимаю он используется для кэширования). Блок корзины показывает некорректные данные. Сам сталкивался с такой проблемой и решения её не нашел:(

можно поподробнее? boost не установлен, проблемы не могу воспроизвести

15 февраля 2011 в 10:55

"restyler" wrote:
можно поподробнее? boost не установлен, проблемы не могу воспроизвести

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

15 февраля 2011 в 13:04

"<a href="mailto:Dock@drupal.org">Dock@drupal.org</a>" wrote:
Проблема общая для кэшей. Воспроизвести легко: добавляем в корзину товары. После добавления в блоке корзины видна корректная информация. Переходим на любую другую страницу, например, "новости". Видим в блоке корзины, что товаров в ней нет.
Это скорее всего актуально для анонимов, т.к. кэширование на них распространяется.

действительно, косяк. Спасибо, подумаю как с этим жить, пока отключил кеш. Хостинг (не будем называть какой, но все его тут хвалят) еле ворочается, надеюсь на днях сайт перетащат на другую машину.

15 февраля 2011 в 19:16

А не подулитесь как решили проблему 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
// $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' :

  

// Node:nid fields in the table are replaced with input fields, and the
  // nid is added to our temp_products array.

  

$temp_products[] = $content;
 
  
// 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
  // 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!)
 
  

$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" />';

  

// we drop through to default handling
 
}

?>
          <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];

?>
30 марта 2011 в 17:50

"staryi" wrote:
А не подулитесь как решили проблему uc_multibuy с отображением вьюхи Grid-ом , в табличном варианте работает, а в сетке нет. Не могу вычислисть проблему.

с наскока не заметил у вас проблем. надо более детально глядеть..

17 апреля 2011 в 13:28