Химический Али: Блог

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

MySQL Profiler: простой и удобный инструмент профилирования запросов

24 сентября 2009 в 1:53

Хабрачувак agorlov сообщает:

Сегодня был неожиданно удивлен, какие удобные штуки таит в себе MySQL. Хочу представить вашему вниманию фичу MySQL — профайлинг. Появилась она начиная с версии 5.0.37.
Всего парой запросов можно узнать, какими запросами формируется страница (для веб-девелоперов) и почему она тормозит. И раньше подобный функционал был доступен, но пользоваться журналом запросов не в пример сложнее.

Итак, как пользоваться:

mysql> set profiling=1;
mysql> select count(*) from comment;
mysql> select count(*) from message;
mysql> show profiles;

+----------+------------+------------------------------+
| Query_ID | Duration   | Query                        |
+----------+------------+------------------------------+
|        1 | 0.00012700 | select count(*) from comment |
|        2 | 0.00014200 | select count(*) from message |
+----------+------------+------------------------------+
2 rows in set (0.00 sec)

Дальше — больше

И снова погода!

16 сентября 2009 в 12:02

Прочь лирику, смотрите сами что делает модуль Yr Weatherdata:

Сервис норвежский, но есть погодка для других стран. Касательно Руссланда:

Адыгеа – Агин-Бурят – Алтаи – Алтаи Краи – Амур – Аркхангелск – Астракхан – Башкортостан – Белгород – Брянск – Бурятиа – Чечня – Челябинск – Чита – Чукотка – Чувашиа – Дагестан – Евенкиа – Ингушетиа – Иркутск – Иваново – Жевиш Аутономоус Област – Кабардино-Балкариа – Калининград – Калмыкиа – Калуга – Камчатка – Карачаы-Черкессиа – Карелиа – Кемерово – Кхабаровск – Кхакассиа – Кхантиа-Мансиа – Киров – Коми – Корякиа – Кострома – Краснодар – Красноярск – Курган – Курск – Ленинград – Липетск – Магадан – Мари Ел – Мордовиа – Мосцов – Мосцов област – Мурманск – Ненетсиа – Низхны Новгород – Нортх Оссетиа-Аланиа – Новгород – Новосибирск – Омск – Оренбург – Орыол – Отхер – Пенза – Перм – Приморскы – Псков – Ростов – Рязан – Сакха – Сакхалин – Самара – Саратов – Смоленск – Соутх Курилес – Ст. Петерсбург – Ставропол – Свердловск – Тамбов – Татарстан – Таымыриа – Томск – Тула – Твер – Тюмен – Тыва – Удмуртиа – Уляновск – Уст-Орда Бурятиа – Владимир – Волгоград – Вологда – Воронезх – Ямалиа – Ярославл

Кроме того, там написано, что yr.no располагает погодными данными для 7 миллионов точек в мире и для поиска более точных следует попробовать заюзать поиск.

Забирать здесь: http://drupal.org/project/yr_verdata

Простейшие хлебные крошки (breadcrumbs)

2 сентября 2009 в 21:31

Модуль Taxonomy_Breadcrumbs у меня так и не заработал, поэтому по-тупому намалевал себе модуль для генерации хлебных крошек на основе таксономии. Он
а) выбирает из числа словарей, сопоставленных типу ноды, один с наибольшим "весом",
б) выбирает из числа терминов этого словаря 1,
в) включает ссылку на этот термин в хлебные крошки,
г) добавляет к хлебным крошкам название материала (на любителя).

Получается что-то вроде: Главная › Audi › Audi A8 L будут собирать в Венесуэле.

Если структура словаря древовидная, в цепочку будут добавлены все термины дерева в порядке вложенности.

Состоит из одной функции (основа выдрана из другого модуля :). Можно не мучаться и изменить функцию так, чтобы цепочка строилась исключительно из данных о терминах, заключенных в объекте $node.

Внимание, говнокод! Использовать на свой страх и риск.

Тупая галерея на Image + jCarousel

2 сентября 2009 в 9:00

Вчера от лени склепал обертку для стандартной Image Gallery c применением jCarousel и ThickBox.

Общий вид галереи

При клике по картинке отрабатывает ThickBox:

Просмотр картинки

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

Все это делается одной функцией в template.php при условии, что у вас установлен модуль jCarousel:

<?php
/**
 * Theme a gallery page
 */
function phptemplate_image_gallery($galleries$images) {
  
drupal_add_css(drupal_get_path('module''image_gallery') .'/image_gallery.css');
  
drupal_add_js(drupal_get_path('module''jcarousel') .'/jcarousel/lib/thickbox/thickbox.js');
  
drupal_add_css(drupal_get_path('module''jcarousel') .'/jcarousel/lib/thickbox/thickbox.css');

  

$size image_get_sizes(IMAGE_THUMBNAIL);

  

$content '';
  if (
count($galleries)) {
    
$content .= '<div class="galleries">';
    foreach (
$galleries as $gallery) {

      

$content .= "<h3>"l($gallery->name'image/tid/'$gallery->tid) .$gallery->count</h3>\n";

      

// Determine sort order.
      
$join $where $order '';
      
$args = array();
      switch (
variable_get('image_gallery_sort_order'IMAGE_GALLERY_SORT_CREATE_DESC)) {
        case 
IMAGE_GALLERY_SORT_CREATE_DESC:
          
$order 'ORDER BY n.sticky DESC, n.created DESC';
          break;

        case 

IMAGE_GALLERY_SORT_CREATE_ASC:
          
$order 'ORDER BY n.sticky DESC, n.created ASC';
          break;
?>

Вопрос «стены пользователя» близится к логичному решению

24 августа 2009 в 15:11

Релизнули модуль User Wall, позволяющий пользователям иметь т.н. "стену" — на которой другие пользователи могут оставлять публичные привки, симпафки, а также проклятия и спам (как в Фейсбуке).

Пока модуль прост, но большинству много и не надо. Во всяком случае, вопрошателям можно просто давать ссылку, не утруждаясь объяснениями как такое сделать с помощью views/cck, блоков и инъекций в профиль.

http://drupal.org/project/user_wall

Идея антиспама с сегодняшнего Хабра

11 августа 2009 в 11:27

Сегодня на хабре всплыла идея:

---
Наткнулся тут недавно на одном сайте на способ защиты от ботов без использования каптчи и javascript.
Все очень просто — достаточно добавить скрытое поле с символом кодированным в HTML сущность (например © — и т. д.). Дело в том что браузер найдя такой символ преобразует его перед отправкой в обычный, а робот использующий парсер форм так и отправить закодированным (причем у меня есть свой парсер форм и он сделал бы именно так). При проверки формы достаточно просто посмотреть длину строки в этом поле. Если отправлял человек то она будет равна числу символов в строке, а если нет значительно больше.

Так что такое решение пусть и не обеспечивает серьезной защиты но вполне может применяться в тех случаях если что то более сложное использовать нельзя.
---

По-моему, это гораздо лучше, чем javascript-методы.

Реально ли оформить такое в модуль для Drupal или добавить новый вид проверки в модуль CAPTCHA? А может уже есть готовое?

Еще одно антиспам-решение

10 августа 2009 в 11:53

Модуль Spambot сверяет учетные данные пользователей с сетевой базой данных абортов и ублюдков Stop Forum Spam, после чего блокирует их, избавляя от необходимости вручную проверять регистрационные данные пользователей.

Spambot ведет журналирование запросов регистрации и ошибок. Работу модуля можно проверить с прменением адреса электронной почты из комментария в функции spambot_username_validate().

Требует для работы расширения PHP cURL.

Юзабилити растет: Ajax Tabs

5 августа 2009 в 17:05

Модуль Ajax Tabs позволяет переходить между локальными задачами (menu local tasks) без полной перезагрузки страницы, с использованием AJAX. Причем можно задавать, на каких страницах механизм будет работать, а на каких - нет.

Модуль зависит от ajax_load.module. Уверьтесь, что табы обернуты в page.tpl.php чем-то вроде

Смена темы оформления на лету

29 июля 2009 в 21:52

Столкнулся с проблемой, когда для админки и фронтенда используются разные темы. В частности, при создании или редактировании контента подключается тема админки. А надо было, чтобы при создании определенного типа материала подключалась тема фронтенда, а для остальных использовалась тема админки.

Конкретно, нужно было, чтобы при создании темы форума не подключалась тема админки, т.к. топики создают и обычные пользователи, а резкое изменение оформления вводит их в диссонанс и не отвечает требованиям юзабилити.

После некоторых поисков было ясно, что дело нужно иметь с функцией hooks_init(). Мы должны создать свой модуль для перекрытия этой функции.

В итоге выйдет нечто вроде этого:

<?phpfunction TVOYMODULE_hooks_init() { 
  // Если создаем или правим топик форума
  if(arg(0) == 'node' && (arg(1) == 'add' || arg(1) == 'edit') && arg(2) == 'forum') { 
    // то подключаем тему «nasha»
    global $custom_theme; $custom_theme = "nasha"; 
  } 
}?>

Источник: http://www.bytesite.co.uk/drupal-changing-theme-on-theflydrupal-programm...

Крутые плавающие уведомления

28 июля 2009 в 21:15

Как-то в голову пришла мысль, что стандартные друпаловские уведомления о проведении тех или иных процедур недостаточно удобны: выводятся блоком в области контента и часто отжирают полезное пространство тогда, когда особой необходимости в этом нет. Например, вы создали топик на форуме и вместе с показом вновь созданной ветки экран обезображивает прямоугольная плашка, сообщающая о том, что и так видно. Надо было сделать так, чтобы уведомления вели себя как и положено — тихо и ненавязчиво.

Drupal обзавелся поддержкой FaceBook Connect и других систем авторизации

28 июля 2009 в 11:56

Больше социальности! Теперь сайты на Drupal могут аутентифицировать посетителей с помощью таких стандартов авторизации, как Facebook Connect, MySpace ID, Twitter, а также с помощью почтовых OpenID-провайдеров (Google, Yahoo, и AOL). Функциональность обеспечивает модуль под названием Socialize разработки Gigya и Acquia.

Помимо авторизации, модуль включает в себя возможности оп «пушингу» (обмену) контента между социальными сетями, обновлению социальных статусов и т.п.

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

Для работы модуля требуется Popups API и аккаунт на Gigya Socialize. Кроме того, горячо рекомендуется Trigger для совершения тех или иных процедур при определенных действиях пользователей.

Страница проекта: http://drupal.org/project/gigya

Drupal Sightings #135 ru

27 июля 2009 в 14:06

Убил котенка... [решено]

10 июля 2009 в 14:23

Зашел на форум и подумал: неудобно как-то - нельзя посомтреть новые сообщения только для форума. Трекер общий, все в кучу валится. Отсеять сообщения по типу материала или автору нельзя. Разве что отсортировать, но это все не то. И решил убить котенка.

Открыл tracker.module, вписал в функцию tracker_menu() следующее:

<?php
  $items
['tracker/forum'] = array(
    
'title' => 'Recent topics',
    
'page callback' => 'tracker_page_forum',
    
'access arguments' => array('access content'),
    
'weight' => 1,
    
'file' => 'tracker.pages.inc',
  ); 
?>

Затем открыл tracker.pages.inc, скопировал функцию tracker_page() в tracker_page_forum() и привел ее к такому виду:

<?php
/**
 * Показывает обновленные или новые темы форума. 
 * В запросы добавлено AND n.type = \'forum\' чтобы отсеять форумские сообщения
 */
function tracker_page_forum($account NULL$set_title FALSE) {
  
// Add CSS
  
drupal_add_css(drupal_get_path('module''tracker') .'/tracker.css''module''all'FALSE);

  if (

$account) {
    if (
$set_title) {
      
// When viewed from user/%user/track, display the name of the user
      // as page title -- the tab title remains Track so this needs to be done
      // here and not in the menu definiton.
      
drupal_set_title(check_plain($account->name));
    }
  
// TODO: These queries are very expensive, see http://drupal.org/node/105639?>

Прогноз погоды от Yahoo

6 июля 2009 в 11:36

Модуль Yahoo Weather Forecast создает блок с текущей погодой и прогнозом погоды на 2 суток вперед с использованием API (weather.yahoo.com).

Страница проекта

http://drupal.org/project/yahoo_weather_forecast

Список российских городов

http://weather.yahoo.com/Russia/RSXX/regional.html

jCarousel не работает в page.tpl.php. Почему?

3 июля 2009 в 9:15

Установил на чистую установку jCarousel, вставляю код примера прямо в page.tpl.php - не работает. Если вставить в ноду с php-фильтром - работает.

В чем может быть причина?

Управлять правами станет немножко удобнее

1 июля 2009 в 9:12

Модуль Check Heavy UI прибавляет удобства при настройке прав пользователей. Визуально он просто добавляет несколько чекбоксов на странице управления правами (admin/user/permissions), позволяя в один клик установить какое-то разрешение для всех ролей или отключить все разрешения для определенного модуля.

Drupal 7: usability update

5 июня 2009 в 14:20

На основе опроса, который я провел в прошлом году стало ясно, что одна из главных задач, которую ставит перед собой сообщество, это упростить использование Drupal. И это неудивительно. Повышение удобства Drupal, привлекает больше пользователей, и, следовательно, больше потенциальных разработчиков. А для существующих означает экономию времени на всем: от работы на сайте до разработки учебных материалов для своих клиентов, укрепление позиций Drupal. И, наконец, стратегически важно для развития проекта в будущем, чтобы уровень удобства соответствовал уровню нашего API. Наши конкуренты работают над тем, чтобы повысить свой уровень функциональности до уровня Drupal, и если мы не будем работать над тем, чтобы в Drupal радикально улучшить юзабилити, то рискуем стать жертвой в соответсвии с принципами The Ockham's Razor Principle of Content Management Systems.

В этом посте я хочу приоткрыть завесу тайны над тем, что уже сделано в Drupal 7 для повышения удобства работы.

Супер Крон

5 июня 2009 в 10:35

Супер Крон — это полноценная замена стандартному Drupal Cron.

Что он дает?

1. Просмотр всех хуков cron во включенных модулях
2. Изменение порядка вызова хуков
3. Отключение отдельных хуков
4. Параллельный запуск задач (все задачи будут выполнены параллельно, а не одна за другой)
5. Определение исключений, вызванных тем или иным хуком
6. Вызов отдельных хуков по запросу (очень удобно для отладки)
7. Продолжение выполнения всех хуков, если какой-то допустил прерывание
8. Измерение времени, затраченного на выполнение хуков (показывается время выполнения хука и общее время выполнения)
9. Захват вывода хуков
10. Изменение поведения Крона в моменты нагрузок на сайт (требует включенного модуля Throttle из стандартного комплекта)
11. Ограничение IP адлресов, с которых возможет вызов Крона

Страница проекта

http://drupal.org/project/supercron

Ночной Славянск-на-Кубани (reloaded)

2 июня 2009 в 15:21

«Ночной Славянск-на-Кубани» — это игра на ночное ориентирование в городе. Команды молодых и не очень людей получают зашифрованные задания, находят по ним в городе некие места и отыскивают там коды, написанные маркером или краской из баллончика.

Для игроков это приятное развлечение, многие из них ждут каждую очередную игру с нетерпением. Чтобы снизить накал ожидания, люди сделали себе сайт. На нем они общаются между играми, выкладывают фото, размещают анонсы предстоящих игр и обсуждают прошедшие, пишут друг другу тайные сообщения и ждут новых игроков.

Поможет ли Backup-n-Migrate «обновиться»?

26 мая 2009 в 11:09

Вопрос к пользователям модуля drupal.org/project/backup_migrate

Есть сайт с устаревшей версией 6-рки. Стоит задача переехать на другой хостинг и хотелось бы при этом обновиться до более высокого релиза.

Можно ли сделать бэкап на старой версии, а потом безболезненно воскресить его на более свежем дистрибутиве? Smile

Удалил «руками» модуль, теперь он обратно не встает [решено]

25 мая 2009 в 17:30

Была необходимость отключить модуль privatemsg. Яего отключил через админку, а потом удалил из БД таблицы с префиксом "pm_". После этого пытаюсь снова ставить модуль, но после его включения друпал жалуется, что не существует таблиц модуля (и их таки нет) и сам их при включении модуля не создает.

Что делать?

Разграничение прав по трём фронтам: Node, Menu, Admin

26 марта 2009 в 13:43

Вышел релиз 3 модулей безопасности: Node Access, Menu Access и Admin Access. Модули позволяют расширить систему прав Drupal в зависимости от роли или пользователя и задают правила доступа к меню, пунктам меню, нодам и панели управления сайтом.