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

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) {
  // Override access callback. 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

DrupalАвтоматический редирект с http на https версию сайта

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

В .htaccess, перед

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_URI} !=/favicon.ico
RewriteRule ^ index.php [L]

добавляем:

RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

или такой вариант, если хотите исключить редирект на локальной версии сайта:

RewriteCond %{HTTPS} off
RewriteCond %{HTTP_HOST} !\.local$
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

DrupalСгруппировать два дисплея Views в табы (локальные задачи)

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

Есть два дисплея Views типа Page, например один выводит какие то ноды, а второй форму их сортировки с помощью DraggableViews. Нужно объединить представления в друпаловские табы:

DrupalПрограммный экспорт товаров в CSV

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

Пример экспорта товаров Drupal Commerce в CSV файл:

define('MODULENAME_CSV_DELIMITER', ';');
 
/**
 * Export form.
 */
function modulename_export_form($form, &$form_state) {
  $form['submit'] = array(
    '#type' => 'submit',
    '#value' => t('Run export'),
  );
 
  if (!empty($_SESSION['export_file_ready'])) {
    drupal_add_js('
      jQuery(function() {
        var link = document.createElement("a");
        link.download = "products-export.csv";
        link.href = "' . file_create_url('public://products-export.csv') . '";
        link.click();
      });

DrupalОбновить синонимы нод, при изменении синонима термина

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

Дано — материалы с полем "Категория". Синонимы материалов строятся на основе синонима выбранной категории, например по шаблону [node:field-category:url:path]/[node:title].

Задача — массово изменять синонимы нод, при изменении синонима термина.

Решение:

/**
 * Implements hook_form_FORM_ID_alter(): taxonomy_form_term.
 */
function modulename_form_taxonomy_form_term_alter(&$form, &$form_state) {
  if ($form['tid']['#value']) {
    $form['#submit'][] = 'modulename_batch_update_node_alias';

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) {