Последние записи

Фикс неудачного запуска MySQL в OpenServer

mbaev 19.10.2016, 10:59

Иногда при запуске или перезапуске Open Server в логах возникает ошибка:

Не удалось запустить MySQL-x-x.

Это происходит в связи с тем, что не запущен демон mysqld.exe. Он находится в папке /modules/database/MySQL-x.x/bin/mysqld.exe, где x-x - это версия модуля mysql установленная в настройках Open Server'а.
open-server-mysql

Для подтверждения симптомов, можно попытаться запустить в консоли команду

  1. mysql

и получить ошибку

ERROR 2003 (HY000): Can't connect to MySQL server on localhost (10061)

Это сработает при условии, что у вас установлена переменная mysql в Windows-окружении.

Решение

Решение простое - нужно запустить mysql-демон. Это можно сделать вручную - найти его по адресу /modules/database/MySQL-x.x/bin/mysqld.exe

Или создать закладку в Open Server'е.

Подсветка измененных файлов в PhpStrom

mbaev 17.10.2016, 07:43
Tags

phpstorm-git

Если вы еще не работаете с Git в PhpStorm, но хотите начать, то вот статья, которая может быть полезной: Работа с Git в PhpStorm (JetBrains). Если уже начали, то вы знаете, что по умолчанию PhpStorm показывает только изменённые или добавленные файлы, не подсвечивая при этом, родительскую папку. Вот несколько способов улучшить процесс.

Отключение кэширования twig в Drupal 8

mbaev 16.10.2016, 13:58

cant-create-theme-in-drupal-8.jpg

По умолчанию, в Drupal 8 включено кэширование Twig шаблонов. Это создает определенные трудности при разработке тем: каждое изменение требует сбрасывания кэша, что рано или поздно приводит разработчиков в бешенство)

Конечно же, о нас уже позаботились и придумали механизмы упрощения разработки.

Мат в три хода

Для того, чтобы выключить кэш нужно:

Кнопка вставки кода и подсветка синтаксиса в CKEditor

mbaev 15.10.2016, 13:08

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

До недавнего времени с этим было сложно - приходилось устанавливать модули codefilter, geshifilter, как-то настраивать их в обход багов. Но теперь такая возможность есть и она активно используется на этом блоге, а теперь доступна и в комментариях.

Реализация достаточно простая и занимает, в общей сложности, от 5 до 20 минут, в зависимости от опыта и знаний настройщика.

Необходимые модули

Начнем с установки необходимых модулей:

  • GeSHi Filter for syntax highlighting. Известный многим, модуль, который позволяет подсвечивать синтаксис огромного количества языков. (на момент написания статьи, я использовал версию 8.x-1.0-beta1)

  • CodeButton. Модуль существует только в песочнице. Поэтому его можно клонировать с помощью гита:

Как разблокировать аккаунт после 5 неудачных попыток входа

mbaev 14.10.2016, 15:18

Наверное, каждый сталкивался с ошибкой при попытке авторизации с не валидными данными, которая по-английски звучит так

Sorry, there have been more than 5 failed login attempts for this account. It is temporarily blocked. Try again later or request a new password.

а по-русски

Аккаунт временно заблокирован по причине более чем 5 неудачных попыток входа. Попробуйте войти позже, или запросите новый пароль.

Это простая самооборона Друпала, которая активируется после 5 (по умолчанию) попыток входа. Таким образом, система не позволяет злоумышленникам забрутофорсить (англ. brute force. Cм. Полный перебор) сайт. Работает она достаточно просто: во время каждой авторизации, Друпал сохраняет ip-адрес пользователя, запоминая при этом, точную дату события и дату окончания "срока годности" попытки.

Вот некоторые нюансы:

  • По умолчанию "срок годности" составляет 1 земной час.
  • Количество возможных, неудачных попыток входа - 5.
  • Эти значения могут быть изменены.
  • Вместо ip-адреса может быть сохранено имя хоста.
  • Данные, у которых истек "срок годности" очищаются только по крону.
  • Вы можете войти в систему, в любом случае если пройдете процедуру "Сброса пароля"!

Вот еще один интересный факт:

Обновление представления (views) через ajax

mbaev 13.10.2016, 13:53

Заставить работать какую-либо вьюху с ajax не сложно. Достаточно зайти в настройки и установить параметр Use Ajax: Yes.
ajax-view

К сожалению, модуль Views не предоставляет JS API для программного обновления этой вьюхи. Поэтому, пишем свою функцию (комментарии в коде):

Как изменить союз условий в существующем запросе

mbaev 30.09.2016, 11:15

Предположим, вам необходимо выбрать все опубликованные ноды и автор которых - суперадмин. В SQL запрос должен выглядеть так:

  1. SELECT n.*
  2. FROM node n
  3. WHERE (n.STATUS = 1 AND n.uid = 1)

Сформировать такой запрос не составит труда.

Представление Watchdog

mbaev 28.09.2016, 11:27

Для тех кому не нравится стандартный вывод журнала (watchdog) в Drupal 8, представляю вьюху Watchdog. Она похожа на то, что по умолчанию предоставляет стандартный журнал, а также дополнительные плюшки:

  • Поле IP
  • Дата со временем (в стандартном только дата, времени нет)
  • Возможность сортировки по всем полям

Также осталась возможность фильтрации в том же виде. Главное преимущество заключается в том, что представление легко изменить: добавить поля, критерии фильтрации, изменить порядок отображения столбцов в таблице и остальные настройки предоставляемые модулем Views.

Есть и минусы:

  • Нет кнопки "Очистить журнал";
  • Нет столбца "Пользователь"
  • Уровень опасности выглядит менее красиво.

По этой причине представление Watchdog не заменяет текущее представление, а находится рядом с ним.

Красивое git дерево в консоли (терминале)

mbaev 27.09.2016, 13:07

Все кто работает с Git через какой-либо IDE, например, PhpStorm уже привыкли к виду
git-tree
и забыли как работать с Git через консоль. А, как говорила моя учительница: "Если не знать, да еще и забыть...".

В общем, PhpStom, конечно, штука хорошая, но чтобы посмотреть красивое дерево коммитов на удалённом сервере, к которому есть только ssh connect, PhpStorm не поможет. На этот случай можно воспользоваться следующей командой:

  1. git log --graph --pretty=oneline --abbrev-commit --all --decorate

Чтобы не забывать эту длинную команду, можно её запомнить:

Отладка less

mbaev 27.09.2016, 09:03

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

Обычно отладчик в браузере (в моём случае Mozilla Firefox) выглядит так:
debug-styles-css

Задача данной статьи помочь тем, кто все же решился использовать less для компиляции стилей и подсказать как же можно отлаживать стили и сразу, в отладчике браузера, видеть в каком less-файле написан стиль.
debug-styles-less

Итак, у нас есть проект и есть, скажем, такое дерево:

Как свернуть произвольный код в PHP Storm

mbaev 02.07.2016, 13:09
Tags

Этот мануал применим ко всем продуктам JetBrains (точно применим к RubyMine и WebStorm). Проверено на версии PHP Storm 9 и новее. Он посвящён, в первую очередь, тем, кто любит настраивать все "под себя" и получать удовольствие от программирования.
За несколько лет работы с PHPStorm'ом и RubyMine я достаточно хорошо изучил большинство возможностей этих систем.

К слову, последнее время я все больше и больше пишу о том как получать оргазм от работы с PHPStorm.

Группировка в блоке Structure

Недавно я начал заставлять себя привыкать к блоку в среде, который называется "Structure". Он позволяет быстро ориентироваться в больших файлах, предоставляя краткий список функций, констант, классов и т.д., находящихся в файле, а также даёт возможность поиска по объявлениям и их сортировки.
Но вот если хочется разбить функции в файле, что очень подходит для разработки под процедурные системы, такие как Drupal, то нужно лишь научиться создавать кастомные регионы.

Как создать дисплей

mbaev 30.05.2016, 11:43

По умолчанию, в Drupal'е есть несколько дисплеев для нод: teaser, full, default, rss,...
Создать дополнительный тип отображения нод очень просто:

Как программно авторизовать пользователя

mbaev 24.05.2016, 12:24

В Drupal'е очень легко авторизовать пользователя. Для этого нужно знать всего лишь User ID.

  1. $uid = 1;
  2. $account['uid'] = $uid;
  3. user_login_submit(array(), $account);

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