
Изучая Drupal, я нередко натыкаюсь на новые задачи, которые необходимо реализовать, и проблемы, которые нужно устранить.
Конечно, сайты
Drupal.ru и
Drupal.org — неоценимые помощники во всех вопросах и помогут разобраться практически в любой поставленной задаче, однако сегодня хотелось бы рассказать вам о некоторых модулях и их возможностях, чтобы вам не пришлось лихорадочно искать ответы на ваши вопросы, когда подобный функционал вам вдруг понадобится. Возможно, вы не узнаете для себя ничего нового из этого топика, но я все же попробую.
Начнем по порядку.
Automatic Nodetitles
Страница проекта
При создании нового типа материала в Drupal нельзя убрать поле «Заголовок» или указать его значение по умолчанию, но в этом случае нам поможет модуль
Automatic Nodetitles, который спрячет и автоматически сгенерирует содержимое поля заголовка у выбранного типа материала, основываясь на ваших указаниях. Можно настроить генерацию заголовка в зависимости от любого значения, либо просто сделать одинаковый заголовок для всех материалов одного типа.
Доступен для Drupal 4,5,6.
Custom Breadcrumbs
Страница проекта
Позволяет настроить так называемые «хлебные крошки» для любого типа материала, основанного на ССК, например,
«Главная страница > Блог пользователя > 2009 > Апрель», легко синхронизируя их с различными представлениями (
Views) или алиасами модуля
Pathauto.
Доступен для Drupal 5,6.
Community Tags
Страница проекта
Модуль позволяет пользователям самим добавлять теги для определенных типов материалов, формируя для каждого поста собственное облако тегов (аля «Собери свою лепру»).
Имеет множество применений, например, можно сделать подписку на событие с помощью добавления своего имени в метки поста.
Доступен для Drupal 5,6.
Author Taxonomy
Страница проекта
Модуль позволяет указывать при создании материала сразу несколько авторов и автоматически создает словарь из них. Конечно, практически то же самое можно реализовать стандартными средствами
CCK + Taxonomy, однако этот модуль в результате оказывается гораздо удобнее.
Доступен для Drupal 5,6.
Conditional Fields
Страница проекта
Довольно важное дополнение для модуля
CCK, позволяет создавать зависимые поля, которые становятся видимыми только при определенном значении другого поля. Кстати, на свет поле «вылазит» с довольно красивой анимацией и затуханием.
Доступен для Drupal 5,6.
Node Expire
Страница проекта
Позволяет каждому типу материала либо каждому определенному материалу указывать время, когда он «потеряет силу», то есть станет полностью скрытым от пользователей, но не удалится. Удобен для всяких объявлений.
Настраивается в свойствах каждого отдельного типа материала.
Доступен для Drupal 5,6.
Subscriptions
Страница проекта
Очень мощный модуль рассылок и подписок, имеет множество настроек, которые учитывают почти все, что необходимо; в то же время позволяет пользователям довольно просто подписаться на все материалы одного типа или на каждый материал в отдельности (включая обновления содержимого).
Доступен для Drupal 5,6.
Nice Menus и JQuery Menu
Страница проекта Nice Menus |
Страница проекта JQuery Menu
Два модуля, делающие навигационное меню вашего сайта более удобными.
JQuery Menu позволяет быстро сворачивать/разворачивать пункты меню AJAX'ом (после обновления страницы состояния меню не сохраняются), в то время как
Nice Menus добавляет вам удобные и красивые меню с всплывающими слева-справа-снизу подпунктами. Во всех браузерах, кроме IE6, работает на чистом CSS, для IE добавляется немного скриптов.
В редких случаях
Nice Menus ломал мне верстку, причину выявить не удалось.
Оба модуля доступны для Drupal 6. Есть версия
Nice Menus для Drupal 5.
Collapsible Text
Страница проекта
Позволяет вам добавить к каждому формату ввода теги [collapse] [/collapse]; текст, введеный между тегами, будет сворачиваться/разворачиваться при клике на заголовок. Текст можно сделать свернутым по умолчанию, использовав [collapse collapsed]. Чтобы заменить стандартную надпись заголовка на свою, нужно после первого тега использовать любой из тегов-заголовков (h1-h6).
Подобный текст очень любят юзеры форумов по типу IP Board, так как он напоминает теги [offtop] и [spoiler].
Личные наблюдения: Если вставить лишнюю пустую строку между абзацами внутри сжатого текста, но тег прервется. Однако если эта строка вам совсем необходима, вставьте в конце абзаца тег </li>
и нужный пропуск появится, не прервав тег.
Доступен для Drupal 5,6.
Tabs + Views Tabs + CCK Fieldgroup Tabs
Страница проекта Tabs
Страница проекта Views Tabs
Страница проекта CCK Fieldgroup Tabs
Эти три модуля позволят вам добавить вкладки в любой тип материала (группы полей) либо любое представление. Собственно, если разбираетесь в Views и CCK, то никаких проблем не возникнет.
Модули доступны для Drupal 6.
Views Tabs и CCK Fieldgroup Tabs есть для Drupal 5.
Удачи вам в работе с Друпалом. :)
Если возникли какие-либо вопросы — пишите в комментариях или в личку.
Или сразу на Drupal.ru, там вам точно помогут.
комментарии (27)
не скажешь что они сильно оптимизированы, но уже немного заточены
1. Удалить из системы драйвер hands_from_ass.sys
2. Ecnfyjdbnm драйвер line_hands.sys
Это необходимо проделать еще ДО знакомства с Drupal.
позволяет создавать профиль пользователя как содержимое материала, и кастомизировать при помощи CCK.
для 6 есть лишь 3 бета — но работает отлично.
*Или на друпалере вывести самые часто запрашиваемые переводы.
И вот еще список всех модулей в порядке частоты использования.
drupal.org/project/Jquerymenu
\\jquerymenu.module\\
function jquerymenu_block($op = 'list', $delta = 0, $edit = array()): 120
$edit — не известно для чего параметр, просто чтобы был, чисто по факту, чем больше параметров, тем более увесисто и значимо выглядит.
foreach ($enabledmenus as $menuname) { :142
if ($delta == $d) {
if ($menuname == 'navigation' && !empty($user->uid)) {
$title = $user->name;
}
else {
$title = db_result(db_query(«SELECT title FROM {menu_custom} WHERE menu_name = '%s'», $menuname));
}
Запросы в цикле ждут нас. Не вижу, что мешает сделать все в 1 запрос.
function jquerymenu_init() { :11
drupal_add_css(drupal_get_path('module', 'jquerymenu') .'/jquerymenu.css');
if (variable_get('jq_menu_animate', 0) == 0) {
drupal_add_js(drupal_get_path('module', 'jquerymenu') .'/jquerymenu.js');
}
if (variable_get('jq_menu_animate', 0) == 1) {
drupal_add_js(drupal_get_path('module', 'jquerymenu') .'/jquerymenu_no_animation.js');
}
}
Крутил, вертел, даже сквозь пальцы смотрел. Но эти шаманские уловки не открыли мне тайну 2х If подряд из которых может выполниться только 1 (=?: — в помощь).
хардкод и полное отсутствие ООП обсуждать бессмысленно, ибо это фишка Друпала и модуля в частности.
Заключающее Имхо, лучше потратить пару часов времени для изучения РНР и написания своего функционала, чем использовать подобный «идеальный» код, приобретая головную боль и ненужные нагрузки на проект — «бесплатно».
1. Это не пишется за пару часов изучения ПХП. Нужно ещё очень хорошо знать API Drupal и JQuery.
2. Даже ЕСЛИ БЫ jquery-menu писалось за пару часов — моя пара часов гораздо дороже процессорного времени сервера.
3. _block — это API хуков Drupal. Читаем о хуках и что такое API вообще.
4. Запросов в цикле, скорее всего, будет один — для меню навигации. М.б. два.
Лепить ради этого in(...), усложнять код двойным циклом и добавлять потенциальную несовместимость с какими-либо СУБД неразумно.
Особенно если результаты запросов или сами блоки кэшируются, как то всегда бывает.
5. Такие if-ы проще мейнтейнятся. Если в будущем набор значений опции поменяется, else не сломается.
6. То, что мощная функция добавляется модулем в 5К — это ОФИГЕННЫЙ плюс Друпала.
7. Хардкод — издержка конкретного модуля. ООП в ядре есть; модули же можно писать так, как кому заблагорассудится.
Что хуки на функциях, а не объектах — это следствие динамической интерпретации. Ещё это оптимизация — далеко не все хуки «инстанцируются» при каждом запросе. С обэектами такого бы не получилось.
однако моё глубокое имхо, что искать надо на drupal.org — там точно есть всё, а вот drupal.ru в этом смысле сильно отстаёт…
за пост спасибо, пару модулей не знал, надо затестить
вы к нам в Омск 14 мая приезжаете, я уже билеты купил:)