Перейти к содержанию

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

Я просто не могу не поделиться с вами творением мастера с themeforest

https://themeforest.net/item/kept-responsive-opencart-theme/19982236

 

Я читал этот файл как хороший детектив на ночь.

 

Угадайте куда он цепляется? Правильно! К common/menu! в Opencart 3! 

 

Для тех кто не хочет читать и восхищаться - спойлер

 

Спойлер

Перебрать 2 раза(!) на каждой странице 4 уровня категорий и посчитать там количество товаров! Я даже не знаю куда и как надо бить таких "разработчиков"

 

<?php
/*

 Project - "KEPT" - Responsive OpenCart Premium Theme

 --------------------------------------------------------------------------------

 BUY LICENCE:     https://themeforest.net/user/0808web/portfolio

 Author:          ROBERT from 0808web
 Website:         0808web.com
 Theme Version:   1.5.0.0
 Compatible:      OpenCart 3.0.2.0 or higher

 --------------------------------------------------------------------------------

 COPYRIGHT 2017 ROBERT MIRCIOI ALL RIGHTS RESERVED

*/

if ($this->config->get('config_theme') == 'kept') {
	if (isset($this->request->get['path'])) {
		$parts = explode('_', (string)$this->request->get['path']);
	} else {
		$parts = array();
	}
		
	if (isset($parts[0])) {
		$data['category_1_id'] = $parts[0];
	} else {
		$data['category_1_id'] = 0;
	}
	
	if (isset($parts[1])) {
		$data['category_2_id'] = $parts[1];
	} else {
		$data['category_2_id'] = 0;
	}
	
	if (isset($parts[2])) {
		$data['category_3_id'] = $parts[2];
	} else {
		$data['category_3_id'] = 0;
	}
	
	if (isset($parts[3])) {
		$data['category_4_id'] = $parts[3];
	} else {
		$data['category_4_id'] = 0;
	}
	 
	$this->load->model('catalog/category');

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

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

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

	foreach ($kept_categories as $category_1) {
		if ($category_1['top']) {
			$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) {
						$data_category_4 = array('filter_category_id' => $category_4['category_id'], 'filter_sub_category' => false);
						$product_total_category_4 = $this->model_catalog_product->getTotalProducts($data_category_4);
						
						$level_4_data[] = array(
							'name' => $category_4['name'] . ($this->config->get('config_product_count') ? '<sup>' . $product_total_category_4 . '</sup>' : ''),
							'id' => $category_4['category_id'],
							'href' => $this->url->link('product/category', 'path=' . $category_1['category_id'] . '_' . $category_2['category_id'] . '_' . $category_3['category_id'] . '_' . $category_4['category_id'])
						);
					}

					$data_category_3 = array('filter_category_id' => $category_3['category_id'], 'filter_sub_category' => false);
					$product_total_category_3 = $this->model_catalog_product->getTotalProducts($data_category_3);
					
					$level_3_data[] = array(
						'name' => $category_3['name'] . ($this->config->get('config_product_count') ? '<sup>' . $product_total_category_3 . '</sup>' : ''),
						'id' => $category_3['category_id'],
						'children' => $level_4_data,
						'href' => $this->url->link('product/category', 'path=' . $category_1['category_id'] . '_' . $category_2['category_id'] . '_' . $category_3['category_id'])
					);
				}

				$data_category_2 = array('filter_category_id' => $category_2['category_id'], 'filter_sub_category' => false);
				$product_total_category_2 = $this->model_catalog_product->getTotalProducts($data_category_2);
				
				$level_2_data[] = array(
					'name' => $category_2['name'] . ($this->config->get('config_product_count') ? '<sup>' . $product_total_category_2 . '</sup>' : ''),
					'id' => $category_2['category_id'],
					'children' => $level_3_data,
					'href' => $this->url->link('product/category', 'path=' . $category_1['category_id'] . '_' . $category_2['category_id'])
				);					
			}

			$data_category_1 = array('filter_category_id' => $category_1['category_id'], 'filter_sub_category' => true);
			$product_total_category_1 = $this->model_catalog_product->getTotalProducts($data_category_1);
		
			$data['kept_categories'][] = array(
				'name' => $category_1['name'],
				'name_count' => $category_1['name'] . ($this->config->get('config_product_count') ? '<sup>' . $product_total_category_1 . '</sup>' : ''),
				'id' => $category_1['category_id'],
				'children' => $level_2_data,
				'href' => $this->url->link('product/category', 'path=' . $category_1['category_id'])
			);
		}
	}
	
	$data['kept_sidebar_categories'] = array();

	$kept_sidebar_categories = $this->model_catalog_category->getCategories(0);
	
	foreach ($kept_sidebar_categories 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) {
					$data_category_4 = array('filter_category_id' => $category_4['category_id'], 'filter_sub_category' => false);
					$product_total_category_4 = $this->model_catalog_product->getTotalProducts($data_category_4);
					

					$level_4_data[] = array(
						'name' => $category_4['name'] . ($this->config->get('config_product_count') ? '<sup>' . $product_total_category_4 . '</sup>' : ''),
						'id' => $category_4['category_id'],
						'href' => $this->url->link('product/category', 'path=' . $category_1['category_id'] . '_' . $category_2['category_id'] . '_' . $category_3['category_id'] . '_' . $category_4['category_id'])
					);
				}

				$data_category_3 = array('filter_category_id' => $category_3['category_id'], 'filter_sub_category' => false);
				$product_total_category_3 = $this->model_catalog_product->getTotalProducts($data_category_3);
				
				$level_3_data[] = array(
					'name' => $category_3['name'] . ($this->config->get('config_product_count') ? '<sup>' . $product_total_category_3 . '</sup>' : ''),
					'id' => $category_3['category_id'],
					'children' => $level_4_data,
					'href' => $this->url->link('product/category', 'path=' . $category_1['category_id'] . '_' . $category_2['category_id'] . '_' . $category_3['category_id'])
				);
			}

			$data_category_2 = array('filter_category_id' => $category_2['category_id'], 'filter_sub_category' => false);
			$product_total_category_2 = $this->model_catalog_product->getTotalProducts($data_category_2);
			

			$level_2_data[] = array(
				'name' => $category_2['name'] . ($this->config->get('config_product_count') ? '<sup>' . $product_total_category_2 . '</sup>' : ''),
				'id' => $category_2['category_id'],
				'children' => $level_3_data,
				'href' => $this->url->link('product/category', 'path=' . $category_1['category_id'] . '_' . $category_2['category_id'])
			);					
		}

		$data_category_1 = array('filter_category_id' => $category_1['category_id'], 'filter_sub_category' => true);
		$product_total_category_1 = $this->model_catalog_product->getTotalProducts($data_category_1);
		
		$data['kept_sidebar_categories'][] = array(
			'name' => $category_1['name'],
			'name_count' => $category_1['name'] . ($this->config->get('config_product_count') ? '<sup>' . $product_total_category_1 . '</sup>' : ''),
			'id' => $category_1['category_id'],
			'children' => $level_2_data,
			'href' => $this->url->link('product/category', 'path=' . $category_1['category_id'])
		);
	}
	
	$data['code'] = $this->session->data['language'];

	$this->load->model('localisation/language');

	$results = $this->model_localisation_language->getLanguages();

	foreach ($results as $result) {
		if ($data['code'] == $result['code']) {
			$data['t08_kept_language'] = $result['language_id'];
		}
	}
	
	$data['t08_kept_text'] = $this->config->get('theme_kept_text');
	
	$data['t08_kept_header'] = $this->config->get('theme_kept_header');
	
	$data['t08_kept_header_urls'] = $this->config->get('theme_kept_header_url');
}

 

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


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

Потому что Themeforest и ускорить - это антонимы. Как и совместимость их шаблонов с модулями.

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


Ссылка на сообщение
Поделиться на другие сайты
7 минут назад, Yakaya сказал:

Потому что Themeforest и ускорить - это антонимы. Как и совместимость их шаблонов с модулями.

 

У меня просто, как говорят сейчас по-модному, бомбануло, когда увидел Fast page speed loading

 

Top 3 KEPT Best Features

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


Ссылка на сообщение
Поделиться на другие сайты
Только что, spectre сказал:

 

У меня просто, как говорят сейчас по-модному, бомбануло, когда увидел Fast page speed loading

 

Top 3 KEPT Best Features

 

У меня были их шаблоны когда-то. Аж целых два. Доблестный Page Speed они не смогли за год исправить и после каждого релиза, когда народ начинал выдавать в форуме поддержки гору ошибок либо рекомендовали отключить, либо говорили, что это не их проблемы.

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


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

Ну а что вы хотел ? Там в основном индусы клепают

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


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

зато сертифицированные разрабётчики
как диплом  Подмосковья 
 

Спойлер

Спускается человек в первые в метро и удивлённо восклицает; "Ах вот оно какое Подмосковье!"

 

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


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

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

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

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

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

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

Войти

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

Войти

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

    • От xds
      2 490.00 руб
      Скачать/Купить дополнение


      Frame Theme - быстрый адаптивный шаблон для OpenCart 3.x
      Frame это современный адаптивный шаблон для OpenCart 3.x, построенный на базе фреймворка Bootstrap 4 и включающий в себя целый комплекс дополнительных модулей, настроек и программных решений, необходимых для полноценной работы современного интернет магазина. Шаблон обладает продуманными юзабилити и интуитивно понятным интерфейсом, от которых, как известно, напрямую зависит высокая конверсия интернет магазина. А чистый и аккуратный код значительно упростит задачу разработчику, который решит доработать шаблон в соответствии с индивидуальными требованиями заказчика, или хозяину магазина, который захочет самостоятельно внести правки в код своего сайта. Frame можно успешно использовать как в качестве самостоятельного шаблона так и в качестве основы для создания уникального дизайна вашего интернет-магазина.
       
      Дополнительный функционал, среди прочего, реализованный в шаблоне:
      настраиваемая форма заказа обратного звонка модуль быстрого заказа товаров модуль быстрого просмотра товаров стильная popup корзина настраиваемые контакты в шапке сайта два дополнительных меню в шапке сайта настраиваемое меню категорий с функцией “амазон-меню” иконки платежных систем в подвале сайта интерактивная карта в подвале сайта (поддерживается api карт, как от Яндекс, так и от Google) ajax догрузка товаров в каталоге "Показать еще" Модуль карусели товаров с гибкими настройками настраиваемый "живой" поиск  модальные окна, адаптированные под работу с мобильными устройствами ... На момент написания этого текста шаблон имеет более 100 настроек и их число с каждым обновлением растет. Поэтому перечислять здесь их все не имеет смысла. Подробно ознакомится с возможностями шаблона можно в админ-панели демонстрационного сайта.
       
      Демонстрация шаблона

       
      Обратите внимание!
      На демо сайте представлено 2 модуля не входящих в состав шаблона:
      Обновление цены при выборе опции, без AJAX 4.1.4 (модуль совместим с шаблоном "из коробки") OCFilter - Модуль фильтра товаров 4.7.5 (файлы адаптации модуля к шаблону есть в комплекте) Перечисленные выше модули, если они вам требуется, нужно приобретать отдельно у их авторов. Все остальные модули и функционал, которые представлены на демо сайте входят в состав шаблона.
       
      Производительность - PageSpeed Insights 100/100 *

      * что такое PageSpeed Insights и как проводились измерения?
       
      Валидность кода - полное соответствие стандартам W3C
       
      Системные требования
       
      Лицензия / условия использования
       
      Техническая поддержка
       
      Условия покупки
       
      Добавил xds Добавлено 03.05.2018 Категория Платные шаблоны Системные требования php 5.4+ и ioncube loader 4.4+ Сайт разработчика http://xds.by/ Старая цена 4990 Метод активации Автоматическая активация Ioncube Loader Требуется OpenCart 3.0 ocStore 3.0 OpenCart.Pro, ocShop Обращение к серверу разработчика  
    • От xds
      Frame это современный адаптивный шаблон для OpenCart 3.x, построенный на базе фреймворка Bootstrap 4 и включающий в себя целый комплекс дополнительных модулей, настроек и программных решений, необходимых для полноценной работы современного интернет магазина. Шаблон обладает продуманными юзабилити и интуитивно понятным интерфейсом, от которых, как известно, напрямую зависит высокая конверсия интернет магазина. А чистый и аккуратный код значительно упростит задачу разработчику, который решит доработать шаблон в соответствии с индивидуальными требованиями заказчика, или хозяину магазина, который захочет самостоятельно внести правки в код своего сайта. Frame можно успешно использовать как в качестве самостоятельного шаблона так и в качестве основы для создания уникального дизайна вашего интернет-магазина.
       
      Дополнительный функционал, среди прочего, реализованный в шаблоне:
      настраиваемая форма заказа обратного звонка модуль быстрого заказа товаров модуль быстрого просмотра товаров стильная popup корзина настраиваемые контакты в шапке сайта два дополнительных меню в шапке сайта настраиваемое меню категорий с функцией “амазон-меню” иконки платежных систем в подвале сайта интерактивная карта в подвале сайта (поддерживается api карт, как от Яндекс, так и от Google) ajax догрузка товаров в каталоге "Показать еще" Модуль карусели товаров с гибкими настройками настраиваемый "живой" поиск  модальные окна, адаптированные под работу с мобильными устройствами ... На момент написания этого текста шаблон имеет более 100 настроек и их число с каждым обновлением растет. Поэтому перечислять здесь их все не имеет смысла. Подробно ознакомится с возможностями шаблона можно в админ-панели демонстрационного сайта.
       
      Демонстрация шаблона

       
      Обратите внимание!
      На демо сайте представлено 2 модуля не входящих в состав шаблона:
      Обновление цены при выборе опции, без AJAX 4.1.4 (модуль совместим с шаблоном "из коробки") OCFilter - Модуль фильтра товаров 4.7.5 (файлы адаптации модуля к шаблону есть в комплекте) Перечисленные выше модули, если они вам требуется, нужно приобретать отдельно у их авторов. Все остальные модули и функционал, которые представлены на демо сайте входят в состав шаблона.
       
      Производительность - PageSpeed Insights 100/100 *

      * что такое PageSpeed Insights и как проводились измерения?
       
      Валидность кода - полное соответствие стандартам W3C
       
      Системные требования
       
      Лицензия / условия использования
       
      Техническая поддержка
       
      Условия покупки
       
    • От Yoda
      Подскажите пожалуйста, есть  магазин, 470 000 товаров в одной категории.
      На выделенном сервере Intel(R) Xeon(R) CPU E3-1270 v6 @ 3.80GHz (8 cores) 16ГБ .
      У товара 20 атрибутов, - суммарно выходит порядка 10М значений атрибутов (которые надо считать на-лету). 
      Весь каталог работает через промежуточную прокладку в виде Sphinx-демона. 
      Файлы индекса сфинкса лежат в RAM диске в оперативной памяти.
      (выборка товаров в категории, подсчет количества значений атрибутов в фильтре, все все все, что можно крутится на сфинксе)
      После партицирования индекса на 8 частей и перенастройки конфигурации демона для использования всех 8 ядер процессора, удалось снизить время реакции фильтра с 5 до 1-1.2сек.
      Среднее время генерации страниц в районе 600мс. При переходе на php7.2 - будет порядка 400-450.
      Владелец магазина возмущается, ему не достаточно скорости.
      Подскажите, что можно сделать для ускорения магазина?
    • От theplastique
      1 299.00 руб
      Скачать/Купить дополнение


      FASHIONMART - адаптивный шаблон интернет магазина одежды, обуви, аксессуаров
      Шаблон работает на Opencart, Ocstore  2x и 3x. FASHIONMART - адаптивный шаблон интернет магазина одежды, обуви, аксессуаров и других тематик фэшн-индустрии. Шаблон обладает всем необходимым функционалом для старта интернет торговли уже сегодня. Полностью адаптивный и кроссбраузерный шаблон с валидным кодом (проверить по ссылке).
      Помимо стандартного функционала opencart шаблон обладает рядом преимуществ:
      Модуль слайдшоу с возможностью добавлять текст и ссылки; Модуль блока преимуществ; Модуль баннерная сетка; Модуль подписка на новости; Смена фото при наведении на карточку товара на страницах каталога, а так же в модулях вывода товара; Сворачивание длинного описания категории Удобный вывод фото и дополнительных фото на странице товара с эффектом zoom; Вывод логотипа бренда/производителя в карточке товара; Практически идентичная структура шаблона с стандартным, что делает шаблон FASHIONMART совместимым с сторонними модулями;  
      Бесплатная помощь в установке и настройке шаблона при необходимости!
      Мы постоянно работаем над улучшением шаблона и добавлением дополнительного функционала, все обновления абсолютно бесплатные!
      Демо главной страницы
      Демо страницы категории
      Демо страницы товара
       





      Добавил theplastique Добавлено 13.11.2017 Категория Платные шаблоны Системные требования php 5.4 и выше Сайт разработчика Старая цена 1600 Метод активации Без активации Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0 ocStore 3.0
      2.3
      2.2
      2.1 OpenCart.Pro, ocShop Не проверялось  
    • От theplastique
      Шаблон работает на Opencart, Ocstore  2x и 3x. FASHIONMART - адаптивный шаблон интернет магазина одежды, обуви, аксессуаров и других тематик фэшн-индустрии. Шаблон обладает всем необходимым функционалом для старта интернет торговли уже сегодня. Полностью адаптивный и кроссбраузерный шаблон с валидным кодом (проверить по ссылке).
      Помимо стандартного функционала opencart шаблон обладает рядом преимуществ:
      Модуль слайдшоу с возможностью добавлять текст и ссылки; Модуль блока преимуществ; Модуль баннерная сетка; Модуль подписка на новости; Смена фото при наведении на карточку товара на страницах каталога, а так же в модулях вывода товара; Сворачивание длинного описания категории Удобный вывод фото и дополнительных фото на странице товара с эффектом zoom; Вывод логотипа бренда/производителя в карточке товара; Практически идентичная структура шаблона с стандартным, что делает шаблон FASHIONMART совместимым с сторонними модулями;  
      Бесплатная помощь в установке и настройке шаблона при необходимости!
      Мы постоянно работаем над улучшением шаблона и добавлением дополнительного функционала, все обновления абсолютно бесплатные!
      Демо главной страницы
      Демо страницы категории
      Демо страницы товара
       





  • Последние посетители   0 пользователей онлайн

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

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.