как задать диапазон значений(количество от 50-200) в контекстный фильтр в view?

Главные вкладки

Аватар пользователя Evil0o Evil0o 22 июня 2013 в 0:43

Добрый день. Мне необходимо чтобы по url происходила сортировка записей.
Я все сделал в Veiw с помощью контекстный фильтров, вот осталось только сделать так чтобы когда в url прописываешь например год издания 1990-2013(God-izdaniya-1990-2013) происходил вывод записей за этот период.
Могли бы подсказать как это сделать?

Комментарии

Аватар пользователя VasyOK VasyOK 22 июня 2013 в 2:48

Добавьте 2 раза фильтр по полю Год издания
оба фильтра должны быть раскрытыми
В одном фильтре выставьте условие больше, или равно в другом меньше, или равно
С фильтром между получается увы не всегда.

Аватар пользователя Evil0o Evil0o 22 июня 2013 в 3:10

VasyOK wrote:
Добавьте 2 раза фильтр по полю Год издания
оба фильтра должны быть раскрытыми
В одном фильтре выставьте условие больше, или равно в другом меньше, или равно
С фильтром между получается увы не всегда.

Я не нашел в контекстном фильтре подобного.
Возможно вы имеете в виду пункт "Критерии фильтрации"(не помню как правильно называется),
но тогда в url будет каша из всяких символов.
А необходимо что бы url строился так "название сайта/catalog/God-izdaniya-1990-2013"
Если я не до понял разъясните.

Аватар пользователя Evil0o Evil0o 22 июня 2013 в 3:36

"drupby" wrote:

я посмотрел разобрался и немного функционала не хватает. Недостает того чтобы можно было вставит своё слово, мне нужно "God-izdaniya-1990-2013, а модуль позволяет "1990--2013".
Как выкрутится из ситуации?

Аватар пользователя Evil0o Evil0o 22 июня 2013 в 13:53

drupby wrote:
ставь модуль views php и пиши php фильтр

Может существует статья на русском? А то я на гуглить не могу ничего хорошего.

Аватар пользователя Evil0o Evil0o 23 июня 2013 в 3:56

может поможете. Больше чем уверен, что есть готовое решение. Я друпал семь дней изучаю, а с этой проблемой 4 дня мучаюсь

Аватар пользователя Evil0o Evil0o 23 июня 2013 в 14:40

установил. Но не могу понять что с ним делать. он вроде нужен для того чтобы поля выводить как захочется.
я думал что нужно что то вставить в контекстный фильтр:->Передать значение по умолчанию->PHP код-> но у меня ничего не выводит, что тут прописать.

Аватар пользователя Evil0o Evil0o 23 июня 2013 в 15:37

ааа спасибо)). а примера простого нету? чтобы значение из url бралось, с базой сравнивалось, и выводилось. не могу найти, чтобы работало(устаревшее api или еще что то)

Аватар пользователя drupby drupby 23 июня 2013 в 16:05

"Evil0o" wrote:
А необходимо что бы url строился так "название сайта/catalog/God-izdaniya-1990-2013"

а кому это надо?ни поисковикам ни вашим посетителям это не надо
поэтому делается все с помощью https://drupal.org/project/contextual_range_filter и всё
тем более что вы не можете написать элементарный php код , предлагаю вам все же остановиться на модуле
или делай урл так название сайта/catalog/God-izdaniya/1990--2013

Аватар пользователя Evil0o Evil0o 23 июня 2013 в 17:45

это не совсем мне надо. меня попросили сделать, я делаю. PHP я разбираюсь. но как все устроено в drupal мне не понятно)). Я нашел как делается выборка из бд в друпал, но оно еррорит и все остальное тоже еррорит ((.

Аватар пользователя drupby drupby 23 июня 2013 в 18:24

выборку за тебя должен делать вьюс ,достаточно добавить поле года издания ,скрыть его от вывода в настройках поля Exclude from display
в фильтре у тебя будет AVAILABLE VARIABLES (к примеру $row->year)
и потом пиши условие на php

if ($row->year > x && $row->year < y) {
  return TRUE;
}
else {
  return FALSE;
}
Аватар пользователя Evil0o Evil0o 24 июня 2013 в 3:22

$row->year(у меня свое) выдаёт вместо значения(года) ID(в базе название поля VID). другие поля тоже айди выдают. Что делать?

Аватар пользователя drupby drupby 24 июня 2013 в 3:34

"Evil0o" wrote:
выдаёт вместо значения(года) ID(в базе название поля VID). другие поля тоже айди выдают

такого просто не может быть , не то поле видимо добавил
да и что значит выдает ,как ты дебажишь что переменная содержит?

Аватар пользователя Evil0o Evil0o 24 июня 2013 в 3:44

В Поля->Глобальный: PHP->пишу в Value code <?phpreturn $row->field_godizd;?>

получаю записи где есть строчка PHP: со значениями 2 или 3 или 4. Если в PHP коде указать другое поле $row->field_nazv то числа теже и они совпадают с ID, проверял в БД.

Аватар пользователя Evil0o Evil0o 24 июня 2013 в 3:56

ну и <?phpdsm($row->field_godizd);?> 5 4 3 2
а если dvm($row);
(object) array(
'title' => 'Книга',
'field_image' => '3',
'field_fio' => '3',
'field_tip' => '3',
'field_godizd' => '3',
'field_nazv' => '3',
'php' => NULL,
) и так все записи цифры другие

Может настройки где то есть?

Аватар пользователя drupby drupby 24 июня 2013 в 4:07

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

Аватар пользователя drupby drupby 24 июня 2013 в 4:42

должно все выводится
если нет то пробуй напрямую из бд выбирать
как работать с базой данных здесь
и попробуй переименуй поле в field_year_of_publication - вдруг заработает Biggrin

Аватар пользователя Evil0o Evil0o 25 июня 2013 в 4:44

"Evil0o" wrote:
попробуй переименуй поле в field_year_of_publication - вдруг заработает :D
не работает. я тут значение выцепил в Output code(поле, не фильтр) <?phpecho $data->_field_data[nid][entity]->field_god[und][0][value];?>
нашел тему, вроде проблемы не у меня одного, какие то решения в комментария есть http://drupal.stackexchange.com/questions/31690/how-to-use-views-php-to-...
посмотри пожалуйста

Аватар пользователя drupby drupby 25 июня 2013 в 14:09

"Evil0o" wrote:
я тут значение выцепил в Output code(поле, не фильтр)

в php поле есть два поля Value code и Output code
в Output code у меня значение поля выводится так к примеру
<?php echo  $data->field_field_text[0]['raw']['safe_value']; ?>
или
<?php echo  $data->_field_data['nid']['entity']->field_text['und'][0]['safe_value']; ?>

ну или глянуть что там имеется можно
<?php dsm($data); ?>
только значение надо брать с ключом 'safe_value' , а не 'value' или '#markup' ,так как там вполне может значение поле обернуться в html теги и выведется разметка
если поле integer ,то 'value'
но в фильтр эти данные я так понял не передаются
в фильтре можно так получить значение поля

$args = array(':nid' => $row->nid,);
$sql = "SELECT field_godizd_value FROM {field_data_field_godizd} WHERE entity_id = :nid";
$field_godizd = db_query($sql, $args)->fetchField();
Аватар пользователя penexe penexe 25 июня 2013 в 14:31

если вы смогли сделать то что нужно с помощью https://drupal.org/project/contextual_range_filter но вас не устраивает только url

название сайта/catalog/God-izdaniya/1990--2013

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

название сайта/catalog/God-izdaniya-1990-2013
Аватар пользователя drupby drupby 25 июня 2013 в 15:32

"penexe" wrote:
либо задействовать модуль url_alter

тут drupal 7 а модуль только для 6
вместо этого модуля можно использовать hook_url_outbound_alter(hook_url_inbound_alter)
P.S.я только не понял каким образом ты будешь создавать эти ссылки (catalog/God-izdaniya-1990-2013) ,вручную что ли
или таких ссылок не будет а пользователи будут вручную вводить урлы
обычно в таких случаях делают формы-фильтры(во views это exposed filters) и значения передаются в GET параметрах

Аватар пользователя penexe penexe 25 июня 2013 в 15:59

drupby wrote:
"penexe" wrote:
либо задействовать модуль url_alter

тут drupal 7 а модуль только для 6
вместо этого модуля можно использовать hook_url_outbound_alter(hook_url_inbound_alter)
P.S.я только не понял каким образом ты будешь создавать эти ссылки (catalog/God-izdaniya-1990-2013) ,вручную что ли
или таких ссылок не будет а пользователи будут вручную вводить урлы
обычно в таких случаях делают формы-фильтры(во views это exposed filters) и значения передаются в GET параметрах

эти 2 функции и нужны чтобы из

l('1990-2013', 'catalog/God-izdaniya/1990--2013');

на выходе url получался

catalog/God-izdaniya-1990-2013

и что при вводе этого url в адресе, в реальности обрабатывался

catalog/God-izdaniya/1990--2013

что по-поводу использования на сайтах, например авито для категорий так делает, вроде категория=фильтр но существует как отдельная страница. Да и продвигать такие ссылки лучше

Аватар пользователя drupby drupby 25 июня 2013 в 16:36

"penexe" wrote:
но существует как отдельная страница. Да и продвигать такие ссылки лучше

если catalog/auto/bmw/x5 ,то да
а если catalog/God-izdaniya-1990-2013 (catalog/God-izdaniya-x-y),то такие страницы не продвигаются никуда и никогда
да и такие урлы нужно вообще закрывать от индексации

Аватар пользователя drupby drupby 25 июня 2013 в 17:01

"penexe" wrote:
например авито для категорий так делает, вроде категория=фильтр но существует как отдельная страница

в друпале подобное делается с помощью связки search_api, facetapi и facetapi_pretty_paths
для integer полей search_api_ranges(facetapi_slider)
но это немного не тот случай

Аватар пользователя Evil0o Evil0o 3 июля 2013 в 0:11

Добрый день. Подскажите а вот если несколько контекстных фильтров. Как сделать чтобы при пропуске одного из фильтров другие работали. "название сайта/catalog/журналы/God-izdaniya-1990-2013" или "название сайта/catalog/God-izdaniya-1990-2013"

Аватар пользователя drupby drupby 3 июля 2013 в 0:44

"Evil0o" wrote:
Добрый день. Подскажите а вот если несколько контекстных фильтров. Как сделать чтобы при пропуске одного из фильтров другие работали. "название сайта/catalog/журналы/God-izdaniya-1990-2013" или "название сайта/catalog/God-izdaniya-1990-2013"

то о чем ты сейчас говоришь - это фасеточные(уточняющие) фильтры (к примеру https://drupal.org/project/facetapi)