Здравствуйте, уважаемые.
Довольно долго присматриваюсь к Дрюпалу, нравится многое, в том числе и идея таксономии (вернее классификация материалов с ее помощью). Сейчас появилась задача: сделать сайт Агентства Недвижимости. Стоит задача: классифицировать продаваемые квартиры по некой совокупности критериев:
1. Число комнат в квартире (1,2,3,4 и т.д.)
2. Район, где расположена квартира (советский р-он, железнодорожный р-он и т.д.)
3. Материал стен (несколько видов)
4. Цена квартиры – ВОТ здесь я не понял что делать.
Например, надо вывести 1комнатные квартиры в любом р-не с конкретным материалом стен (с этим как я понимаю, справится и стандартная таксономия) и с ценой меньше 100000 долларов. А вот здесь, что делать? Мне кажется, одним из вариантов было бы введение в категории таксономии цифровой категории с возможностью при выводе информации организовать операции сравнения (больше меньше) . Т.е. новая категория Цена (например) если ее значение больше какого-то числа, то выводим, если меньше не выводим.
Если задать число комнат в квартире как родительский элемент, то можно было бы при нажатии на кнопку меню «1комнатные квартиры» получать подменю: сортировка по цене, районам, материалу стен и т.д.
Можно было бы выводить контекстную рекламу: рассматривает человек, какую то конкретную квартиру, а рядом выводится список квартир максимально похожих на рассматриваемую и т.д.
Вопрос: Делал ли кто-либо сайты Недвижимости на Дрюпале и как там делалась сортировка и вывод информации?
Комментарии
Что-то мне подсказывает, что тебе поможет вездесущий Views
Есть на форуме у нас девушка, она тебе точно скажет. Угадаешь её имя?
мне увжется еще в сочетании с вздесужим cck, можно будет сделать цифровое поле цена, и потом по его значению делать отбор через views
Девушку, как мне кажется, зовут Натали
Дорогие друзья, неужели никто из вас не делал сайт по недвижимости? Может, те вопросы, которые я задаю давно уже решены?
Vadbars, кажется, делал сайт по недвижимости, но я его здесь не вижу
---
---
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.
Только что сделал в ССК тип квартира с приведёнными здесь полями.
Настроил Views, в фильтры добавил поле "Integer: Стоимость" (поле, созданное в ССК), но для этого поля присутствуют только два оператора: "is equal to" и "is not equal to". А нам надо "more than" (или less). Как быть?
Может как-то через computed field? Вот пример использования
http://www.darcynorman.net/2006/08/18/cck-and-computed-fields
---
---
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.
Нет, думаю это надо делать на стороне Views, а не ССК.
Я себе это так представляю:
- человек заполняет некую форму с полями: Число комнат, Район, Материал стен, Цена квартиры.
- затем форма вызывает наш вид с параметрами-аргументами, например так: /flat/1/center/iron/100/200, где
flat - вид
1 - кол-во комнат
center - рай-он
iron - материал
100 - нижняя граница цены
200 - верхняя граница цены
Всё понятно, кроме цены - как выбрать диапазон?
Ведь цифровые параметры используются не только в недвижимости, практически на половине бизнес сайтов есть какие-то цены или просто цифровые характеристики, которые надо сравнивать.
у меня в файле cck/number.module
есть следующие строчки:
<?php
case 'filter operators':
return array(
'=' => t('is equal to'),
'!=' => t('is not equal to'),
// TODO: views.module seems to break anything with > or < in it.
// '>' => t('is greater than'),
// '<' => t('is less than'),
// '>=' => t('is greater than or equal to'),
// '<=' => t('is less than or equal to'),
?>
может это TODO уже сделали (я давно модули не обновлял).
а почему нет? Можно сделать так, чтобы это поле равнялось 1, если цена больше или равно определенной сумме, и 0, если меньше. Потом через фильтры выводим только те материалы, у которых это поле равно 1. Само поле скрываем для пользователей через шаблоны.
Если вы хотите, чтобы пользователь сам выбирал, тогда можно сделать полей несколько и назвать соответственно, чтобы было понятно.
---
---
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.
Так, строчки я расскоментировал - всё работает.
Теперь вопрос в другом - как взять из аргументов ( /flat/1/center/iron/100/200) и отправить в фильтры?
Natalie, ничего не понял
Какое "это поле"?
Когда вычислять больше меньше определённой цены?
Ну если работает тогда проехали С аргументами я сама не разобралась.
---
---
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.
Алгоритм работы понятен. Осталось код написать. Что не выходит пока чаша
Видится мне это так.
1. Имеем вид. Самое главное, что в нём это фильтры, а именно:
"Node: Type" - тип материала, что создали в ССК;
"Integer: Количество комнат (field_room_num)" - оттуда же, оператор у него "is equal to" и "value" = 1;
"Integer: Стоимость ($) (field_cost)", оператор - "is greater than or equal to", "value" = 0;
"Integer: Стоимость ($) (field_cost)", оператор - "is less than or equal to", "value" = 99999999;
2. Делаем экспорт и смотрим структуру вида.
3. Теперь надо в "Argument Code" вставить код, который будет брать из пути (/1/100/200 - только кол-во комнат и мин/макс цены, для простоты) аргументы и менять параметры, что мы задали в настройках вида.
Я вставил следующий код:
<?php
// 1/100/200,
foreach ($view->filter as $filter) {
if($filter->tablename == 'node_data_field_room_num')
$filter->value = $args[0];
if($filter->tablename == 'node_data_field_cost')
{
if($filter->operator == '>=')
$filter->value = $args[1];
if($filter->operator == '<=')
$filter->value = $args[2];
}
}
return $args;
?>
Что-то не пашет. Надо всё-таки заняться изучением PHP
Можно пока просто сделать поле integer для цены, а потом вывести фильтр цена больше или равна значению. Если мы хотим позволить пользователям самим отфильтровывать результаты, то делаем его expose.
---
---
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.
Можно и так, но:
1. не кошерно
2. глючат они (у меня по крайней мере)
3. пора бы уже и с аргументами научиться работать
Вопрос к знающим PHP.
есть массив $view->filter:
<?php
$view->filter = array (
array (
'tablename' => 'node',
'field' => 'type',
'operator' => 'OR',
'options' => '',
'value' => array ( 0 => 'content-flour', ),
),
array (
'tablename' => 'node_data_field_room_num',
'field' => 'field_room_num_value',
'operator' => '=',
'options' => '',
'value' => '1',
),
array (
'tablename' => 'node_data_field_cost',
'field' => 'field_cost_value',
'operator' => '>=',
'options' => '',
'value' => '0',
),
array (
'tablename' => 'node_data_field_cost',
'field' => 'field_cost_value',
'operator' => '<=',
'options' => '',
'value' => '300000',
),
);
?>
надо в подмассиве
<?php
array (
'tablename' => 'node_data_field_room_num',
'field' => 'field_room_num_value',
'operator' => '=',
'options' => '',
'value' => '1',
),
?>
вместо value=1 сделать value=100
как?
Почему не кошерно, если мы хотим позволить пользователям самим выбирать?
---
---
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.
Лень объяснять, прости. Просто "мне так видится" Да пользователь дожен сам вводить, но по другому. Это моё мнение, но я не хочу спорить. Меня больше волнует решение проблемы.
$view->filter[1]['value'] = 100;
$view->filter[1]['value'] = '100';
В исходном коде было значение типа string
Сорри, не подходит.
Нужно для общего случая, когда порядок подмассивов неизвестен.
foreach работает с копией массива. попробуй так:
Ух ты! Не знал, что foreach работает с копией, спасибо!
(...пора уже всерьёз заняться PHP...)
Но всё равно не работает. Такое впечатление, что эти фильтры потом переопределяются...
Ну ничего, мы ещё потрепыхаемся...
Dan, а может, у автора спросить? Он вроде должен лучше знать
---
---
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.
Может
Ещё кое-что попробую...
Победил я его
Позже, будет время, опишу как.
Ну выложи хотя бы результаты что ли
---
---
All content management systems suck, Drupal just happens to suck less. -- Boris Mann at DrupalCON Amsterdam, August 2005.
Уже скоро
где-то был сайт по поиску квартир - на друпале views - подскажите ссылочку пожалуйста - не могу найти
да, помню кто-то делал с помощью views.
но ссылку не дам - не знаю кто и где
Если про мой идет разговор - то вот: http://novostroyka-ru.ru
Только я уже не помню, был у меня там отбор по стоимости или нет Кажется нет, просто сортировка по стоимости.
p.s. Dan, а где же обещанное описание победы над фильтрами?
Здесь:
Views. Часть первая - изменение параметров "на лету" -- http://drupal.ru/node/2943