dmonco

Ограничить вывод категорий до определенного числа

Рекомендуемые сообщения

dmonco    3

Пытаюсь доработать модуль вывода категорий на главной странице.

С первым решением помогли. Теперь выводятся не только категории, но и подкатегории. Проблема в том, что в некоторых категориях больше 20 подкатегорий, и естественно вид сего этого не очень.

Поэтому хочу ограничить вывод подкатегорий к примеру до 10.

Думаю, надо использовать array_slice а куда его и как вместить хрен его знает. Знания на этом заканчиваются.

Буду рад за помощь.

Пример вывода категорий и подкатегорий сейчас:

Изображение

Вот сам файл

<?php
class ControllerModulecategoryhome4 extends Controller {
protected $category_id = 0;
protected $path = array();
protected function index() {
  $this->language->load('module/categoryhome4');
	 $this->data['heading_title'] = $this->language->get('heading_title');
  $this->load->model('catalog/category');
  $this->load->model('tool/image');
  if (isset($this->request->get['path'])) {
   $this->path = explode('_', $this->request->get['path']);
   $this->category_id = end($this->path);
  }
  $url = '';
  $this->data['categoryhome4'] = $this->getCategories($this->config->get('categoryhome4_category'));
  $this->id = 'categoryhome4';
  if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/categoryhome4.tpl')) {
   $this->template = $this->config->get('config_template') . '/template/module/categoryhome4.tpl';
  } else {
   $this->template = 'default/template/module/categoryhome4.tpl';
  }
  $this->render();
   }
																 //dymm
protected function getCategories($parent_id, $current_path = '',$stop = false) {
  $categoryhome4 = array();
  $category_id = array_shift($this->path);
  $results = $this->model_catalog_category->getCategories($parent_id);
  $i=0;
  foreach ($results as $result) {
   if (!$current_path)
   {
	$new_path = $result['category_id'];
   }
   else
   {
	$new_path = $current_path . '_' . $result['category_id'];
   }

   if ($this->category_id == $result['category_id']) {
   $categoryhome4[$i]['href'] = $this->url->link('product/category', 'path=' . $new_path);
   } else {
   $categoryhome4[$i]['href'] =  $this->url->link('product/category', 'path=' . $new_path);
   }
   if ($result['image']) {
	$image = $result['image'];
   } else {
	$image = 'no_image.jpg';
   }
   $categoryhome4[$i]['thumb'] = $this->model_tool_image->resize($image, 110, 110);
   $categoryhome4[$i]['name'] = $result['name'];
   //dymm  ------------------>
   if(!$stop)
	$categoryhome4[$i]['subcats'] = $this->getCategories($result['category_id'],$new_path,true);
   //dymm  <------------------
		$i++;
  }

  return $categoryhome4;
}
}
?>
Изменено пользователем afwollis

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
afwollis    1 097

многие знают.

лень.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
Yoda    435

Есть модуль вывода категорий дописанный, в котором есть возможность делать то что вы хотите - цена вопроса $50.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
freelancer    1 411

сложно сразу дать правильный ответ, потому как проверить нет возможности

попробуйте добавить

	   	 if ($stop && $i==10){
				break;
			}
после

	   	 //dymm  ------------------>
			if (!$stop)
				$categoryhome4[$i]['subcats'] = $this->getCategories($result['category_id'], $new_path, true);
			//dymm  <------------------
			$i++;

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты
dmonco    3

Вообще есть мысли усовершенствовать модуль.

Предлагаю скинутся.

Как Вы думаете, такой модуль будет интересен публике?

Сейчас модуль выводит категории второй вложенности и третьей (можно первой и второй).

В админке можно выбрать первый уровень категории, т.е. при выборе категории первого уровня, будут выводится на сайт 2-й и 3-й уровень категорий в виде блоков, как сейчас у меня на сайте: http://technolife.net.ua

Минусы в том, что в админке можно выбрать только одну категорию.

Задача.

Переделать выбор категорий в админке на чекбоксы, чтобы можно было выбирать несколько разных и разной вложенности.

Я предлагаю сделать в виде блоков.

По умолчанию будет один. Я отмечаю чекбоксом, что будет в первом блоке.

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

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

Ещё плюс такого модуля в том, что блоки заполняются слева направо по очереди. То есть если в админке я добавлю 7 модулей, к примеру, 5 выстроятся в первый ряд, остальные 2 слева во вторую строку.

Кое-что нарисовал, прилагаю.

Что скажет народ?

Сейчас

Изображение

После - изображение 1

Изображение

После- изображение 2

Изображение

После - изображение 3

Изображение

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти


  • Похожий контент

    • От victormickhan
      Здравствуйте. Нужна помощь - не могу вывести категории(нужны свойства типа $categories["href"]) в файле шаблона $home.tpl.
      Попытки объявления переменной в контроллере файла home.tpl на подобии файлов контроллера header.tpl или category.tpl не увенчались успехом.
      Поммогите пожалуйста.
      Спасибо!!!
    • От deezler
      Привет. Хочу вывести все категории товара на странице этого товара. Не нашел полного решения под Opencart 2 ни в рунете, ни буржунете.
      Проверил решение для Opencart 1.5. По описанию — именно то, что надо, но не работает на 2.2, к сожалению.
      Получилось вывести название категорий без ссылок по инструкции. Но ссылку вывести никак не получается.
      Еще получилось вывести название категории и ссылку по инструкции отсюда. Но таким методом, как я понял, можно вывести только на одну категорию, как в хлебных крошках.
      Помогите, пожалуйста, сделать вывод ссылок на соответствующие категории.
    • От Igorewa
      Доброго времени суток уважаемы форумчане.Случилась дикая напасть.... В категории товаров выводятся товары в одном ряду 3, в следующем 1, ссылка на сайт Как сделать что бы их было 3 в каждом ряду.
      В интернете нашел, что нужно править common.js, но как править не пойму... С помощью перемен и подбора результату то же 0
      if (cols1 == 2) {
      $('#content .product-layout:nth-child(2n+2)').after('<div class="clearfix visible-md visible-sm"></div>');
      } else if (cols1 == 1) {
      $('#content .product-layout:nth-child(3n+3)').after('<div class="clearfix visible-lg"></div>');
      } else {
      $('#content .product-layout:nth-child(4n+4)').after('<div class="clearfix"></div>');
      }
      if (cols == 2) {
      $('#content .product-layout').attr('class', 'product-layout product-grid col-lg-6 col-md-6 col-sm-12 col-xs-12');
      } else if (cols == 1) {
      $('#content .product-layout').attr('class', 'product-layout product-grid col-lg-4 col-md-4 col-sm-6 col-xs-12');
      } else {
      $('#content .product-layout').attr('class', 'product-layout product-grid col-lg-3 col-md-3 col-sm-6 col-xs-12');
      }
      Подскажите кто знает что надо сделать что бы товар не скучал 1 в строке...
    • От voron121
      Доброго времени суток уважаемые форумчане. Появилась у меня трабла с , казалось бы, стандартной задачей в opencart - вывод категорий. Используется платный шаблон (переделываю за предыдущим разработчиком его косяки) . После переноса сайта на другой хостинг перестали выводиться категории в шапке сайта. Делаю var_dump в руфвукюезд - пишет NULL . В то же время делаю var_dump в контроллере - выводит массив с данными. Шаблон в контролере видится и подключается. Где ошибка - не могу понять . Возможно кто подскажет. Вот код вьюхи с категориями 
      <?php if ($categories) { ?> <div id="menu"> <ul> <?php foreach ($categories as $category) { ?> <li><?php if ($category['active']) { ?> <a href="<?php echo $category['href']; ?>" class="active"><?php echo $category['name']; ?></a> <?php } else { ?> <a href="<?php echo $category['href']; ?>"><?php echo $category['name']; ?></a> <?php } ?> <?php if ($category['children']) { ?> <div> <?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 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> <?php } ?> <div id="menu"> Вот это в контроллере 

       
      // Menu if (isset($this->request->get['path'])) { $parts = explode('_', (string)$this->request->get['path']); } else { $parts = array(); } $this->load->model('catalog/category'); $this->load->model('catalog/product'); $this->load->model('tool/image'); $this->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->getCategories($category['category_id']); foreach ($children as $child) { if($child['image']) { $cat_image = $this->model_tool_image->resize($child['image'],30,30); }else{ $cat_image = $this->model_tool_image->resize('no_image_white.jpg',1,1); } //Будем вычислять кол-во товаров в категориях только если это кол-во надо показывать if ($this->config->get('config_product_count')) { $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'] . ($this->config->get('config_product_count') ? ' <span class="kolvo">' . $product_total . '</span>' : ''), 'thumb' => $cat_image, '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, 'active' => in_array($category['category_id'], $parts), 'column' => $category['column'] ? $category['column'] : 1, 'href' => $this->url->link('product/category', 'path=' . $category['category_id']) ); } } $this->children = array( 'module/language', 'module/currency', 'module/cart' ); /*****************************************/ $this->load->model('catalog/information'); $this->data['top_info'] = array(); foreach ($this->model_catalog_information->getInformations() as $result) { if ($result['top']) { $this->data['top_info'][] = array( 'title' => $result['title'], 'href' => $this->url->link('information/information', 'information_id=' . $result['information_id']) ); } } /****************************************/ if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/common/header.tpl')) { $this->template = $this->config->get('config_template') . '/template/common/header.tpl'; } else { $this->template = 'ava/template/common/header.tpl'; } $this->render(); } } ?>
  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу