Создание сайта на Drupal 8

В этой серии статей мы разберем основы Drupal 8, начиная от установки и заканчивая небольшим практическим заданием. На данный момент(апрель 2015) восьмёрка ещё сыровата и модулей для неё мало, но знакомиться с ней уже давно пора.
Если вы ещё не работали с Drupal - лучше начинайте с 8, пока научитесь и поймёте что там к чему - система будет гораздо стабильнее.

Разработка модулей для Drupal 7

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

Логирование системы(что делать, если сервер упал вчера)

Для Ubuntu

sudo apt-get install atop

После этого atop будет складывать в var/log/atop снимки системы каждые 10 секунд.
И если ваш сервер упадет ночью, то вы сможете утром спокойно выполнить
atop -r /var/log/atop/atop_log_filename

и клавишами t и Shift+t покрутить историю. Если падение продолжалось более 10 секунд - то вы обязательно увидите что выжрало все ресурсы сервера и хотя бы станет понятнее в какую сторону копать дальше.
Например я увидел, что у меня занят весь swap и дисковые операции занимают 100% ресурсов.

Забанить бота bingbot

Забанить эту сволоту можно в к конфиге Nginx.
В директории server добавьте следующий код.

if ($http_user_agent ~ bingbot) {
    return 503;
}

После этого вашему серверу полегчает.
Да, не забываем сделать :
service nginx reload

Потом вы можете легко проверить, работает ли данное правило.
$opts = array(
 'http' => array('user_agent' => 'Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)')
);
$context = stream_context_create($opts);
$res = file_get_contents("your site url", false, $context);

Разбить строку по последнему пробелу

Тэги:

Допустим у нас есть строка

$content = 'В CMS Drupal есть много типов материалов, которые можно расширить полями различных типов.';

И стоит задача разбить строку на две подстроки по последнему пробелу.
Сразу напрашивается следующий код, но он не работает:
$content = preg_split("/[\s]{1}/", $content); 

По идее он должен разбить строку по первому пробелу, но разбивает он её по всем пробелам.

Придётся пойти более сложным путём, а именно:

//развернем строку задом наперед(реверс)

Views добавить group by для одного поля

Тэги:

В админке вьюсов группировка(называется агрегацией) отвратительная. Группирует все поля, а толку ноль. Уникализация выборки тоже не работает.
Классическая ситуация. Вывод нескольких материалов(например блог) и одного приаттаченного материала к каждому блогу(через entity reference). И если к блогу привязано например 3 материала - то благодаря join в запросе это блог будет выведен трижды.
Чтобы это побороть - нужно поальтерить запрос:

/**
 * Implements hook_query_alter().
 */
function mymodule_query_alter(QueryAlterableInterface $query) {

Селектор по атрибуту с [] в значении

Тэги:

Допустим у вас есть такая вёрстка:

<input type="hidden" name="field_main_image[und][0][fid]" value="152">

И вам нужно ява скриптом обратиться к этому инпуту по имени и забрать значение атрибута value.
Делается это так.
var input_value = $('[name=field_main_image\\[und\\]\\[0\\]\\[fid\\]]').attr('value')

Всё элементарно, но надо знать, что скобки экранируются двумя слэшами, а не одним.

Почему не срабатывает drupal_add_js

Тэги:

Периодически Друпал не подключает js файл, хотя вы корректно его подключили, файл физически существует и у него выставлены правильные права.
Гугл вам не скажет почему у вас не работает, а только 10 раз покажет одни и те же способы подключения js к форме, странице или блоку.
Приведу простой пример.
Допустим модуль best_form подключает js и css файлы к форме редактирования материала, путем альтера формы:

function best_form_form_node_form_alter(&$form, &$form_state)
{
    $form['#attached']['css'] = array(drupal_get_path('module', 'best_form') . '/theme/best.css');

Событие наведения и снятия курсора на jQuery

Тэги:

Всё достаточно просто.
Не забывайте подключать саму библиотеку jQuery

$(document).ready(function() {
        $('#element').hover(
        function(){ 
                 // навели курсор на объект
                 console.log('hover');
        },function(){
                // отвели курсор с объекта
                console.log('no hover');
        });
});

Продвижение в одноклассниках по 7.4.22

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