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

Прислано: krasniy001

пн, 01/12/2008 - 11: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, в итоге имеем настройки:

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

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

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано EllECTRONC в пн, 01/12/2008 - 11:56.

1. Юзайте сайт на днях обсуждалось ImageCache + CCK
2. Ручками, во views.


Опубликовано krasniy001 в пн, 01/12/2008 - 12:17.

2. Не совсем понятно как это сделать ручками во Views


Опубликовано fortsie в пн, 01/12/2008 - 12:43.

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


Опубликовано HIgor1968 в пн, 01/12/2008 - 13:49.

lightbox2. Темизируешь поле.
Пример в readme.txt к lightbox2 прописан подробно.
Вот например. Правда дополнительно там еще и viewscarousel привернул.


Опубликовано krasniy001 в пн, 01/12/2008 - 14:23.

Установил Lightbox
Создал пресет 200px в imagecache http://www.picamatic.com/show/2008/12/01/05/02/1466132_470x294.png
Захожу в Display fields, выбираю в столбике Full Node Lightbox2: 200px>original и фото исчезает из полной новости


Опубликовано direqtor в пн, 01/12/2008 - 14:33.

"krasniy001" написал(а):

Непонятно как создать превью фото по нажатию которых будет открываться большая картинка

Если вы настраиваете в imagecache пресеты, то они доступны на странице Display fields в настройках полей CCK imagefield для каждого типа материала.

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


Опубликовано krasniy001 в пн, 01/12/2008 - 16:18.

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


Опубликовано direqtor в пн, 01/12/2008 - 17:51.

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

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


Опубликовано krasniy001 в пн, 01/12/2008 - 18:14.

direqtor написал(а):

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

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


Опубликовано direqtor в пн, 01/12/2008 - 23:46.

Значит скрипт не может писать в каталог files


Опубликовано nicolas50 в вт, 02/12/2008 - 07:22.

"krasniy001" написал(а):

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

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


Опубликовано krasniy001 в вт, 02/12/2008 - 10:12.

nicolas50 написал(а):
"krasniy001" написал(а):

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

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

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


Опубликовано krasniy001 в вт, 02/12/2008 - 11:18.

Еще интересует вопрос как создать блок с горячими предложениями


Опубликовано krasniy001 в вт, 02/12/2008 - 11:47.

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


Опубликовано HIgor1968 в вт, 02/12/2008 - 12:54.

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


Опубликовано krasniy001 в вт, 02/12/2008 - 13:35.

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


Опубликовано beerman в вт, 02/12/2008 - 13:38.

это проблема для всех новичков которые сталкиваются с PHP


Опубликовано HIgor1968 в вт, 02/12/2008 - 13:57.

Необязательно дойдет до PHP. Возможно отделаешься CSS


Опубликовано krasniy001 в вт, 02/12/2008 - 14:39.

К примеру если надо оформить как тут http://hturkey.ru/
что нужно для этого?
Подойдет ли content template ? что бы не разбираться с PHP


Опубликовано krasniy001 в вт, 02/12/2008 - 14:56.

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


Опубликовано direqtor в вт, 02/12/2008 - 15:05.

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

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

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


Опубликовано krasniy001 в вт, 02/12/2008 - 15:34.

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


Опубликовано HIgor1968 в вт, 02/12/2008 - 15:37.

Про http://hturkey.ru лучше наверно спросить у человека его делавшего:)
Я у себя imagecache не использовал. Может это и плохо, но мне не мешает. Но PHP требовалось спошь и рядом.


Опубликовано HIgor1968 в вт, 02/12/2008 - 15:45.

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


Опубликовано krasniy001 в вт, 02/12/2008 - 18:00.

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


Опубликовано NecroHill в ср, 03/12/2008 - 12:06.

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


Опубликовано HIgor1968 в ср, 03/12/2008 - 06:35.

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


Опубликовано krasniy001 в ср, 03/12/2008 - 10:23.

На самом деле ничего непонятного из того что вы сказали )))


Опубликовано dm66 в ср, 03/12/2008 - 10:27.

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


Опубликовано krasniy001 в ср, 03/12/2008 - 10:33.

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


Опубликовано EllECTRONC в ср, 03/12/2008 - 10:42.

"krasniy001" написал(а):

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

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


Опубликовано HIgor1968 в ср, 03/12/2008 - 11:23.

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


Опубликовано HIgor1968 в ср, 03/12/2008 - 11: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 в ср, 03/12/2008 - 11:45.

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


Опубликовано HIgor1968 в ср, 03/12/2008 - 11:56.

Группа не причем. Только HTML, CSS - куда поля ткнешь там они и встанут.
То что тебе описывал - оформил отдельной темой : http://drupal.ru/node/22251


Опубликовано NecroHill в ср, 03/12/2008 - 12:14.

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

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


Опубликовано EllECTRONC в ср, 03/12/2008 - 12:30.

"krasniy001" написал(а):

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

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

bla-bla img{
float:left;
}

или
bla-bla img.imagecache{
float:left;
}


Опубликовано HIgor1968 в ср, 03/12/2008 - 12:33.

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


Опубликовано NecroHill в ср, 03/12/2008 - 14: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 в ср, 03/12/2008 - 14:20.

Спасибо, собственно действительно время сэкономил. Подправить и мне подойдет.
То я пошел с нуля писать.


Опубликовано krasniy001 в ср, 03/12/2008 - 14:47.

Как добавить в ALT и Title картинки заголовок новости?


Опубликовано NecroHill в ср, 03/12/2008 - 14:57.

>Как добавить в ALT и Title картинки заголовок новости?
а токенами не получится?


Опубликовано HIgor1968 в ср, 03/12/2008 - 15:12.

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

$view->set_display('default');

применима исли страница во вьюсе одна и ворма поиска в дефолтной настройке, если много страниц и формы везде разные то вместо "default" пишем имя нашей странички. Его можно взять из адресной строки при редактировании нужной страницы вьюса.
Вызлядит примерно так:
ВашСайт/admin/build/views/edit/catalog?destination=kommerc#views-tab-page_3

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

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


Опубликовано NecroHill в ср, 03/12/2008 - 20:11.

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

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


Опубликовано HIgor1968 в ср, 03/12/2008 - 20:28.

Я тоже не видел такой темы.


Опубликовано krasniy001 в чт, 04/12/2008 - 11:18.

Уже не хватает 32 мб памяти на хостинге (((


Опубликовано NecroHill в вс, 07/12/2008 - 15:42.

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


Опубликовано Dmitriy.ua в вт, 20/01/2009 - 09:32.

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

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


Опубликовано RoSk0 в чт, 19/03/2009 - 13:47.

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

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


Опубликовано HIgor1968 в чт, 19/03/2009 - 14:14.

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