Вывод даты по-русски
Прислано: edhel
пт, 02/09/2011 - 17:14
Дрюпал до сих пор (вплоть до 7.x) не может вывести по-русски даты как "3 сентября 2011 г.". Обычно я ставлю формат вывода вида 03.09.2011, который более менее соответствует русской локали. Но всё же "3 сентября" нагляднее, чем "03.09". Чтобы сделать так, приходится фиксить тему и менять вывод переменной $submitted у нод и комментов.
Код тут: http://edhel.krasu.ru/node/406.
Производительность Drupal 7.0 vs 7.2
Прислано: edhel
сб, 04/06/2011 - 15:55
В продолжение своего предыдущего поста: http://www.drupal.ru/node/62641.
По аналогичной методике протестировал производительность новых версий drupal 6.22 и 7.2.
Drupal 7.2 показал +14% к скорости работы по сравнению с 7.0.
Конкретные цифры тут: http://edhel.krasu.ru/drupal-7-perfomance
Тестирование производительности Drupal 6 и Drupal 7
Прислано: edhel
сб, 21/05/2011 - 15:42
Провёл по возможности честное и приближенное к реальности тестирование d6 и d7:
- в d6 сделал новостям такие же поля, как в d7 по умолчанию (title, body, tags, image), для чего пришлось поставить модули cck, filefield, imagefield, image api, imagecache
- добавил новостям текстовое поле source
- создал по 20 новостей с заполненными всеми полями
- сделал меню из 6 пунктов + 3 развёрнутых подпункта
- добавил меню в виде блока и сделал одинаковый набор блоков на обоих версиях (поиск, вход, меню, навигация)
- загрузил русскую локализацию (в d7 пришлось фиксить ядро, иначе php не хватало времени для загрузки локализации)
- отключил логи в апаче и mysql (иначе они портят тесты кэша)
- выгрузил все программы какие смог
- после каждого теста перегружал apache и mysql
- тестировал на большем количество запросов (1000 запросов по очереди в один поток)
Результаты в мс (среднее значение):
| страница | d6.20 | d7.0 |
|---|---|---|
| node | 144 | 114 |
| node/1 | 60 | 68 |
| cache | 11 | 15 |
| нормированное время | 1 | 1,07 |
*кэш от конкретной страницы почти не зависит, поэтому для него приведена просто одна цифра*
Тестировалось на winxp, php 5.2.9, eaccelerator (xampp).
Накануне более "тупо" тестировал drupal 5,6,7, там цифры для drupal 7 получилась менее утешительные, результаты тут: http://edhel.krasu.ru/drupal-5-6-7-perfomance.
Mercurial + Drupal
Прислано: edhel
чт, 04/11/2010 - 03:47
Недавно на работе начали использовать Mercurial при разработке сайтов на Drupal. Схема такая: отдельный сервер для репозитариев, отдельные веб-сервера для веб-сайтов, разработчики запускают у себя на машинах локальные версии сайтов и по мере готовности функционала заливают изменения в общий репозиторий (по https с http-аутентификацией), откуда автоматом файлы по FTP обновляются на веб-сервере.
Рабочая база mysql располагается на веб-сервере, разработчики делают себе локальную копию на время разработки.
Чуть подробнее на моём сайте: http://edhel.res.sfu-kras.ru/node/328
Использование полнотекстового индекса во views
Прислано: edhel
сб, 30/10/2010 - 04:05
Во views есть возможность сделать полнотекстовый поиск по полю, но будет использоваться медленный оператор LIKE '%слово%' (на больших массивах данных). В MySQL есть полнотекстовый индексы (http://dev.mysql.com/doc/refman/5.0/en/create-index.html, http://dev.mysql.com/doc/refman/5.0/en/fulltext-search.html).
Вот как можно заставить views использовать полнотекстовый индекс с помощью оператора MATCH:
1. Ручками создаём полнотекстовый индекс, например, по полю node.title.
2. Добавляем во views фильтр по полю node.title на равенство с учётом регистра (можно сделать его "exposed").
3. Пишем модуль mymodule c хуком views_query_alter:
<?php
function mymodule_views_query_alter(&$view, &$query) {
if ($view->name == 'MYVIEW_NAME') {
$args_count = 0;
foreach ($query->where[0]['clauses'] as $key => $value) {
if (strstr($value, '%s')) $args_count++;
if ($value == "(node.title) = ('%s')") {
$query->where[0]['clauses'][$key] = "MATCH (node.title) AGAINST ('%s' IN BOOLEAN MODE)";
_mymodule_views_query_alter_hepler($query->where[0]['args'][$args_count - 1]);
}
}
}
}
function _mymodule_views_query_alter_hepler(&$s) {
$words = preg_split("/\s+/", trim($s));
$new_words = array();
foreach ($words as $word) {
$first = drupal_substr($word, 0, 1);
if ($first != '+' && $first != '-') {
$word = '+' . $word;
}
$new_words[] = $word;
}
$s = join(' ', $new_words);
}
?>- Для комментирования войдите или зарегистрируйтесь
Кривой robots.txt
Прислано: edhel
вт, 17/08/2010 - 03:20
С удивлением обнаружил в robots.txt строчку Disallow: /sites/. Если файлы расположены не в /files/, а в /sites/*/files, то яндексы-гуглы не будут индексировать значительную часть файлов (doc, pdf, картинки и т.п.). Баг имхо, обсуждается, в частности, здесь http://drupal.org/node/494462.
У меня есть установка дрюпала с мультисайтингом на 30 сайтов, которой уже много-много лет, и большинство сайтов хранят файлы в /sites/. И все эти годы куча файлов не индексировалась. Обнаружил, когда посмотрел логи Яндекс.Сервера.
Colorer for Drupal
Прислано: edhel
вт, 29/06/2010 - 16:27
Навоял простенький модуль для подсветки синтаксиса в формах редактирования HTML/PHP в текстовых полях (ноды, блоки и т. д.). Для подсветки используются JS-движки EditArea и CodeMirror на выбор (переключается в настройках).
Страница модуля: http://drupal.org/project/colorer
Физически исходники на http://www.bitbucket.org/edhel/drupal-colorer. На drupal.org есть прямые ссылки на скачивание версии для drupal 5.x и 6.x.
Хлебные крошки в Google
Прислано: edhel
пн, 07/12/2009 - 12:17
Заметил, что Google для результатов с drupal.org стал показывать «хлебные крошки» для найденных страниц. Например, по запросу node breadcrumb выводится «drupal.org › Download › Modules» (ссылками).
Подключение внешнего JavaScript
Прислано: edhel
ср, 18/11/2009 - 04:29
drupal_add_js не работает для внешних адресов, т.к. вначале добавляет слэш к адресу.
Может помочь drupal_set_html_head('[script src...']), но он не подключает jQuery. Если вызвать drupal_add_js('','inline'), то jQuery подключится, но позже нашего скрипта.
Поэтому если надо подключить внешний скрипт, который использует jQuery, то делаем так:
<?php
drupal_add_js('document.write("<" + "script type=\'text/javascript\' src=\'http://myserver.ru/.../datepicker.js\'><" + "/script>");', 'inline');
?>Это в модуле или template.php.
А drupal_set_html_head можно использовать для подключения внешних CSS.
Перевели сайт на Drupal
Прислано: edhel
вс, 05/04/2009 - 16:22
http://ic.sfu-kras.ru/. Был сайт на PHP+файлы. Перевели на Drupal 6 сохранив лицо. Ничего мега-особенного, но всё же.
Поиск через Яндекс.Сервер. Он мне больше нравится, чем встроенный в Drupal. Особенно выводит, когда drupal-евский поиск начинает тормозить по 5-10 сек.
Об InnoDB
Обнаружен биг-фича: если БД в InnoDB и у ноды нет тела (body), то создание ревизии ноды приводит к ошибке при добавлении этой ревизии в БД (в таблицу node_revision). Как следствие, нода теряется. InnoDB более строго относится к непустым полям, пришлось править node.install и добавлять default ''.
Видео-хостинг на Drupal 6 для вуза
Прислано: edhel
чт, 12/03/2009 - 07:03
Сделали сайт на Drupal 6 для хостинга видео и аудио-ресурсов для университета: http://tube.sfu-kras.ru/
Возможности:
- онлайн-просмотр видео/аудио в различном качестве (c помошью JW Player) с поддержкой псевдо-поточности (прокрутка в любое место видео без полной загрузки)
- навигация по рубрикам, ключевым словам, пользователям, похожему видео
- плейлисты
- онлайн-загрузка видео (обработка автоматически не ведется, ручками кодируется в ffmpeg и файлы выкладываются по FTP)
- экспорт (HTML-код)
- возможность ограниченного доступа к избранным материалам: по IP-адресам универа, для ролей, по паролю (тут основная была проблема с тем, что jw player похоже не передавал cookie скприпту-стримеру, пришлось хитрую авторизацию делать по "билетам")
- оглавление для навигации по конкретному видео (пример: http://tube.sfu-kras.ru/video/196)
- поиск с помощью Яндекс.Сервер
Из нестандартных модулей используюся:
- cck (метаописание)
- fivestar+votingapi (звездочки)
- google_analytics (статистика)
- node_breadcrumb (фикс брэдкрамбов)
- tagadelic (облако тегов)
- cas_client (моя самописная CAS-авторизация)
+ несколько модулей конкретно для этого сайта (навигация, плейлисты и т. д.)
Не использовал views намеренно, ибо он тормоз имхо) Получилось так, что просмотр списка видео работает быстрее и выполняет меньше SQL-запросов, чем просмотр отдельной ноды с видео.
-----------
Breadcrumb в 6-ке
Прислано: edhel
пт, 14/11/2008 - 03:41
1) Обнаружил, что в 6-ке для элементов меню не строится автоматически breadcrumb. Строится только для меню navigation. Для фикса есть модуль menu_breadcrumb.
2) Наконец-то портировал свой модуль node_breadcrumb на 6-ку. В частности, добавил и вышеупомянутый фикс (это пара строк).
Модуль позволяет «прицепить» все ноды определенного типа или категории к пункту меню, чтобы при их просмотре показывался breadcrumb ведущий к этому пункту меню, и само меню разварачивалось к нужному пункту.
Администрирование комментариев в собственной ноде
Прислано: edhel
ср, 06/02/2008 - 06:29
Есть модуль http://drupal.org/project/usercomment, но с последними версиями Дрюпала не пашет и слишком навороченный... Написал схожий модуль, но более короткий, правда и с особенностями...
Принцип работы
Текстовые поля в CCK со множественными значениями — добавление полей на лету
Прислано: edhel
сб, 29/12/2007 - 07:18
Думаю многим известна проблема с текстовыми полями со множественными значениями: по умолчанию можно ввести только 3 значения. Если надо больше — то нужно сохранить ноду и опять перейти в режим редактирования. Можно увеличить начальное кол-во полей хакнув text.module (строка 272 в моей версии):
foreach (range($delta, $delta + 2) as $delta) {
заменить, например, на:
foreach (range($delta, $delta + 4) as $delta) {
- Для комментирования войдите или зарегистрируйтесь
Разработка модулей (бесплатно)
Прислано: edhel
ср, 17/10/2007 - 02:15
Имеется N-ое количество свободных студентов 3-6 курсов вуза. Им нужны задачи для курсовых и дипломных в области веб-разработки и есть возможность их озадачить разработкой модулей для Drupal. Если кому-то давно хочется какого-то модуля, то предлагайте. Желательно что-то более-менее общественно-полезное, то бишь за слишком специфические и коммерческие модули браться не будем.