Как использовать 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...

Benya

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

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

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

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

DrupalCampCIS'13 Drupal Commerce + ЯндексМаркет

Мой первый доклад, с которым я выступал на Друпал Кемп СНГ, прошедшим 24-25 августа. В своем докладе я попытался охватить и рассказать о возможностях Drupal Comemrce.

Benya

Как закрыть на обслуживание только часть сайта

Пример, как закрыть на обслуживание только часть сайта, например ноды определенного типа. Создаем свой модуль, и внутри файла module_name.module имплементируем хук hook_menu_site_status_alter:

/**
 * Implements hook_menu_site_status_alter()
 */
function example_menu_site_status_alter(&$menu_site_status, $path) {
  if ($node = menu_get_object()) {
    if ($node->type == 'article') {
      // Если пользователь имеет разрешение использовать сайт в режиме обслуживания,
      // то показываем ему сообщение, что сайт в...
Benya

Большие цены в Drupal Commerce

В Drupal Commerce имеется одна неприятная особенность, с которой может столкнуться каждый. Проблема заключается в том, что в базе данных у цен размер равен int(11). Но существует ряд стран, например Беларусь, где цена 30 000 000.00 и больше - вполне нормальное явление. И тут начинаются проблемы, при попытке оформить заказ с такой ценой - система безотказно будет информировать нас о том, что цена выходит за границы размера поля.

Чтобы исправить эту проблему, имплементируем хук...

Benya

Как программно создать компонент для Rules

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

Создание компонента начинаем с того, что создаем файл с названием example.rules_defaults.inc. В этом файле имплеменируем хук hook_default_rules_configuration():

Benya

Как вывести способы оплаты в виде таблицы в Drupal Commerce

Для того, чтобы вывести доступные способы оплаты заказа в виде таблицы в Drupal Commerce, необходимо добавить следующий код в свой модуль:

/**
 * Implements hook_form_FORM_ID_alter().
 */
function example_form_commerce_checkout_form_review_alter(&$form, &$form_state) {
  $header = array(
    'payment' => t('Payment'),
    'description' => t('Description'),
  );
  
  $checkout_pane = commerce_checkout_pane_load('commerce_payment');
  foreach ($form['commerce_payment']['payment_method']['#options'] as $key =...
Benya

Как создать дополнительную страницу в оформлении заказа в Drupal Commerce

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

  • page_id - машинное имя страницы, допускается использование строчных букв и цифр, а так же символов "-", "_"
  • title - название страницы, используемое при оформлении заказа
  • name - переводимое название страницы, используемое в административных страницах, а так же соответствует статусу заказа на данной странице, если не...
Benya