xandeadx.ru Блог музицирующего веб-девелопера

DrupalДобавить в мета-тег canonical номер текущей страницы

Опубликовано в

Модуль Metatag не позволяет с помощью токенов добавить в canonical номер текущей страницы. Создадим собственный токен [current-page:url:with-current-pager]:

/**
 * Implements hook_token_info().
 */
function modulename_token_info() {
  return array(
    'tokens' => array(
      'url' => array(
        'with-current-pager' => array(
          'name' => t('URL with current page number'),
          'description' => t('URL with current page number'),
        ),
      ),
    ),
  );
}
 
/**
 * Implements hook_tokens().
 */

DrupalУниверсальная очередь для выполнения произвольных функций

Опубликовано в

Часто хочется выполнить отложенно какие-то функции, без описания очереди в hook_cron_queue_info() и реализации worker callback-a. Сделать это можно несколькими строчками кода:

/**
 * Implements hook_cron_queue_info().
 */
function modulename_cron_queue_info() {
  $queues['universal_queue'] = array(
    'worker callback' => 'modulename_universal_queue_callback',
  );
  return $queues;
}
 
/**
 * Universal queue worker callback.
 */
function modulename_universal_queue_callback($data) {
  if (isset($data['file'])) {

DrupalBad Practices

Опубликовано в

Список худших практик в друпале, в противовес к Best Practices:

  1. Игнорирование coding standards. Самая распространённая ошибка как новичков, так и бывалых. Стандарты кодирования - первое что должен выучить друпал разработчик.

  2. Транслит в машинных именах. Когда разработчик называет что-то в духе novosti, field_razdel, razmeri, где-то умирает котик.

DrupalРазрешить сабмит формы с открытым автокомплитом (autocomplete)

Опубликовано в

В семёрке невозможно отправить форму с открытым автокомплитом ни нажатием на кнопку сабмита, ни клавишей Enter в поле ввода. Виновата в таком поведении функция Drupal.autocompleteSubmit(), которая навешивается на onsubmit. Чиним:

(function ($) {
  Drupal.autocompleteSubmit = function () {
    var $autocomplete = $('#autocomplete');
    if ($autocomplete.length) {
      var selected = $autocomplete.get(0).owner.selected;
      $autocomplete.get(0).owner.hidePopup();

DrupalРазрешить анонимам отправлять пользователям сообщения через их персональную контактную форму

Опубликовано в

В седьмом друпале не работает разрешение Use users' personal contact forms для анонимных пользователей. Решение:

/**
 * Implements hook_menu_alter().
 */
function MODULENAME_menu_alter(&$items) {
  /** @see contact_menu() */
  if (isset($items['user/%user/contact'])) {
    $items['user/%user/contact']['access callback'] = 'MODULENAME_user_contact_access';
  }
}
 
/**
 * Personal contact form access callback.
 * @see _contact_personal_tab_access()
 */
function MODULENAME_user_contact_access($account) {
  global $user;

DrupalЗаменить страницу управления материалами на свой Views

Опубликовано в

Способ заменить страницу admin/content своим представлением:

  1. Создаём представление типа Page.

  2. Указываем путь admin/content

  3. В настройках меню прописываем:

    Type = Normal menu entry
    Title = Content
    Menu = Managment
    Weight = -10

РазноеНастройка PhpStorm+Xdebug+OpenServer

Опубликовано в

Настроил Xdebug в PhpStorm? Напиши на хабр! (с) хаброкоммент

Настройка OpenServer

  1. В используемых версиях PHP открываем php.ini и редактируем настройки:
    zend_extension="%sprogdir%/modules/php/%phpdriver%/ext/php_xdebug.dll"
    xdebug.remote_enable = 1
    xdebug.remote_autostart = 0
    xdebug.remote_port = 9000
    xdebug.remote_connect_back = 1
    xdebug.profiler_enable = 0
    xdebug.profiler_enable_trigger = 1
    xdebug.profiler_output_dir="%sprogdir%/userdata/temp/xdebug/"
    xdebug.profiler_output_name = "cachegrind.out.%H%R"
    xdebug.idekey = ""
  2. Перезапускаем OpenServer.