Добрый день. Мне необходимо чтобы по url происходила сортировка записей.
Я все сделал в Veiw с помощью контекстный фильтров, вот осталось только сделать так чтобы когда в url прописываешь например год издания 1990-2013(God-izdaniya-1990-2013) происходил вывод записей за этот период.
Могли бы подсказать как это сделать?
Комментарии
Добавьте 2 раза фильтр по полю Год издания
оба фильтра должны быть раскрытыми
В одном фильтре выставьте условие больше, или равно в другом меньше, или равно
С фильтром между получается увы не всегда.
Я не нашел в контекстном фильтре подобного.
Возможно вы имеете в виду пункт "Критерии фильтрации"(не помню как правильно называется),
но тогда в url будет каша из всяких символов.
А необходимо что бы url строился так "название сайта/catalog/God-izdaniya-1990-2013"
Если я не до понял разъясните.
можно вот так
Надо посмотреть, но вроде то что нужно
я посмотрел разобрался и немного функционала не хватает. Недостает того чтобы можно было вставит своё слово, мне нужно "God-izdaniya-1990-2013, а модуль позволяет "1990--2013".
Как выкрутится из ситуации?
ставь модуль views php и пиши php фильтр
Может существует статья на русском? А то я на гуглить не могу ничего хорошего.
может поможете. Больше чем уверен, что есть готовое решение. Я друпал семь дней изучаю, а с этой проблемой 4 дня мучаюсь
views php установил?
установил. Но не могу понять что с ним делать. он вроде нужен для того чтобы поля выводить как захочется.
я думал что нужно что то вставить в контекстный фильтр:->Передать значение по умолчанию->PHP код-> но у меня ничего не выводит, что тут прописать.
надо добавлять обычный фильтр Global: PHP
ааа спасибо)). а примера простого нету? чтобы значение из url бралось, с базой сравнивалось, и выводилось. не могу найти, чтобы работало(устаревшее api или еще что то)
а кому это надо?ни поисковикам ни вашим посетителям это не надо
поэтому делается все с помощью https://drupal.org/project/contextual_range_filter и всё
тем более что вы не можете написать элементарный php код , предлагаю вам все же остановиться на модуле
или делай урл так название сайта/catalog/God-izdaniya/1990--2013
это не совсем мне надо. меня попросили сделать, я делаю. PHP я разбираюсь. но как все устроено в drupal мне не понятно)). Я нашел как делается выборка из бд в друпал, но оно еррорит и все остальное тоже еррорит ((.
выборку за тебя должен делать вьюс ,достаточно добавить поле года издания ,скрыть его от вывода в настройках поля Exclude from display
в фильтре у тебя будет AVAILABLE VARIABLES (к примеру $row->year)
и потом пиши условие на php
return TRUE;
}
else {
return FALSE;
}
$row->year(у меня свое) выдаёт вместо значения(года) ID(в базе название поля VID). другие поля тоже айди выдают. Что делать?
такого просто не может быть , не то поле видимо добавил
да и что значит выдает ,как ты дебажишь что переменная содержит?
В Поля->Глобальный: PHP->пишу в Value code
<?phpreturn $row->field_godizd;?>
получаю записи где есть строчка PHP: со значениями 2 или 3 или 4. Если в PHP коде указать другое поле $row->field_nazv то числа теже и они совпадают с ID, проверял в БД.
ну и
<?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,
) и так все записи цифры другие
Может настройки где то есть?
а это поле field_godizd было добавлено перед global php?
если делал все правильно , то должны значения выводится
а так какой то полтергейст получается
попробуй конечно вьюс обновить ,но должно все хорошо отрабатывть
да
а что?
а попробуй в фильтр добавь условие по этому полю и какие нибудь значения ,те же 1990 и 2013
должно все выводится
если нет то пробуй напрямую из бд выбирать
как работать с базой данных здесь
и попробуй переименуй поле в field_year_of_publication - вдруг заработает
<?phpecho $data->_field_data[nid][entity]->field_god[und][0][value];?>
нашел тему, вроде проблемы не у меня одного, какие то решения в комментария есть http://drupal.stackexchange.com/questions/31690/how-to-use-views-php-to-...
посмотри пожалуйста
в 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'
но в фильтр эти данные я так понял не передаются
в фильтре можно так получить значение поля
$sql = "SELECT field_godizd_value FROM {field_data_field_godizd} WHERE entity_id = :nid";
$field_godizd = db_query($sql, $args)->fetchField();
если вы смогли сделать то что нужно с помощью https://drupal.org/project/contextual_range_filter но вас не устраивает только url
можно либо создать алиасы вручную если таких путей не много, либо задействовать модуль 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 функции и нужны чтобы из
на выходе url получался
и что при вводе этого url в адресе, в реальности обрабатывался
что по-поводу использования на сайтах, например авито для категорий так делает, вроде категория=фильтр но существует как отдельная страница. Да и продвигать такие ссылки лучше
если catalog/auto/bmw/x5 ,то да
а если catalog/God-izdaniya-1990-2013 (catalog/God-izdaniya-x-y),то такие страницы не продвигаются никуда и никогда
да и такие урлы нужно вообще закрывать от индексации
в друпале подобное делается с помощью связки search_api, facetapi и facetapi_pretty_paths
для integer полей search_api_ranges(facetapi_slider)
но это немного не тот случай
Добрый день. Подскажите а вот если несколько контекстных фильтров. Как сделать чтобы при пропуске одного из фильтров другие работали. "название сайта/catalog/журналы/God-izdaniya-1990-2013" или "название сайта/catalog/God-izdaniya-1990-2013"
то о чем ты сейчас говоришь - это фасеточные(уточняющие) фильтры (к примеру https://drupal.org/project/facetapi)