среда, 5 августа, 2015 - 21:00

Цель

Создать блок с ссылками на соц сети.
Не давать возможность пользователям случайно удалить блок.
Удалить случайно разметку.

Создание модуля

Модуль будет располагаться по адресу "sites/all/modules/custom/custom_block_social_networks".
Для того что бы Drupal видел наш модуль необходимо создать файл с описание модуля "custom_block_social_networks.info" и файл с кодом модуля "custom_block_social_networks.module".

Файл: "custom_block_social_networks.info"

name = Custom block social networks

version = 1.0
core = 7.x

package = Custom

name - имя модуля.
version - версия модуля.
core - версия ядра drupal.
package - пакет в который будут сгруппированы модули.

Теперь на странице модули "admin/modules" можно увидеть наш модуль.
module custom custom_block_social_networks

Теперь можно приступать к коду самого блока.
Все блоки объявляется хуком "custom_block_info".
Блоки принято называть по маске "mymodule_block".

Создадим блок "custom_block_social_networks" с описанием "Custom block social networks".

Файл: "custom_block_social_networks.module"

/**
 * Implements hook_block_info()
 */
function custom_block_social_networks_block_info() {
  $blocks['custom_block_social_networks'] = array('info' => t('Custom block social networks'));

  return $blocks;
}

Для заполнения контента у блока используется хук "hook_block_view".
Через него проходят поочерёдно все наши блоки.
Название блока передаётся в аргументе $delta.

Файл: "custom_block_social_networks.module"

/**
 * Implements hook_block_view()
 */
function custom_block_social_networks_block_view($delta = '') {
  if ($delta == 'custom_block_social_networks') {
    $items = array(
      format_string('<a href="@link"><i class="fa fa-vk"></i></a>', array(
        '@link' => variable_get('custom_block_social_networks_vk', '')
      )),
      format_string('<a href="@link"><i class="fa fa-facebook"></i></a>', array(
        '@link' => variable_get('custom_block_social_networks_fb', '')
      )),
    );

    $block['content'] = theme('item_list', array('items' => $items));
  }

  return $block;
}

В коде используется функция "variable_get" она позволяет собирать данные из глобальных переменных, а "variable_set" соответственно для сохранения.
По этому название переменных должно быть по маске "mymodule_name".

Теперь у нас есть блок ссылками осталось добавить только форму для заполнения ссылок на социальные сети.
В этом нам поможет хук "hook_block_configure", работает он так же, как "hook_block_view".
Но оперирует формой нашего блока.

Файл: "custom_block_social_networks.module"

/**
 * Implements hook_block_configure()
 */
function custom_block_social_networks_block_configure($delta = '') {
  $form = array();

  if ($delta == 'custom_block_social_networks') {
    $form['custom_block_social_networks_vk'] = array(
        '#type' => 'textfield',
        '#title' => t('Link to vkontact'),
        '#default_value' => variable_get('custom_block_social_networks_vk', ''),
      );
      $form['custom_block_social_networks_fb'] = array(
        '#type' => 'textfield',
        '#title' => t('Link to facebook'),
        '#default_value' => variable_get('custom_block_social_networks_fb', ''),
      );
    }

    return $form;
  }

Теперь при редактировании блока мы увидим добавленных нами поля.
module custom custom_block_social_networks edit

Поля которые мы создали пока не сохраняются.
Сохранения полей нужно будет прописать отдельно через хук "hook_block_save".

Файл: "custom_block_social_networks.module"

/**
 * Implements hook_block_save()
 */
function custom_block_social_networks_block_save($delta = '', $edit = array()) {
  if ($delta == 'custom_block_social_networks') {
    variable_set('custom_block_social_networks_vk', $edit['custom_block_social_networks_vk']);
    variable_set('custom_block_social_networks_fb', $edit['custom_block_social_networks_fb']);
  }
}

При удалении нашего модуля не забываем почистить наши глобальные переменные (спасибо NIklan).

/**
 * Implements hook_uninstall().
 */
function custom_block_social_networks_uninstall() {
  variable_del('custom_block_social_networks_vk');
  variable_del('custom_block_social_networks_fb');
}

Теперь остаётся просто стилизовать через scss и блок готов.

файл: _block-custom.scss

#block-custom-block-social-networks-custom-block-social-networks {
  .item-list ul {
    @include susy-clearfix;
    margin: 0;
    padding: 0;
    list-style: none;
  }
  .item-list li {
    float: left;
    padding: 8px;
  }
}

На здоровье :)

Теги: 

Комментарии

Ещё следует создать файл MYMODULE.install

В котором прописать:

<?php

/**
 * Implements hook_uninstall().
 */
function MYMODULE_uninstall() {
  variable_del('custom_block_social_networks_vk');
  variable_del('custom_block_social_networks_fb');
}

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

Спасибо.
Дополню к статье как будет время.

Добавить комментарий

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.