href mailto с русским заголовком

Опубликовано 2014.10.24 в разделе JavaScript.

Если в ссылке в атрибуте href прописать mailto:e-mail - то при клике на такую ссылку у пользователя откроется почтовый клиент и создастся письмо, адресованное адресу, указанному после mailto: Так же в ссылке можно передавать заголовок письма и его содержимое. Для этого нужны переменные subject и body. Таким образом ссылка будет выглядеть вот так:
  1. <a href="mailto:example@server.dom?subject=My email&body=My text of this e-mail">написать письмо</a>
Такой код будет корректно отрабатываться во всех браузерах. Если нажать на такую ссылку - то откроется почтовый клиент

Документация Varnish

Опубликовано 2014.10.21 в разделе Разное.

Обработчики

vcl_recv - принимает запрос.
vcl_fetch - вызывается после того, как документ был успешно загружен с бэкэнда. Можно добавлять заголовки, обрабатывать esi.
vcl_pass - вызывается если vcl_recv вернул pass.
vcl_deliver - последняя точка перед выходом(подойдёт для добавления различных отладочных заголовков).
vcl_hit - вызывается после того, как объект был найден в кэшэ.

Права на файлы и папки

Опубликовано 2014.10.20 в разделе Разное.

Права представляют из себя трёхзначное число, состоящее из чисел от 0 до 7. Первые три цифры означают права владельца файла(owner). Вторые три - группы(group). Последние три - всех остальных пользователей(others). Ниже список цифр и их значений: 0 - ничего нельзя 1 - выполнение 2 - запись 3 - запись и выполнение 4 - чтение 5 - чтение и выполнение 6 - чтение и запись 7 - чтение, запись и выполнение Права так же могут быть и в строковом виде. В этом случае вы увидите 3 символа - это R(чтение), W(запись) и X(выполнение).

Агрегация views по заголовку материала

Опубликовано 2014.09.25 в разделе Drupal.

Сделать традиционный group by в запросе вьюса не так просто. Вьюс группирует все поля. Для отдельных полей в настройках агрегации можно задать тип "среднее", "максимум", "минимум" и так далее. А если нужно сгруппировать материалы по строке? Например по заголовку или строковому cck полю? Стандартная агрегация вьюса с этим не справится, по крайней мере я не смог этого сделать в интерфейсе представления. Поальтерить запрос вьюса через hook_views_query_alter тоже не получится. Придётся альтерить весь запрос.

Создание своего Token`а

Опубликовано 2014.08.01 в разделе Drupal.

Расширить стандартный набор токенов очень просто. Это необходимо, если вам нужно как-то необычно формировать алиас материала. Для начала создайте модуль. Для начала в нём необходимо объявить hook_token_info. Он будет возвращать названия токенов, их описания и машинное имя токена.
  1. function my_module_token_info() {
  2. $info['tokens']['node']['my_new_token'] = array(
  3. 'name' => t('My node token'),
  4. 'description' => t('New custome node token'),
  5. );
  6. return $info;
  7. }

Программное создание node_reference поля

Опубликовано 2014.08.01 в разделе Drupal.

Добавить такое поле очень просто. Для этого подойдёт стандартный hook_form_alter. Для создания поля типа Node reference нужно создать обыкновенное текстовое поле. А чтобы текстовое поле стало с автокомплитом - в него нужно добавить путь, по которому друпал будет аяксом дергать список подходящих значений. Выглядит это так:
  1. $form['my_author'] = array(
  2. '#type' => 'textfield',
  3. '#title' => 'Автор фото',
  4. '#autocomplete_path' => 'node_reference/autocomplete/node/node_gallery_item/field_coll_photo_author',
  5. );

Color Picker для Drupal

Опубликовано 2014.07.01 в разделе Drupal.

В ядре друпала есть модуль Color, позволяющий задавать цвета различных элементов темы прямо из админки. Данный Color Picker легко вытянуть и поставить в любую друпальскую форму. Можно создать форму самому, или поальтерить существующую. Такой код добавит элемент ко всем формам, так что ориентируйтесь на переменную $form_id в теле хука.
  1. function my_module_form_alter(&$form, &$form_state, $form_id){
  2. $form['color'] = array(

Удалить все ноды определённого типа

Опубликовано 2014.06.19 в разделе Drupal.

Если у вас не стоит модуль VBO, а потребность удалить большое количество нод есть - то можно использовать совсем маленький кусок кода. Можно даже не создавать модуль, а прогнать его через Devel. Например, мне нужно удалить все материалы типа "auto_part" Код выглядит так:
  1. $nids = array();
  2. $q = db_select('node', 'n')->condition('n.type', 'auto_part')->fields('n', array('nid'))->execute();
  3. while($r = $q->fetchAssoc()) {
  4. $nids[] = $r['nid'];
  5. }
  6. node_delete_multiple($nids);

Удаление дочерних материалов Node Gallery

Опубликовано 2014.06.17 в разделе Drupal.

Модуль Node Gallery позволяет создавать на сайте галереи. Причём каждое фото одной галереи - это отдельная нода. Пересматривать такую галереи не очень удобно, так как придётся обновлять страницу, а не использовать AJAX. Но зато можно темизировать каждую страницу фото, заполнять мета тэги и повысить кликабельность сайта. Для чего это нужно - решайте сами. и нужно ли вам это вообще. Тем не менее этот модуль имеет право на существование. Однако в нём есть один недостаток, скорее баг, нежели фича.

Проблемы с check_plain

Опубликовано 2014.06.17 в разделе Drupal.

Иногда при работе с сайтом вываливаются подобного рода ошибки:
Warning: htmlspecialchars(): Invalid multibyte sequence in argument в функции check_plain() (строка 1566 в файле /includes/bootstrap.inc).
Это возникает из-за того, что в функцию
  1. htmlspecialchars($text, ENT_QUOTES, 'UTF-8');
передана строка в кодировке, отличной от UTF-8.