Drupal 7

Как вывести webform в попапе

Сегодня мы поговорим о том, как вывести в попапе форму, создаваемую модулем Webform. Выводить ее мы будем с помощью Ctools modal API, более подробно я уже писал о нем в своем уроке Ctools modal API. Работа с модальными окнами.

Шаг 1. Создаем страницу, на которую будет посылаться ajax запрос:

/**
 * Implements hook_menu().
 */
function example_menu() {
  $items = array();
  $items['example/%ctools_js/%node'] = array(
    'page callback' => 'example_page_ajax',
    'page arguments' => array(1, 2),
    'access callback' => '_example_node_access',
    'access arguments' => array(2...
Benya

Как переопределить theme функцию в Drupal

Для того, чтобы переопределить theme фунцкию необходимо имплементировать хук hook_theme_registry_alter():

/**
 * Implements hook_theme_registry_alter().
 */
function example_theme_registry_alter(&$theme_registry) {
  // В массиве $theme_registry ключом является название theme функции, определяемое в hook_theme().
  // Массив содержит информацию, возращаемую hook_theme(), а так же дополнительные свойства, добавленные _theme_process_registry().

  // Переопределяем функцию theme_user_signature на theme_example_user_signature.
  $theme_registry['user_signature']['function'] = '...
Benya

Как связать свою сущность с Pathauto в Drupal

Тема сегодняшнего урока это интеграция сущности с модулем Pathauto. Чтобы решить поставленную задачу, необходимо, чтобы сущность поддерживала токены. Как это сделать читайте в моем предыдущем уроке поддержка токенов для своей сущности в Drupal.

И так, переходим от слов к делу, скачиваем модуль Pathauto, открываем product.info и добавляем зависимость:

dependencies[] = pathauto

Зависимость добавили, теперь открываем product.module и имплементируем хук hook_pathauto():

/**
 * Implements hook_pathauto().
 */
function product_pathauto($op) {
  if ($op == 'settings') {
    $settings =...
Benya

Поддержка токенов для своей сущности в Drupal

Сегодня мы поговорим о том, как сделать поддержку токенов для своей сущности. Как и в случае с предыдущим уроком, в котором я рассказывал как связать свою сущность с Views, у нас будет два способа решения данной задачи, один - с помощью модуля Entity API, второй - самописный код.

Способ 1

Данный способ очень прост, включаем модуль Entity tokens, который входит в комплект Entity API и поддержка токенов обеспечена.

Способ 2

Первым делом имплементируем хук hook_token_info():

/**
 * Implements hook_token_info().
 */
function product_token_info() {
  // Описываем новый тип токена.
  $...
Benya

Как связать сущность с модулем Views в Drupal

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

Способ 1

Сразу отмечу, что данный способ подходит только если сущность была создана с помощью модуля Entity API. В хуке hook_entity_info() для нашей сущности устанавливаем views controller class:

'views controller class' => 'EntityDefaultViewsController'

Хук стал выглядеть следующим образом:

/**
 * Implements hook_entity_info().
 */
function...
Benya

Как создать сущность в Drupal

В сегодняшнем уроке я расскажу, как написать свою сущность. Писать мы будем с применением модуля Entity API, поэтому нам необходимо скачать и установить этот модуль. Для примера, создадим сущность product. Файловая структура модуля у меня получилась такая:

  • product
    • product.info
    • product.install
    • product.module
    • product.pages.inc
    • product.admin.inc
    • js
      • product-fieldset-summaries.js
    • templates
      • product.tpl.php

1. Создаем информацию об модуле в product.info:

name = Product
description = Defines the product entity and associated features.
core = 7.x
dependencies[] = entity

2. В product....

Benya

Как использовать db_merge в Drupal

В Drupal, db_merge представляет собой сочетание Insert запроса и Update запроса. Если в таблице существует запись с заданным первичным ключом, то выполняется Update запрос, если нет - Insert запрос.

Простое слияние

db_merge('example')
  ->key(array('id' => $id))
  ->fields(array(
    'field_1' => $value_1,
    'field_2' => $value_2,
  ))
  ->execute();

В этом примере, мы выполняем запрос на примере таблицы "example". Мы указываем ключевое поле "id" со значением $id (->key(array('id' => $id))). Затем мы указываем массив со значениями полей:

->fields(array(
  'field_1' => $value_1...
Benya

Как загрузить сущность по значениям ее полей

В Drupal существует класс EntityFieldQuery, который позволяет получить сущность по значениям ее полей.

Пример использования

$query = new EntityFieldQuery();
// В качестве первого параметра допустимо передавать следующие значения:
// 'entity_type', 'bundle', 'revision_id' или 'entity_id'.
$query->entityCondition('entity_type', 'node');
// В качестве первого параметра допустимо передавать название колонки таблицы, 
// которая описана в hook_schema() в базовой таблице сущности.
$query->propertyCondition('type', 'article');
// В качестве первого параметра передаем название филда, в...
Benya