Next Generation CMS :: Форум поддержки

Заинтересовала наша система? Тогда этот форум для Вас!

Вы не зашли.

#1 2019-01-28 05:30:39

rusiq
гуру
Зарегистрирован: 2014-07-16
Сообщений: 632
Рейтинг :   36 

x_filter - фильтр записей

Страница плагина: https://github.com/russsiq/ng-x_filter

Версия плагина 0.3.0 включает критические обновления

В текущей версии плагина 0.4.0 реализованы "ползунки": возможность выбора в интервале значений для доп. полей (от и до).

Такие поля должны быть созданы с опцией Тип поля в БД: int - только цифры

[hr /]
preview.png
[hr /]

## Фильтр записей для NG CMS

Плагин позволяет установить на сайте фильтр записей по категориям и дополнительным полям `xfields` с поддержкой полнотекстового поиска.

Плагин поддерживает дополнительные поля типа **Текстовый** (`input`) и **Выбор значения** (`select`).

Для полей типа `input` создается выборка (дополнительный SQL-запрос) всех возможных значений и отображается в виде выпадающего списка. Данный запрос можно кешировать, установив время в настройках плагина.

### Подготовка к подключению

Перед включением плагина `x_filter`:

1. Установите и включите плагин `xfields`.
2. Создайте необходимые дополнительные поля.
3. При создании дополнительных полей выбирайте опцию:
    - *Режим сохранения данных:* **Персональное поле в БД**.

### Подключение

1. Скачайте архив с плагином и распакуйте содержимое в папку *\engine\plugins\x_filter* вашей CMS.
2. Установите и включите плагин в панели управления.

Для отображения формы фильтра на сайте разместите переменную `{{ x_filter_form }}` в шаблоне **main.tpl**, например в боковой панели:

```html
<aside id="sidebar">
{% if pluginIsActive('x_filter') %}
    <div class="block">
        {{ x_filter_form }}
    </div>
{% endif %}
</aside>
```

Для отображения виджета на сайте используйте функцию вызова `{{ callPlugin('x_filter.widget', {...}) }}` в шаблоне **main.tpl**, например в боковой панели:

```html
<aside id="sidebar">
{% if pluginIsActive('x_filter') %}
    <div class="block">
    {{ callPlugin('x_filter.widget', {
        'page': 1,
        'showNumber': 8,
        'order': 'id_desc',
        'search': 'Какой-нибудь поисковый запрос',
        'catid': 6,
        'skipcat': '2,4',
        'x_price': 179000,
        'x_color': 'красный',
        'cache': true,
        'cacheExpire': 60,
        'template': 'default',
        'extractEmbeddedItems': true
    }) }}
    </div>
{% endif %}
</aside>
```

### Доступные переменные в шаблонах

#### Шаблон плагина `filter_form.tpl`

- `{{ plugin_link }}` - ссылка на главную страницу плагина
- `{{ catid }}` - `id` текущей категории
- `{{ search }}` - поисковое слово, если было заполнено пользователем
- `{{ catlist }}` - выпадающий список категорий сайта
- `{{ order }}` - порядок сортировки результатов фильтрации
- `{{ x_имя_доп_поля }}` - выводит выпадающий список существующих значений дополнительного поля текущей категории

#### Шаблон сайта `news.table.tpl`

- `{{ count }}` - количество отфильтрованных записей
- `{{ data }}` - массив отфильтрованных записей
- `{{ pages }}` - информация о страницах:
    - `{{ pages.current }}` - номер текущей страницы
    - `{{ pages.total }}` - количество страниц
- `{{ pagination }}` - HTML-код постраничной навигации

Примерная структура шаблона `news.table.tpl` с выводом количества отфильтрованных новостей:

```html
{% if (pluginIsActive('x_filter') and isHandler('x_filter')) %}
    <h2>{{ lang['x_filter:page_title'] }} <small class="float-right text-muted">{{ count }}</small></h2>
    <hr>
{% endif %}

{% for entry in data %}
    {{ entry }}
{% else %}
    <div class="alert alert-info">{{ lang['msgi_no_news'] }}</div>
{% endfor %}

{{ pagination }}
```

#### Шаблон виджета `widget.tpl`

- `{{ count }}` - количество отфильтрованных записей
- `{{ entries }}` - массив отфильтрованных записей

Примерная структура шаблона `widget.tpl` с выводом количества отфильтрованных новостей:

```html
{% for entry in entries %}
    {{ entry }}
{% endfor %}
```

#### Шаблон виджета `entries.tpl`

- `{{ count }}` - количество отфильтрованных записей
- `{{ entries }}` - массив отфильтрованных записей

Примерная структура шаблона `entries.tpl` с извлеченным изображением:

```html
<article>
    <a href="{{ news.url.full }}">{{ news.title|truncateHTML(70,'...') }}</a>
    <span>{{ news.author.name }}, {{ news.categories.masterText }}</span>
    <span>{{ p.xfields.price.value }}</span>
    <div class="article-img" style="overflow: hidden;">
        {% if (news.embed.imgCount > 0) %}
            <img src="{{ news.embed.images[0] }}" width="315" height="161"/>
        {% else %}
            <img src="{{ tpl_url }}/img/img-none.png" width="315" height="161"/>
        {% endif %}
    </div>
</article>
```

### Дополнительно можно настроить:

- категории, которые следует скрывать из выпадающего списка категорий, формируемом переменной `{{ catlist }}`
- возможность выбора из всех категорий (в списке категорий будет установленное по умолчанию значение "- все -")
- порядок вывода новостей и их количество на странице
- расположение шаблона (шаблон сайта / шаблон плагина)
- опциональное встраивание на страницу файла CSS из шаблона
- опциональное встраивание на страницу файла JavaScript из шаблона
- возможность задания страницам фильтра канонической ссылки
- возможность запрета индексации страниц фильтра поисковыми роботами

### Лицензия

`ng-x_filter` - программное обеспечение с открытым исходным кодом, распространяющееся по лицензии [MIT](LICENSE).

Изменено rusiq (2020-03-05 23:51:57)


Прикрепленные файлы:
x_filter-v0.3.0.zip, Размер: 344.68 Кб, Скачано: 80
x_filter-v0.4.0.zip, Размер: 187.43 Кб, Скачано: 65

Не в сети

#2 2020-01-16 09:25:48

oldbim
Пойманные на слове роботы
Зарегистрирован: 2020-01-16
Сообщений: 10
Рейтинг :   

Re: x_filter - фильтр записей

Привет! Использую еще старую вашу версию поиска. Новая по каким то причинам не заработала. Не стал пока разбираться.
Вопрос вот в чем.
Допилите вариант в выпадающем списке существующих значений - не выбрано.
Т.е. на текущий момент можно только выбрать какой то из вариантов, а если стоит "не выбрано" то поле не учитывается и показываются все варианты.

К примеру я выбираю запчасти BMW и должен в другом поле выбрать "запчасти подвески" или "кузовные запчасти" и т.д.
А посмотреть все запчасти на BMW не получится.

Не в сети

#3 2020-01-16 09:43:05

oldbim
Пойманные на слове роботы
Зарегистрирован: 2020-01-16
Сообщений: 10
Рейтинг :   

Re: x_filter - фильтр записей

И нужно что бы в каждом выпадающем меню было бы по умолчанию "все виды"

например марка:
- все
- бмв
- мерседес
- ауди
- ...

материал :
- все
- пластик
- металл
- и т.д.

цвет:
- все
- красный
- белый

Это можно как то реализовать?

Не в сети

#4 2020-01-16 10:15:05

rusiq
гуру
Зарегистрирован: 2014-07-16
Сообщений: 632
Рейтинг :   36 

Re: x_filter - фильтр записей

В выпадающих меню добавляется пункт - все - только при условии, что дополнительное поле имеет значение нет в опции Обязательное

Изменено rusiq (2020-01-17 07:57:46)


Прикрепленные файлы:
Снимок.PNG, Размер: 32.47 Кб, Скачано: 16

Не в сети

#5 2020-01-16 10:18:25

oldbim
Пойманные на слове роботы
Зарегистрирован: 2020-01-16
Сообщений: 10
Рейтинг :   

Re: x_filter - фильтр записей

Блин! Вот я дуралей=) Спасибо за помощь!

Не в сети

#6 2020-01-18 15:51:00

oldbim
Пойманные на слове роботы
Зарегистрирован: 2020-01-16
Сообщений: 10
Рейтинг :   

Re: x_filter - фильтр записей

Еще вопрос.
Сейчас столкнулся при использовании фильтра, при нескольких страницах записей, при нажатии на ссылку следующая страница или 2, 3 и т.д. фильтр почему то сбивается http://site.ru/?catid=&xfields_stereliz1=&page=2

Не в сети

#7 2020-01-18 16:00:22

oldbim
Пойманные на слове роботы
Зарегистрирован: 2020-01-16
Сообщений: 10
Рейтинг :   

Re: x_filter - фильтр записей

должна выглядеть - http://site.ru/?xfields_cvet=&xfields_pol=%CA%EE%F8%EA%E0&xfields_sherst=&page=2
а получается http://site.ru/?catid=&xfields_stereliz1=&page=2

Не в сети

#8 2020-01-18 16:04:45

rusiq
гуру
Зарегистрирован: 2014-07-16
Сообщений: 632
Рейтинг :   36 

Re: x_filter - фильтр записей

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

В этой версии плагина должно отображаться так plugin/x_filter/?x_price=125000&catid=4&order=id_desc&page=2

У вас какая версия движка и почему не пошла версия текущего плагина?

Изменено rusiq (2020-01-18 16:11:41)

Не в сети

#9 2020-01-18 16:31:55

oldbim
Пойманные на слове роботы
Зарегистрирован: 2020-01-16
Сообщений: 10
Рейтинг :   

Re: x_filter - фильтр записей

Прошу прощения, думал модули одинаковые.

Версия 0.9.4 Release + GIT 20161231

На вашем модуле не получается выпадающее меню сделать.

- `{{ x_имя_доп_поля }}` выводит выпадающий список существующих значений данного поля


<form action="{{ plugin_link }}" method="post">
    <div class="mt-3 form-group">
        <div class="input-group">
            {{ x_cvet }}
            <div class="input-group-append">
                <button type="submit" class="xf_btn">✔</button>
            </div>
        </div>
    </div>
</form>

Но вместо выпадающего меню "Array"

Не в сети

#10 2020-01-18 16:43:33

rusiq
гуру
Зарегистрирован: 2014-07-16
Сообщений: 632
Рейтинг :   36 

Re: x_filter - фильтр записей

Вот фрагмент из шаблона плагина:

{% if x_price %}
  <div class="xf__item {{ x_price.active ? 'active' : '' }}">
    <label class="xf__title">{{ x_price.title }}</label>
    <div class="xf__body">{{ x_price.input }}</div>
  </div>
{% endif %}

То есть в вашем случае {{ x_cvet.input }}

Не в сети

#11 2020-01-18 16:53:40

oldbim
Пойманные на слове роботы
Зарегистрирован: 2020-01-16
Сообщений: 10
Рейтинг :   

Re: x_filter - фильтр записей

Отлично, все заработало!

Скажите как подключить в результатах поиска левую или правую колонку?

Не в сети

#12 2020-01-18 17:10:28

oldbim
Пойманные на слове роботы
Зарегистрирован: 2020-01-16
Сообщений: 10
Рейтинг :   

Re: x_filter - фильтр записей

sidebar-l и sidebar-r

Не в сети

#13 2020-01-18 17:31:36

rusiq
гуру
Зарегистрирован: 2014-07-16
Сообщений: 632
Рейтинг :   36 

Re: x_filter - фильтр записей

Ну можно так попробовать:

{% if isHandler('x_filter') %}
  Страница фильтра
{% endif %}

Но это вопрос скорее по шаблонизатору, чем по плагину.

Изменено rusiq (2020-01-18 17:32:49)

Не в сети

#14 2020-01-18 17:43:13

oldbim
Пойманные на слове роботы
Зарегистрирован: 2020-01-16
Сообщений: 10
Рейтинг :   

Re: x_filter - фильтр записей

Может я не правильно объяснился, когда нажимаю "применить фильтр" открывается страница фильтра /plugin/x_filter/?catid=2&order=id_desc

И вот там не подключены колонки.

Не в сети

#15 2020-01-18 17:51:49

rusiq
гуру
Зарегистрирован: 2014-07-16
Сообщений: 632
Рейтинг :   36 

Re: x_filter - фильтр записей

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

Не в сети

#16 2020-01-18 18:05:17

oldbim
Пойманные на слове роботы
Зарегистрирован: 2020-01-16
Сообщений: 10
Рейтинг :   

Re: x_filter - фильтр записей

Спасибо! Буду разбираться. Фильтр работает отлично!

Не в сети

#17 2020-02-18 14:31:36

rusiq
гуру
Зарегистрирован: 2014-07-16
Сообщений: 632
Рейтинг :   36 

Re: x_filter - фильтр записей

Плагин обновлен. Корректное получение настроек.

Изменено rusiq (2020-02-18 14:31:55)

Не в сети

#18 2020-02-18 18:49:09

irbees2008
Продвинутый чайник ;)
Откуда Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2,794
Рейтинг :   115 
Сайт

Re: x_filter - фильтр записей

Я что не понял, файл https://github.com/russsiq/ng-x_filter/ … r_form.tpl, там 2 формы для категорий и для дополнительных полей , как эти формы объединить?

Не в сети

#19 2020-02-18 19:16:18

rusiq
гуру
Зарегистрирован: 2014-07-16
Сообщений: 632
Рейтинг :   36 

Re: x_filter - фильтр записей

Берете переменную {{ catlist }} и вставляете во вторую форму, а первую форму удаляете. Берете файл JS и удаляете строки:

document
    .getElementById('catmenu')
    .addEventListener('change', function(event) {
        this.form.submit()
        event.preventDefault()
    });

Не в сети

#20 2020-02-19 12:05:04

irbees2008
Продвинутый чайник ;)
Откуда Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2,794
Рейтинг :   115 
Сайт

Re: x_filter - фильтр записей

А можно скомпоновать с xnews? Или задать условие для блока xnews вывод новостей только с определенным доп.полем ?

Не в сети

#21 2020-02-20 00:02:43

rusiq
гуру
Зарегистрирован: 2014-07-16
Сообщений: 632
Рейтинг :   36 

Re: x_filter - фильтр записей

Не понятно какая конечная цель, но возможно этим получится обойтись:

{% if not isHandler('x_filter') %}
<div id="widget"></div>
<script type="text/javascript">
	$.get('http://localhost/ng/plugin/x_filter/', {
			x_price: 90000,
			catid: 1,
			order: 'id_desc'
		})
		.done(function(data, textStatus, jqXHR) {
			$('#widget').html(
				$(data).find('.news_list')
			);
		})
		.fail(function(jqXHR, textStatus) {
			console.error(`Request failed: ${textStatus}`);
		});
</script>
{% endif %}

Если это не то, что нужно, то только за платно могу допилить плагин текущий плагин, чтобы было как минимум так:

{% if pluginIsActive('x_filter') %}
	{{ callPlugin('x_filter.widget', {
		'order': 'id_desc',
		'showNumber': 8,
		'page': 3,
		'search': 'Какой-нибудь поисковый запрос',
		'catid': 3,
		'skipcat': '1,4',
		'x_price': 128000,
		'cache': true,
		'cacheExpire': 60
	}) }}
{% endif %}

Не в сети

#22 2020-02-20 14:51:28

irbees2008
Продвинутый чайник ;)
Откуда Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2,794
Рейтинг :   115 
Сайт

Re: x_filter - фильтр записей

500p?

Не в сети

#23 2020-02-23 09:20:40

irbees2008
Продвинутый чайник ;)
Откуда Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2,794
Рейтинг :   115 
Сайт

Re: x_filter - фильтр записей

Цена устраивает, собираю

Не в сети

#24 2020-02-25 14:49:47

irbees2008
Продвинутый чайник ;)
Откуда Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2,794
Рейтинг :   115 
Сайт

Re: x_filter - фильтр записей

куда скидывать

Не в сети

#25 2020-02-26 10:13:53

irbees2008
Продвинутый чайник ;)
Откуда Шахтинск
Зарегистрирован: 2012-03-14
Сообщений: 2,794
Рейтинг :   115 
Сайт

Re: x_filter - фильтр записей

Оплату

Не в сети

Подвал раздела

Работает на FluxBB