4 месяца с друпалом

Главные вкладки

Аватар пользователя kalabro kalabro 10 ноября 2011 в 1:10

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

Итак, мы делаем журнал входов пользователя, который должен храниться долго.
Как правильно заметили в комментариях, журнал в друпале есть, но он чистится по крону и остаются только последние N записей. Когда я принялась за дело, я упустила из виду хук hook_watchdog(), через который проходят все логируемые события, в том числе успешные и безуспешные попытки входа. Даже лучше, никаких form_alter’ов не надо. Пошли дальше.
Нам по-прежнему нужна таблица для хранения попыток входа, но мы не будем её сочинять, а просто копирнём из стандартного модуля dblog. dblog_schema() (а лучше drupal_get_schema_unprocessed()) вернет нам нашу табличку, мы же можем добавить в неё свои поля, индексы, либо оставить как есть.
Отлично! Сохранили логи и количество кода уменьшили втрое. Теперь осталось вывести. Я делала блок, в который что-то там выводила, создавала настройки для количества записей, но на практике это всё не нужно (в данной задаче). А нужно одно: интеграция с Views.
Я считаю, что если в проекте используется Views, то нужно использовать его по полной, а не пытаться изобретать велосипед. Будем считать, что в нашем проекте Views не запрещён, а следовательно интеграция с ним даст нам возможность выводить наши логи где угодно на сайте и в каком угодно виде: блоки, табы, страницы, сортировки, таблички, фильтры, кеширование, темизация. Впечатляющий модуль! Круче всяких там QBE, которые нам преподавали в институте, в 100 раз!

Как подружить свою таблицу с Views, рассказывали многие, но моя задача ещё проще, потому что таблица по правде говоря не моя. Ставим в зависимости Views Watchdog, в своем hook_views_data() вызываем views_watchdog_views_data(), чуть-чуть изменяем тайтлы и радуемся. Наша таблица дружит с Views, а мы даже ничего не прогали.

Вот так бы я сделала этот модуль сейчас, но это показалось бы мне слишком сложным (да, да) 4 месяца назад.

Хуки

Тут, на drupal.ru, да и на других ресурсах о веб-разработке часто вспыхивают срачи по поводу того, как ужасен друпал. Точно такие же, они вспыхивают периодически и о джумле, и о битриксе, и о php, и о чём угодно. Это нормально. Многое из того, что говорят опытные разработчики в этих дискуссиях, стоит принять к сведению. Но я с уверенностью могу сказать, что друпал стоит хотя бы того, чтобы вы с ним познакомились. Если до этого вы имели дело с ООП только на классах аля C++, то система хуков вас удивит и расширит ваше программистское мировоззрение. Да, в новых версиях друпала уже активно используются классы-контроллеры. И вы тоже свободно можете использовать классы в своей разработке. Никто не заставляет вас сидеть на PHP4, и хуки как средство взаимодействия между компонентами системы нисколько не стесняют вас.

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

БД

Сначала мне очень много всего хотелось запихать напрямую в базу, создавая свои таблицы, делая для них _load, _delete, и т.д. Потом я поняла, что в 80% случаях мне достаточно нод — они гибко настраиваются. В остальных случаях нужно подумать, что лучше, создание своих сущностей или просто табличка с некими записями.

Темы

О, это моя любимая тема. Да, поначалу я ничего не понимала, но теперь разобралась (на уровне прогера, не темизатора). Достаточно пару раз помучиться с темизацией отдельных частей формы (например, таблицей элементов внутри формы), и ты начинаешь понимать, что к чему.
Я никогда не была склонна к решениям типа: открыть файл стандартной темы, подписать туда какой-то кодик типа if ($node->nid == 5) { print $title; //..., но знаю, что есть и такие. Если вы хотите пользоваться друпалом так, то вам друпал не нужен в принципе.
Первый свой файл темы я создала буквально на той неделе. Спокойно, без суеты, создала подтему на основе стандартной, добавила css с нужными мне классами, скопировала пару темплейтов, подправив нужные мне части верстки. Тоже самое проделала с шаблонами для моих Views, и у меня всё получилось. Темизации я теперь не боюсь.
Большую сложность представляет в том числе концепция render(able) arrays. Ориентироваться в куче непонятных ключей, начинающихся на #, поначалу сложно. Тут поможет чтение, чтение и ещё раз чтение чужих модулей, которые решают схожую с вашей задачу. Ну, я делала так Smile

Языки

По поводу языков мне добавить особо нечего. Единственное, если вы хотите проверить свой собственный перевод своего собственного уже установленного модуля, то положить его в папку translations недостаточно. Нужно импортировать .po файл через админку друпала, и вы увидите все ваши переводы.
Не могу не упомятусь суперпереводы Field API. Никогда не знаешь, какой язык тебя ждет сегодня. Сообщество мучается, но выкручивается. В этом помогает Entity API и я его везде в зависимости проставила просто из-за entity_metadata_wrapper().

А свои собственные функции должны лежать в своих собственных модулях. В settings.php им делать нечего Smile

Джим Бим делает свое дело, завтра в институт не надо и настроение прекрасное.
Успехов и мне и вам в наших великих делах!

P.S. http://www.drupal.ru/node/71280

Комментарии

Аватар пользователя alex_shut alex_shut 10 ноября 2011 в 1:30

"Lotar" wrote:

ну радуется человек своим успехам, хочет чтоб с ней порадовались и за нее)))
Безжалостная ты скотина, Лотар, однако(