Ответить Новая тема Новый опрос 
 Сделать категории и подкатегории активными
pukinnet
Новичок
Сообщений: 19
Регистрация: 28-10-2010


28-04-2011 04:40
Хочу сделать так, чтобы при выборе категории или подкатегории в блоке категорий, активними становились все из данной родительской категории. Т.е. параметр selected присваивался всем из них, а не одной выбранной, как в стандартном модуле. Для этого добавил в таблицу ps_category строку id_branche, в которой будут присвоены id родительских категорий первого уровня. Т.е. при создании подкатегорий Netbooks и Notebooks в категории Laptops их id_branche будет присвоен id_category от Laptops. Соответственно в файлах modules\blockcategories\category-tree-branch.tpl и themes\prestashop\category-tree-branch.tpl строки
Код:
<li {if isset($last) && $last == 'true'}class="last"{/if}>
    <a href="{$node.link}" {if isset($currentCategoryId) && ($node.id == $currentCategoryId)}class="selected"{/if} title="{$node.desc|escape:html:'UTF-8'}">{$node.name|escape:html:'UTF-8'}</a>

заменил на
Код:
<li {if isset($currentCategoryId) && ($node.id_branche == $currentCategoryId)}class="selected"{/if}>
    <a href="{$node.link}" title="{$node.desc|escape:html:'UTF-8'}">{$node.name|escape:html:'UTF-8'}</a>


В файле modules\blockcategories\blockcategories.php после строк
Код:
$children = array();
        if (isset($resultParents[$id_category]) AND sizeof($resultParents[$id_category]) AND ($maxDepth == 0 OR $currentDepth < $maxDepth))
            foreach ($resultParents[$id_category] as $subcat)
                $children[] = $this->getTree($resultParents, $resultIds, $maxDepth, $subcat['id_category'], $currentDepth + 1);
        if (!isset($resultIds[$id_category]))
            return false;
        return array('id' => $id_category, 'link' => $link->getCategoryLink($id_category, $resultIds[$id_category]['link_rewrite']),

добавил
Код:
'id_branche' => $resultIds[$id_category]['id_branche'],


строки
Код:
if (Tools::isSubmit('id_product'))
            {
                if (!isset($cookie->last_visited_category) OR !Product::idIsOnCategoryId($id_product, array('0' => array('id_category' => $cookie->last_visited_category))))

заменил на
Код:
if (Tools::isSubmit('id_product'))
            {
                if (!isset($cookie->last_visited_category) OR !Product::idIsOnCategoryId($id_product, array('0' => array( 'id_branche' => $cookie->last_visited_category))))


А что сделать со строками
Код:
if (Tools::isSubmit('id_category'))
            {
                $cookie->last_visited_category = $id_category;
                $smarty->assign('currentCategoryId', $cookie->last_visited_category);
            }

не знаю. Как здесь вместо $id_category вызвать id_branche из выбраной категории?
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
pukinnet
Новичок
Сообщений: 19
Регистрация: 28-10-2010


06-05-2011 01:34
Решил это следующим образом. В конце файла classes\Category.php добавил функцию
Код:
public function getBranche()
    {
        $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS('
        SELECT `id_branche` FROM `'._DB_PREFIX_.'category` WHERE `id_category`='.(int)($id_category).'
        ');
        return $result;
    }


А в modules\blockcategories\blockcategories.php
Код:
if (Tools::isSubmit('id_category'))
            {
                $cookie->last_visited_category = $id_category;
                $smarty->assign('currentCategoryId', $cookie->last_visited_category);
            }

заменил на
Код:
if (Tools::isSubmit('id_category'))
            {
            if (!isset($cookie->last_visited_category) OR !Category::getBranche($id_category, array('0' => array( 'id_branche' => $cookie->last_visited_category))))
            {
            $category = new Category($id_category);
                    if (isset($category) AND Validate::isLoadedObject($category))
                        $cookie->last_visited_category = (int)($category->id_branche);
            }
        $smarty->assign('currentCategoryId', (int) ($cookie->last_visited_category));    
            }
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Ответить Новая тема Новый опрос