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

DrupalДобавляем в отчёты кнопку «Очистить журнал»

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

Полезная штука :)

Кнопка очищающая журнал

/**
 * Implements hook_form_FORM_ID_alter(): dblog_filter_form.
 */
function mymodule_form_dblog_filter_form_alter(&$form, &$form_state) {
  $form['clear'] = array(
    '#type' => 'submit',
    '#value' => 'Очистить журнал',
    '#submit' => array('mymodule_watchdog_clear'),
  );
}
 
/**
 * Form callback.
 */
function mymodule_watchdog_clear() {

DrupalBUEditor one click upload 0.7

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

Обновился BUEditor one click upload. Изменения:

  • При нажатии кнопки Предпросмотр пропадала кнопка модуля.
  • Добавлена подсказка для кнопки (title).
  • Проверка максимального размера файла до его отправки на сервер.

DrupalЗащита от сканирования сайта ботами

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

Судя по вот этому посту на drupal.ru, не я один подвергаюсь периодическим набегам ботов :) Поделюсь как решил эту проблему у себя в блоге.

В .htaccess, в секцию <IfModule mod_rewrite.c> нужно добавить:

RewriteRule \.(cgi|rdf)$ - [F]
RewriteRule http: - [F]
RewriteRule xmlrpc\.php$ - [F]
RewriteRule ^wp- - [F]
RewriteRule ^modx/ - [F]
RewriteRule ^e107 - [F]
RewriteRule ^bitrix/ - [F]
RewriteRule ^netcat - [F]
RewriteRule ^typo3/ - [F]
RewriteRule ^cms/ - [F]

DrupalПримеры модулей для Drupal 7

На drupal.org существует проект для разработчиков с примерами различных модулей, по исходникам которых можно набираться опыта. На данный момент для Drupal 7 написано 19 модулей. Туда входит:

DrupalРазличные page.tpl.php в зависимости от условий

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

Иногда необходимо, чтобы некоторые страницы имели свой уникальный основной шаблон (layout, он же page.tpl.php).

Самый простой способ добиться этого, это создать в папке темы файл с именем на основе url. Например при генерации страницы mysite.ru/search Drupal будет искать в папке темы файл с именем page--search.tpl.php и если он существует, то будет использовать его, вместо стандартного. По такому принципу можно создавать свои layout-ы для определённых нод (например page--node--223.tpl.php для темизации страницы mysite.ru/node/223) или терминов таксономии (page--taxonomy--term--85.tpl.php для темизации страницы mysite.ru/taxonomy/term/85). Подробнее в официальном руководстве.

Но что делать если основной шаблон нужно использовать больше одного раза, и в зависимости от каких-нибудь условий, например для нод с nid равным 1 или 99.

DrupalРабота с базой данных в Drupal 7

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

Выборка с условием:

// Drupal 6
$nodes = db_query("
  SELECT nid, title FROM {node}
  WHERE type = '%s' AND uid = %d
", 'page', 1);
 
// Drupal 7, static query
$nodes = db_query("
  SELECT nid, title FROM {node}
  WHERE type = :type AND uid = :uid
", array(':type' => 'page', ':uid' => 1))->fetchAll();
 
// Drupal 7, dynamic query
$nodes = db_select('node', 'n')
  ->fields('n', array('nid', 'title'))
  ->condition('n.type', 'page')
  ->condition('n.uid', 1)
  ->execute()
  ->fetchAll();

DrupalУведомление администратора о новых комментариях

/**
 * Реализация hook_comment()
 * Отправка уведомления о новом комментарии, администратору на почту
 */
function mymodule_comment(&$a1, $op) {
  if ($op == 'insert') {
    drupal_mail('mymodule', 'notify_of_new_comment', variable_get('site_mail', ''), language_default(), $a1);
  }
}
 
/**
 * Реализация hook_mail()
 */
function mymodule_mail($key, &$message, $params) {
  if ($key == 'notify_of_new_comment') {
    $message['subject'] = 'Уведомление о новом комментарии';
    $message['body'] = $params['name'] . ' оставил новый комментарий:' . "\n\n";
    $message['body'] .= $params['comment'] . "\n\n";
    $message['body'] .= url('node/' . $params['nid'], array(
      'absolute' => TRUE,
      'fragment' => 'comment-' . $params['cid'])
    );
  }
}

DrupalОтправка email

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

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

drupal_mail('mymodule', 'my_notify', 'to-user@gmail.com', language_default(), array('somevar' => 'somevalue'));

Последним параметром можно передать какие-нибудь данные, которые будут участвовать в генерации темы письма или сообщения.