Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Помогите с меню.


Recommended Posts

Доброго вечера всем.

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

 

Код прилагаю. Попытался написать проверку, но не выходит. Вот сайт, если непонятно описал проблему. Наведите на первую категорию, запомните её подкатегории и затем у второй категории будут эти же подкатегории + новые. https://vsemsnasti.ru/

 

<button type="button" class="cats-btn">
    <svg class="icon-sprite svg-icon">
        <use xlink:href="catalog/view/theme/vsemsnasti/img/symbol_sprite.svg#icon-menu"></use>
    </svg>
</button>
<?php foreach ($categories as $category) { ?>
    <div class="sidebar-item">
        <h3><a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a></h3>
        <?php if ($category['children']) { ?>
            <ul class="level1">
                <?php foreach ($category['children'] as $child) { ?>
                    <li>
                        <a href="<?php echo $child['href']; ?>">
                            <span class="a-txt"><?php echo $child['name']; ?></span>
                            <span class="svg-wrap v1">
                                <svg class="icon-sprite svg-icon icon-arr_right">
                                    <use xlink:href="catalog/view/theme/vsemsnasti/img/symbol_sprite.svg#icon-arr_right"></use>
                                </svg>
                            </span>
                        </a>
                        <span class="svg-wrap v2">
                            <svg class="icon-sprite svg-icon icon-arr_right">
                                <use xlink:href="catalog/view/theme/vsemsnasti/img/symbol_sprite.svg#icon-arr_right"></use>
                             </svg>
                        </span>
                        <?php if ($child['children']) { ?>
                            <div class="ul-wrap">
                                <ul class="level2">
                                    <?php foreach ($child['children'] as $child_lv2) { ?>
                                        <li><a href="<?php echo $child_lv2['href']; ?>"><?php echo $child_lv2['name']; ?></a></li>
                                    <?php } ?>
                                </ul>
                            </div>
                        <?php } ?>
                    </li>
                <?php } ?>
            </ul>
        <?php } ?>
    </div>
<?php } ?>

 

 

 

Спасибо за ранее.

Снимок.PNG

Снимок2.PNG

Змінено користувачем xonar
Надіслати
Поділитися на інших сайтах


тут вроде все правильно.

нужно смотреть как формируется массив категорий в контроллере

Надіслати
Поділитися на інших сайтах

2 минуты назад, fanatic сказал:

тут вроде все правильно.

нужно смотреть как формируется массив категорий в контроллере

Если я не ошибаюсь, речь идёт про этот контроллер, который по адресу - \catalog\view\theme\vsemsnasti\template\product\category.tpl ?

Надіслати
Поділитися на інших сайтах


К примеру, в дефолтном шаблоне есть такая проверка. Как я понял, именно она сверяет дитё с родителем. А вот в моей теме данной проверки нет. Попробовал сам, чуть всё не сломал.

 

  <?php if ($child['category_id'] == $child_id) { ?>

  <?php } ?>

 

Надіслати
Поділитися на інших сайтах


8 минут назад, xonar сказал:

Как я понял, именно она сверяет дитё с родителем.

нет, это проверка на текущую категорию 

Надіслати
Поділитися на інших сайтах

13 минут назад, xonar сказал:

речь идёт про этот контроллер, который по адресу - \catalog\view\theme\vsemsnasti\template\product\category.tpl ?

нет,  это шаблон

Надіслати
Поділитися на інших сайтах

нет. это контроллер карточки товара

меню категорий это модуль

catalog/controlltr/extension/module/category.php

или же это модуль шаблона

Надіслати
Поділитися на інших сайтах

Тогда вот. Заплачу за помощь, если поможете. Могу сначала заплатить,  а потом помощь.

<?php
// *	@copyright	OPENCART.PRO 2011 - 2017.
// *	@forum	http://forum.opencart.pro
// *	@source		See SOURCE.txt for source and other copyright.
// *	@license	GNU General Public License version 3; see LICENSE.txt

class ControllerExtensionModuleCategory extends Controller {
	public function index() {
		$this->load->language('extension/module/category');

		$data['heading_title'] = $this->language->get('heading_title');

		if (isset($this->request->get['path'])) {
			$parts = explode('_', (string)$this->request->get['path']);
		} else {
			$parts = array();
		}

		if (isset($parts[0])) {
			$data['category_id'] = $parts[0];
		} else {
			$data['category_id'] = 0;
		}

		if (isset($parts[1])) {
			$data['child_id'] = $parts[1];
		} else {
			$data['child_id'] = 0;
		}

		$this->load->model('catalog/category');

		$this->load->model('catalog/product');

		$data['categories'] = array();

		$categories = $this->model_catalog_category->getCategories(0);

		foreach ($categories as $category) {
			$children_data = array();
		
			$children = $this->model_catalog_category->getCategories($category['category_id']);
			$child_lv2 = array();
			foreach($children as $child) {
				$children_child = $this->model_catalog_category->getCategories($child['category_id']);
				
				foreach($children_child as $child_child) {
					$filter_data = array('filter_category_id' => $child_child['category_id'], 'filter_sub_category' => true);
					
					$child_lv2[] = array(
						'category_id' => $child_child['category_id'],
						'name' => $child_child['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
						'href' => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id'] . '_'. $child_child['category_id'])
					);
				}
				
				$filter_data = array('filter_category_id' => $child['category_id'], 'filter_sub_category' => true);
				
				$children_data[] = array(
					'category_id' => $child['category_id'],
					'name' => $child['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
					'children'    => $child_lv2,
					'href' => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id'])
				);
			}

			$filter_data = array(
				'filter_category_id'  => $category['category_id'],
				'filter_sub_category' => true
			);
			/*if($data['category_id'] == $category['category_id'] || $data['category_id']==0){*/
				$data['categories'][] = array(
					'category_id' => $category['category_id'],
					'name'        => $category['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
					'children'    => $children_data,
					'href'        => $this->url->link('product/category', 'path=' . $category['category_id'])
				);
			/*}*/
		}

		return $this->load->view('extension/module/category', $data);
	}
}

 

Надіслати
Поділитися на інших сайтах


<?php

class ControllerExtensionModuleCategory extends Controller
   {

 public function index()
     {
       $this->load->language('common/menu');
       /*Menu*/
       $this->load->model('catalog/category');
       $this->load->model('catalog/product');
       $data['categories']=array();
       $categories=$this->model_catalog_category->getCategories(0);
      foreach($categories as $category)
       {
       if($category['top'])
         {
         /*Level 2*/
           $children_data=array();
           $children=$this->model_catalog_category->getChildCategories($category['category_id']);
          foreach($children[0] as $child)
           {
             $filter_data=array(
             'filter_category_id'=>$child['category_id'],
             'filter_sub_category'=>true);
           if(!file_exists(DIR_IMAGE.'catalog/'.$child['image']))$image='image/catalog/3-100x100-60x50.jpg';
                 else
                $image='image/catalog/'.$child['image'];
                 $children_child = null;
                 if($children[1]) {
                 $children_child = $this->getChildInChild($children[1],$category['category_id'].'_'.$child['category_id'],$child['category_id']);
                 }
             $children_data[]=array(
             'name'=>$child['name'].($this->config->get('config_product_count')?'('.$this->model_catalog_product->getTotalProducts($filter_data).')':''),
             'href'=>$this->url->link('product/category', 'path='.$category['category_id'].'_'.$child['category_id']),
                  'children_child'=>$children_child,
             'image'=>$image);
           }
           /*Level 1*/
           $data['categories'][]=array(
           'name'=>$category['name'],
           'children'=>$children_data,
           'column'=>$category['column']?$category['column']:1,
           'href'=>$this->url->link('product/category', 'path='.$category['category_id']));
         }
       }
        return $this->load->view('extension/module/category', $data);
     }
     
     protected function getChildInChild($array,$href,$parent){
          /*Level 3*/
          $children_data = array();
               foreach($array as $child)
           {
                  if($child['parent_id']!=$parent)
                         continue;
             $children_data[]=array(
             'name'=>$child['name'],
             'href'=>$this->url->link('product/category', 'path='.$href.'_'.$child['category_id']));
           }    
          return $children_data;
     }
   }

Попробуй это контроллер

Цитата
Цитата

 

 

 

 

Надіслати
Поділитися на інших сайтах

  public function getChildCategories($parent_id = 0) {
        $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "category c LEFT JOIN " . DB_PREFIX . "category_description cd ON (c.category_id = cd.category_id) LEFT JOIN " . DB_PREFIX . "category_to_store c2s ON (c.category_id = c2s.category_id) WHERE c.parent_id = '" . (int)$parent_id . "' AND cd.language_id = '" . (int)$this->config->get('config_language_id') . "' AND c2s.store_id = '" . (int)$this->config->get('config_store_id') . "'  AND c.status = '1' ORDER BY c.sort_order, LCASE(cd.name)");
    $array=array();    
foreach($query->rows as $row){
    $array[]=$row['category_id'];    
}
if(!empty($array))
        return array($query->rows,$this->getChildInChild($array));
else
    return array($query->rows,false);
    }

    protected function getChildInChild($parent_id = array()) {
        $query = $this->db->query("SELECT c.*,cd.* FROM " . DB_PREFIX . "category AS c LEFT JOIN " . DB_PREFIX . "category_description AS cd ON (c.category_id = cd.category_id)  WHERE c.parent_id IN(" . implode(',',$parent_id  ).") AND cd.language_id = " . (int)$this->config->get('config_language_id') . " AND    c.status = 1");
        return $query->rows;
    }

А это в модели

  

Надіслати
Поділитися на інших сайтах

10 часов назад, esculapra сказал:

А это в модели

  

 

Вставил, контроллер по пути - catalog/controlltr/extension/module/category.php

И модель по пути - /catalog/model/catalog/category.php

 

Ничего не получилось. Категории отображаются нормально, а подкатегории пропали.

 

Надіслати
Поділитися на інших сайтах


 <div class="h3">
     {{ heading_title }}
   </div>
   <ul id="left-menu">
     {% for category in categories %}
     <li class="parent">
       {% if category.category_id == category_id %}
       <a href="{{ category.href }}" class="active">
         {{ category.name }}
       </a>
       {% else %}
       <a href="{{ category.href }}">
         {{ category.name }}
       </a>
       {% endif %}
       {% if category.children %}
       <ul id="submenu">
         {% for child in category.children %}
         <li class="parent">
           {% if child.category_id == child_id %}
           <a href="{{ child.href }}" class="active">
             {{ child.name }}
           </a>
           {% else %}
           <a href="{{ child.href }}">
             {{ child.name }}
           </a>
           {% endif %}
           {% if child.children_child %}
           <ul id="submenu">
             {% for children_child in child.children_child  %}
             <li class="parent">
               <a href="{{ children_child.href }}">
                 {{ children_child.name }}
               </a>
             </li>
             {% endfor %}
           </ul>
           {% endif %}
         </li>
         {% endfor %}
       </ul>
       {% endif %}
     </li>
     {% endfor %}
   </ul>
4 часа назад, xonar сказал:

подкатегории пропали

Потому что нужно еще изменить контроллер. Это меню переделалось для сайта https://udachi.by/

Вот шаблон, только нужно учесть, что необходимо добавить стили

 

Надіслати
Поділитися на інших сайтах

Всем спасибо за помощь. Мне помог данный человек - https://opencartforum.com/profile/11962-wadamir/

 

Спасибо ему огромное, причина была в том, что массив не сбрасывался.

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.