+38(044) 592 85 49
+38(066) 734 18 81

Статьи

Замена Ubercart, с помощью Views, вывода категорий, подкатегорий и списка товаров

В данной статье описывается как заменить вывод категорий и подкатегорий и списка товаров Ubercart, с помощью Views.

 

Решение для система Drupal 6.х (в данном случае испытывалось на версии 6.22)

 

Цель:

Более гибкий вывод списка товаров, а именно:

  • Корректное применение Views Exposed filters для списка товаров категории.
  • и другие приятные возможности Views

 

Для реализации задачи нужны такие модули:

 

Ubercart (с рекомендованными дополнительными модулями)

Views 2

Taxonomy redirect

 

Устанавливаем Ubercart. Создаем Категории и подкатегории и вносим туда товары.

 

В данном примере сделали универсальную задачу, когда каталог такого вида:

 

 Катагория1 (есть товары)
 Категория2 (нет товаров)
 ---подкатегория1 (есть товары)

 

 

Далее создаем View с такими параметрами:

 

Вид Page, с адресом catalog/%

 

Аргумент: Таксономия: Term ID (with depth)

  • Заголовок: %1
  • Action to take if argument is not present: Display all values
  • Validator options - Validator: Термин таксономии
  • Словари: Catalog
  • Argument type: Term ID
  • Action to take if argument does not validate: hide view...
  • Depth: 0
  • Set the breadcrumb for the term parents: True
  • Use Drupal's taxonomy term path to create breadcrumb links: True

 

 

Поля (к примеру, можно указать и другие нужные поля):

  • Материал: Заголовок Заголовок
  • Товар: Цена продажи Цена продажи

 

настройки аргумента Views Ubercart catalog

 

 

Так как указана глубина 0 - то при захождении в Категорию 2 мы увидим пустой результат.

А нам нужно увидеть список подкатегорий. с описанием и картинкой и с правильным адресом подкаталога.

 

Для вывода информации о подкаталогах (child term или дочерние термины) в графу Views - Empty text (PHP code) вставляем такой текст:

 

<?php
$vid = 1; // id словаря
$arg_pos = 1; // номер позиции аргумента, в нашем случает 1
$cols = 3; // кол-во столбцов для отображения
$show_count = TRUE; // показывать или нет кол-во нод в терминах.

if (is_numeric(arg($arg_pos))) {
   $tid = arg($arg_pos);

$maincategory = taxonomy_get_term($tid, $vid);
print $maincategory->description;

   $terms = taxonomy_get_children($tid, $vid);
   
   if (!empty($terms)) {

     $output = '<table class="catalog-page">';
     $count = 0;
     $total = count($terms);
     
     foreach ($terms as $tid => $term) {
       if ($count % $cols == 0) {
         $output .= '<tr>';
       }
       
       $item = l($term->name, taxonomy_term_path($term));
       if ($show_count) {
         $count_nodes = taxonomy_term_count_nodes($term->tid);
         $item .= ($count_nodes) ? " ($count_nodes)" : " (0)";
       }
       $item2 = l($term->description, taxonomy_term_path($term));

       $count++;
 if ($file = uc_catalog_image_load($term->tid)) {
   if (module_exists('imagecache')) {
     $output2 = l(theme('imagecache', 'uc_category', $file->filepath), taxonomy_term_path($term), array('html' => TRUE));
   }
   else {
     $output2 = l(theme('image', $file->filepath), taxonomy_term_path($term), array('html' => TRUE));
   }
}
       $output .= '<td>'. $item .'<br>Описание:&nbsp;'. $item2 .'<br>'. $output2 .'</td>';
       if ($count % $cols == 0 || $count == $total) {
         $output .= '</tr>';
       }
     }
     $output .= '</table>';
     return $output;
   }
}
?>

 

Таким образом мы выводим описание основной категории и информацию о подкаталогах.

 

Но ссылки терминов таксономии у нас выгледят так - taxonomy/term/[tid]

А ссылки меню каталога catalog/% ( где % - это номер термина таксономии)

 

Модуль pathauto может помочь, но если указать "красивые" адреса catalog/[cat-raw] для путей каталога Ubercart- и адреса catalog/[tid] для терминов таксономии - то будет соперничество с адресами каталога

и в результате адреса терминов таксономии будут похожи на catalog/1-0 так как модуль уже думает что есть такой адрес.

Вот сдесь нам нужен модуль taxonomy redirect - в котором делаем перенаправление терминов таксономии по адресу catalog/!tid

 

Вернемся к странице с пустым результатом. Теперь адреса терминов таксономии правильные, то есть направляют на подкаталог.

 

Цель достигнута.

 

-----------------------------------------------------

 

Находил похожие решения, например переписывания в файле template.php функции Ubercart - замены вывода товаров views-ом, а вывод категорий оставлять оригинальным Ubercart выводом.

 

Минусы замены функции Ubercart:

  • нерешенный вопросом с Exposed filters, а именно - после применения фильтров возвращение на страницу где были, а не на какую-то.

 

Изменить url form action удалось только в модуле views.module.  Есть функция - которая обрабатывает exposed form - проставил там $form['#action'] =  $_SERVER["REQUEST_URI"];  вместо geturl(); Почти заменили url form action. После применения фильтра оставался на этой же странице и фильтры применялись к списку товаров именно той категории в которой находились в этот момент.

 

  • функция fix-а не маленькая.
  • Возможны обновления модуля - и тогда не будет совпадения функций, так как поидее мы переписываем полностью определенную функцию.

 

 

Индивидуальный дизайн сайтаИндивидуальный дизайн

Разработка индивидуального дизайна сайта, логотипов, баннеров, иконок...

Стилизация сайтов, создание стилевых шаблонов (Новый Год, 8 марта...), брендирование сайтов, Flash-анимация.

Сайт любого уровня сложностиНикаких ограничений!

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

Оптимизация производительности сайтаТехническая оптимизация

Оптимизация компонентов сайта позволяет добиться стабильной и быстрой работы, а также экономит ресурсы системы.
В достижении этой цели нам помогают:
• современные методы программирования
• профессиональная верстка
• оптимизация изображений

Автоматизация сайтаАвтоматизация сайта

Максимальный уровень автоматизации для облегчения наполнения и обслуживания сайта!
Автоматическая обработка изображений, обновление карты сайта для быстрой индексации поисковиками, автоматическая проверка обновлений и другие полезные функции.
Поисковая оПоисковая оптимизацияптимизация

Начальная поисковая оптимизация уже включена в любой создаваемый нами сайт! Автоматическая карта сайта для Google, Yandex, Bing, а также панель Google analytics входит в стоимость всех наших сайтов.
Простое и удобное администрированиеАдминистративная часть сайта

Удобная и интуитивная админка. Создание и правка контента прямо с административной страницы. Простой и добный редактор (похож на MS Word). Разграничение прав доступа пользователей, возможность оперативно менять дизайн сайта (темы оформления) и др.
Техническая поддержка сайтаПоддержка сайтов

Оперативное устрание неполадок, консультация пользователей, техническое обслуживание и контент менеджмент. Мы можем взять все заботы о вашем сайте на себя.
 
ГаранГарантия качестватия качества

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

 

Украина онлайн Rambler's Top100