Skip to content

Commit

Permalink
Перевод статьи prefiltered-links
Browse files Browse the repository at this point in the history
  • Loading branch information
Pavel-Ivanov committed Apr 25, 2015
1 parent 12a7253 commit 5f32ab1
Show file tree
Hide file tree
Showing 2 changed files with 179 additions and 1 deletion.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,5 @@ update.bat
*/Thumbs.db
assets/lunr.js/
assets/bootstrap/
assets/jquery/
assets/jquery/
Thumbs.db
177 changes: 177 additions & 0 deletions ru/cobalt/_posts/2013-01-01-prefiltered-links-ru.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,177 @@
---
layout: doc
title: "Создание пре-фильтровых ссылок"
date: 2013-01-01 12:30:30
tags: filters setup
intro: "Создание ссылок для автоматической установки фильтров к списку статей."
---

Предположим, Вы хотите создать ссылку в меню (или в любом другом месте), которая автоматически будет устанавливать необходимые фильтры для списка статей. Например: _События на следующие 14 дней на расстоянии 20 миль от Лондона_. Вы можете легко это сделать, используя новый интерфейс системы фильтров в Cobalt.

## 1. Создание URL

После драматической перекодировки всего механизма фильтрации, мы создали интерфейс для системы фильтров. И теперь Вы можете "общаться" с системой фильтров при помощи ссылок специального формата.

Формат ссылки состоит из постоянной части и набора параметров.

Постоянная часть ссылки выглядит так:

http://www.yoursite.com/index.php?option=com_cobalt&task=records.filter&...

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

Параметр | Обязательный | Описание
------------------|-----------|------
section_id | ![Yes][1] | ID раздела
Itemid | ![Yes][1] | Itemid пункта меню. Пожалуйста устанавливайте этот параметр таким, каким Вы его установили в параметрах раздела.
cat_id | ![No][2] | ID категории (если необходимо фильтровать только по одной категории)
filter_name | ![Yes][1] | Массив имен фильтров. Объясняется позже.
filter_val | ![Yes][1] | Массив значений фильтров. Объясняется позже.

[1]: /assets/img/tick.png
[2]: /assets/img/cross.png

После нажатия на ссылку необходимые фильтры будут установлены и пользователь будет перенаправлен на список статей со стандартным URL. Вот почему необходимы параметры section_id, itemid and cat_id- чтобы перенаправить пользователя на правильную страницу. Пожалуйста, не забывайте корректно устанавливать эти параметры.

Каждая ссылка добавляет новые фильтры к уже существующим. Т.о. образом можно создавать каскад фильтров. Если перед установкой нового фильтра необходимо сбросить предварительно примененные фильтры, необходимо добавить в URL параметр `&clean=1`, как показано на примере

http://www.com/index.php?option=com_cobalt&task=records.filter&clean=1&...

## 2. Установка фильтров

Вы можете установить одновременно любое количество фильтров, поэтому параметры `filter_val` и `filter_name` являются массивами. Например:

&filter_name[0]=filter_tag&filter_val[0]=2

В этом примере показываются все статьи с тэгом, у которого ID 2.

### 2.1. Стандартные фильтры

В таблице ниже приведен список доступных стандартных имен фильтров `filter_name` и их значений `filter_val`.

Имя фильтра | Значение фильтра | Описание
--------------|--------------|-------------
filter_tpl | default | Имя шаблона списка статей. If you want to use settings of the template you have to include filter configuration key. Что-то типа `default.b604f5fb1ca89b8be2706881a530680f`. Как получить этот ключ? Just look temmplate select source code in section edit page.
filter_cat | 2 | ID категории
filter_user | 42 | ID пользователя
filter_tag | 2 | ID тэга
filter_type | 1 | ID типа контента
filter_search | what is life | Строка поиска

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

http://www.com/index.php
?option=com_cobalt
&task=records.filter
&section_id=2
&Itemid=126
&filter_name[0]=filter_type
&filter_val[0]=2
&filter_name[1]=filter_user
&filter_val[1]=42

В этом примере будут показаны все записи пользователя Супер Администратор (с ID 42) и типом контента ID 2.

### 2.2. Фильтры по полям

Сначала Вы должны создать имя фильтра. Оно состоит из префикса `filter_` и ключа поля. Т.о. имя фильтра будет похоже на следующее

&filter_name[0]=filter_k2hgsd5FdK79H6Gfdt6hxnsgF55fd

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

&filter_val[0]=value%201

Значение фильтра должно быть в URL кодировке. Для перевода значения в URL кодировку можно воспользоваться [следующим сервисом](http://www.url-encode-decode.com/). Если Вы посмотрите, значение `%20` соответствует пробелу.

Значение фильтра может быть массивом

&filter_val[0][]=value%201&filter_val[0][]=value%202

В этом случае будут выбраны все записи, содержащие `Value 1` ИЛИ `Value 2`

Для некоторых полей необходимо устанавливать массив ключей.
Например, координаты для поля Geo

&filter_val[0][lat]=41.25458745&filter_val[0][lng]=21.2654789

или диапазон дат для поля DateTime. Здесь первое значение соответствует начальной дате (data _from_), а второе- конечной дате (date _to_).

filter_val[0][range]=2014-09-01,2014-09-30

Для поля Boolean значениями фильтра будут `true` или `false`

&filter_val[0]=true

Немного сложнее устанавливать значения фильтра для поля Multi Level Select. Например, запись значения фильтра может выглядеть так

filter_val[0][1]=5

здесь
`[0]`- индекс значения первого фильтра,
`[1]`- индекс массива, соответствующий второму уровню (т.к. нумерация уровней начинается с 0) ,
`5`- ID самого значения фильтра. Это значение можно посмотреть ............ ГДЕ?

## 3. Сброс фильтров.

Иногда необходимо сбросить все фильтры или один конкретный фильтр.

###3.1. Сброс всех фильтров

index.php?option=com_cobalt
&task=records.cleanall
&section_id=2
&Itemid=123

###3.2. Сброс конкретного фильтра

index.php?option=com_cobalt
&task=records.clean
&clean[filter_k58596481bc7070e4adecd4f2e29569de]=1
&section_id=2
&Itemid=123

В таблице приведен список возможных параметров для сброса фильтров

Тип фильтра | Описание
------------------|------------
`filter_search` | Сброс фильтра по текстовому поиску
`filter_type` | Сброс фильтра по типу контента
`filter_tag` | Сброс фильтра по тэгу
`filter_user` | Сброс фильтра по пользователю
`filter_alpha` | Сброс фильтра по альфа-индексу
`filter_cat` | Сброс фильтра по категории
`filter_[key]` | Сброс фильтра по полю. Вы должны изменить `[key]` на ключ поля, как показано в предыдущем примере.

Вы можете сбросить несколько фильтров одновременно:

index.php?option=com_cobalt
&task=records.clean
&clean[filter_k58596481bc7070e4adecd4f2e29569de]=1
&clean[filter_type]=1
&clean[filter_alpha]=1
&section_id=2
&Itemid=123

## Вопрос: Что такое ключ поля?

_Ключ поля_ является частью поддержки нескольких типов контента в шаблонах. Ключ поля строится как MD5 из типа поля и его метки.

$field_key = 'k'.md5($field->label.'-'.$field->field_type);

Если метка поля _Year_ и тип поля _digits_, то

$field_key = 'k'.md5('Year-digits');

Вы можете посмотреть ключ поля в базе данных в столбце `key` таблицы `jos_js_res_fields`.

![Field key][im2]

или в столбце Ключ в менеджере полей **(3)**.

![Field key][im3]

[im2]: /assets/img/screenshots/fieldkey.png
[im3]: /assets/img/screenshots/typeandid.png


0 comments on commit 5f32ab1

Please sign in to comment.