воскресенье, 19 сентября 2010 г.

Подкатегории + категории на главной странице VirtueMart

Появилась задача вывести на сайте на главной странице не просто главные категории
  • Посуда
  • Одежда
  • Электроника
Но и вложенные в них подкатегории, для ускорения навигации


*Посуда
  -Тарелки
  -Кружки
  -Стаканы

*Одежда
  -Брюки
  -Шапки

.....


Для этого пришлось малость перепилить VirtueMart

файл
/components/com_virtuemart/themes/default/templates/common/categoryChildlist.tpl.php



<?php if( !defined( '_VALID_MOS' ) && !defined( '_JEXEC' ) ) die( 'Direct Access to '.basename(__FILE__).' is not allowed.' );
mm_showMyFileName(__FILE__);

$iCol = 1;
if( !isset( $categories_per_row )) {
    $categories_per_row = 4;
}
$cellwidth = intval( 100 / $categories_per_row );

if( empty( $categories )) {
    return; // Do nothing, if there are no child categories!
}
?>
<br/>
<table width="100%" cellspacing="0" cellpadding="0">




<?php



function category_l2 ($id_cat) {global  $sess; require_once( CLASSPATH . 'ps_product_category.php'); $ps_product_category = new ps_product_category();
$categories_l2 = $ps_product_category->get_child_list($id_cat);
foreach( $categories_l2 as $category2 ) {
echo "<a class=\"minicategory\"href=\"";
$sess->purl(URL."index.php?option=com_virtuemart&amp;page=shop.browse&amp;category_id=".$category2["category_id"]);
echo "\"> ".$category2["category_name"]."</a><br>";}}






foreach( $categories as $category ) {
    if ($iCol == 1) { // this is an indicator wether a row needs to be opened or not
        echo "<tr>\n";
    }
    ?>
   
   
    <td align="center" width="<?php echo $cellwidth ?>%" >
        <br />
         <a title="<?php echo $category["category_name"] ?>" href="<?php $sess->purl(URL."index.php?option=com_virtuemart&amp;page=shop.browse&amp;category_id=".$category["category_id"]) ?>">
            <?php
            if ( $category["category_thumb_image"] ) {
                echo ps_product::image_tag( $category["category_thumb_image"], "alt=\"".$category["category_name"]."\"", 0, "category");
                echo "<br /><br/>\n";
            }
            echo $category["category_name"];
            echo $category['number_of_products'];
           
            ?>
         </a><br/>
<?php category_l2 ($category["category_id"]);?>
    </td>
   
   
    <?php
    // Do we need to close the current row now?
    if ($iCol == $categories_per_row) { // If the number of products per row has been reached
        echo "</tr>\n";
        $iCol = 1;
    }
    else {
        $iCol++;
    }
}
// Do we need a final closing row tag?
if ($iCol != 1) {
    echo "</tr>\n";
}
?>
</table>





Теперь при выводе категорий на главной странице ниже в список будут выводиться подкатегории, класс для этих подкатегорий a.minicategory {}
В стилях прописываете для них оформление и готово

4 комментария:

Анонимный комментирует...

У меня другая задача...
при входе в категорию товара нужно чтобы выводилось содержимое всех подкатегорий у категории в которой находится пользователь.
Выглядеть должно следующим образом:

Шаблон:

-категория
--подкатегория 1
---товар 1
---товар 2
--подкатегория 2
---товар3
---товар4

Нашел вот эту темку...
http://joomlaforum.ru/index.php/topic,44112.msg267573.html#msg267573
но как то все запутанно и помоему не совсем то что мне нужно.
icq 116707607

Павел комментирует...

в цикл функции function category_l2 встроить еще одну функцию, которая будет из базы вытаскивать товары этой категории

знание mysql и чуть чуть php

Unknown комментирует...

Подскажите, пожалуйста, как сделать так:
Категория 1
категория 1.1
категория 1.2
категория 1.3
категория 1.4
категория 1.5
больше
При нажатии больше заходим в категорию. Как сдесь например:

http://rozetka.com.ua/computers-notebooks/c80253/

Jey_Fox комментирует...

+1))
Правда супер)
Вот только где найти куда писать класс "для этих подкатегорий a.minicategory {}"
Хочу чтобы они были сбоку, и выводилось например не все а по 3 подкатегории, а рядом была надпись ещё.
Это реально сделать
http://www.lord-stroy.ru/ - вот мой сайт, обычный строймагазин

Отправить комментарий