Drupal

Drupal divan1 чт, 10 янв 2019 - 00:30

 

Drupal (Друпал) — это система управления сайтом (CMS), а также среда для создания вебприложений (CMF).

Посредством этой системы можно строить сайты и вебприложения различного назначения и сложности. Интерфейс пользователя позволяет управлять сайтами на Drupal без знаний HTML, вебвёрстки и языков программирования. Drupal разрабатывается международной командой разработчиков, как программное обеспечение с открытыми исходными текстами, защищенными общественной лицензией GNU. Международный сайт проекта — drupal.org, информацию о Drupal на русском можно получить на drupal.ru

 

Drupal 8 Новичкам: Как облегчить старт разработки

Drupal 8 Новичкам: Как облегчить старт разработки divan1 чт, 11 окт 2018 - 23:11

Самое главное: разберитесь и установите Drupal через Composer. Лучше это сделать через drupal-project. Время, которое вы потратите на изучения этого процесса, с лихвой окупится в будущем.

  1. На время разработки переводите вашу систему в режим разработки. Если вы послушались первого совета, делается это одной командой в консоли: drupal site:mode dev Обратный переход в продуктивный режим: drupal site:mode prod "Режим" разработки выключает кэширование на сайте, включает отладку twig,...

 

Drupal 8: Включение отладки на время разработки

Drupal 8: Включение отладки на время разработки divan1 вт, 23 апр 2019 - 01:42

Если по каким-то причинам не удается через drupal консоль перевести сайт в режим разработки, то вручную это можно сделать так.

  1. Подправить файл sites/development.services.yml:
    parameters:
      http.response.debug_cacheability_headers: true
      twig.config:
        debug: true
        auto_reload: true
        cache: false
    services:
      cache.backend.null:
        class: Drupal\Core\Cache\NullBackendFactory

  2. Раскоментировать в файле sites/default/settings.php строки:

    if (file_exists($app_root . '/' . $site_path . '/settings.local.php')) {
      include $app_root . '/' . $site_path . '/settings.local.php';
    }

  3. Копировать файл sites/example.settings.local.php в sites/default/settings.local.php, и раскоментировать строки:
    $settings['cache']['bins']['render'] = 'cache.backend.null';
    $settings['cache']['bins']['dynamic_page_cache'] = 'cache.backend.null';

  4. Очистить кэш

Drupal, сброс пароля через SQL

Drupal, сброс пароля через SQL divan1 пн, 01 окт 2018 - 03:29

Для получения хэша вводим в консоль команду:

php core/scripts/password-hash.sh 'pa$$word'

 

Получаем на выходе:
password: pa$$word hash: $S$EQZWDlCcWRLDO0cpgfGbcdbJ90lY5EugOgl76CXhF40VncPSEinz

Выполняем SQL-запросы:

UPDATE users_field_data SET pass='$S$EQZWDlCcWRLDO0cpgfGbcdbJ90lY5EugOgl76CXhF40VncPSEinz' WHERE uid = 1;
DELETE FROM cache_entity WHERE cid = 'values:user:1';

Всё, логинимся с новым паролем.

PS Если пользователь был заблокирован после неудачных попыток ввода пароля и вы получаете сообщение - "There have been more than 5 failed login attempts for this account. It is temporarily blocked. Try again later or request a new password." Разблокировать пользователя можно удалив записи из таблицы flood:

DELETE FROM flood

Проблемы Drupal

Проблемы Drupal divan1 вс, 10 фев 2019 - 21:02

Проблема: Иногда бывает так, что после переноса сайта на хостинг, не применяются стили оформления темы.

Решение: на странице "Производительность"(/admin/config/development/performance) надо выключить объединение java и css файлов. Потом можно будет включить обратно.

 

Как сделать поле Model/SKU уникальным для feeds+uc_feeds

Как сделать поле Model/SKU уникальным для feeds+uc_feeds divan1 ср, 01 ноя 2017 - 16:55

Правим файл uc_feeds/uc_feeds.module, функция uc_feeds_feeds_processor_targets_alter(). Элемент массива $targets['model'] должен выглядеть так:
    $targets['model'] = array(
      'name' => t('UC: Model/SKU'),
      'callback' => 'uc_feeds_set_target',
      'description' => 'Ubercart:' . t('Model/SKU'),
      'optional_unique' => TRUE,
      'unique_callbacks' => array('uc_feeds_sku_mapper_unique'),
    );

Так же добавляем функцию обратного вызова:
function uc_feeds_sku_mapper_unique(FeedsSource $source, $entity_type, $bundle, $target, array $values) {
  $nid = db_query("SELECT nid FROM {uc_products} WHERE model = :model", array(':model' => $values[0]))->fetchField();
  return $nid;
}

Ошибка SQL при импорте товаров в Ubercart

Ошибка SQL при импорте товаров в Ubercart divan1 ср, 01 ноя 2017 - 03:49

Во время импорта товаров в Ubercart, при помощи модулей feeds+uc_feeds получаем ошибку:

SQLSTATE[22007]: Invalid datetime format: 1366 Incorrect decimal value: '' for column 'sell_price' at row 1

Для решения проблемы, я применил следующий костыль. В файле uc_feeds/uc_feeds.module находим функцию uc_feeds_set_target(). Добавляем в начало функции три строки, которые из массива с одним элементом делают простую переменную.

function uc_feeds_set_target($source, $node, $target, $value) {
  if (is_array($value) && sizeof($value)==1) {
      $value = $value[0];
  }
  if (!is_array($value)) {
    ...
  }

Небольшое пояснение:
Как видно, функция не работает с переменной $value в случае если она массив. Но самая засада кроется в методе FeedsProcessor->mapToTarget(). Именно из этого метода вызывается uc_feeds_set_target() и в нем содержится следующий код:

      ...
      // All target callbacks expect an array.
      if (!is_array($value)) {
        $value = array($value);
      }
      ...

ЗЫ Буду рад, если кто предложит более красивое решение, или укажет на моменты которые я не учел.

Модули DRUPAL

Модули DRUPAL divan1 чт, 10 янв 2019 - 00:31

Подборка моих модулей. Может когда-нибудь соберусь, и размещу их где положено, но пока так.

Может кому пригодится.

Лучшие модули для Drupal

Лучшие модули для Drupal divan1 вт, 14 ноя 2017 - 23:23

Подборка лучших модулей в своих категориях.

Мультимедиа

Slick

Это и слайдер, и карусель, и галерея одновременно. Может отображать различные виды контента, а не только изображения. Плюсом прекрасно работает на мобильных устройствах с тачскрином.
Демо сайт.
Сравнивал со следующими модулями: BxSlider, Field Slideshow, Galerie, Juicebox, jCarousel, Gallery formatter, FlexSlider и их производными с модулем Views.

Разметка страницы

Field Group

Позволяет группировать поля сущностей в отображениях и формах. На 2019.04.09 для работы с commerce+drupal8 необходимо:

  • использовать версию 8.3-dev;
  • написать новый модуль задающий хук - hook_field_group_content_element_keys_alter()

Готовый модуль в прицепе.

Display Suite

Задает расположение полей сущности по тому-же принципу как регионы на странице: насколько колонок, заголовок, подвал. Хорошая демка возможностей - https://youtu.be/5awFIQOMNKE

Twig Tweak

Добавляет много полезных функции и фильтров, которые можно использовать в шаблонах. Например можно вывести в любом месте блок, представление и даже отдельное поле любого узла. Мне он сильно помог, когда надо было объединить несколько блоков в один. Некоторые примеры использования доступны по ссылке на странице модуля.

Прицепы

Вложения Размер
commerce_fieldgroup.zip 884 байта

Модуль снятия материала с публикации после заданной даты

Модуль снятия материала с публикации после заданной даты divan1 пн, 26 ноя 2018 - 00:39

Очень простой модуль для Drupal 8. Позволяет  снимать с публикации материалы, у которых имеется поле с машинным именем - "field_datebefore". Тип поля должен быть "Дата и время".

Снятие с публикации производится во время выполнения задач CRON, при условии, что текущее время больше заданного в поле field_datebefore.

Прицепы

Вложения Размер
Модуль для Drupal 8 1.37 КБ

Текстовые фильтры для вставки в материалы карт 2Gis и Яндекс

Текстовые фильтры для вставки в материалы карт 2Gis и Яндекс divan1 пн, 26 ноя 2018 - 00:48

Маленький модуль, реализующий пару текстовых фильтров для Drupal8.

Подключаете фильтр к формату ввода. Перемещаете ближе к концу и все.

Фильтр для вставки объектов Яндекс карт. Формат:
[_yamap параметры-из-url-после-?_]

Фильтр для вставки объектов 2Gis карт. Формат:
[_2gis {параметры конструктора DGWidgetLoader()}_]

 

Прицепы

Вложения Размер
Модуль для Drupal 8 4.24 КБ
Модуль для Drupal 7 1.39 КБ