вторник, 6 ноября 2012 г.

Одновременный вывод подкатегорий и товаров в Vamshop

Черт меня дернул одному заказчику поставить интернет-магазин на движке Vamshop. И вот встала задача выводить на странице категории как список подкатегорий, так и список товаров. А движок работает так, что если в категорие есть товары, то он выводит только товары. В интернете решения этого вопроса не нашел, так что предлагаю свой вариант. Кому интересно, прошу под кат.

В файле includes/modules/product_listing.php после строк

    $listing_query = vamDBquery($listing_split->sql_query);
    while ($listing = vam_db_fetch_array($listing_query, true)) {
        $rows ++;
        $module_content[] =  $product->buildDataArray($listing);  
    }


добавляем:

    if ($_GET['cat']) {
        $categories_query = "SELECT c.categories_id, cd.categories_name FROM categories AS c, categories_description AS cd WHERE c.categories_id=cd.categories_id AND c.parent_id=$current_category_id";
        $categories_query = vamDBquery($categories_query);
        $categories_list = array();
        while ($subcategory = vam_db_fetch_array($categories_query, true)) {
            $categories_list[] =  array ('CATEGORIES_NAME' => $subcategory['categories_name'], 'CATEGORIES_ID' => $subcategory['categories_id']); 
        }
        $module->assign('categories_list', $categories_list);
    }


В кратце поясню, что мы банально выбираем из базы подкатегории нашей текущей категории и при помощи $module->assign('categories_list', $categories_list); делаем их доступными для системы шаблонов (Vamshop использует Smarty).

Далее в templates/<current_template>/modules/product_listing/product_listing_columns.html добавляем в нужном нам месте строки вида:

{if $categories_list}
<div class="page">
  <div class="pageItem">
    <ul class="categories-list">
     {foreach name=aussen item=category_data from=$categories_list} 
       <li><a href="index.php?cat={$category_data.CATEGORIES_ID}">{$category_data.CATEGORIES_NAME}</a></li>
     {/foreach}
    </ul>
  </div>
</div>
{/if}


Соответственно тут мы перебираем и выводим наши подкатегории.

Все очень просто, но гугл мне на мой вопрос ответа не дал. И я надеюсь, что это кому-нибудь да поможет.