Onepage - модуль создания одностраничников на Drupal

Страница настроек модуля OnePage

В последние годы одностраничные сайты (так называемые лэндинги) стали основным трендом веб-дизайна. Это вполне объяснимо, т.к. простой одностраничник с лихвой покрывает потребности большинства заказчиков. Многие даже отказываются от своих давно работающих полноценных сайтов в пользу лэндингов. Именно поэтому мы и задались вопросом, можно ли сделать одностраничник на Drupal? Но на пути к решению возникает вопрос целесообразности такого решения: разумно ли использовать столько программного кода и базу данных для отображения одной-единственной страницы? В принципе, разумно, но далеко не всегда. Если вы не планируете менять содержимое страницы слишком часто, то вам вполне подойдёт статичная HTML-страница. Но если вы планируете частые правки, добавление контента и его динамическое отображение, то вам просто необходима админка сайта, то есть сайт нужно поднимать на движке. Например, на Drupal.

Итак, перейдём к делу. Однажды мы решили переделать наш сайт Well Solutions в одностраничник. Контент и структура уже были готовы, поэтому стояла задача отобразить это на одной странице в читабельном формате. Как это принято для Drupal, мы стали искать для этих дел подходящий модуль. Выбор пал на модуль OnePage. По описанию он нам подходил и работал следующим образом: отображаемая страница - это набор секций. Каждая секция - это страница, сделанная с помощью Page Manager, интегрированного в модуль Panels. При этом каждая секция имеет якорь, ссылки на якоря отображаются в блоке, который генерируется OnePage. Скрипт плавной прокрутки для красивого перелистывания секций интегрирован в сам модуль. При этом модуль имеет ещё одно примечательное свойство - для генерируемой модулем страницы автоматически создаётся собственный контекст, что позволяет легко управлять блоками и регионами, например переопределить навигационную панель. Правда из-за этого данный модуль зависим также и от модуля Context. Изначальная настройка модуля довольно проста: в комплекте с OnePage идёт модуль OnePage Starter Kit - просто включите его, чтобы нужный блок и контекст создались автоматически. Также создаются две страницы в качестве примера (на скриншоте настроек с них сняты галочки).

Но не всё оказалось так просто. Дело в том, что версия модуля, размещённая в репозитории Drupal оказалась совершенно непригодной для использования (речь идёт о версии 7.x-1.x-dev, а других на тот момент не было). Сначала Drush наотрез отказался загружать этот модуль. Не беда - скачали вручную, распаковали архив и всё стало ясно - в архиве оказался не модуль, а копия целого сайта на Drupal. Благо, что сам модуль внутри этого добра легко нашёлся в нужной папке. Скопировали модуль на сайт, включили и опять не всё гладко оказалось. Но поскольку наш девиз - это "Хорошие решения!", то нам ничего не оставалось, как превратить этот модуль в действительно хорошее решение. Далее по списку перечислим изменения, которые мы внесли в модуль OnePage, чтобы применить его на нашем сайте Well Solutions:

  1. Мы слегка переделали блок ссылок. По умолчанию он выводился в левую колонку, которая у нас на сайте вообще не применяется. Мы перенесли его в блок "Навигация" и немного переделали шаблон onepage-links.tpl.php, чтобы он максимально совпадал с выводом главного меню. В дальнейшем это существенно облегчило его темизацию.
  2. Пришлось существенно переделать админский интерфейс модуля. Дело в том, что изначально выводился список страниц Page Manager с возможностью выставить галочки на те страницы, которые мы хотим вывести. Но при этом сортировка происходила мо машинному имени страниц и изменить её было нельзя. Такой вариант совершенно не годился, тем более, что изменить машинное имя уже созданной страницы стандартными способами невозможно. В итоге было решено сделать элементы списка перетаскиваемыми. Для этого также пришлось написать слегка замысловатый механизм сортировки, чтобы отключённые и вновь созданные страницы корректно попадали в этот список.
  3. После всего этого выяснилось, что анонимные пользователи не могут получить доступ к странице. Вызвано это было тем, что в коде была проверка прав доступа, а hook_permission() отсутствовал. Добавили hook_permission() - заработало, но не совсем. Заголовки секций показались анонимным пользователям, а содержимое - нет. Выяснилось, что при добавлении контекстных ссылок (тех самых шестерёнок на блоках, так любимых всеми администраторами сайтов на Drupal 7) содержимое представляло из себя массив. А без контекстных ссылок содержимое было уже простым html-кодом. Вылечилось это добавлением проверки на массив содержимого секции, а именно заменой в шаблоне onepage-section.tpl.php 
    <?php
     
    print drupal_render($section['content']);
    ?>

    на

    <?php
     
    if (is_array($section['content'])){
     print
    drupal_render($section['content']);} else { print $section['content'];}
    ?>

    и всё заработало, как положено.

  4. Помимо этого, было исправлено некоторое количество откровенных багов. Например, был пропущен инклюд для page_manager.admin. Ну и ещё пару мелких недочётов, на которых не стоит акцентировать внимание.

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

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

Скачать ZIP-архив

Поделиться: