В данной статье описывается как заменить вывод категорий и подкатегорий и списка товаров Ubercart, с помощью Views.
Решение для система Drupal 6.х (в данном случае испытывалось на версии 6.22)
Цель:
Более гибкий вывод списка товаров, а именно:
Для реализации задачи нужны такие модули:
Ubercart (с рекомендованными дополнительными модулями)
Устанавливаем Ubercart. Создаем Категории и подкатегории и вносим туда товары.
В данном примере сделали универсальную задачу, когда каталог такого вида:
Катагория1 (есть товары)
Категория2 (нет товаров)
---подкатегория1 (есть товары)
Далее создаем View с такими параметрами:
Вид Page, с адресом catalog/%
Аргумент: Таксономия: Term ID (with depth)
Поля (к примеру, можно указать и другие нужные поля):
Так как указана глубина 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>Описание: '. $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:
Изменить url form action удалось только в модуле views.module. Есть функция - которая обрабатывает exposed form - проставил там $form['#action'] = $_SERVER["REQUEST_URI"]; вместо geturl(); Почти заменили url form action. После применения фильтра оставался на этой же странице и фильтры применялись к списку товаров именно той категории в которой находились в этот момент.
|
Стилизация сайтов, создание стилевых шаблонов (Новый Год, 8 марта...), брендирование сайтов, Flash-анимация. |
Современный, быстрый и надежный движок сайта, позволяющий наращивать функциональность. Регулярное обновление ядра и модулей. Разработка новых модулей, позволяющих решать индивидуальные задачи клиента |
|
|
Максимальный уровень автоматизации для облегчения наполнения и обслуживания сайта! Автоматическая обработка изображений, обновление карты сайта для быстрой индексации поисковиками, автоматическая проверка обновлений и другие полезные функции. |
|
Поисковая о Начальная поисковая оптимизация уже включена в любой создаваемый нами сайт! Автоматическая карта сайта для Google, Yandex, Bing, а также панель Google analytics входит в стоимость всех наших сайтов. |
Удобная и интуитивная админка. Создание и правка контента прямо с административной страницы. Простой и добный редактор (похож на MS Word). Разграничение прав доступа пользователей, возможность оперативно менять дизайн сайта (темы оформления) и др. |
|
Оперативное устрание неполадок, консультация пользователей, техническое обслуживание и контент менеджмент. Мы можем взять все заботы о вашем сайте на себя. |
Гаран Мы гарантируем стабильность и надежность созданных нами сайтов. Полную гарантию работоспособности мы предоставляем лишь при условии использования нашего хостинга. |