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

Многоуровневое меню


raziel

Recommended Posts

Доброго времени суток!

Столкнулся с маленькой проблемой - нужно как-то организовать многоуровневое меню на 1.5.0.5 или же 1.5.1 движке. Т.е. У меня есть такое меню как показано на скрине, а необходимо чтоб в меню комплектующие отображалось подменю оперативная память и видеокарты. Как на скрине в поиске отображается эти подменю, а на меню в хедере пишется "Комплектующие (0)", хотя там по каталогу организовано подменю. Каким образом можно организовать многоуровневое меню и не будет ли это влиять на работу хака "экспорт/импорт" из экселя?

post-10373-0-96210300-1311608494_thumb.jpg

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


Как я понимаю - вот это код меню

<div id="menu" class="third_color_bg grid_12">
  <ul>
    <?php foreach ($categories as $category) { ?>
    <li><a class="sixth_color_bg" href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a>
   
      <?php if ($category['children']) { ?>
      <div class="sixth_color_border">
        <?php for ($i = 0; $i < count($category['children']);) { ?>
        <ul>
          <?php $j = $i + ceil(count($category['children']) / $category['column']); ?>
          <?php for (; $i < $j; $i++) { ?>
          <?php if (isset($category['children'][$i])) { ?>
          <li><a class="secondary_color" href="<?php echo $category['children'][$i]['href']; ?>"><?php echo  $category['children'][$i]['name']; ?></a></li>
          <?php } ?>
          <?php } ?>
        </ul>
        <?php } ?>
      </div>
      <?php } ?>
    </li>
  
    <?php } ?>
    
  </ul>
</div>

/catalog/view/theme/gentle/template/common/header.tpl

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


Это только шаблон вывода меню, а выборка категорий находится в файле /catalog/controller/common/header.php

		// Menu
		$this->load->model('catalog/category');
		$this->load->model('catalog/product');
		
		$this->data['categories'] = array();
					
		$categories = $this->model_catalog_category->getCategories(0);
		
		foreach ($categories as $category) {
			if ($category['top']) {
				$children_data = array();
				
				$children = $this->model_catalog_category->getCategories($category['category_id']);
				
				foreach ($children as $child) {
					$data = array(
						'filter_category_id'  => $child['category_id'],
						'filter_sub_category' => true	
					);		
						
					$product_total = $this->model_catalog_product->getTotalProducts($data);
									
					$children_data[] = array(
						'name'  => $child['name'] . ' (' . $product_total . ')',
						'href'  => $this->url->link('product/category', 'path=' . $category['category_id'] . '_' . $child['category_id'])	
					);					
				}
				
				// Level 1
				$this->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'])
				);
			}
		}

Но как видиш формируется только два уровня

Три уровня формируется в карте сайта, смотри файл /catalog/controller/information/sitemap.php

		$this->load->model('catalog/category');
		$this->load->model('catalog/product');
		
		$this->data['categories'] = array();
					
		$categories_1 = $this->model_catalog_category->getCategories(0);
		
		foreach ($categories_1 as $category_1) {
			$level_2_data = array();
			
			$categories_2 = $this->model_catalog_category->getCategories($category_1['category_id']);
			
			foreach ($categories_2 as $category_2) {
				$level_3_data = array();
				
				$categories_3 = $this->model_catalog_category->getCategories($category_2['category_id']);
				
				foreach ($categories_3 as $category_3) {
					$level_3_data[] = array(
						'name' => $category_3['name'],
						'href' => $this->url->link('product/category', 'path=' . $category_1['category_id'] . '_' . $category_2['category_id'] . '_' . $category_3['category_id'])
					);
				}
				
				$level_2_data[] = array(
					'name' 	=> $category_2['name'],
					'children' => $level_3_data,
					'href' 	=> $this->url->link('product/category', 'path=' . $category_1['category_id'] . '_' . $category_2['category_id'])	
				);					
			}
			
			$this->data['categories'][] = array(
				'name' 	=> $category_1['name'],
				'children' => $level_2_data,
				'href' 	=> $this->url->link('product/category', 'path=' . $category_1['category_id'])
			);
		}

Можно слегка подправить и использовать...

Подобные алгоритмы генерят безобразное количество запросов к БД, поэтому и ограничивается количество уровней.

По хорошему можно делать выборку всего дерева каталогов одним запросом. О таком алгоритме я писал - поищи на форуме.

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

Если я правильно понял по цитатам, то мне необходимо править файл хедера?

Я с рнр не сильно дружу... Попробовал изменить сайтмеп и никаких изменений в меню не произошло, из этого вывод - или я не правильно что-то написал, или я не там дописывал код.

кстати еще один вопрос, если у меня получится дописать код, который нужно - как быть с цсс? Есть ли прописанные стили для вывода в бок или же надо еще дописывать цсс?

			
		$this->load->model('catalog/category');
		$this->load->model('catalog/product');
		
		$this->data['categories'] = array();
					
		$categories_1 = $this->model_catalog_category->getCategories(0);
		
		foreach ($categories_1 as $category_1) {
			$level_2_data = array();
			
			$categories_2 = $this->model_catalog_category->getCategories($category_1['category_id']);
			
			foreach ($categories_2 as $category_2) {
				$level_3_data = array();
				
				$categories_3 = $this->model_catalog_category->getCategories($category_2['category_id']);
				
				foreach ($categories_3 as $category_3) {
				$level_4_data = array();
				
				$categories_4 = $this->model_catalog_category->getCategories($category_3['category_id']);
			
				
					foreach ($categories_4 as $category_4) {
						$level_4_data[] = array(
							'name' => $category_4['name'],
							'href' => $this->url->link('product/category', 'path=' . $category_1['category_id'] . '_' . $category_2['category_id'] . '_' . $category_3['category_id'] . '_' . $category_4['category_id'])
						);
					}

				
				
					$level_3_data[] = array(
						'name' => $category_3['name'],
						'href' => $this->url->link('product/category', 'path=' . $category_1['category_id'] . '_' . $category_2['category_id'] . '_' . $category_3['category_id'])
					);
				}
				
				$level_2_data[] = array(
					'name'     => $category_2['name'],
					'children' => $level_3_data,
					'href'     => $this->url->link('product/category', 'path=' . $category_1['category_id'] . '_' . $category_2['category_id'])	
				);					
			}
			
			$this->data['categories'][] = array(
				'name'     => $category_1['name'],
				'children' => $level_2_data,
				'href'     => $this->url->link('product/category', 'path=' . $category_1['category_id'])
			);
		}
	

поищи на форуме.

если б я знал что искать
Надіслати
Поділитися на інших сайтах


если б я знал что искать

Алгоритм я описывал тут https://opencartforum.com/index.php?showtopic=3355&view=findpost&p=22909 но если ты не знаком с PHP тебе это мало чем поможет и CSS скорее всего прийдётся править.

Опиши что конкретно ты хочеш получить. Меню до третьего уровня или все уровни?

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

Будут некоторые пункты меню как комплектующие. Когда наводишь компьютеры - выпадает либо горизонтальное меню в несколько столбцов, либо вертикальное. Наводишь на пункт комплектующие выпадает еще меню. Таким же образом сделать в ноутбуках пункт комплектующие для ноутбуков, для примера. Это получается до третьего уровня, глубже не имеет смысла.

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


  • 1 year later...

Всем привет, кто в теме!

Помогите создать мульти меню категорий. Точнее меню вывода категорий третьего уровня так:

При наведении на категорию, которая закреплена на главной - выпадает список всех категорий 2-го уровня (выделенный жирным), которые в ней находятся. Под каждой категорией 2-го уровня находятся категории 3-го уровня (не выделенные жирным) в столбик. В итоге мы имеем общую информацию про ту продукцию, которая есть в основной категории.

Вот как тут:

primer.png

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


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

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

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

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

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

Вхід

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

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

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

×
×
  • Створити...

Important Information

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