Полезные и интересные модули для Drupal 6.xx + Советы и трюки (Часть I)

    В апреле прошлого года хабраюзер @7paca написал отличную статью про полезные модули и я решил её продолжить

    Модули:



    Filefield Paths — позволяет создавать собственные token-шаблоны для загружаемых через filefield-поле файлов. Удобно для упорядочивания фотографий в галереях (замечено, что не работает с Image FUpload).

    Uploadpath — разрешает использовать token-шаблоны для хранения файлов в директориях или субдиректориях.

    Hide Submit — позволяет прятать кнопку «Submit» после нажатия. Предохраняет от повторной отправки данных.

    Uploadify — мультизагрузка файлов. Модуль ещё в разработке, но уже многие начинают им пользоваться.

    WordPress Comments — Для тех, кто привык к форме комментирования а-ля Wordpress

    Remember me — модуль добавляет к форме авторизации чекбокс «запомнить меня»

    Printer, e-mail and PDF versions — модуль позволяет распечатывать страницу, отправлять по почте и конвертировать в формат PDF

    One page profile — никаких вкладок в профайле пользователя, всё размещается на одной странице. Очень удобно

    Contact attach — даёт возможность пользователям прикреплять к письму, отправляемого через форму обратной связи, файлы (аттач).

    Flag — позволяет отмечать материалы, например, «Добавить в закладки». Есть вывод представления на страницу пользователя. Отлично настраивается под любые нужды

    XML sitemap — генерация sitemap.

    Comment Notify — удобная подписка на комментарии

    LoginToboggan — очень удобный модуль для организации авторизации как с помощью логина, так и с помощью email'а. Куча возможностей.

    Scheduler с помощью этого планировщика задач можно легко публиковать или снимать с публикации материалы на определённую дату.

    Imagecache Actions — модуль позволяет назначать пресеты загружаемым картинкам, например, наложение водяного знака, наложение текста, подкладка фона и т.п.

    Privatemsg — модуль для организации внутренней переписки между пользователями сайта

    Несколько советов (использовать их в своих проектах или нет — ваше право):


    Проверка заполнения полей с jQuery


    Мне лично не нравится валидатор Drupal'а и я интегрировал jquery.validate

    Собственно интегрировать его не проблема.
    Скачайте плагин.
    Создайте директорию js в директории вашей темы и поместите туда jquery.validate.min.js.

    Откройте ВАША_ТЕМА.info и подключите там плагин:
    scripts[] = js/jquery.validate.min.js

    * This source code was highlighted with Source Code Highlighter.


    Директория js должна находится по пути /sites/all/themes/ваша_тема/

    Создайте файл scripts.js в директории /sites/all/themes/ваша_тема/js/ и пропишите в нём следующее:

      $().ready(function() {
        $("#comment-form").validate();
      });
    </pre>


    * This source code was highlighted with Source Code Highlighter.


    Примечание: в этот же файл вы можете вставлять все свои скрипты

    Если вы хотите проверять заполнены ли поля при регистрации, сделайте так:

      $().ready(function() {
        $("#comment-form, #user-register").validate();
      });  


    * This source code was highlighted with Source Code Highlighter.


    Примечание: #comment-form — это идентификатор формы, которую проверяем. Узнать ID можно посмотрев код страницы.

    Всё!

    Решение target=_blank


    Вставляем этот код в /sites/all/themes/ваша_тема/js/scripts.js

      $(function(){
        $('._blank a').click(function(){
          window.open(this.href);
          return false;
        });
      });


    * This source code was highlighted with Source Code Highlighter.


    Пример использования:

    <span class="_blank><a href="http://habrahabr.ru">Habrahabr</a></span>

    * This source code was highlighted with Source Code Highlighter.


    Или, если ссылка встречается в тексте —

    <div class="content _blank">
    <p>
    <a href="http://www.lipsum.com/">Lorem ipsum</a> dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. <a href="http://www.lipsum.com/">Excepteur</a> sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
    </p>
    </div>


    * This source code was highlighted with Source Code Highlighter.


    Добавление тега span в primary/secondary_links


    Вставляем этот код в /sites/all/themes/ваша_тема/js/scripts.js

      // Wrap span tags around the anchor text in the primary menu.
    $(document).ready(function(){
     $("#primary li a")
     .wrapInner("<span>" + "</span>");
    });


    * This source code was highlighted with Source Code Highlighter.


    и в template.php нашей темы этот код:

    /**
    * Override the theme_links function
    *
    * We use this to insert <span></span> tags around anchor text in the
    * primary and secondary links. We need these to support Internet Explorer
    * when building sliding door tabs with hover effects.
    */
    function ВАША_ТЕМА_links($links, $attributes = array('class' => 'links')) {
     $output = '';
     if (count($links) > 0) {
      $output = '<ul'. drupal_attributes($attributes) .'>';

      $num_links = count($links);
      $i = 1;

      foreach ($links as $key => $link) {
       $class = $key;

       // Add first, last and active classes to the list of links to help out themers.
       if ($i == 1) {
        $class .= ' first';
       }
       if ($i == $num_links) {
        $class .= ' last';
       }
       if (isset($link['href']) && ($link['href'] == $_GET['q'] || ($link['href'] == '<front>' && drupal_is_front_page()))) {
        $class .= ' active';
       }

       $output .= '<li'. drupal_attributes(array('class' => $class)) .'>';

       // wrap <span>'s around the anchor text
       if (isset($link['href'])) {
        $link['title'] = '<span>' . check_plain($link['title']) . '</span>';
        $link['html'] = TRUE;  
        // Pass in $link as $options, they share the same keys.
        $output .= l($link['title'], $link['href'], $link);   
       }
       else if (!empty($link['title'])) {
        // Some links are actually not links, but we wrap these in <span> for adding title and class attributes
        if (empty($link['html'])) {
         $link['title'] = check_plain($link['title']);
        }
        $span_attributes = '';
        if (isset($link['attributes'])) {
         $span_attributes = drupal_attributes($link['attributes']);
        }
        $output .= '<span'. $span_attributes .'>'. $link['title'] .'</span>';
       }

       $i++;
       $output .= "</li>\n";
      }

      $output .= '</ul>';
     }
     return $output;
    }

    * This source code was highlighted with Source Code Highlighter.


    Упорядочиваем шаблоны Views


    Очень неприятно, когда шаблонов в /sites/all/themes/наша_тема/ становится очень много. Даже до безобразия много. Путаницы конечно не будет, если именно вы делали тему для своего сайта или блога, но большое количество файлов в директории с темой напрягает!

    Есть решение!

    Создаём в директории с темой папку views и переносим туда все свои шаблоны вида views-view-fields--gallery-page.tpl.php (или подобные).

    Переходим в настройки тем (/admin/build/themes/settings) и нажимаем сохранить.

    Если возникли проблемы, например, вывод ошибок о том, что что-то не найдено, идём в любое созданное представление и нажимаем Rescan (пересканировать), сохраняем представление. Всё. Теперь более-менее порядок.
    Здесь есть информация по поводу организации шаблонов Views.

    Удачи!

    UPD: krig сделал ценное замечание

    конструкцию
    $(document).ready(function(){
    // do some fancy stuff
    });


    * This source code was highlighted with Source Code Highlighter.

    меняем на
    Drupal.behaviors.myModuleBehavior = function (context) {
    //do some fancy stuff
    };


    * This source code was highlighted with Source Code Highlighter.


    Часть II

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 22

      –2
      Спасибо, познавательно.
        +2
        $(document).ready(function() { ... });


        В друпале для реализации подобной конструкции используются Drupal.behaviors — это позволяет избежать проблем при использовании AHAH.
          0
          Спасибо за замечание, обновил
          +1
          в избранное
          как обычно, что нибудь да пригодится
            +1
            В статью добавлен блок «Упорядочиваем шаблоны Views»
              +1
              Filefield Paths действительно нужный модуль. Помагает навести порядок (даже задним числом) в огромной куче загруженных файлов.
              А в купе с wysiwyg и filefield_insert позволяет достигнуть состояния дзен при добавлении редактировании материалов.
              • НЛО прилетело и опубликовало эту надпись здесь
                  0
                  Космический корабль это монстры наподобие typo3, drupal же позволяет работать с ним сразу, без предварительных навыков, как с обычной cms и как с профессиональным cmf после углубленного изучения его возможностей.
                  +1
                  Спасибо за обзор. Отличное продолжение. Кое-что как раз пригодится в новом проекте.
                    0
                    Добавил в избранное, пригодится
                      +1
                      В избранное! Автору: Так держать!
                        +1
                        На drupal.org просто гигантское количество модулей и найти среди этой кучи что-нибудь ценное всегда трудно. А благодаря таким статьям, находятся модули о существовании которых даже и не догадываешся, а на самом деле они тебе очень нужны))
                          +3
                          Поэтому рекомендую пользоваться сайтом drupalmodules.com, лично я им пользуюсь чаще, чем др.оргом.

                          Здесь есть: поиск по названию моудля или содержимому описания — попробуйте на Др.орге найти все модули для «Video»! На друпалмодулес.ком все можно найти за секунды + там есть деление модулей на категории (в новой версии др.орга чего-то категории исчезли, либо я не понимаю их новый механизм поиска...)

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

                          Есть еще рейтинг модулей по скачиванию и по отзывам, оба рейтинга полезны.
                            +1
                            Ух-ты! Спасибо за дельный совет! Раньше не пользовался этим сайтом, не знал о нем…
                              0
                              Считаю, что количество использующих (фактов установленных) этот модуль более важная цифра нежели отзывы и скачивания, например drupal.org/project/usage/privatemsg

                              Еще очень важный момент — это количесвто открытых issues и вообще активность в них.
                                0
                                Согласна во всем.

                                Лично я уже привыкла к след.алгоритму при поиске модулей:

                                1. Открываю друпалмодулес.ком, ищу там либо по названию, либо по категориям.
                                2. Открываю интересующий модуль, смотрю: описание, рейтинг (отзывы) и наличие пометки — будет обновляться до 7ки. Без такой отметки стараюсь не ставить модуль, только при крайней необходимости.
                                Отзывы удобны, т.к. на одной странице все и понятно что к чему. Но отзывы не всегда корректные, т.е. к ним нужно относиться с долей скептицизма.

                                Ишьюс смотрю, чего там пишут примерно в 50% случаев, но сейчас все чаще, т.к. были преНцеНденты :)

                                Но рейтинги на друпалмодулес.ком тоже интересные, так как дают идею — о! такое тоже есть!
                                  0
                                  Согласен с вами про issues. Иногда там можно много интересного найти, особенно то, что не попадает в dev-разработку. Например, к модулю Video Filter был дописан хук, позволяющий цеплять видео с сервисов video.mail.ru rutube.ru. К модулю Lightbox2 написан патч, устраняющий горизонтальный скроллинг в Mozilla Firefox. таких примеров куча.
                                    0
                                    Кривой там хук для видео.мэйл.ру
                                    Даже, наверно, правильнее сказать, что сам видео.мэйл.ру нечеловечен :)
                                      +1
                                      Теперь да, ранее работал
                              0
                                +1
                                >scripts[] = js/jquery.validate.min.js
                                еще не плохобы добавить русский язык в валидацию (кому нужно)

                                scripts[] = js/jquery.validate.min.js
                                scripts[] = js/messages_ru.js

                                а перевод я нашел почему-то, тут

                                trac.symfony-project.org/browser/plugins/diemPlugin/trunk/dmCorePlugin/web/lib/jquery-validate/localization/messages_ru.js?rev=21423
                                  0
                                  и еще маленькое замечание

                                  $().ready(function() {
                                  $("#user-login-form, #comment-form").validate();
                                  });

                                  если блок логина постоянно где-то на странице

                                  при оправлении комментария ээ будет глючить

                                  решение

                                  $().ready(function() {
                                  $("#comment-form").validate();
                                  $("#user-login-form").validate();
                                  });

                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                  Самое читаемое