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

Данный сайт работает под управлением системы CMS Drupal 7. Посмотреть на сайт в живую, вы можете посетив непосредственно сам сайт otdamvam.com

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

Cписок основных используемых модулей:

  • Display Suite
  • Loginza
  • Panels
  • Views
  • Webform
  • Global Filter
  • Modal Forms
  • Ideal Comments
  • Page Title
  • Meta tags (quick)
  • XML Sitemap

Формирование главной страницы

Главная странциа содержит последние добавленные объявления с возможностью фильтрации объявлений по городам/регионам. Вывод объявлений осуществляется с помощью представлений (модуль Views) которые размещены в панелях (модуль Panels).

Фильтрация объявлений по городу/региону

Для фильтрации по городу/региону мы использовали функционал модуля Global Filter. В процессе работы с этим модулем были найдены и исправлены некоторые ошибки, которые обсуждали мы вместе с автором модуля

Разрыв представления для отображения рекламного блока (рис. 1)

Разрыв вьюхи для вставки рекламного блока
Рис 1. Разрыв представления для вставки рекламного баннера

Реализовано это с помощью перекрытия файла темплейта вывода вьюхи views-view-grid.tpl.php, где мы просто считали вторую строку в таблице и добавляли после нее наш рекламный блок. Код:

<?php if (!empty($title)) : ?>
  <h3><?php print $title; ?></h3>
<?php endif; ?>
<table class="<?php print $class; ?>"<?php print $attributes; ?>>
  <tbody>
    <?php foreach ($rows as $row_number => $columns): ?>
      <tr <?php if ($row_classes[$row_number]) { print 'class="' . $row_classes[$row_number] .'"';  } ?>>
        <?php foreach ($columns as $column_number => $item): ?>
          <td <?php if ($column_classes[$row_number][$column_number]) { print 'class="' . $column_classes[$row_number][$column_number] .'"';  } ?>>
            <?php print $item; ?>
          </td>
        <?php endforeach; ?>
      </tr>
    //делаем разрыв путем обнаружения второй строки
    <?php if ($row_number == 1) : ?>
      <tr>
        <td colspan="2" style="width: 100%;">
           //пишем все, что нам необходимо
        </td>
      </tr>
    <?php endif;?>
    <?php endforeach; ?>
  </tbody>
</table>

Фильтр объявлений по типу

Для построения фильтра по типу обявлений (Отдам, Хочу, Меняю) Рис 2., использовали модуль BEF для Views, который позволяет строить фильтры в виде ссылок, что мы успешно и использовали.

Использование BEF фильтра для объявлений
Рис. 2 Фильтр объявлений по типу

Ротация объявлений

Объявления,  по умолчанию, отображаются с сортировкой по дате создания/правки. Также каждое объявление имеет свой "срок жизни", который ведет отсчет от времени последней правки объявления. Те объявления, которые старше своего "срока жизни" отображаются в каталоге последними. Для объявлений предусмотрено автоматическое отображение состояния - активно или не активно на основе "срока жизни" объявления. Проверка состояния, для отображения в каталоге реализована простым php кодом, который добавлен с помощью модуля Views PHP.

Уведомление о окончании срока активности объявления осуществляется с помощью правил, созданных с использованием модуля Rules. В момент создания/правки объявления создается задание в планировщик Rules с уникальным идентификатором на уведомление автора об окончании срока активности объявления и предложении продлить этот срок. После того, как объявление будет открыто на редактирование, срок активности автоматически продлевается и задание о уведомлении перезаписывается. Благодаря использованию уникального идентификатора задания в пределах объявления, пропадает необходимость удалять старое задание, а необходимо его лишь перезаписать (изменить дату выполнения)

Страница объявления

Отображение страницы объявления организовано с помощью Display Suite это позволяет наиболее быстро и легко добавлять произвольные поля с кодом на страницу и легко изменять положение выводимых полей ноды.

Актуальность объявления определяется простой сверкой текущей даты и времени последней правки объявления, и если разность этого времени отличается на больший интервал, чем внесен в настройках, тогда объявление маркируется меткой "Не актуально", но продолжает отображаться на сайте.

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

Форма Пожаловаться на объявление реализована с помощью модуля Webform и отображается в всплывающем окне с использованием функционала модуля Modal Form. При заполнении формы отправляется также адрес текущей страницы, для определения того, на какое объявление жалуется. Это сделано с помощью добавления переменной %server[HTTP_REFERER] в шаблон отправляемого письма в настройках уведомления ввебформы. Ниже приведен пример строки, с использованием %server[HTTP_REFERER] в тексте отправляемого письма:

Отправлено %date
Жалоба на объявление: %server[HTTP_REFERER]

Остальные поля для отображения объявления берутся непосредственно из ноды и выстраиваются с помощью Display Suite.