Приветствую уважаемое сообщество!
Я поставил цель создать сайт по недвижимости на базе 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, в итоге имеем настройки:
Вот что получилось:
поправьте пожалуйста что я делаю неправильно...
Спасибо
Комментарии
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 и фото исчезает из полной новости
Например, сейчас на разработке сайта того же плана, в разделах каталога испоьльзуется автоматически создаваемая картинка шириной 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/ после просмотра хоть одной ноды с картинкой не появилось реальной папки с именем пресета, то что-то не в порядке с правами скрипта на запись файлов.
Папки с именем пресета физически не появилось, в ноде только путь к ней указывается
Значит скрипт не может писать в каталог files
Очень интересная тема.
Меня тоже интересует ответ на этот вопрос.
Добавил описание создания фильтра...
Осталась проблема с картинками
Еще интересует вопрос как создать блок с горячими предложениями
Вьюс. Делаешь блок и темизируешь. Можно поле сделать спецпредложение Да/Нет. Но лучше сделать фильтр по нодам с отметкой помещать на главную.
Установил Drupal на localhost все равно не отображаются фото - путь ведет к несуществующей папки http://localhost/drupal/sites/default/files/imagecache/600px/_4.JPG
а на самом деле файл лежит в http://localhost/drupal/sites/default/files/_4.JPG
Я так понимаю что темизация это написание php кода - это проблема для всех новичков которые сталкиваются с друпалом
Необязательно дойдет до PHP. Возможно отделаешься CSS
В основном весь HTML-вывод друпала идет через функцию темизации [ru-api=theme].
Любую такую функцию в своей теме оформления можно подменить собственной.
Кроме того некоторые из этих функций используют для своей работы файлы шаблонов, которые также могут редактироваться и более того их количество может быть расширено по определенным правилам для разных типов выводимых данных.
Это и есть темизация.
это проблема для всех новичков которые сталкиваются с PHP
К примеру если надо оформить как тут http://hturkey.ru/
что нужно для этого?
Подойдет ли content template ? что бы не разбираться с PHP
Для этого нужно править шаблоны вывода информации.
А PHP хотя бы в самом минимуме знать нужно, без этого крайне сложно сделать что-то хоть немного отличающееся от стандартного функционала.
Кстати проблема с imagecache наблюдается только в 6 версии drupal, поэтому поводу сейчас ведется дискуссия на оффсайте
Про http://hturkey.ru лучше наверно спросить у человека его делавшего
Я у себя imagecache не использовал. Может это и плохо, но мне не мешает. Но PHP требовалось спошь и рядом.
А есть вообще подробное руководство по темизация, я вот например выдрал $node->title из contemplate и теперь хотел бы вставить его в определенный DIV с определённым классом CSS
Вся темизация вьюса в нем и лежит в папке theme. Берешь там файлик переименовываешь, складываешь к теме. Что во что переименовывать смотри в настройке споего вьюса в меню: Тема оформления: Информация
По итогу я хочу записать скринкаст по созданию сайт недвижимости с применением CCK, Views,Imagecache и темизацией если конечно в этом посодействую специалисты
Вопрос по теме, как сделать чтобы фильтр Views располагался в блоке на главной странице?
Как вариант. Во вьюсе сделать вывод с аргументами. А форму фильтра как отдельный снипет вызывающий страницы вьюса по аргументам.
Может и модуль есть, но я не видел.
На самом деле ничего непонятного из того что вы сказали )))
как можно вывести ноду таким образом: (т.е. что бы одна фото была справа от текста а остальные фото под катом)
Можно с использованием вьюса и ССК.
Можно опять же переписыванием node.tpl.php но в этом случае знание php обязательно. Разбираем массив $node и вперед.
Вот примеры темизации без использования вьюса только node.tpl.php и разбор массива $node:
- отдельный объект
- список новостроек
переписал node.tpl.php для типа материала Недвижимость.
Вывод конкретного CCK-поля в ноде: $node->field_etazhnost[0]['view']
В данном примере field_etazhnost - имя сск поля в типе материала.
И пиши, компануй поля в ноде как хочешь.
Проще паренной, использую такую схему для портфолио CCK (поля с делением на группы) + Views + ImageCache.
Если полями ноды являются термины таксономии то вот конструкция
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
Как вариант. Во вьюсе сделать вывод с аргументами. А форму фильтра как отдельный снипет вызывающий страницы вьюса по аргументам.
Может и модуль есть, но я не видел.
а есть ли где примеры таких снипетов?
Примера нет.
Вывод вьюса с аргументами - как обычный УРЛ, закономерный. Задача его программно сформировать, это может быть GET форма. Дальше все зависит от фантазии. У меня сейчас есть подобная задача. В течении недели надо решить. Как сделаю - отпишусь.
Перейдите на вкладку "Показать поля", там и выбирайте что показывать в тизере (фото+детали), что в полной (остальные фото — в отдельной группе).
Чтобы фото было слева CSS, ТИПА:
float:left;
}
или
float:left;
}
наковырял рабочий сниппет (работает только в Drupal 6).
последовательность действий следующая:
1. создаем views (page), задаем соответствующий ему соответствующий path
2. добавляем поля и фильтры по вкусу, нужные фильтры делаем exposed.
3. создаем блок в теле которого пишем следующий сниппет:
$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 и т.д.)
спрашивайте если будут вопросы
Спасибо, собственно действительно время сэкономил. Подправить и мне подойдет.
То я пошел с нуля писать.
Снипет проверил, одно НО
Строчка
применима исли страница во вьюсе одна и ворма поиска в дефолтной настройке, если много страниц и формы везде разные то вместо "default" пишем имя нашей странички. Его можно взять из адресной строки при редактировании нужной страницы вьюса.
Вызлядит примерно так:
page_3 и есть имя страницы, его пишем вместо default
ПыСы: как предложение, оформи этот снипет отдельной темой, многим будет интересно.
Как добавить в ALT и Title картинки заголовок новости?
>Как добавить в ALT и Title картинки заголовок новости?
а токенами не получится?
ага, насчет уточнения по поводу default спасибки.
>ПыСы: как предложение, оформи этот снипет отдельной темой, многим будет интересно.
оформлю, на сайте drupal.ru еще не проскакивало это решение по-моему
Я тоже не видел такой темы.
Уже не хватает 32 мб памяти на хостинге (((
теперь нашел решение без сниппета - все решается функционалом самого Views - достаточно в свойстве "Exposed form in block" поставить "Yes" и фильтр будет отображаться в блоке. И никаких сниппетов.
Помогите кто нибудь, делаю подобный сайт, для картинок использую ImageCache, ImageField.
Проблемма в том, что при нажатии кнопки загрузить... синий кружочек грузится бесконечно...
хотя картинки все таки создаются такие как надо.. но сама нода не загружается.
///////////
это из за Devel-а
отличная статья
народ скажите пожалуйста есть однозначное мнение по воду views+CCK или лучше модулем реализовывать такой функционал?
как насчет производительности?
я не супер спец просто тоже стоит задача реализации такого сайта и думаю может лучше сразу пытаться модуль написать если он реально в производительности выигрывать будет?
выскажитесь пожалуйста
Собственно модуль по недвижке есть. uListing
За канадские рубли.
Но VIEWS + CCK + еще разные модули по потребности (попозже пожалуй напишу пост как сам делал сайт).
Подскажите плз, как изменить размер поля созданного CCK в фильтре Views, тип данных поля был указан integer, widget - textfield. Если задать text, а не integer, то размер задать можно. А здесь как?
Делаю все как написано в статье, во views создаю фильтр, и вроде все получается
Но при просмотре самого сайта показывается только таблица с результатами, а сам фильтр с выбором параметров нет
Подскажите пожалуйста в чем причина... только второй день как начал изучать систему.
Спасибо.
А если во Views делаю не блок, а страницу дополнительно, то фильтр выводит.
какие результаты? до чего дошли?