Коллективная помощь по созданию сайта недвижимости на Drupal 6 (CCK+Views+ImageСache)

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

Аватар пользователя krasniy001 krasniy001 1 декабря 2008 в 14:21

Приветствую уважаемое сообщество!
Я поставил цель создать сайт по недвижимости на базе Drupal 6 не используя платный модуль Ulistening
Также я хочу что бы этот материал в дальнейшем стал для многих руководством к действию по созданию подобных по функциям сайтов.
Я не специалист по PHP и недавно перешел на Drupal с Joomla, поэтому многое мне еще не понятно.

Задача на сайте стоит:
-Размещение объявлений о продаже недвижимости зарегистрированными пользователями сайта.
-Удобный поиск объявлений (применяя фильтр) как на http://www.kvartira51.ru/

1. Установил Drupal 6 + модули CCK 2.1, Views 2.1, ImageCache 2.0 beta, ImageField 3.0 alpha, Filefield 3.0 alpha, Date 2.0 rc5.
2. Создаю новый тип материала Квартира
3. Добавляю текстовое поле Город, Район, Улица, Комнат, Этаж, Площадь, Цена, а также Image поле для фотографий
http://www.picamatic.com/show/2008/12/01/01/41/1465245_765x386.png

далее надо оформить все удобнее и компактнее, для этого используем Views и вот тут начинаются трудности
http://www.picamatic.com/show/2008/12/01/02/10/1465416_1028x828.png
Трудности пока две:
1. Непонятно как создать превью фото по нажатию которых будет открываться большая картинка
Проблема решена, причина была в неправильном htaccess
2. Как создать фильтр поиска по полям на подобии (http://www.picamatic.com/show/2008/12/01/02/14/1465452_751x248.png)
Для создания фильтра в Views создаем Блок и добавляем фильтры

Затем выбираем нужный фильтр и нажимаем Expose, в итоге имеем настройки:

Вот что получилось:

поправьте пожалуйста что я делаю неправильно...
Спасибо

Комментарии

Аватар пользователя fortsie fortsie 1 декабря 2008 в 15:43

2. В самом верху, слева (где Default), выбираете из выпадающего списка "Блог", затем add display, после этого настраиваете фильтры, чтобы фильтры выводилиьс на старнице используйте expose (при настройке вывода фильтра.
Вроде так, если я правильно понял задачу. Могу и ошибаться, так как сам только 2 недели как знакомлюсь с drupal Smile

Аватар пользователя direqtor direqtor 1 декабря 2008 в 17:33

"krasniy001" wrote:
Непонятно как создать превью фото по нажатию которых будет открываться большая картинка
Если вы настраиваете в imagecache пресеты, то они доступны на странице Display fields в настройках полей CCK imagefield для каждого типа материала.

Например, сейчас на разработке сайта того же плана, в разделах каталога испоьльзуется автоматически создаваемая картинка шириной 150px (http://vostdom.ru/cities/dalyan), при полном просмотре 350px (http://vostdom.ru/realties/pokupka-kvartiry-dalian-0), при этом движку пофиг какого размера редактор картинку туда засунет

Аватар пользователя krasniy001 krasniy001 1 декабря 2008 в 19:18

Не отображаются фото созданные с помощью пресетов и CCK
Путь к файлу выглядит так /sites/default/files/imagecache/200px/_3.JPG
но на самом деле картинки лежат /sites/default/files/_3.JPG и они не обработаны imagecache (т.е. оригиналы)

Аватар пользователя direqtor direqtor 1 декабря 2008 в 20:51

Работает imagecache примерно так: если при запросе уменьшенной картинки ее в папке /sites/default/files/imagecache/ нет, то управление попадает к Drupal, который отдает его модулю. Модуль создает требуемую картинку в папке /sites/default/files/imagecache/имя_пресета и перенаправляет на нее.

Если у вас в /sites/default/files/imagecache/ после просмотра хоть одной ноды с картинкой не появилось реальной папки с именем пресета, то что-то не в порядке с правами скрипта на запись файлов.

Аватар пользователя krasniy001 krasniy001 1 декабря 2008 в 21:14

direqtor wrote:
Работает imagecache примерно так: если при запросе уменьшенной картинки ее в папке /sites/default/files/imagecache/ нет, то управление попадает к Drupal, который отдает его модулю. Модуль создает требуемую картинку в папке /sites/default/files/imagecache/имя_пресета и перенаправляет на нее.
Если у вас в /sites/default/files/imagecache/ после просмотра хоть одной ноды с картинкой не появилось реальной папки с именем пресета, то что-то не в порядке с правами скрипта на запись файлов.

Папки с именем пресета физически не появилось, в ноде только путь к ней указывается

Аватар пользователя krasniy001 krasniy001 2 декабря 2008 в 13:12

nicolas50 wrote:
"krasniy001" wrote:
Как создать фильтр поиска по полям на подобии (http://www.picamatic.com/show/2008/12/01/02/14/1465452_751x248.png)

Очень интересная тема.
Меня тоже интересует ответ на этот вопрос.

Добавил описание создания фильтра...
Осталась проблема с картинками

Аватар пользователя HIgor1968 HIgor1968 2 декабря 2008 в 15:54

Вьюс. Делаешь блок и темизируешь. Можно поле сделать спецпредложение Да/Нет. Но лучше сделать фильтр по нодам с отметкой помещать на главную.

Аватар пользователя krasniy001 krasniy001 2 декабря 2008 в 14:47

Установил Drupal на localhost все равно не отображаются фото - путь ведет к несуществующей папки http://localhost/drupal/sites/default/files/imagecache/600px/_4.JPG
а на самом деле файл лежит в http://localhost/drupal/sites/default/files/_4.JPG

Аватар пользователя krasniy001 krasniy001 2 декабря 2008 в 16:35

Я так понимаю что темизация это написание php кода - это проблема для всех новичков которые сталкиваются с друпалом

Аватар пользователя direqtor direqtor 2 декабря 2008 в 18:05

В основном весь HTML-вывод друпала идет через функцию темизации [ru-api=theme].

Любую такую функцию в своей теме оформления можно подменить собственной.
Кроме того некоторые из этих функций используют для своей работы файлы шаблонов, которые также могут редактироваться и более того их количество может быть расширено по определенным правилам для разных типов выводимых данных.

Это и есть темизация.

Аватар пользователя dm66 dm66 3 декабря 2008 в 13:27

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

Аватар пользователя krasniy001 krasniy001 2 декабря 2008 в 17:56

Кстати проблема с imagecache наблюдается только в 6 версии drupal, поэтому поводу сейчас ведется дискуссия на оффсайте

Аватар пользователя krasniy001 krasniy001 2 декабря 2008 в 18:34

А есть вообще подробное руководство по темизация, я вот например выдрал $node->title из contemplate и теперь хотел бы вставить его в определенный DIV с определённым классом CSS

Аватар пользователя HIgor1968 HIgor1968 2 декабря 2008 в 18:45

Вся темизация вьюса в нем и лежит в папке theme. Берешь там файлик переименовываешь, складываешь к теме. Что во что переименовывать смотри в настройке споего вьюса в меню: Тема оформления: Информация

Аватар пользователя krasniy001 krasniy001 2 декабря 2008 в 21:00

По итогу я хочу записать скринкаст по созданию сайт недвижимости с применением CCK, Views,Imagecache и темизацией если конечно в этом посодействую специалисты Smile

Аватар пользователя HIgor1968 HIgor1968 3 декабря 2008 в 9:35

Как вариант. Во вьюсе сделать вывод с аргументами. А форму фильтра как отдельный снипет вызывающий страницы вьюса по аргументам.
Может и модуль есть, но я не видел.

Аватар пользователя krasniy001 krasniy001 3 декабря 2008 в 13:33

как можно вывести ноду таким образом: (т.е. что бы одна фото была справа от текста а остальные фото под катом)

Аватар пользователя HIgor1968 HIgor1968 3 декабря 2008 в 14:23

Можно с использованием вьюса и ССК.
Можно опять же переписыванием node.tpl.php но в этом случае знание php обязательно. Разбираем массив $node и вперед.
Вот примеры темизации без использования вьюса только node.tpl.php и разбор массива $node:
- отдельный объект
- список новостроек
переписал node.tpl.php для типа материала Недвижимость.
Вывод конкретного CCK-поля в ноде: $node->field_etazhnost[0]['view']
В данном примере field_etazhnost - имя сск поля в типе материала.
И пиши, компануй поля в ноде как хочешь.

Аватар пользователя EllECTRONC EllECTRONC 3 декабря 2008 в 13:42

"krasniy001" wrote:
как можно вывести ноду таким образом: (т.е. что бы одна фото была справа от текста а остальные фото под катом)

Проще паренной, использую такую схему для портфолио CCK (поля с делением на группы) + Views + ImageCache.

Аватар пользователя HIgor1968 HIgor1968 3 декабря 2008 в 14:28

Если полями ноды являются термины таксономии то вот конструкция

//Выводим все словари  таксономии
                foreach(taxonomy_node_get_terms($node, 'vid') as $name3 => $value3) {
                                $vocabulary = taxonomy_vocabulary_load($name3);
                                echo '<div class = "pole_l0" id = "term' . $vocabulary->vid . '"><p><b>' . $vocabulary->name . ': </b>';
                $cc = '';
                $rr = '';
                $ii = 1;
                foreach (taxonomy_node_get_terms_by_vocabulary($node, $name3,'description') as $name => $value1) {
                if($ii>1){$rr = ', ';}
                $cc = $cc . $rr . $name;
                $ii +=1;}
                echo $cc . '</p></div>';               
                        }

Ваводит следующее
Наименование термина: термин1, термин2

Аватар пользователя krasniy001 krasniy001 3 декабря 2008 в 14:45

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

Аватар пользователя NecroHill NecroHill 3 декабря 2008 в 15:14

Как вариант. Во вьюсе сделать вывод с аргументами. А форму фильтра как отдельный снипет вызывающий страницы вьюса по аргументам.
Может и модуль есть, но я не видел.

а есть ли где примеры таких снипетов?

Аватар пользователя HIgor1968 HIgor1968 3 декабря 2008 в 15:33

Примера нет.
Вывод вьюса с аргументами - как обычный УРЛ, закономерный. Задача его программно сформировать, это может быть GET форма. Дальше все зависит от фантазии. У меня сейчас есть подобная задача. В течении недели надо решить. Как сделаю - отпишусь.

Аватар пользователя EllECTRONC EllECTRONC 3 декабря 2008 в 15:30

"krasniy001" wrote:
А вот что делать с группой созданной в CCK непонятно, группа создана а как вывести ее и настроить отображения слева неясно

Перейдите на вкладку "Показать поля", там и выбирайте что показывать в тизере (фото+детали), что в полной (остальные фото — в отдельной группе).
Чтобы фото было слева CSS, ТИПА:

bla-bla img{
float:left;
}

или

bla-bla img.imagecache{
float:left;
}
Аватар пользователя NecroHill NecroHill 3 декабря 2008 в 17:05

наковырял рабочий сниппет (работает только в Drupal 6).
последовательность действий следующая:
1. создаем views (page), задаем соответствующий ему соответствующий path
2. добавляем поля и фильтры по вкусу, нужные фильтры делаем exposed.
3. создаем блок в теле которого пишем следующий сниппет:

<?php
  $view = views_get_view('тут_пишем_имя_нашего_views');
  $view->set_display('default');
  $view->init_handlers();
  $form_state = array(
    'view' => $view,
    'display' => $view->display_handler->display,
    'method' => 'get',
    'rerender' => TRUE,
    'no_redirect' => TRUE,
  );
  $output = drupal_build_form('views_exposed_form', $form_state);
  return $output;
?>

вуаля — у нас в блоке точная копия exposed фильра.
дальше осталось потрахаться с темизацией этого блока, определить его только для показа на главной (или на других страницах) и все!
надеюсь что кому то это сэкономит время на поиск решения

P.S. Drupal вылетает с ошибкой в случае неправильного написания имени views в сниппете, либо удаления views неудаляя блок со сниппетом ссылающимся на него. быстрое решение для реанимации сайта, в этом случае, удаление блока из базы из таблицы blocks с помощью phpAdmin или аналогов (Navicat и т.д.)
спрашивайте если будут вопросы

Аватар пользователя HIgor1968 HIgor1968 3 декабря 2008 в 18:12

Снипет проверил, одно НО
Строчка

$view->set_display('default');

применима исли страница во вьюсе одна и ворма поиска в дефолтной настройке, если много страниц и формы везде разные то вместо "default" пишем имя нашей странички. Его можно взять из адресной строки при редактировании нужной страницы вьюса.
Вызлядит примерно так:

ВашСайт/admin/build/views/edit/catalog?destination=kommerc#views-tab-page_3

page_3 и есть имя страницы, его пишем вместо default

ПыСы: как предложение, оформи этот снипет отдельной темой, многим будет интересно.

Аватар пользователя NecroHill NecroHill 3 декабря 2008 в 23:11

ага, насчет уточнения по поводу default спасибки.

>ПыСы: как предложение, оформи этот снипет отдельной темой, многим будет интересно.
оформлю, на сайте drupal.ru еще не проскакивало это решение по-моему

Аватар пользователя NecroHill NecroHill 7 декабря 2008 в 18:42

теперь нашел решение без сниппета - все решается функционалом самого Views - достаточно в свойстве "Exposed form in block" поставить "Yes" и фильтр будет отображаться в блоке. И никаких сниппетов.

Аватар пользователя Dmitriy.ua Dmitriy.ua 20 января 2009 в 12:32

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

///////////
это из за Devel-а

Аватар пользователя RoSk0 RoSk0 19 марта 2009 в 16:47

отличная статья

народ скажите пожалуйста есть однозначное мнение по воду views+CCK или лучше модулем реализовывать такой функционал?
как насчет производительности?
я не супер спец просто тоже стоит задача реализации такого сайта и думаю может лучше сразу пытаться модуль написать если он реально в производительности выигрывать будет?
выскажитесь пожалуйста

Аватар пользователя HIgor1968 HIgor1968 19 марта 2009 в 17:14

Собственно модуль по недвижке есть. uListing
За канадские рубли.
Но VIEWS + CCK + еще разные модули по потребности (попозже пожалуй напишу пост как сам делал сайт).

Аватар пользователя Gorinich Gorinich 7 апреля 2009 в 16:08

Подскажите плз, как изменить размер поля созданного CCK в фильтре Views, тип данных поля был указан integer, widget - textfield. Если задать text, а не integer, то размер задать можно. А здесь как?

Аватар пользователя petropulos petropulos 2 октября 2009 в 13:48

Делаю все как написано в статье, во views создаю фильтр, и вроде все получается

Но при просмотре самого сайта показывается только таблица с результатами, а сам фильтр с выбором параметров нет

Подскажите пожалуйста в чем причина... только второй день как начал изучать систему.
Спасибо.