xandeadx.ru Блог музицирующего веб-девелопера

DrupalПропадают файлы загруженные с помощью функции file_save_upload

Опубликовано в

Из документации к функции file_save_upload:

The file will be added to the files table as a temporary file. Temporary files are periodically cleaned. To make the file permanent file call file_set_status() to change its status.

Перевод:

Файл будет добавлен в таблицу files с флагом "временный". Временные файлы периодически удаляются (по крону). Для того, чтобы назначить файлу флаг "постоянный", нужно вызвать функцию file_set_status().

DrupalПочему в основном меню не появляется ссылка на созданный опросник (webform)

Опубликовано в

При создании опросника, по умолчанию, значение поля Опубликовано установлено в false (а должно быть true). Не логично, часа два убил на поиск разгадки.

DrupalВлияние количества модулей на производительность

Опубликовано в

Решил проверить, как модули, установленные на этом блоге, влияют на производительность Drupal.

Вооружившись утилитой ab из состава Apache 2.2, провел серию тестов. Отключая модуль за модулем, записывал число запросов, которое может обработать Drupal за одну секунду.

DrupalРаботаем с jQuery плагином Uploadify

Опубликовано в

Uploadify это jQuery плагин для закачки одного или нескольких файлов за раз, с прогрессбаром и различными рюшечками.

Основная сложность, при работе с плагином, заключается в том, что он не передаёт значение сессии при аплоаде файла. Поэтому Drupal думает что файл закачивает анонимный пользователь, со всеми вытекающими последствиями.

Чтобы этого не происходило, при загрузке файла нужно передавать идентификатор сессии в параметре scriptData, и на сервере делать проверку прав не в хуке hook_menu(), а в соответствующей callback функции. Покажу на примере.

DrupalПример работы с модулем Google Analytics API

Опубликовано в

Модуль Google Analytics API предоставляет функции для получения данных с вашего Google Analytics аккаунта.

Пример получения пяти самых популярных страниц за последние 30 дней:

$request = array(
  '#dimensions'  => array('pagePath'),
  '#metrics'     => array('pageviews'),
  '#sort_metric' => array('-pageviews'),
  '#filter'      => 'pagePath=~^/blog/.*/\d+',
  '#start_date'  => date('Y-m-d', time() - 60*60*24*30),
  '#end_date'    => date('Y-m-d'),
  '#start_index' => 1,
  '#max_results' => 5,
);
 
try {
  $entries = google_analytics_api_report_data($request);
}
catch (Exception $e) {
  return $e->getMessage();
}
 
$stat = array();
foreach ($entries as $entry) {
  $dimensions = $entry->getDimensions();
  $metrics = $entry->getMetrics();
 
  $stat[] = array(
    'url' => $dimensions['pagePath'],
    'views' => $metrics['pageviews'],
  );
}
 
print_r($stat);

DrupalМинимальное время жизни кеша = <нет>

Опубликовано в

При установке параметра Минимальное время жизни кеша в <нет> на странице admin/settings/performance, кэш страниц для анонимных пользователей будет сбрасываться при:

  • Любой активности админа на сайте: добавление материала, изменение настроек сайта, манипуляция блоками и модулями, изменение меню, изменение темы оформления, работа с таксономией, и т.д.
  • Выполнение регулярных процедур (cron)
  • Добавление/обновление/удаление комментариев
  • Редактировании профилей пользователей

DrupalПишем простой модуль защиты от спама

Цель модуля — защитить комментарии от автоматического спама, т.е от сообщений, которые создают боты а не люди.

Суть модуля — в форме отправки комментария, добавляем новое поле типа checkbox и подписью "Я не спамер". Боты, в основной массе, не заполняют незнакомые им поля, что позволяет отделить их от людей.

Модуль прошёл проверку в боевых условиях, и за несколько дней не пропустил ни одного спам-коммента.

Итак приступим.

DrupalСоздание и удаление таблиц базы данных в своём модуле

Опубликовано в

Таблицы описываются в файле с расширением .install и хуке hook_shema(). Затем с помощью хука hook_install() добавляются в базу при инсталляции модуля, и удаляются с помощью хука hook_uninstall() при удалении модуля на странице admin/build/modules/uninstall