В XCart, как я могу перечислить подкатегории в категории? - PullRequest
0 голосов
/ 15 августа 2011

В моей установке XCart 4.4.2 у меня есть несколько основных категорий продуктов, каждый из которых содержит несколько подкатегорий. На главной странице я хотел бы перечислить подкатегории в каждой категории, но у меня возникают проблемы с доступом к подкатегориям из welcome.tpl из этого кода:

{foreach from=$categories_menu_list item=c name=categories}
  <a href="home.php?cat={$c.categoryid}" title="{$c.category|escape}">
    <li>
        <img src="{$c.image_path|amp}" alt="{$c.category|escape}"/>
        <strong>{$c.category}</strong><br/>

        <!-- list subcategories here-->
        {php}
          $parentid = $c.categoryid;

          $categoryNames = func_query_column("SELECT category FROM $sql_tbl[categories] WHERE parentid = " . $parentid);
          print_r($categoryNames);
        {/php}
    </li>
  </a>
{/foreach}

Может ли кто-нибудь помочь мне с кодом PHP / SMARTY, необходимым для создания списков подкатегорий? Спасибо!

Ответы [ 3 ]

2 голосов
/ 23 августа 2011

Лучше определить массив подкатегорий в php-скрипте, чем делать это в шаблоне. Я могу предоставить вам следующее решение для вашей задачи:

Патч для include / common.php

@@ -90,6 +90,14 @@
         // Get categories menu data
         if (!empty($categories)) {
             $smarty->assign('categories_menu_list', $categories);
+
+            if (!isset($cat) || 0 == intval($cat)) {
+                $extended_categories = func_get_categories_list(0, true, true, 1);
+
+                if (!empty($extended_categories)) {
+                    $smarty->assign('extended_categories_list', $extended_categories);
+                }
+            }
         }

         if ($active_modules['Manufacturers']) {

(строки, отмеченные +, должны быть добавлены к коду)

кожа / ваша шкура / клиент / главная / welcome.tpl

{foreach from=$categories_menu_list item=c}
<a href="home.php?cat={$c.categoryid}" title="{$c.category|escape}">
  <li>
  <img src="{$c.image_path|amp}" alt="{$c.category|escape}"/>
          <strong>{$c.category}</strong><br/>
    <!-- list subcategories here-->
    {foreach from=$extended_categories_list item=ec}
      {if $ec.parentid eq $c.categoryid}{$ec.category|escape}<br />{/if}
    {/foreach}
  </li>
</a>
{/foreach}
1 голос
/ 11 октября 2011

ответ классики не совсем у меня сработал. Вот что я использовал:

    // Get categories menu data
    if (!empty($categories)) {
        $smarty->assign('categories_menu_list', $categories);

        foreach($categories as $c){
            $ext_cats = func_get_categories_list($c['categoryid'], true, true, 1);
            if(!empty($ext_cats)){
                $extended_categories[$c['categoryid']] = $ext_cats;
            }
            $ext_cats = "";
        }

        if (!empty($extended_categories)) {
            $smarty->assign('extended_categories_list', $extended_categories);
        }   
    }

Это циклически проходит по каждой категории и получает все подкатегории.

0 голосов
/ 15 июля 2015

Я знаю, что это старая ветка, но классический код отлично работал для меня, с некоторыми небольшими изменениями (чтобы сделать ссылку на подкатегории).Что я могу сделать, чтобы подкатегории уровня 3 + (подкатегории) также отображались?

Извинения за публикацию в неправильном месте.Чтобы восполнить это, у меня действительно есть дополнение к классическому коду.Оригинальный код только что перечислил подкатегории как текст / изображения, ниже я использовал то, что использовал, чтобы избавиться от картинок, но сделаю ссылки подкатегорий кликабельными

    <ul>
    {foreach from=$categories_menu_list item=c}
    <li><a href="home.php?cat={$c.categoryid}" title="{$c.category|escape}"><strong>{$c.category}</strong></a></li>

    <!-- list subcategories here-->
    {foreach from=$extended_categories_list item=ec}
    {if $ec.parentid eq $c.categoryid}<li><a href="home.php?cat={$ec.categoryid}" style="font-size:10px;">{$ec.category|escape}</a></li>{/if}
    {/foreach}

    {/foreach}
    </ul>
...