Сегодня вышла очередная (четвертая) бета KDevelop 4. Светлое будущее, по всей видимости, не за горами. Хотелось бы поскорее релиз, уже пальцы чешутся поработать.
Вот кубунту обновлю - и можно будет попробовать бету поставить.
Сегодня вышла очередная (четвертая) бета KDevelop 4. Светлое будущее, по всей видимости, не за горами. Хотелось бы поскорее релиз, уже пальцы чешутся поработать.
Вот кубунту обновлю - и можно будет попробовать бету поставить.
В процессе разработки модуля Taxonomy ToDo возникла задача спрятать в форме создания/редактирования нодов селектор терминов словаря ToDo для тех, у кого нет на это права 'create todo items'. Как выяснилось, это легко делается через hook_form_alter:
/**
* Implements hook_form_alter, removes ToDo vocabulary from node form if user can't add todo items
*
* @param array $form - form to alter
* @param array $form_state - form state
* @param string $form_id - form id
*/
function taxonomy_todo_form_alter(&$form,$form_state,$form_id) {
//we alter only node edit forms
if (isset($form['type']) && isset($form['#node']) && $form['type']['#value'] .'_node_form' == $form_id) {
if (!user_access('create todo items')) {
//alter form if user may not create todo items
$vid = variable_get('taxonomy_todo_vocabulary',0);
if (isset($form['taxonomy'][$vid])) {
//unset todo vocabulary form fields so user can't add todo terms
unset($form['taxonomy'][$vid]);
}
}
}
} //function taxonomy_todo_form_alter
При этом есть два небольших подводных камня:
Для служебных целей и моего личного удобства был разработан небольшой модуль Taxonomy ToDo, то есть попросту список дел. Делюсь с общественностью.
Модуль работает в Drupal 6.x и использует встроенную в Друпал систему таксономии. Назначение модуля — создание списка дел на базе заголовков нодов.
Краткое описание:
Шаги по установке модуля описаны в файле README.txt, содержащемся в архиве.
Сделанный модуль, исходя из своего устройства, не особо масштабируем и обладает ограниченными вариантами применения. Например, он может использоваться начальником сайта для создания краткого списка насущных дел по управлению своим сайтом. Или для оформления забот небольшой группы. Буду рад, если пригодится кому-нибудь.
Насчет скудного оформления в файле .css не обессудьте: я в дизаенах не очень ловок. Если есть предложения — в комментарии.
Как известно, KDE4 прекрасен, гораздо прекраснее своего предшественника, KDE3. В частности, прекрасен он наличием плазмоидов. Что такое эти плазмоиды? Это активные апплеты (или, если хотите, виджеты), то есть элементы десктопа, над которыми можно изголяться по-всякому: добавить на рабочий стол, убрать с рабочего стола, наклонить для удобства, увеличить, уменьшить, или раскрасить в другой цвет.
На рисунках мы видим плазмоиды "Часы", "Календарь", "Управление рабочими столами" и "Большая кнопка выключения". Плазмоидами, собственно, они называются в честь Plasma, нового фреймворка в KDE4, реализующего всякие такие визуальные эффекты и взаимодействия с рабочим столом. Собственно, в KDE3 тоже имелись активные апплеты - на отдельном движке SuperKaramba, но такой красоты в них не было. Ну и потом - XXI век же, оконные менеджеры уже должны в космос летать самостоятельно, не то что апплеты поддерживать без посторонней помощи.
Плазмоиды бывают разные. Например, информативные - календари, часы, системные мониторы, комикс-стрипы с комикс-сайтов и тому подобное. Но бывают плазмоиды интерактивные. Словарь, заметки, калькулятор, или мини-игра какая-нибудь. И вот этой своей интерактивностью плазмоиды еще прекраснее, ведь теперь можно всегда иметь под рукой самые необходимые вещи: список дел, фотографии женщин и адреса врагов. Чтобы как только надо - так сразу и воспользоваться.
Однако может случиться, что во всем разнообразии доступных плазмоидов не найдется нужного. Тогда следует вспомнить об известной открытости ОС Луникс - и написать необходимый плазмоид самостоятельно. Благо, сделать это совсем несложно. Вот, например, краткий учебник.
И вот еще полезные ссылки в тему разработки плазмоидов:
- Creating your first Plasmoid - небольшой, но хороший учебник.
- 10 rules for a plasma widget developer - немножко советов по разработке.
И, кстати, да, все мы очень ждем окончательного выхода KDevelop4, в котором быстрая и простая разработка плазмоидов - одна из фич.
Некоторое время назад возникла мысль начать сбор всяких полезных (лично мне) твиков, хаков и хитростей Друпала в одну зловонную упорядоченную кучу. Я Друпал 6 имею в виду, пятый меня не очень интересует.
В частности, хотелось сделать отдельный модуль для, так сказать, "софт-твиков", то есть модификаций, которые можно сделать, не влезая в код ядра и/или сторонних модулей. Например, с помощью всяких alter-хуков, хука nodeapi и т.п.
Недавно начал делать такой модуль. Для разгону нацелился на форму обратной связи, которая на моем сайте, как известно, есть. Проблема с ней в том, что по независимым от модуля contact причинам поле "from", содержащее адрес отправителя письма, после отправки самым наглым образом заменяется адресом электрической почты самого сайта. Очевидным и самым простым решением является добавление изначального адреса в тело письма через hook_mail_alter.
//Добавление email отправителя в тело письма
function tweaks_mail_alter(&$message) {
$sitemail = variable_get('site_mail',ini_get('sendmail_from'));
//добавляем строчку только если письмо не служебное.
if ($message['from'] != $sitemail) {
//тело письма - это массив строк!
$message['body'][] = "\n\n--\nВы можете ответить на это сообщение по адресу ".$message['from'];
}
} //function tweaks_mail_alter
Начало модулю tweaks, можно сказать, положено. Хотя, конечно, жалко, что изменения в node.tpl.php, comment.tpl.php и так далее - к модулю не подошьешь.
Как уже сообщалось, был разработан модуль с фильтром типографического толку. Модуль называется typofilter и вводит одноименный фильтр в систему фильтрации содержимого Drupal 6. В качестве типографического движка используется несколько измененный «Типограф». Модуль я назвал Lite-версией, поскольку в нем меньше типографических правил, чем в оригинале. Текущая версия модуля — 0.6. Ниже приводится краткое описание сделанного.
Модуль не создает новых таблиц в БД, но вводит две переменные (для хранения опций фильтрации и пользовательских сейф-блоков). Работает все в UTF-8. Для работы в CP1251 нужно однократно конвертнуть файлы модуля в эту кодировку с помощью iconv или других известных вам способов.
Настройка модуля осуществляется со страницы админки (admin/settings/typofilter).
Пользователь может изменять (вкл./выкл.) опции фильтрации и добавлять безопасные блоки, внутри которых фильтр работать не будет. Блоки следует добавлять аналогично перечисленным на странице админки встроенным блокам, т.е. с использованием регулярных выражений, если они требуются.
Опции фильтрации:
— замена
— замена
— замена
— замена нескольких точек на многоточия;
— замена
— исправление кавычек;
— исправление вложенных кавычек;
— исправление тире;
— короткое тире в числовых диапазонах;
— удаление пробелов между числом и знаком процента.
Движок типографа подключается отдельным файлом typofilter.engine.inc (включен в архив).
Изменения в исходниках движка:
— файл переконвертирован в UTF-8, соответственно, изменено выражение для слов ($word=…), удален параметр кодировки и ликвидированы вызовы iconv;
— класс типографа переименован в Typographus_Lite_UTF8;
— к дефолтным сейф-блокам добавлен вымышленный тег
— заполненный массив дефолтных сейф-блоков вынесен за пределы класса, в классе оставлен пустой по-умолчанию массив, заполняемый при вызове;
— из фильтрации удалены все правила кроме перечисленных в опциях выше;
— функции process() и typo_text() теперь вторым параметром принимают массив включенных опций фильтрации;
— в код функции добавлены соответствующие условные операторы.
Инсталляция модуля
Модуль носит версию 0.6, потому что некоторые вещи можно сделать более гибким и изящным способом. Также правильным тоном было бы сделать все интерфейсные элементы англоязычными, использовать функцию t() и приложить файл перевода. Но я пока использую все как есть, а дальше видно будет. Если кто хочет взять и изменить — очень хорошо.
Архив с модулем.
typofilter 0.5 (предыдущая версия).
Также прошу обратить внимание на скрипт Typofilter.js, интегрирующийся в WYSIWYG-редакторы и типографирующий текст прямо в браузере, без отправки на сервер.
А вот еще один смешной комикс про программистов: http://www.geekherocomic.com. Прошу любить и жаловать.
Только что закоммитил свой первый патч для модулей Друпала :)
Под горячую руку попал недавно освоенный Taxonomy Access Control Lite. Данный модуль позволяет просто и без затей разграничивать доступ к элементам содержимого в зависимости от того, какие теги этим элементам присвоены. Очень удачно, особенно в дополнение к обычной системе разрешений и ролей.
Так или иначе, я решил, что используемые для управления доступом теги - совсем служебные и поэтому их вовсе необязательно показывать в поле тегов каждого нода. Этой идее собственно и служит новенький патч: прячет теги, задействованные в управлении доступом. Само собой, только если пользователь этого желает.
Делается все просто. Сначала в форму админки добавляется чекбокс (на случай если не всем понравится моя идея):
//checkbox, hide access terms if checked
$form['tac_lite_hide_terms'] = array(
'#type' => 'checkbox',
'#title' => t('Hide Access Terms'),
'#description' => t('Check this box if you want to stop vocabulary terms you use for access control from showing when nodes are viewed.'),
'#default_value' => variable_get('tac_lite_hide_terms', 0),
);
Затем в хуке nodeapi проверяется, нужно ли спрятать теги,
function tac_lite_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch ($op) {
case 'view' :
//check if we need to hide terms
$hide_terms = variable_get('tac_lite_hide_terms',0);
if ($hide_terms) {
_tac_lite_hide_access_terms($node);
}
break;
}
}
и вызывается соответствующая функция.
function _tac_lite_hide_access_terms(&$node) {
//get access vocabularies
$vids = variable_get('tac_lite_categories', array());
if (count($vids) == 0) {
return ;
}
//unset terms for access vocabularies
foreach ($vids as $vid) {
$terms = taxonomy_node_get_terms_by_vocabulary($node,$vid);
foreach ($terms as $term) {
unset($node->taxonomy[$term->tid]);
}
}
} //function _tac_lite_hide_access_terms
Вот и готова полезная фича.
Смешные комиксы о суровых трудовых буднях программистов:
http://slashweb.org/programming/25-best-programmer-webcomic-strips.html