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

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

Опубликовано MBaev от 02.07.2016, 13:09

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

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

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

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

Tags

Обрезка текста с многоточием css

Опубликовано MBaev от 01.06.2016, 12:08

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

Tags

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

Опубликовано 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);

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

Работа с ssh

Опубликовано MBaev от 18.05.2016, 11:52

Обычно подключаться к серверу можно двумя способами: с помощью логина и пароля или с помощью ключа.

С первым способом все понятно: при соединении сервер спрашивает логин и пароль и вуаля!
drupalhosting

Со вторым способом все интереснее. Нужно:

  • Проверить поддерживает ли сервер соединение по ssh с помощью ключа
  • Создать ключ, который состоит их 2х частей: {key} и {key}.pub
  • Положить {key}.pub на сервер, с которым собираешься соединяться

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

Для того, чтобы объяснить компьютеру какой ключ нужно брать для подключения к северу достаточно создать файл config в папке ~/users/{username}/.ssh. Например, у меня: C:\Users\mbaev\.ssh. В этот файл записываем:

Tags

Изменение модального окна CTools

Опубликовано MBaev от 12.05.2016, 07:52

Модуль CTools, был написан программистом по имени Earl Miles. Он так же написал такие модули Views, Panels и другие. CTools предоставляет большое количество вспомогательных функций, которые упрощают жизнь программисту. На текущий момент у модуля CTools нет официальной страницы с документацией.

Это описание одной из фич модуля CTools, а именно изменение модального окна.

Простой вариант

Темизируем любое окно, вызванное ссылкой/кнопкой.

Красивая запись в watchdog

Опубликовано MBaev от 11.05.2016, 14:53

Когда пишется кастомный модуль, то обычно существует обработка ошибок с помощью watchdog или watchdog_exception. Стандартный вывод такого сообщения выглядит не информативно и мало-симпатично. Следующий пример обработки ошибки можно встретить достаточно часто:

Работа с git в PhpStorm. Rebase

Опубликовано MBaev от 04.05.2016, 18:54

На сегодняшний момент невозможно представить процесс разработки в команде без какой-либо системы контроля версий. В git'е существует две основных стратегии слияния веток:

  1. Merge. Делается путем объединения двух веток с созданием (необязательно) объединяющего коммита.
    Git merge strategy
  2. Rebase. Позволяет создавать неограниченное множество веток, которые в последствии, как правило, удаляются, а коммиты переносятся в master-ветку. При этом они могут быть сжаты в один коммит.
    rebase git
Tags

Как вытащить контекстные ссылки

Опубликовано MBaev от 28.04.2016, 10:26

Однажды я столкнулся с необходимостью вытащить все action ссылки и табы из нод и сделать из них контекстные ссылки, примерно так, как это делает модуль Contextual links. Этот модуль мне не нравится потому, что он не позволяет настроить отображение контекстных ссылок только в нодах.
Итак, у нас есть какая-то своя тема или модуль и этого достаточно, чтобы вывести красивое контекстное меню для нод.

contextual-links-collapsed contextual-links-expanded

Автоматическая компиляция css в PhpStorm

Опубликовано MBaev от 27.04.2016, 10:22

Сейчас активно используются три типа метаязыков: SCSS, SASS (что. в общем-то, является улучшенным SСSS) и LESS. Для того, чтобы работать с ними, не задумываясь о процессе компиляции в css нужно выполнить два шага:

  1. Установить компилятор
  2. Настроить PhpStorm

Так же, здесь есть и свои проблемы, но о них позже.

Установка компилятора

В интернете достаточно мануалов по установке компиляторов. Не буду заострять на них внимание, лишь кину пару ссылок на материалы по установке:

Настройка PhpStorm

Каждому нравится свой подход и свои настройки. В одно и тоже время PhpStorm для одного будет божественно настроенный, для другого - неприятный редактор. Я опишу один из способов настройки, которым пользуюсь сам.
Настраивая компилятор в PhpStorm'е, я преследовал цель безмятежной разработки тем и модулей в Drupal'е, а именно: при такой структуре каталогов

Tags

Работа с токенами. Часть 2

Опубликовано MBaev от 21.04.2016, 08:44

В предыдущей статье говорилось о том как работать с токенами, где были описаны простые варианты. Продолжим о более сложных, а именно следующие два:

  1. создание группы токенов;
    tokens-2.1

  2. добавление группы токенов в сущестующую группу;
    tokens-2.3

Создание группы токенов

Здесь достаточно объявить тип токена и наполнить его токенами.

Установка и настройка модуля Token Filter

Опубликовано MBaev от 19.04.2016, 09:23

Это памятка о том, как работать с модулем для Drupal 7 Token Filter, необходимым для обработки полей body в тексте материала. Например, он может понадобиться при особой работе с токенами.

Установка ни чем не отличается от стандартной установки модуля, поэтому о настройке: модуль Token Filter "закрепляется" за текстовым форматом, таким образом не следует переживать о производительности!

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

Работа с токенами. Часть 1

Опубликовано MBaev от 18.04.2016, 08:29

Немного о токенах

Здесь будет описано несколько вариантов работы с токенами. Токены предоставляет третий по популярности модуль Token. Токены - это специальные слова обрамленные квадратными скобками ("[", "]"), которые в некоторых случаях могут заменяться на смысловые значения. Например, если установить четвертый по популярности модуль pathauto, то в админке "Home » Administration » Configuration » Search and metadata » URL aliases" (admin/config/search/path/patterns) можно будет использовать токены для генерации человекочитабельных путей (алиасов) к страницам:
URL Patterns

Чтобы получить список токенов достаточно кликнуть на ссылку Browse available tokens (Показать список доступных токенов), после чего откроется всплывающее окно.

Как открыть сайт для локальной сети

Опубликовано MBaev от 12.04.2016, 07:53

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

Требования

  • Open Server
  • Настроенная локальная сеть
    Настроенной локальной сетью считается сеть, в которой 2 или более компьютеров могут обмениться файлами через расшаренные папки.
  • Установленный Drupal (любой версии)

Мы рассмотрим пример, где

Как подключиться к серверу через ssh. PHPStorm

Опубликовано MBaev от 11.04.2016, 13:41

Чтобы подключиться к серверу с помощью IDE PHPStorm нужно выполнить пару не сложных шагов, но для начала необходимо иметь:

  • Адрес сервера. Например, shiva.vps-private.net
  • Имя пользователя. Например, myUserName
  • Пароль или ssh-ключ
Tags

Как переопределить поведение ajax-ссылки

Опубликовано MBaev от 07.04.2016, 13:16

Многим известно, что в Drupal'е есть собственный ajax-фреймворк, который использует в качестве ответов, так называемые, команды. Сами запросы могут быть инициированы разными способами:

  1. Присвоив класс use-ajax на любой тэг (на стороне сервера или на стороне клиента, но перед инициализацией Drupal js части). В базовом использовании этого варианта есть обязательное условие - тэг должен иметь атрибут href содержащий путь, на который будет выполнен ajax запрос.
  2. Определив параметр #ajax в форме (на стороне сервера).
  3. Присвоив параметр use-ajax-submit форме (тэг form). Это что-то среднее между п.1 и п.2.
  4. Инициировав new Drupal.ajax() (на стороне клиента)

Изменение поведения ajax-обработчика

Рассмотрим пример с ссылкой, на которой есть класс use-ajax. Мы будет изменять состояние bootstrap кнопки на момент выполнения запроса - пример.
Наша вымышленная страница содержит такой тэг:

Работа с филдами и с типом материала

Опубликовано MBaev от 07.05.2015, 18:42

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

  1. $content_type = 'article';
  2. $field_name   = 'yandex_field';

Как удалить тип материала?

  1. node_type_delete($content_type);

Как удалить поле (field)?

Установка и настройка CKFinder

Опубликовано MBaev от 10.01.2015, 18:11

Мне показалась интересной задача настройки файлового браузера CKFinder (в связке с текстовым редактором CKEditor). При устновке с первого раза "что-то пошло не так" и пришлось немного разобраться. Хотя материала на эту тему достаточно, но русскоязычного топика я не нашел.

Установим модуль

Распаковать все это нужно следующим образом

Как программно получить ноду

Опубликовано MBaev от 05.11.2014, 10:17

Для программного получения (загрузки) ноды есть как минимум 2 пути и нужно понимать в каких случаях что использовать.

1-ый вариант (node_load, entity_load)

Использование функции node_load гарантирует безошибочную загрузку ноды, при этом если мы попытаемся 100 раз загрузить одну и туже ноду, то она будет загружена 100 раз со всеми вытекающими: загрузка данных из базы и формирование entity.(см. Upd: 07.11) В Drupal 7, entity интегрирован в ядро, по этому node_load(1) равнозначно entity_load('node', array(1))

Как создать свой модуль

Опубликовано MBaev от 03.11.2014, 11:20

Для создания своего модуля необходимо иметь 2 обязательных файла с расширениями .info и .module:

  1. example
  2.   |-example.info
  3.   |-example.module

Обязательными данными в этих файлах являются:

example.info
  1. name = example
  2. core = 7.x

Info-файл, как понятно из расширения, это всего лишь описательный файл, который может содержать также зависимости от других модулей или версии ядра, список подключаемых php файлов, и ссылку на страницу конфигурации модуля.
Исполнительный файл модуля может быть пустой, при этом сам модуль уже будет отображаться в списке модулей на странице "/admin/modules".

Пример создания страницы модуля

К примеру, создадим страницу на которой выведем сообщение о создании страницы.

Как заставить action link выполняться по ajax'у

Опубликовано MBaev от 24.10.2014, 12:04

Чтобы заставить ссылку, программно созданную, выполняться ajax'ом достаточно навешать на неё класс 'use-ajax', но в hook_menu() это сделать невозможно потому, что:

An array of options to be passed to l() when generating a link from this menu item. Note that the "options" parameter has no effect on MENU_LOCAL_TASK, MENU_DEFAULT_LOCAL_TASK, and MENU_LOCAL_ACTION items.

Предположим у нас есть ссылка:

Специфичность (приоритеты) в css

Опубликовано MBaev от 11.08.2014, 11:12

Таблица специфичности (приоритетов) стилей, как их рассчитывают браузеры. Иногда нужно знать для того, чтобы понимать стоит ли в данной ситуации пытаться переопределить стили навешанные на "id" стилями навешанными на класс.
Специфичность это некоторая условная величина, вычисляемая следующим образом. За каждый идентификатор (в дальнейшем будем обозначать их количество через a) начисляется 100, за каждый класс и псевдокласс (b) начисляется 10, за каждый селектор тега и псевдоэлемент (c) начисляется 1. Складывая указанные значения в определённом порядке, получим значение специфичности для данного селектора.

Tags