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

Главные вкладки

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

Команда 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

Комментарии

Аватар пользователя Dock@drupal.org Dock@drupal.org 15 февраля 2011 в 10:16

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

Аватар пользователя restyler restyler 15 февраля 2011 в 10:55

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

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

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

Аватар пользователя Dock@drupal.org Dock@drupal.org 15 февраля 2011 в 13:04

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

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

Аватар пользователя restyler restyler 15 февраля 2011 в 19:16

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

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

Аватар пользователя staryi staryi 30 марта 2011 в 17:50

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

?>
Аватар пользователя restyler restyler 17 апреля 2011 в 13:28

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

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