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

Просто фильтр opencart 2.3. Как вывести на главную?


Recommended Posts

Возможно ли вывести на главную этот фильтр?

контроллер

 

Спойлер

<?php
class ControllerExtensionModuleprostofilter extends Controller {
	public function index() {
		if (isset($this->request->get['path'])) {
			$parts = explode('_', (string)$this->request->get['path']);
		} else {
			$parts = array();
		}

		$category_id = end($parts);

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

		$category_info = $this->model_catalog_category->getCategory($category_id);

		if ($category_info) {
			$this->load->language('extension/module/prostofilter');

			$url = '';

			if (isset($this->request->get['sort'])) {
				$url .= '&sort=' . $this->request->get['sort'];
			}

			if (isset($this->request->get['order'])) {
				$url .= '&order=' . $this->request->get['order'];
			}

			if (isset($this->request->get['limit'])) {
				$url .= '&limit=' . $this->request->get['limit'];
			}

			$data['action'] = str_replace('&amp;', '&', $this->url->link('product/category', 'path=' . $this->request->get['path'] . $url));

			if (isset($this->request->get['filter'])) {
				$data['prostofilter_category'] = explode(',', $this->request->get['filter']);
			} else {
				$data['prostofilter_category'] = array();
			}

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

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

			$prostofilter_groups = $this->model_catalog_category->getCategoryFilters($category_id);

			if ($prostofilter_groups) {
				foreach ($prostofilter_groups as $prostofilter_group) {
					if ($prostofilter_group['name'] == 'Цена') {
						if ($prostofilter_group['filter'][0]['filter_id'] == $prostofilter_group['filter'][0]['name']) {
							continue;
						}
					}
					$childen_data = array();

					foreach ($prostofilter_group['filter'] as $prostofilter) {
						$prostofilter_data = array(
							'filter_category_id' => $category_id,
							'filter_filter'      => $prostofilter['filter_id']
						);

						$childen_data[] = array(
							'prostofilter_id' => $prostofilter['filter_id'],
							'name'      => $prostofilter['name']
						);
					}

					$data['prostofilter_groups'][] = array(
						'prostofilter_group_id' => $prostofilter_group['filter_group_id'],
						'name'            => $prostofilter_group['name'],
						'prostofilter'          => $childen_data
					);
				}
				if (count($data['prostofilter_groups']) > 0) {
					return $this->load->view('extension/module/prostofilter', $data);
				}
			}
		}
	}
}

 

 

Шаблон

Спойлер

<div class="panel panel-default">
  <div class="panel-heading">{{ heading_title }}</div>
  <div class="list-group"> 
  {% for prostofilter_group in prostofilter_groups %} <a class="list-group-item">{{ prostofilter_group.name }}</a>
    <div class="list-group-item">
      <div id="prostofilter-group{{ prostofilter_group.prostofilter_group_id }}">
		
			{% set kolvo = 0 %}
			
			{% for prostofilter in prostofilter_group.prostofilter %}
				{% if prostofilter_group.prostofilter_group_id == 'price' %}
					{% set minprice = prostofilter.name -1 %}
					{% set maxprice = prostofilter.prostofilter_id + 1 %}
					{% for priceprostofilter in prostofilter_category %}
						{% if priceprostofilter|slice(0,8) == 'minprice' %}
							{% set minprice = priceprostofilter|slice(8,10)|replace({'[':'',']':''}) %}
						{% endif %}
						{% if priceprostofilter|slice(0,8) == 'maxprice' %}
							{% set maxprice = priceprostofilter|slice(8,10)|replace({'[':'',']':''}) %}
						{% endif %}
					{% endfor %}
					<input id="ex2" type="text" class="span2" value="" data-slider-min="{{ prostofilter.name -1 }}" data-slider-max="{{ prostofilter.prostofilter_id + 1 }}" data-slider-step="5" data-slider-value="[{{ minprice }},{{ maxprice }}]"/>
				{% else %}
					{% set kolvo = kolvo + 1 %}
					{% if kolvo == 7 %}
						<a href="#colfil{{ prostofilter_group.prostofilter_group_id }}" data-toggle="collapse">Показать еще</a>
						<div id="colfil{{ prostofilter_group.prostofilter_group_id }}" class="collapse">
					{% endif %}
					<div class="checkbox">
					  <label for="{{ prostofilter.prostofilter_id }}">
					  {% if prostofilter.prostofilter_id in prostofilter_category %}
						<input id="{{ prostofilter.prostofilter_id }}" class="red" type="checkbox" name="prostofilter[]" value="{{ prostofilter.prostofilter_id }}" checked="checked" />
						{{ prostofilter.name }}
						{% else %}
						<input id="{{ prostofilter.prostofilter_id }}" class="red" type="checkbox" name="prostofilter[]" value="{{ prostofilter.prostofilter_id }}" />
						{{ prostofilter.name }}
						{% endif %}</label>
					</div>
				{% endif %}
			{% endfor %}</div>
			{% if kolvo > 6 %}
				</div>
			
		{% endif %}
    </div>
    {% endfor %}</div>
  <div class="panel-footer text-right">
    <button type="button" id="button-prostofilter" class="btn btn-primary">{{ button_filter }}</button>
  </div>
</div>
<script type="text/javascript"><!--
$( document ).ready(function() {
	$('input[name^=\'prostofilter\']:checked').each(function(element) {
		$movingel = $(this).parent().parent();
		if ($movingel.parent().parent().hasClass('collapse')) {
			$movingel.prependTo($movingel.parent().parent().parent());
		}
		else {
			$movingel.prependTo($movingel.parent().parent());
		}
	});
});
$('#button-prostofilter').on('click', function() {
	prostofilter = [];

	$('input[name^=\'prostofilter\']:checked').each(function(element) {
		prostofilter.push(this.value);
	});
	if (document.getElementById('ex2') != null) {
		prostofilter.push('minprice[' + slider.getValue()[0] + ']');
		prostofilter.push('maxprice[' + slider.getValue()[1] + ']');
	}
	location = '{{ action }}&filter=' + prostofilter.join(',');
});
if (document.getElementById('ex2') != null) {
	var slider = new Slider('#ex2', {});
}
//--></script> 

 

 

install.xml

Спойлер

<?xml version="1.0" encoding="UTF-8"?>

-<modification>

<name>Prosto filter</name>

<code>prostofilter</code>

<version>1.0</version>

<author>2304</author>

<link>http://2304.ru</link>


-<file path="catalog/controller/product/category.php">


-<operation>


-<search>

<![CDATA[public function index() {]]>

</search>


-<add position="after">

<![CDATA[$this->document->addScript('catalog/view/javascript/bootstrap/js/bootstrap-slider.js'); $this->document->addStyle('catalog/view/javascript/bootstrap/css/bootstrap-slider.css');]]>

</add>

</operation>

</file>


-<file path="catalog/model/catalog/category.php">


-<operation>


-<search>

<![CDATA[getCategoryFilters($category_id)]]>

</search>


-<add position="replace">

<![CDATA[getCategoryFiltersNotUse($category_id)]]>

</add>

</operation>


-<operation>


-<search>

<![CDATA[public function getCategories]]>

</search>


-<add position="before">

<![CDATA[ public function getCategoryFilters($category_id) { $query = $this->db->query("SELECT pa.attribute_id, pa.text, ades.name, 0 as manf_id, 2 as fororder FROM " . DB_PREFIX . "product_attribute pa INNER JOIN " . DB_PREFIX . "product_to_category ptc ON (ptc.product_id = pa.product_id and ptc.category_id = '" . (int)$category_id . "') LEFT JOIN " . DB_PREFIX . "attribute_description ades ON (pa.attribute_id = ades.attribute_id AND ades.language_id = '" . (int)$this->config->get('config_language_id') . "') UNION SELECT 'manf', manf.name, 'Фабрика', manf.manufacturer_id as manf_id, 1 FROM " . DB_PREFIX . "product_to_category ptc INNER JOIN " . DB_PREFIX . "product pr ON (pr.product_id = ptc.product_id AND ptc.category_id = '" . (int)$category_id . "') INNER JOIN " . DB_PREFIX . "manufacturer manf ON (pr.manufacturer_id = manf.manufacturer_id) UNION SELECT 'price', min(pr.price), 'Цена', max(pr.price) as manf_id, 0 FROM " . DB_PREFIX . "product_to_category ptc INNER JOIN " . DB_PREFIX . "product pr ON (pr.product_id = ptc.product_id AND ptc.category_id = '" . (int)$category_id . "') ORDER BY fororder, attribute_id, text"); $filter_group_data = array(); foreach ($query->rows as $result) { $filter_group_data[$result['attribute_id']]['filter_group_id'] = $result['attribute_id']; $filter_group_data[$result['attribute_id']]['name'] = $result['name']; $filter_group_data[$result['attribute_id']]['filter'][] = array('filter_id' => $result['attribute_id'] == 'price' ? $result['manf_id'] : ($result['attribute_id'] . '[' . (($result['attribute_id'] == 'manf') ? $result['manf_id'] : $result['text']) . ']'), 'name' => $result['text']); } return $filter_group_data; }]]>

</add>

</operation>

</file>


-<file path="catalog/model/catalog/product.php">


-<operation>


-<search>

<![CDATA[$sql .= " LEFT JOIN " . DB_PREFIX . "product_filter pf ON (p2c.product_id = pf.product_id) LEFT JOIN " . DB_PREFIX . "product p ON (pf.product_id = p.product_id)";]]>

</search>


-<add position="replace">

<![CDATA[$filters = explode(',', $data['filter_filter']); $where_arr = array(); foreach ($filters as $filter_id) { $arr = preg_split('/[\[,\]]/',$filter_id); if (count($arr) > 1) { $where_arr[$arr[0]][] = $arr[1]; } } $sql .= " LEFT JOIN " . DB_PREFIX . "product p ON (p2c.product_id = p.product_id)"; foreach ($where_arr as $key => $value) { if ($key == 'manf') { } elseif ($key == 'minprice') { } elseif ($key == 'maxprice') { } else { $sql .= " LEFT JOIN " . DB_PREFIX . "product_attribute pa" . $key . " ON (p2c.product_id = pa" . $key . ".product_id AND pa" . $key . ".attribute_id = " . $key . ")"; } } ]]>

</add>

</operation>


-<operation>


-<search>

<![CDATA[$sql .= " AND pf.filter_id IN (" . implode(',', $implode) . ")";]]>

</search>


-<add position="replace">

<![CDATA[$where_arr = array(); foreach ($filters as $filter_id) { $arr = preg_split('/[\[,\]]/',$filter_id); if (count($arr) > 1) { $where_arr[$arr[0]][] = $arr[1]; } } foreach ($where_arr as $key => $value) { if ($key == 'manf') { $sql .= " AND (0=1"; foreach ($value as $wvalue) { $sql .= " OR p.manufacturer_id = " . (int)$wvalue; } $sql .= ")"; } elseif ($key == 'minprice') { $sql .= " AND p.price >= " . (float)$value[0]; } elseif ($key == 'maxprice') { $sql .= " AND p.price <= " . (float)$value[0]; } else { $sql .= " AND (0=1"; foreach ($value as $wvalue) { $sql .= " OR pa" . $key . ".text = '" . $wvalue . "'"; } $sql .= ")"; } } ]]>

</add>

</operation>

</file>

</modification>

 

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


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

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

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

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

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

Вхід

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

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

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

Important Information

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