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

JavascriptIE не передаёт referer при изменении location.href

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

Решение проблемы — эмулировать нажатие на ссылку:

function openUrl(url)
{
    var fakeLink = document.createElement('a');
 
    // Firefox & other browsers
    if (typeof(fakeLink.click) == 'undefined')
    {
        location.href = url;
    }
    // Internet Explorer
    else
    {
        fakeLink.href = url;
        document.body.appendChild(fakeLink);
        fakeLink.click(); 
    }
 
    return true;
}
 
// пример
openUrl('http://google.com');

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

DrupalНеприятная особенность модуля CAPTCHA

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

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

Файл captcha.module, функция captcha_process:

...
// Prevent caching of the page with CAPTCHA elements.
// This needs to be done even if the CAPTCHA will be ommitted later:
// other untrusted users should not get a cached page when
// the current untrusted user can skip the current CAPTCHA.
global $conf;
$conf['cache'] = FALSE;
...

DrupalСоздаём xml карту сайта (sitemap) с помощью модуля XML sitemap

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

Описание

Процитирую википедию

Sitemaps — это XML-файл с информацией для поисковых систем (таких как Google, Yahoo, Ask.com, MSN, Яндекс) о страницах веб-сайта, которые подлежат индексации. Sitemaps может помочь поисковикам определить местонахождение страниц сайта, время их последнего обновления, частоту обновления и важность относительно других страниц сайта для того, чтобы поисковая машина смогла более разумно индексировать сайт. Использование протокола Sitemaps не является гарантией того, что веб-страницы будут проиндексированы поисковыми системами, это всего лишь дополнительная подсказка для сканеров, которые смогут выполнить более тщательное сканирование Вашего сайта.

Добавить нечего, нужный SEO инструмент.