Заметки по Drupal 8

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

Получить строчку из таблицы config
  1. //например конфиг block.block.bartik_tools
  2.  
  3. //вытянет всё
  4. $conf = \Drupal::config('block.block.bartik_tools')->get();
  5.  
  6. //покажет только элемент 'region'
  7. $conf = \Drupal::config('block.block.bartik_tools')->get('region');
  8.  
  9. //посмотреть
  10. kint($conf);
Программный вывод блока
  1. //id блока. Например system_powered_by_block,shortcuts или search_form_block
  2. $bid = 'system_powered_by_block';
  3. $block_manager = \Drupal::service('plugin.manager.block');
  4. $config = array();

Вхождение подстроки в JavaScript

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

Чтобы проверить вхождение одной строки в другую - следует использовать такой код. +1 используется из-за того, что вхождение может начинаться с нулевого символа строки
  1. var main_string = 'main string content';
  2. if(main_string.indexOf('string') + 1) {
  3. console.log('true');
  4. } else {
  5. console.log('false');
  6. }

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

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

Для Ubuntu
  1. sudo apt-get install atop
После этого atop будет складывать в var/log/atop снимки системы каждые 10 секунд. И если ваш сервер упадет ночью, то вы сможете утром спокойно выполнить
  1. atop -r /var/log/atop/atop_log_filename
и клавишами t и Shift+t покрутить историю. Если падение продолжалось более 10 секунд - то вы обязательно увидите что выжрало все ресурсы сервера и хотя бы станет понятнее в какую сторону копать дальше. Например я увидел, что у меня занят весь swap и дисковые операции занимают 100% ресурсов.

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

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

Забанить эту сволоту можно в к конфиге Nginx. В директории server добавьте следующий код.
  1. if ($http_user_agent ~ bingbot) {
  2. return 503;
  3. }
После этого вашему серверу полегчает. Да, не забываем сделать :
  1. service nginx reload
Потом вы можете легко проверить, работает ли данное правило.
  1. $opts = array(
  2. 'http' => array('user_agent' => 'Mozilla/5.0 (compatible; bingbot/2.0; +http://www.bing.com/bingbot.htm)')
  3. );
  4. $context = stream_context_create($opts);
  5. $res = file_get_contents("your site url", false, $context);

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

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

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

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

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

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

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

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

Допустим у вас есть такая вёрстка:
  1. <input type="hidden" name="field_main_image[und][0][fid]" value="152" />
И вам нужно ява скриптом обратиться к этому инпуту по имени и забрать значение атрибута value. Делается это так.
  1. var input_value = $('[name=field_main_image\\[und\\]\\[0\\]\\[fid\\]]').attr('value')
Всё элементарно, но надо знать, что скобки экранируются двумя слэшами, а не одним.

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

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

Периодически Друпал не подключает 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

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

Всё достаточно просто. Не забывайте подключать саму библиотеку jQuery
  1. $(document).ready(function() {
  2. $('#element').hover(
  3. function(){
  4. // навели курсор на объект
  5. console.log('hover');
  6. },function(){
  7. // отвели курсор с объекта
  8. console.log('no hover');
  9. });
  10. });

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

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

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