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

DrupalПрограммно добавить скидку к заказу

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

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

Пример добавления скидки в 500 руб. для заказов с числом товаров больше 5:

/**
 * Implements hook_commerce_order_presave().
 */
function MODULENAME_commerce_order_presave($order) {
  $order_wrapper = entity_metadata_wrapper('commerce_order', $order);
  $line_items_quantity = commerce_line_items_quantity($order_wrapper->commerce_line_items, commerce_product_line_item_types());
 
  if ($line_items_quantity > 5) {

PHPКоротко о CGI, FastCGI, PHP-FPM и mod_php

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

Решил навести в голове порядок о том, как работают вместе веб-сервер и PHP.

CGI

Common Gateway Interface, "общий интерфейс шлюза" — это стандарт, который описывает, как веб-сервер должен запускать прикладные программы (скрипты), как должен передавать им параметры HTTP-запроса, как скрипты должны передавать результаты своей работы веб-серверу. Прикладную программу взаимодействующую с веб-сервером по протоколу CGI принято называть шлюзом, хотя более распространено название CGI-скрипт или CGI-программа.

DrupalЗаменить сообщение о завершении заказа на свой .tpl.php файл

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

Два способа заменить сообщение о завершении заказа на свой .tpl.php файл.

Способ 1

Будет работать только из своего модуля.

MODULENAME.module:

/**
 * Implements hook_theme().
 */
function MODULENAME_theme() {
  return array(
    'commerce_checkout_completion_message' => array(
      'template' => 'commerce-checkout-completion-message',
      'variables' => array(
        'order' => NULL,
      ),
    ),
  );
}
 
/**
 * Implements hook_commerce_checkout_pane_info_alter().
 */
function MODULENAME_commerce_checkout_pane_info_alter(&$checkout_panes) {

DrupalСменить тип раскрытого фильтра с select на checkboxes

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

Пример программного изменения типа элемента с select на checkboxes в раскрытых фильтрах без использования модуля Better Exposed Filters:

/**
 * Implements hook_form_FORM_ID_alter(): views_exposed_form.
 */
function MODULENAME_form_views_exposed_form_alter(&$form, &$form_state) {
  if ($form['#id'] == 'views-exposed-form-myview') {
    $form['color']['#type'] = 'checkboxes';
    $form['color']['#element_validate'][] = 'MODULENAME_select_as_checkboxes_validate';
  }
}
 
/**
 * Checkboxes validate callback.
 */

DrupalТемизация форм

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

Пример темизации формы commerce_checkout_form_checkout:

1. Реализуем хук hook_theme():

function THEMENAME_theme() {
  return array(
    'commerce_checkout_form_checkout' => array(
      'render element' => 'form',
      'template' => 'commerce-checkout-form-checkout',
    ),
  );
}

DrupalНеобязательное одно из двух значений раскрытого фильтра с оператором BETWEEN

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

При использовании раскрытого фильтра Views с оператором Between (Между) нужно заполнять оба значения фильтра — и минимум и максимум, при этом нет возможности оставить одно значение пустым, чтобы Views автоматически превратил value BETWEEN min AND max в value >= min или value <= max.

Можно написать свой filter handler, но его придётся прописывать каждому полю самостоятельно.

Второй вариант, более универсальный:

1. В настройках запроса нужного Views прописать тег optional_between:

DrupalПрограммно вывести облако тегов

Опубликовано в
// Настройки
$vocabulary_vid = ID_СЛОВАРЯ;
$max_font_size = 40;
$min_font_size = 10;
 
// Получаем термины с количеством нод
$terms = db_query("
  SELECT tid, name, (
    SELECT COUNT(*) FROM {taxonomy_index} ti
    LEFT JOIN {node} n ON ti.nid = n.nid
    WHERE ti.tid = td.tid AND n.status = 1
  ) node_count FROM {taxonomy_term_data} td
  WHERE vid = :vid
  ORDER BY weight
", array(':vid' => $vocabulary_vid))->fetchAll();
 
// Находим термин с максимальным числом нод
$max_node_count = 0;
foreach ($terms as $term) {

РазноеНужно ли добавлять заголовок текущей страницы в хлебные крошки?

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

Практически все макеты сайтов попадающие мне на разработку содержат заголовок текущей страницы в хлебных крошках. Зачем? Понять сложно.

Решил провести микро исследование на эту тему — обошёл ТОП20 интернет магазинов России и вывел статистику:

DrupalИспользование в формах элемента <button type="submit">

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

Как уже писал ранее, в Form API доступны три вида кнопок:

<input type="submit" />
<input type="button" />
<input type="image" />

Если же в форме нужно использовать элемент <button type="submit">...</button>, то можно поступить так:

1. Определить шаблон button_button:

/**
 * Implements hook_theme().
 */
function THEMENAME_theme() {
  return array(
    'button_button' => array(
      'render element' => 'element',
    ),
  );
}
 
/**
 * Button theme function.

РазноеКак правильно писать ТЗ на создание сайта (видео)

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

Видео со школы вебмастеров от Яндекса:

начало лекции в 5:20

1. ТЗ: две буквы с большим потенциалом
2. Что нужно сделать, прежде чем садиться за ТЗ
3. Хорошее ТЗ
4. Кто должен писать ТЗ
5. Плохое ТЗ
6. Жизнь с ТЗ
7. ТЗ по ГОСТ: ад на Земле