Коллективная помощь по созданию сайта недвижимости на 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, в итоге имеем настройки:

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

поправьте пожалуйста что я делаю неправильно...
Спасибо
- krasniy001's blog
- Для комментирования войдите или зарегистрируйтесь
1. Юзайте сайт на днях обсуждалось ImageCache + CCK
2. Ручками, во views.
- Для комментирования войдите или зарегистрируйтесь
2. Не совсем понятно как это сделать ручками во Views
- Для комментирования войдите или зарегистрируйтесь
2. В самом верху, слева (где Default), выбираете из выпадающего списка "Блог", затем add display, после этого настраиваете фильтры, чтобы фильтры выводилиьс на старнице используйте expose (при настройке вывода фильтра.
Вроде так, если я правильно понял задачу. Могу и ошибаться, так как сам только 2 недели как знакомлюсь с drupal :)
- Для комментирования войдите или зарегистрируйтесь
lightbox2. Темизируешь поле.
Пример в readme.txt к lightbox2 прописан подробно.
Вот например. Правда дополнительно там еще и viewscarousel привернул.
- Для комментирования войдите или зарегистрируйтесь
Установил Lightbox
Создал пресет 200px в imagecache http://www.picamatic.com/show/2008/12/01/05/02/1466132_470x294.png
Захожу в Display fields, выбираю в столбике Full Node Lightbox2: 200px>original и фото исчезает из полной новости
- Для комментирования войдите или зарегистрируйтесь
Непонятно как создать превью фото по нажатию которых будет открываться большая картинка
Если вы настраиваете в imagecache пресеты, то они доступны на странице Display fields в настройках полей CCK imagefield для каждого типа материала.
Например, сейчас на разработке сайта того же плана, в разделах каталога испоьльзуется автоматически создаваемая картинка шириной 150px (http://vostdom.ru/cities/dalyan), при полном просмотре 350px (http://vostdom.ru/realties/pokupka-kvartiry-dalian-0), при этом движку пофиг какого размера редактор картинку туда засунет
- Для комментирования войдите или зарегистрируйтесь
Не отображаются фото созданные с помощью пресетов и CCK
Путь к файлу выглядит так /sites/default/files/imagecache/200px/_3.JPG
но на самом деле картинки лежат /sites/default/files/_3.JPG и они не обработаны imagecache (т.е. оригиналы)
- Для комментирования войдите или зарегистрируйтесь
Работает imagecache примерно так: если при запросе уменьшенной картинки ее в папке /sites/default/files/imagecache/ нет, то управление попадает к Drupal, который отдает его модулю. Модуль создает требуемую картинку в папке /sites/default/files/imagecache/имя_пресета и перенаправляет на нее.
Если у вас в /sites/default/files/imagecache/ после просмотра хоть одной ноды с картинкой не появилось реальной папки с именем пресета, то что-то не в порядке с правами скрипта на запись файлов.
- Для комментирования войдите или зарегистрируйтесь
Работает imagecache примерно так: если при запросе уменьшенной картинки ее в папке /sites/default/files/imagecache/ нет, то управление попадает к Drupal, который отдает его модулю. Модуль создает требуемую картинку в папке /sites/default/files/imagecache/имя_пресета и перенаправляет на нее.
Если у вас в /sites/default/files/imagecache/ после просмотра хоть одной ноды с картинкой не появилось реальной папки с именем пресета, то что-то не в порядке с правами скрипта на запись файлов.
Папки с именем пресета физически не появилось, в ноде только путь к ней указывается
- Для комментирования войдите или зарегистрируйтесь
Значит скрипт не может писать в каталог files
- Для комментирования войдите или зарегистрируйтесь
Как создать фильтр поиска по полям на подобии (http://www.picamatic.com/show/2008/12/01/02/14/1465452_751x248.png)
Очень интересная тема.
Меня тоже интересует ответ на этот вопрос.
- Для комментирования войдите или зарегистрируйтесь
Как создать фильтр поиска по полям на подобии (http://www.picamatic.com/show/2008/12/01/02/14/1465452_751x248.png)
Очень интересная тема.
Меня тоже интересует ответ на этот вопрос.
Добавил описание создания фильтра...
Осталась проблема с картинками
- Для комментирования войдите или зарегистрируйтесь
Еще интересует вопрос как создать блок с горячими предложениями
- Для комментирования войдите или зарегистрируйтесь
Установил Drupal на localhost все равно не отображаются фото - путь ведет к несуществующей папки http://localhost/drupal/sites/default/files/imagecache/600px/_4.JPG
а на самом деле файл лежит в http://localhost/drupal/sites/default/files/_4.JPG
- Для комментирования войдите или зарегистрируйтесь
Вьюс. Делаешь блок и темизируешь. Можно поле сделать спецпредложение Да/Нет. Но лучше сделать фильтр по нодам с отметкой помещать на главную.
- Для комментирования войдите или зарегистрируйтесь
Я так понимаю что темизация это написание php кода - это проблема для всех новичков которые сталкиваются с друпалом
- Для комментирования войдите или зарегистрируйтесь
это проблема для всех новичков которые сталкиваются с PHP
- Для комментирования войдите или зарегистрируйтесь
Необязательно дойдет до PHP. Возможно отделаешься CSS
- Для комментирования войдите или зарегистрируйтесь
К примеру если надо оформить как тут http://hturkey.ru/
что нужно для этого?
Подойдет ли content template ? что бы не разбираться с PHP
- Для комментирования войдите или зарегистрируйтесь
Кстати проблема с imagecache наблюдается только в 6 версии drupal, поэтому поводу сейчас ведется дискуссия на оффсайте
- Для комментирования войдите или зарегистрируйтесь
В основном весь HTML-вывод друпала идет через функцию темизации
theme.
Любую такую функцию в своей теме оформления можно подменить собственной.
Кроме того некоторые из этих функций используют для своей работы файлы шаблонов, которые также могут редактироваться и более того их количество может быть расширено по определенным правилам для разных типов выводимых данных.
Это и есть темизация.
- Для комментирования войдите или зарегистрируйтесь
А есть вообще подробное руководство по темизация, я вот например выдрал $node->title из contemplate и теперь хотел бы вставить его в определенный DIV с определённым классом CSS
- Для комментирования войдите или зарегистрируйтесь
Про http://hturkey.ru лучше наверно спросить у человека его делавшего:)
Я у себя imagecache не использовал. Может это и плохо, но мне не мешает. Но PHP требовалось спошь и рядом.
- Для комментирования войдите или зарегистрируйтесь
Вся темизация вьюса в нем и лежит в папке theme. Берешь там файлик переименовываешь, складываешь к теме. Что во что переименовывать смотри в настройке споего вьюса в меню: Тема оформления: Информация
- Для комментирования войдите или зарегистрируйтесь
По итогу я хочу записать скринкаст по созданию сайт недвижимости с применением CCK, Views,Imagecache и темизацией если конечно в этом посодействую специалисты :)
- Для комментирования войдите или зарегистрируйтесь
Вопрос по теме, как сделать чтобы фильтр Views располагался в блоке на главной странице?

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

- Для комментирования войдите или зарегистрируйтесь
как можно вывести ноду таким образом: (т.е. что бы одна фото была справа от текста а остальные фото под катом)
Проще паренной, использую такую схему для портфолио CCK (поля с делением на группы) + Views + ImageCache.
- Для комментирования войдите или зарегистрируйтесь
Можно с использованием вьюса и ССК.
Можно опять же переписыванием node.tpl.php но в этом случае знание php обязательно. Разбираем массив $node и вперед.
Вот примеры темизации без использования вьюса только node.tpl.php и разбор массива $node:
- отдельный объект
- список новостроек
переписал node.tpl.php для типа материала Недвижимость.
Вывод конкретного CCK-поля в ноде: $node->field_etazhnost[0]['view']
В данном примере field_etazhnost - имя сск поля в типе материала.
И пиши, компануй поля в ноде как хочешь.
- Для комментирования войдите или зарегистрируйтесь
Если полями ноды являются термины таксономии то вот конструкция
//Выводим все словари таксономии 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
- Для комментирования войдите или зарегистрируйтесь
Полями ноды являются созданные поля в CCK
А вот что делать с группой созданной в CCK непонятно, группа создана а как вывести ее и настроить отображения слева неясно
- Для комментирования войдите или зарегистрируйтесь
Группа не причем. Только HTML, CSS - куда поля ткнешь там они и встанут.
То что тебе описывал - оформил отдельной темой : http://drupal.ru/node/22251
- Для комментирования войдите или зарегистрируйтесь
Как вариант. Во вьюсе сделать вывод с аргументами. А форму фильтра как отдельный снипет вызывающий страницы вьюса по аргументам.
Может и модуль есть, но я не видел.
а есть ли где примеры таких снипетов?
- Для комментирования войдите или зарегистрируйтесь
А вот что делать с группой созданной в CCK непонятно, группа создана а как вывести ее и настроить отображения слева неясно
Перейдите на вкладку "Показать поля", там и выбирайте что показывать в тизере (фото+детали), что в полной (остальные фото — в отдельной группе).
Чтобы фото было слева CSS, ТИПА:
bla-bla img{ float:left; }
или
bla-bla img.imagecache{ float:left; }
- Для комментирования войдите или зарегистрируйтесь
Примера нет.
Вывод вьюса с аргументами - как обычный УРЛ, закономерный. Задача его программно сформировать, это может быть GET форма. Дальше все зависит от фантазии. У меня сейчас есть подобная задача. В течении недели надо решить. Как сделаю - отпишусь.
- Для комментирования войдите или зарегистрируйтесь
наковырял рабочий сниппет (работает только в 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 и т.д.)
спрашивайте если будут вопросы
- Для комментирования войдите или зарегистрируйтесь
Спасибо, собственно действительно время сэкономил. Подправить и мне подойдет.
То я пошел с нуля писать.
- Для комментирования войдите или зарегистрируйтесь
Как добавить в ALT и Title картинки заголовок новости?

- Для комментирования войдите или зарегистрируйтесь
>Как добавить в ALT и Title картинки заголовок новости?
а токенами не получится?
- Для комментирования войдите или зарегистрируйтесь
Снипет проверил, одно НО
Строчка
$view->set_display('default');
применима исли страница во вьюсе одна и ворма поиска в дефолтной настройке, если много страниц и формы везде разные то вместо "default" пишем имя нашей странички. Его можно взять из адресной строки при редактировании нужной страницы вьюса.
Вызлядит примерно так:
ВашСайт/admin/build/views/edit/catalog?destination=kommerc#views-tab-page_3
page_3 и есть имя страницы, его пишем вместо default
ПыСы: как предложение, оформи этот снипет отдельной темой, многим будет интересно.
- Для комментирования войдите или зарегистрируйтесь
ага, насчет уточнения по поводу default спасибки.
>ПыСы: как предложение, оформи этот снипет отдельной темой, многим будет интересно.
оформлю, на сайте drupal.ru еще не проскакивало это решение по-моему
- Для комментирования войдите или зарегистрируйтесь
Я тоже не видел такой темы.
- Для комментирования войдите или зарегистрируйтесь
Уже не хватает 32 мб памяти на хостинге (((
- Для комментирования войдите или зарегистрируйтесь
теперь нашел решение без сниппета - все решается функционалом самого Views - достаточно в свойстве "Exposed form in block" поставить "Yes" и фильтр будет отображаться в блоке. И никаких сниппетов.
- Для комментирования войдите или зарегистрируйтесь
Помогите кто нибудь, делаю подобный сайт, для картинок использую ImageCache, ImageField.
Проблемма в том, что при нажатии кнопки загрузить... синий кружочек грузится бесконечно...
хотя картинки все таки создаются такие как надо.. но сама нода не загружается.
///////////
это из за Devel-а
- Для комментирования войдите или зарегистрируйтесь
отличная статья
народ скажите пожалуйста есть однозначное мнение по воду views+CCK или лучше модулем реализовывать такой функционал?
как насчет производительности?
я не супер спец просто тоже стоит задача реализации такого сайта и думаю может лучше сразу пытаться модуль написать если он реально в производительности выигрывать будет?
выскажитесь пожалуйста
- Для комментирования войдите или зарегистрируйтесь
Собственно модуль по недвижке есть. uListing
За канадские рубли.
Но VIEWS + CCK + еще разные модули по потребности (попозже пожалуй напишу пост как сам делал сайт).
- Для комментирования войдите или зарегистрируйтесь









Комментарии