02.10.2011 Ubercart - скрыть SKU и другие поля (модуль Ubercart Product Power Tools) | Drupal 6 26.09.2011 Пользовательские галереи и хранение файлов на сервере - Drupal 6 22.06.2011 Блок последних комментариев блога - DRUPAL 6 16.06.2011 Показывать блок в определенных типах материалов и на определенных страницах - Drupal 6 16.06.2011 Топ 10 блоггеров - Drupal 6 21.05.2011 Модуль переноса комментариев для Drupal 6 22.03.2011 Подсветка синтаксиса кода в Drupal 6 22.03.2011 Кнопки социальных сетей для Drupal
#74

Сниппет вывода самых популярных товаров - Drupal 6

С помощью данного сниппета можно получить подобное отображение блока самых популярных товаров, естественно применив CSS:

 

Как вывести блок самых популярных товаров Drupal 6.

Данное решение, возможно, не совсем корректно именно с точки зрения программирования под Drupal 6, но т.к. для PHP и MySql вполне корректно, то на Drupal работает на ура (надеюсь понятно, что я хотел этим сказать).

Итак, передо мной стояла задача создания каталога товаров и вывод блока самых просматриваемых товаров (один просмотр = одна сессия). Для реализации подобного решения мной был выбран модуль Ubercart, и необходимые для работы этого модуля дополнительные компоненты:

Ubercart

Ubercart - ядро

Ubercart - core (optional)

CCK, Views, filefield, imagefield, imageapi, thickbox, imagecache.

Statistics advanced settings - который требуется для того, чтобы не накручивались счетчики просмотра нод, то есть чтобы было так: один просмотр = одна сессия.

А теперь разберем код для вывода блока товаров:

  1. $type = 'product';  // Тип нод
  2. $num_nodes = '10'; // Количество выводимых нод
  3. /*
  4.  
  5. Запрос к БД
  6.  
  7. Здесь следует пояснить, что мы выбираем из базы:
  8. node_counter.totalcount - количество просмотров ноды из таблицы node_counter;
  9. node.type - тип ноды;
  10. node.title - название ноды;
  11. uc_products.sell_price - в моем случае я не стал замарачиваться с ubercart и выводил на сайт именно значение SELL_PRICE, т.к. оно обязательно для заполнения.
  12. content_type_product.field_bigimg_fid - значение field_bigimg_fid из таблицы content_type_product, равняется значению fid из таблицы files, это нам понадобится для формирования запроса для вывода превью.
  13.  
  14. */
  15. $sql = "SELECT node.nid,
  16. node_counter.nid,
  17. node_counter.totalcount,
  18. node.type,
  19. node.title,
  20. uc_products.nid,
  21. uc_products.sell_price,
  22. content_type_product.nid,
  23. content_type_product.field_bigimg_fid
  24. FROM node
  25. LEFT JOIN node_counter ON node.nid = node_counter.nid
  26. LEFT JOIN uc_products ON node.nid = uc_products.nid
  27. LEFT JOIN content_type_product ON node.nid = content_type_product.nid
  28. WHERE node.type in ('product')
  29. ORDER BY node_counter.totalcount DESC";
  30.  
  31. $result = db_query_range($sql, $type, 0, $num_nodes);
  32.  
  33. while ($n = db_fetch_array($result)) {
  34. $n_nid = $n['nid'];
  35. $n_title = $n['title'];
  36. $n_price = $n['sell_price'];
  37.  
  38. $file_fid = $n['field_bigimg_fid'];
  39.  
  40. // Запрос на выбор из базы файла - превью
  41. $sql_fid = "SELECT fid, filepath FROM files WHERE fid ='".$file_fid."'";
  42. $result_fid = db_query($sql_fid);
  43. $n_fid = db_fetch_array($result_fid);
  44. $filepath = $n_fid['filepath'];
  45.  
  46. $n_price_row = strpos($n_price, ".");
  47. $n_price = substr($n_price, 0, $n_price_row);
  48.  
  49. print '<div class="right-block">';
  50. print '<a class="right-img" href="/product/'.$n_nid.'"><img src="/'.$filepath.'" alt="'.$n_title.'"></a>';
  51. print '<div class="right-title"><a href="/product/'.$n_nid.'">'.$n_title.'</a></div>'; 
  52. print '<div class="sticker-little"><span class="sticker-span">'.$n_price.'</span></div>'; 
  53. print '</div>';
  54.  
  55. // Если счетчик меньше 10, то hr не выводится. Для эстетики.
  56. $countx++;
  57. if($countx < 10) print '<hr>';
  58. };

 

Для корректной обрезки тайтла до определенного количества символов нужно воспользоваться функцией mb_substr (substr() для UTF-8).

В итоге у нас будет следующий вывод информации, а что из этого можно сделать, можно увидеть на картинке выше:

Блок вывода самых популярных товаров

 

 


29.03.2011 Пейджинг для Image Gallery (вперед, назад) - Drupal 6 22.03.2011 Форма входа вверху сайта - Drupal 6 22.03.2011 Сниппет поиска по товарам - Drupal 6 22.03.2011 Сниппет вывода самых популярных товаров - Drupal 6 22.03.2011 Сниппет вывода последних новостей в блоке - Drupal 6 03.03.2011 Денвер, Drupal7 19.03.2010 Индивидуальный шаблон для каждой страницы - Drupal 6 31.03.2010 Drupal 6 ошибка 0 /upload/js
О сайте