Что интересного на сайте
- Организация отображения объекта недвижимости с помощью DS
- Отображение вкладок на странице просмотра недвижимости
- Отображение цены в гривнах и долларах. Автоматический пересчет курса.
- Организация фотогалереи про просмотре объекта недвижимости
- Интеграция веб формы в ноду при просмотре объекта и передача адреса текущей страницы для определения с какой ноды отправляется формы
Организация отображения объекта недвижимости с помощью DS
Для отображения объектов недвижимости в том виде, как на скриншоте, мы использовали Drupal модуль Display Suite (далее порсто DS). Этот модуль позволяет с легкостью настроить сетку отображения так, как нужно вам. Можно сказать, что это аналог Panels только для нод. Можно, к примеру, разделить область отображения на 2 боковые колонки (левая, правая) и одну под ними (подвал), и тогда настроить показ заглавия над колонками, отображения фотогалереи в левой, полей описания в правой и дополнительной информации в подвале. В нашем случае мы так и сделали. Еще одним приемом, которым мы пользовались при выводе материала — это использование модуля Fieldgroup для группировки полей по вкладкам, что позволяет немного разнообразить сам интерфейс и более компактно использовать рабочую область отображения. Дальше мы настроили отображение определенных вкладок в своих областях, которые предоставляет модуль DS и в результате получили то, что видно на скрине или же на самом сайте агентства
Рис. 1. Отображение объектов недвижимости с помощью DIsplay Suite
Организация фотогалереи про просмотре объекта недвижимости
Интерес может вызвать отображение фотогалереи стандартными средствами Drupal без использование сторонних модулей. Нужно было добиться отображения одного фото большого размера, а под ним небольшие привьюшки изображений. Как вариант,, это можно сделать с помощью создания 2-х полей CCK — одно для отображения главного фото (большого) и другого поля для отображения и хранения произвольного количества других изображений. Но мы пошли другим путем, мы создали всего одно поле для хранения изображений, и мы темизировали вывод этого поля cck через theme_field(). Ниже приведен код, с помощью которого мы выводим первое изображение с помощью пресета imagecache для большой привьюхи, а остальные изображения мы выводим с применением другого пресета, как раз для маленьких привьюх фотогалереи. Ну и для стилизации, конечно, завернули все что нам нужно в DIVы — чтобы проще было CSS подцепить к ним.
<?php
function THEMENAME_field__field_photo__nedvigimost($variables) {
$variables['items'][0]['#image_style'] = 'main_image_406x300';
$output = '';
// Render the label, if it's not hidden.
if (!$variables['label_hidden']) {
$output .= '<div class="field-label"' . $variables['title_attributes'] . '>' . $variables['label'] . ': </div>';
}
// Render the items.
$output .= '<div class="field-items"' . $variables['content_attributes'] . '>';
// shift the array of items
$first = array_shift($variables['items']);
$classes = 'field-item main-image ';
$text_for_foto = '<div class="text-for-foto">Для увеличения кликните на фото</div>';
$output .= '<div class="' . $classes . '"' . $variables['item_attributes'][0] . '>' . drupal_render($first) . '</div>'.$text_for_foto;
foreach ($variables['items'] as $delta => $item) {
$classes = 'field-item ' . ($delta % 2 ? 'odd' : 'even');
$output .= '<div class="' . $classes . '"' . $variables['item_attributes'][$delta] . '>' . drupal_render($item) . '</div>';
}
$output .= '</div>';
// Render the top-level DIV.
$output = '<div class="' . $variables['classes'] . '"' . $variables['attributes'] . '>' . $output . '</div>';
return $output;
}
?>
Код помещаем в template.php вашей темы, вместо THEMENAME - имя вашей темы, ну и правильно пишем имя поля, которое темизируете. В результате получаем именно то, что нам нужно — одна большая фотка (кликабельная) и под ней множество маленьких привъюх. И все в целом — это фотогалерея с помощью CCK на Drupal без использования дополнительных модулей.
В результате мы имеем вот такую фотогалерейку на Drupal:
Рис.2. Пример простой фотогалереи на Drupal
Интеграция веб формы в ноду и передача адреса текущей странцы
Под объектом недвижимости выводим веб форму для записи на просмотр недвижимости. Модуль Webform. Встраивается форма как простой блок с помощью DS. Из интересного — отправка вместе с данными заполнения формы, данных о том, с какой страницы эта форма была заполнена. Делается это просто, в поле «шаблон e-mail» добавляем строчку
Ссылка на объект: %server[HTTP_REFERER]
Отображение вкладок на странице просмотра недвижимости с помощью Field Group
Как и писал выше вкладки выводим через модуль Fieldgroup. Модуль позволяет группировать поля по вкладкам и группам вкладок. А с использованием DS можно добиться таких вот интересных способов вывода — в нашем случае это две независимые группы вкладок. Первая группа это вкладки фото/видео, а вторая — параметры недвижимости. Совместное использование DS и Fieldgroup позволяет независимо одна от другой сменять вкладки, находящиеся в разных регионах DS
Отображение цены в гривнах и долларах. Автоматический пересчет курса с помощью Currency
Одной из особенностей работы с недвижимостью, как и с любым другим дорогостоящим товаром является необходимость отображение цены в различных валютах, с учетом текущих изменений курса. В текущем сайте, мы пошли таким путем: основная валюта, в которой вносится стоимость — американский доллар, так как, обычно, именно по нему равняются при определении стоимости. Но при просмотре объекта недвижимости, мы автоматически выводим стоимость данного объекта и в национальной валюте, в которой производятся расчеты, в гривне. Так как курс гривна/доллар, не всегда постоянен, возникает необходимость поддержки данного курса в актуальном состоянии. Здесь мы применили отличный модуль Currency Exchange который может автоматически обновлять курсы заданных валют, основываясь на системе Yahoo Finance! Хочется отметить, что курс именно реальный, а не внутренний банковский, поэтому, можно смело использовать его при работе с валютами. Модуль Currency предоставляет свое API с помощью которого можно конвертировать программно одну валюту в другую, что мы и сделали. При выводе объекта недвижимости, мы добавили программное поле DS и в его код поместили API функцию Currency для конвертации доллара в гривне.
Результат использвоаниея Currency API показан на рисунке ниже:
Рис. 3. Отображение различных валют с помощью Currency API
Ниже сам код:
<?php
if (isset($entity->field_realty_price['und'][0]['value'])) {
$from = 'USD';
$to = 'UAH';
$amt = $entity->field_realty_price['und'][0]['value'];
if (module_exists('currency_api')) {
$ret = currency_api_convert($from, $to, $amt);
if ($ret['status'] == FALSE) {
print '';
}
else {
return '<div class="field-label-inline">Цена (грн): '.number_format($ret['value'], 0, '.', ' ') . ' грн.</div>';
}
}
}
?>
Первым делом мы проверяем указана ли вообще цена на объект, и если да, то проверяем установлен ли у нас модуль Currency. Ну а дальше дело техники — указываем откуда и куда конвертировать, заполняем переменные и вызываем функцию. Результат отдаем в виде HTML кода для вставки в объект недвижимости. Все просто.
С помощью такого подхода нет необходимости вручную пересчитывать стоимость объекта в гривнах, при изменении курса. Currency позаботится об этом сам. И как дополнительные плюшки пользователям, мы разрешили им пользоваться онлайн конвертером, который предоставляется этим модулем.