Друпалургия

Drupal: Как создать свой составной элемент формы

Пример создания элемента формы fullname с тремя полями - Фамилия, имя, отчество.

src/Element/FullnameElement.php

<?php   namespace Drupal\modulename\Element;   use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Render\Element\FormElement;   /** * @FormElement("fullname") */ class FullnameElement extends FormElement {   /** * {@inheritDoc} */ public function getInfo() { $class = get_class($this);   return [ '#input' => TRUE, '#process' => [ [$class, 'processElement'], ],

Читать дальше →

Похожие записи:

Категории: Друпалургия

Критические обновления Drupal 7 и Drupal 8 (SA-CORE-2019-005, SA-CORE-2019-006)

Drupal в рунете - чт, 18/04/2019 - 11:59

18 апреля командой безопасности Drupal были выпущены обновления, закрывающие критические уязвимости в ядре Drupal 7 и Drupal 8.

Необходимо в срочном порядке обновить ядро до версии 7.66, а также 8.6.15.

  • Drupal 8
  • Drupal 7
  • Есть вопрос
  • FAQ
  • 0 Thanks
    Категории: Друпалургия

    Drupal: Как из Javascript выполнить ajax запрос с помощью Drupal Ajax API?

    Пример выполнения ajax запроса на внутренний адрес path/to/controller:

    var ajax = new Drupal.Ajax(false, false, { url: Drupal.url('path/to/controller') }); ajax.execute();

    Контроллер должен вернуть набор команд ajax-фреймворка.

    Комментарии

    Похожие записи:

    Категории: Друпалургия

    Drupal: Динамический url ajax-ссылок

    После загрузки страницы для каждой ссылки с классом use-ajax создаётся объект Drupal.Ajax, в котором фиксируется адрес, на который по клику отправится ajax запрос. После создания этого объекта менять href ссылки уже бесполезно, надо вручную лезть в Drupal.ajax.instances и менять options.url у нужного объекта.

    Ниже пример того, как можно перед отправкой ajax запроса автоматически менять его адрес на значение атрибута ссылки data-ajax-url:

    (function ($, Drupal) {

    Читать дальше →

    Похожие записи:

    Категории: Друпалургия

    Drupal-школа #19: Компоненты Bootstrap для адаптивного сайта на Drupal

    Drupal в рунете - пт, 29/03/2019 - 16:32

    Пробуем различные компоненты Bootstrap на своем сайте на Drupal 8.

  • Drupal 8.*
  • Bootstrap
  • Bootstrap 3
  • Предлагаю решение
  • DrupalSib
  • 2 Thanks
    Категории: Друпалургия

    Drupal.ru ❤️ Crowdin

    Drupal в рунете - чт, 28/03/2019 - 16:19

    Для развития нашего сообщества и популяризации Drupal в рунете активисты пишут статьи про Drupal и смежные темы, а также переводят на русский интересные и полезные материалы с других языков.

    Подготовка качественного перевода — непростое дело. На помощь приходят сервисы управления и автоматизации переводов. Обычно их использование требует финансовых затрат, что может быть неудобно людям, делающим свой вклад безвозмездно.

    С радостью сообщаю, что мы получили бесплатную open-source лицензию Crowdin для перевода документации и статей для нашего сообщества.

    О платформе Crowdin

    Crowdin – инновационный облачный сервис для управления переводами и локализацией. Crowdin упрощает и ускоряет перевод, автоматизирует процесс локализации. Идеально подходит для agile-команд и локализации любого типа контента: программного обеспечения, мобильных и веб-приложений, видеоигр и веб-сайтов.

    Факты о компании
    • более миллиона зарегистрированных пользователей со 160+ стран мира;
    • более 79 000 проектов локализации;
    • основной инструмент компаний, которые хотят легко поддерживать свои продукты на нескольких языках и быстро добавлять новые;
    • позволяет работать со штатными переводчиками, фрилансерами и профессиональными переводческими агентствами;
    • поддерживает некоммерческие проекты с открытым исходным кодом;
    • обеспечивает удобным функционалом как маленькие проекты так и проекты с более чем 10 000 переводчиками.

    Я верю, что сотрудничество с Crowdin поможет нам значительно ускорить перевод документации Drupal и полезных статей на русский язык.

    В течение ближайшего времени мы подготовим все необходимое для совместной работы над переводами и разместим отдельный пост с дальнейшей информацией.

    Следите за новостями!

  • Предлагаю решение
  • Работа по переводам UI и документации
  • 3 Thanks
    Категории: Друпалургия

    Критические обновления Drupal 7 и Drupal 8 (SA-CORE-2019-004)

    Drupal в рунете - чт, 21/03/2019 - 11:03

    20 марта командой безопасности Drupal были выпущены обновления, закрывающие критические уязвимости в ядре Drupal 7 и Drupal 8.

    Необходимо в срочном порядке обновить ядро до версии 7.65, а также 8.6.13.

  • Drupal 8.*
  • Drupal 7.*
  • Есть вопрос
  • Безопасность
  • 0 Thanks
    Категории: Друпалургия

    Критические обновления Drupal 8 и контрибных модулей

    Drupal в рунете - сб, 16/03/2019 - 11:39

    14 марта командой безопасности Drupal были выпущены обновления, закрывающие критические уязвимости в ядре Drupal и контрибных модулях.

    Если вы используете модуль Views на вашем Drupal 7 сайте, вам нужно немедленно его обновить.

    Также необходимо в срочном порядке обновить ядро Drupal 8 до версии 8.6.11 или до версии 8.5.12 (если вы по какой-то причине не перешли на ветку 8.6)

    Следом за ними 15 марта были выпущены версии 8.6.12 и 8.5.13

    Ядро Drupal 7 обновлять не нужно.

  • Drupal 8.*
  • Drupal 7.*
  • Есть вопрос
  • FAQ
  • 0 Thanks
    Категории: Друпалургия

    Обратная связь с командой drupal.ru

    Drupal в рунете - пт, 15/03/2019 - 01:00

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

    Для связи с командой можно использовать личные сообщения. Ссылки на профили участников команды перечислены на странице «Контакты».

    А вопросы по использованию сайта drupal.ru и модерации теперь можно задавать в телеграм-бот @drupalrusupportbot.

  • Предлагаю решение
  • Сайт и проект Drupal.ru
  • 1 Thanks
    Категории: Друпалургия

    Проект drupal.ru переезжает на GitLab

    Drupal в рунете - ср, 13/03/2019 - 01:52

    Исходный код drupal.ru с момента его открытия размещался на GitHub, при этом в качестве инструмента CI использовался сервис zen.ci. К сожалению, некоторые технические моменты затрудняют деплой кода на dev- и live-серверы проекта.

    Мы решили перенести репозиторий на GitLab и воспользоваться встроенным в него GitLab CI. В наших личных проектах Gitlab и его CI показали себя отлично!

    Проект drupal.ru доступен по адресу https://gitlab.com/drupal.ru

    Пробный импорт репозитория из GitHub в GitLab прошел успешно. Теперь мы ожидаем, что участники сообщества, авторы тикетов (issue) и комментариев, создадут учетные записи в GitLab. Затем, приблизительно через неделю, мы сделаем повторный импорт репозитория, чтобы в GitLab отразилось авторство тикетов и комментариев.

    Если вы создавали тикеты и участвовали в дискуссиях в репозитории drupal.ru на GitHub, то, пожалуйста, зарегистрируйтесь в GitLab с теми же данными, что в GitHub.

  • Есть вопрос
  • Сайт и проект Drupal.ru
  • 5 Thanks
    Категории: Друпалургия

    Критические обновления Drupal 8 и контрибных модулей

    Drupal в рунете - чт, 21/02/2019 - 10:26

    20 февраля командой безопасности Drupal были выпущены обновления, закрывающие критические уязвимости в ядре Drupal и контрибных модулях.

    Если вы используете модули RESTful Web Services, JSON:API, Link, вам нужно немедленно их обновить.

    Также необходимо в срочном порядке обновить ядро до версии 8.6.10 или до версии 8.5.11 (если вы по какой-то причине не перешли на ветку 8.6)

    Ядро Drupal 7 обновлять не нужно.

  • Drupal 8.*
  • Drupal 7.*
  • Предлагаю решение
  • FAQ
  • 3 Thanks
    Категории: Друпалургия

    Благодарность активным участникам сообщества за вклад в 2018 году

    Drupal в рунете - чт, 21/02/2019 - 04:33

    Всем привет!

    С небольшим опозданием мы хотим поблагодарить участников за вклад, который они сделали в развитие нашего сообщества и Drupal в Рунете в 2018 году.

    Развитие Drupal, как и любого другого программного обеспечения с открытым исходным кодом, очень зависит от вклада, который делает каждый участник сообщества. Прошедший год принес много положительного нашему сообществу. Каждый день вы безвозмездно делились своим опытом и знаниями: в статьях и комментариях на сайте, в наших телеграм-чатах, во время встреч и на митапах.

    Мы хотим особенно отметить самых активных участников нашего сообщества и в знак признательности вручить памятные футболки.

    Активисты
    • Александр Василенко @VasyOK
    • Алексей Ещенко @dgastudio
    • Алексей Кузнецов @gun_dose
    • Андрей Постников @andypost
    • Андрей Токмаков @Andruxa
    • Батор Кореев @BatKor
    • Борис Шрайнер borisshrayner
    • Василий Лукасевич vlucas
    • Вадим Бардачев vbard
    • Геворг Мкртчян @ArmRus
    • Иван Абраменко @levmyshkin
    • Мирослав Ли miroslav-li
    • Надежда Лях @DivaDii
    • Никита Малышев @Niklan
    • Николай Шаповалов drup8
    • Семен Драгунов @whiesam
    • Ярослав Лушников @zvse

    При составлении списка учитывались опубликованные в 2018 году на нашем сайте статьи и комментарии, получившие наибольшее количество лайков, а также активность в основном телеграм-чате и чате для новичков.

    Команда сайта

    Мы также хотим поблагодарить прошлых и нынешних участников команды drupal.ru за помощь в развитии сайта:

    Будем надеяться, что ежегодное подведение итогов сообщества станет доброй традицией, а список активистов будет только пополняться.

    Дизайн футболки:

    Выражаем особую благодарность компании «Далее» за финансовую и организационную помощь в подготовке события! «Далее» — одно из ведущих digital-агентств России, активно поддерживает наше сообщество, и в частности, московскую drupal-группу, предоставляя свой офис для проведения встреч и мероприятий.

    Прошу упомянутых участников написать мне в личку или в телеграм для уточнения размера футболки и адреса доставки.

  • Есть вопрос
  • Сайт и проект Drupal.ru
  • 7 Thanks
    Категории: Друпалургия

    Обновление темы drupal.ru: отступы, размеры, шрифт, контекстное меню и др.

    Drupal в рунете - пн, 18/02/2019 - 01:00

    Второе большое обновление темы коснулось базового шрифта, основного цвета, полей и отступов, отображения материалов и комментариев, а также списков материалов.

    Из наиболее видимых изменений стоит отметить следующие:

    1. Размер шрифта в материалах увеличен до 16px для улучшения читаемости
    2. Базовым шрифтом установлен «IBM Plex Sans»
    3. Шрифтом для сниппетов кода выбран «IBM Plex Mono»
    4. Цвет ссылок в материалах установлен в значение #0678dd — это новый фирменный цвет drupal.ru
    5. Изменены цвета текста, заголовков в списках, ссылок материалов.
    6. Переработана страница материала
    7. Переработан список комментариев к материалу
    8. Переработано меню материала и комментария для улучшения пользовательского взаимодействия
    9. Переработано отображение таксономии материала
    10. Изменен внешний вид сниппетов.
    11. Изменен внешний вид цитат
    12. Переработаны списки материалов (страницы и блоки раздела «Трекер»)
    13. Переработана страница «Блог» в профиле пользователя
    14. В профиль пользователя добавлена страница «Комментарии», отображающая все комментарии пользователя

    Кардинальные изменения были внесены в php-, html- и lesscss-код шаблонов страниц, списков и элементов:

    1. Переработаны поля и отступы в материалах, комментариях, списках материалов, элементах для согласованности их внешнего вида. Размеры полей и отступов построены на базе сетки 5×5px.
    2. В шаблонах материала, комментария и списков для css-классов применена BEM-like нотация с состояниями вида `.is-*`.
    3. Унифицирован html- и lesscss-код, отвечающий за стили материалов, комментариев и списков.
    4. Там где возможно, стили были переписаны с использованием Flexbox и CSS Grid.
    5. Удалено большое количество устаревшего и неиспользуемого кода
    Скриншоты 1. Список материалов в блоке «Интересное» на главной странице

    2. Список материалов в блоке «Последние публикации» (мобильный)

    3. Список материалов на странице «Трекер» (десктоп)

    4. Список материалов на странице «Последние публикации»

    5. Материал с комментариями

    6. Страница профиля

    7. Список материалов пользователя

    8. Список комментариев пользователя

    Анимация 1. Новое меню материала (мобильный)


    Sorry, your browser doesn't support embedded videos,
    but don't worry, you can download it
    and watch it with your favorite video player!

    2. Новое меню комментария (мобильный)


    Sorry, your browser doesn't support embedded videos,
    but don't worry, you can download it
    and watch it with your favorite video player!

    Список проблем и багов, а также статус их исправления можно отслеживать в нашем репозитории в issue https://github.com/DrupalRu/drupal.ru/issues/1276

  • Есть вопрос
  • Сайт и проект Drupal.ru
  • 4 Thanks
    Категории: Друпалургия

    Layout Builder - новый подход к созданию страниц в Drupal.

    Drupal в рунете - сб, 16/02/2019 - 14:28


    Laoyut Builder - это один из модулей ядра Drupal, который появился в ветке 8.5 в списке экспериментальных модулей, сейчас в ветке 8.6 он по-прежнему экспериментальный, но уже уже не альфа, а бета и уже вполне пригоден к использованию, а движуха в issues даёт понять, что разработчики твёрдо нацелены сделать этот модуль стабильным.

    Зачем же нужен этот модуль? Он позволяет настраивать отображение любых сущностей с использованием Layout API,то есть берём шаблон (лэйаут) и вставляем в его регионы блоки. Помимо всех стандартных блоков (Block Content, Views и прочее) есть блоки с полями сущности. Пытливый читатель уже наверняка задался вопросом, зачем это всё, если есть Page Manager, Panels, Display suite и Panelizer? Ответ прост - перечисленные модули были популярны в 7 версии Drupal, а с выходом 8 версии эти модули наспех были портированы, в то время, как в ядре параллельно велась работа по созданию этого функционала с нуля, учитывая особенности архитектуры восьмёрки. Как итог - Page Manager на данный момент практически заброшен своими создателями, которые переключились на разработку Layout Builder. Разработчики Panelizer признают, что Layout Builder полностью заменяет его, и ведут разработку способов миграции с Panelizer на Layout Builder. Кроме того, интерфейс Page Manager и Display Suite выглядит совершенно дубовым для 2019 года. Раньше я во всех своих проектах использовал Page Manager и Panels и за это время уже надоело, что с выходом каждой минорной версии ядра Page Manager начинает глючить и приходится ставить всё новые патчи. К слову в моей заготовке composer.json было три патча для пэйдж менеджера, один для панелей и один для ядра, который был необходим для нормальной работы пэйдж менеджера. Использование Layout Builder позволило отказаться от всего этого.

    Перейдём к делу - как пользоваться модулем? Тут всё невероятно просто: нужно включить модуль, а затем включить его функционал на странице управления отображением нужной сущности:

    Как видно, у каждого режима отображения появляются две галочки - первая просто включает Layout Builder для данного типа сущности и вместо привычного списка полей появляется кнопка Manage Layout. Вторая галочка - наиболее интересная - она позволяет настраивать лэйаут для каждой сущности отдельно! Причём это не значит, что поставив её, скажем для статей, вам придётся постоянно собирать лэйаут каждой статьи. По умолчанию в каждой статье будет использован лэйаут, который вы настроите в Manage Layout, а при редактировании и просмотре статей будет просто ещё одна вкладка "Макет" (в английской версии Layout), где вы при необходимости можете настроить вывод отдельно взятой сущности.

    Страница редактирования макета выглядит так:

    Разделы (они же Sections) представляют из себя отдельные лэйауты. Тут очень важное преимущество перед Panels - можно поледовательно поставить в столбик несколько лэйаутов, в то время, как Panels позволяет использовать одновременно лишь один лэйаут. Как видно на картинке, один лэйаут добавлен, и можно добавить лэйаут до и после него. Когда лэйаутов много, можно вставлять лэйауты между ними, а также перетаскивать. Также можно перетаскивать блоки из региона в регион и из лэйаута в лэйаут. На картинке выбран двухколоночный лэйаут, поэтому горят две кнопки "Добавить блок" по одной в каждом регионе. Кстати, интересный момент, при вставке блоков с полями сущности можно настраивать форматтер поля как угодно - отображение лэйбла поля и все настройки, например, стиль изображения для картинок. Это позволяет одно поле выводить многократно разными способами.

    У некоторых лэйаутов есть настройки (см на рисунке надпись Configure Section). Всё зависит от того, как сделан сам лэйаут - у самых простых лэйаутов настроек вообще нет. Но я использую модуль Bootstrap Layouts, в котором у каждого лэйаута можно выбрать классы обёртки и классы регионов - там стандартные колоночные классы бустрапа, плюс классы оформления, плюс возможность добавить любые свои атрибуты, что порой очень полезно. Даже если вы не используете Bootstrap, я очень рекомендую вам посмотреть модуль Bootstrap Layouts, ведь вы по образу и подобию сможете сделать настраиваемые лэйауты и для вашего сайта. Ниже скрины настроек лэйаута и списка выбора блоков:
     

    Кнопка Create Custom Block заслуживает отдельного внимания - она создаёт обычный блок, но параметр reusable у него имеет значение FALSE. Это значит, что этот блок нельзя будет нигде повторно использовать, он не появится на странице "Пользовательские блоки" или "Схема блоков", а редактировать его можно будет только по "карандашику" из формы редактирования лэйаута. Если вы хотите использовать блоки повторно, то создате блок обычным способом через меню Структура - Схема блоков - Добавить блок и выберите этот блок из списка.

    Преимущества Layout Builder перед похожими модулями:

    1. Можно настраивать лэйаут как для типа сущности в целом, так и для отдельной сущности.

    2. Можно ставить несколько лэйаутов подряд.

    3. Более быстрый доступ к редактированию лэйаутов (по сравнению с Page Manager, где нужно было кликнуть 4 ссылки, чтобы добраться до страницы с перетаскиванием блоков) и в целом боле удобный UX.

    4. Более наглядный интерфейс - редактирование происходит в теме сайта по умолчанию, то есть все стили применяются сразу, а блоки при возможности показываются с нужным содержимым (иногда используются плэйсхолдеры, в зависимости от особенностей самих блоков). Также по субъективному ощущению - формы и ajax-коллбэки у Layout Builder работают значительно быстрее, чем у Page Manager.

    Ложка дёгтя.

    Обзор был бы нечестным, если бы не были затронуты недостатки.

    Первый недостаток: некоторые элементы интерфейса пока сыровато свёрстаны и могут "разваливаться" на некоторых темах. Но это очень легко решается, ведь для редактирования используется основная тема сайта, мне просто понадобилось добавить несколько строк CSS в свою тему, чтобы всё смотрелось хорошо.

    Второй недостаток: Layout Builder не может полностью заменить Page Manager, ведь лэйаут билдер - это просто настройка отображения сущностей, соответственно, нет возможности перекрыть существующий роут, создать разные варианты для разных ролей или создать страницу с несколькими аргументами. Правда для себя я этот вопрос решил через кастомный модуль, который создаёт ещё один тип Section Storage, который можно прикрепить к своей Config Entity, и вызвать в своём кастомном контроллере, но это вариант для очень продвинутых.

    Третий недостаток: модуль пока ещё экспериментальный, поэтому есть некоторые "детские болячки" и для некоторых вещей приходится ставить патчи, но насколько мне известно, часть этих "болячек" будут исправлены с выходом версии 8.7.

    Как бы то ни было, взвесив все за и против, по личному опыту использования уже более, чем на пяти проектах, я однозначно могу сказать, что Layout Builder значительно лучше, чем Page Manager.

    И напоследок пару советов, как использовать лэйауты более эффективно:

    1. Вы можете создать тип ноды, в которой не будет вообще никаких полей (даже Body можно выпилить), оставить только метатеги.Это позволит вам собирать произвольные страницы из произвольного набора блоков. Очень удобно для главной страницы, страниц-лэндингов и просто страниц с уникальным дизайном.

    2. Создавайте новые типы блоков подключайте лэйауты к ним, а потом используйте эти блоки в лэйаутах нод или терминов таксономии.

    2.1. Добавляйте в блоки параграфы. У меня есть тип "Блок с виджетами", у которого виджеты - это разные типы параграфов на выбор.

    3. По аналогии с "пустым" типом нод вы можете создать пустой тип блока, в который можете собирать другие блоки.

    Перечисленные методы позволят вам неограниченно вкладывать лэйауты в лэйауты, как результат, вам больше не понадобится создавать в теме 100500 шаблонов.

    Ссылка на оригинал статьи в моём блоге

  • Drupal 8.*
  • Предлагаю решение
  • FAQ
  • 7 Thanks
    Категории: Друпалургия

    Доклады для PHP Russia 2019

    Drupal в рунете - ср, 13/02/2019 - 13:39

    17 мая 2019 года в Москве пройдет конференция PHP Russia 2019. Организаторы и активисты конференции — сотрудники крупнейших российских и международных компаний, лидеры сообщества веб-разработчиков и различных тематических сообществ.

    Главные темы
    • Развитие экосистемы (сам PHP, стандарты, фреймворки, библиотеки, OpenSource)
    • Опыт крупных компаний, показывающий как можно использовать PHP для построения действительно сложных проектов используя современные подходы и лучшие практики.

    От организаторов поступило предложение организовать мини-митап в рамках конференции или подготовить доклады.

    Спикерам оплачиваются перелёты, размещение, участие и прочее.

    Подробная информация о конференции: https://phprussia.ru/2019

    .event-cover { margin-bottom: 1em; margin-left: 1em; } @media (max-width: 576px) { .event-cover { width: 100%; height: auto; display: block; margin-bottom: 1em; } }
  • Есть вопрос
  • Проекту нужна помощь
  • 2 Thanks
    Категории: Друпалургия

    Модуль Simple Comment Notify

    Drupal в рунете - сб, 19/01/2019 - 23:03

    У меня есть несколько личных проектов с небольшой посещаемостью и несколькими комментариями в неделю. Чтобы не отслеживать комментарии вручную (как вы знаете, иногда бывает и спам), я начал искать модуль для уведомления меня о новых комментариях. Кто еще помнит Drupal 7, то там был модуль ядра trigger, который позволял отправлять уведомления о новых комментариях, пользователях, материалах и т.д. В Drupal 8 в ядре такого модуля нет. Я отправился в гугл.

    Первое что гуглится по запросу "Drupal 8 admin comment notify" это конечно же модуль comment_notify, но если присмотреться к нему поближе, то окажется, что модуль не для администраторов, а для посетителей сайта. У нас, на друпал.ру, он тоже используется.

    rules я отбросил сразу, т.к. это слишком тяжеловесное решение для отправки email.

    Затем я нагуглил модуль simple_comment_email_notification, но он шлёт письма... сам себе, а именно на адрес указанный как ИСХОДЯЩИЙ АДРЕС в настройках сайта



    Непорядок, подумал я и отправился писать issue и прикладывать патч, чтобы слать не на адрес сайта, а на email админа. "Засунь свой патч себе в..." ответил мне немец, автор модуля.

    Следующим был comment_admin_notify, однако модуль выглядит как заброшенный. Пару коммитов в год плюс автор абсолютно игнорирует issue, патчи и присваивает авторство коммитов себе.

    Ну вы уже поняли, да? Да, я написал свой модуль :)

    Встречайте, Simple Comment Notify

    Я решил не ограничиваться только лишь отправкой админу и сделал форму настроек:



    Модуль может отправлять письма:

    • админу сайта (пользователю с uid=1)
    • группе пользователей, имеющим указанную роль (например роль "модератор")
    • на кастомный список адресов, если по какой-то причине вы не можете завести пользователя на сайте (или не хотите), а отправлять уведомления надо
    По просьбам трудящихся теперь можно отправлять уведомления в телеграм!

  • Drupal 8.*
  • Предлагаю решение
  • Программирование
  • 3 Thanks
    Категории: Друпалургия

    Модуль для call tracking

    Drupal в рунете - сб, 19/01/2019 - 16:50

    Выпустил недавно модуль в alpha версию, который предназначен для замены телефонов на сайте в зависимости от UTM меток. Он может быть полезен для директологов и SEOшников.
    Для настройки достаточно зайти на соответствующую страницу, и заполнить поля необходимыми значениями.
    Пример см. на рис. ниже

    Если появятся идеи или найдете баги, буду рад вашим issue и патчам на drupal.org

    Ссылка на модуль: https://www.drupal.org/project/calltracking
    Команда для composer: composer require drupal/calltracking

  • Drupal 8.*
  • Есть вопрос
  • Программирование
  • 4 Thanks
    Категории: Друпалургия

    Single Image - форматтер для вывода только первой картинки.

    Drupal в рунете - сб, 19/01/2019 - 14:42

    Недавно мы в нашей компании webxayc.by решили потихоньку начать выкладывать свои различные наработки в контриб.
    И вот первая ласточка - Single Image. Модуль решает всего одну задачу: иногда нужно вывести из поля с множеством картинок только первую, например в анонсах. Для этого модуль предоставляет форматтер поля Single Image Formatter, который унаследован от обычного ImageFormatter, но выводит только первую картинку. Как и в обычном форматтере картинок, можно выбрать стиль изображения и куда будет вести ссылка с картинки.

    Кроме того, в последней версии добавлен подмодуль single_image_formatter_media, который предоставляет форматтер Single Media Thumbnail, который делает всё то же самое, только для полей типа Media. Этот форматтер унаследован от стандартного MediaThumbnail.

    В общем, кому надо - пользуйтесь :) Никакого страха, никакого риска - модуль прошёл security review. Также, можете не переживать за производительность - модуль очень простой и не усложняет стандартные форматтеры, а скорее наоборот - немного их упрощает?

    PS: версия только для Drupal 8.
    PPS: в скором времени планируется выложить ещё несколько намного более интересных модулей.

  • Drupal 8.*
  • Предлагаю решение
  • Программирование
  • 4 Thanks
    Категории: Друпалургия

    Калькулятор на Drupal без программирования. Переходи на темную сторону силы! Познай мощь D7!

    Drupal в рунете - чт, 17/01/2019 - 04:22

    Товарищ https://drupal.ru/username/bumble у себя на сайте https://blogpost.pp.ua/drupal/93 рассмотрел возможность формы заказа чего нибудь на webform. А что если к этой форме приделать калькулятор? Ура, такая возможность есть благодаря модулю webform_calculator
    Модуль позволяет ставить на вебформу новое поле типа формула.

    Краткая инструкция

    У модуля есть 2 не очевидных момента:

    1. Обработка списков.

    Есть переменная {rayon}. Принимает значения в зависимости от того, что выбрано в списке поля район. Естественно несколько районов могут иметь одинаковое значение переменной. Если заполнять поле район так:

    3500|Дзержинский район
    3500|Индустриальный район
    3500|Ленинский район

    ...калькулятор не сможет высчитать формулу ибо требует для каждого значения списка отличное число. Выход - ставить нули после точки, т. е.:

    3500|Дзержинский район
    3500.0|Индустриальный район
    3500.00|Ленинский район 2. Ограниченное количество математических функций (и операторов).

    На момент поста используется dev версия модуля. В ней работает больше операторов по сравнению с текущей «зеленой» версией. Например оператор возведения в степень.

    Мне была необходима функция округления в большую сторону — ceil.
    Полез в файл модуля matheval.class.php и добавил ее в конец поддерживаемых функций так:

    <?php
    public $fb = array(  // built-in functions
            'sin','sinh','arcsin','asin','arcsinh','asinh',
            'cos','cosh','arccos','acos','arccosh','acosh',
            'tan','tanh','arctan','atan','arctanh','atanh',
            'sqrt','abs','ln','log','ceil'); /*вот она в конце*/
    ?>

    Всё! Новая функция работает. Она же из PHP.

    Результат тут.
    http://kapital-trans.ru/arenda-kran-borta-perm
    http://kapital-trans.ru/kran-bort-kamaz

    Полная инструкция.

    Если кто-то не понял как сделана форма заказа, привожу методичку ниже. Инструкция установки вебформы перекликается с рецептом bumble. ИТ профессионалы могут не читать.

    Задача

    Сделать калькулятор аренды техники. Единица техники (самосвал, трактор) — отдельная нода. Для рассчета используется поле Цена — целое число, разделители тысяч, преффикис, суффикс в настройках не заданы. Стоимость аренды техники зависит от:

    • района города — дальше дороже, потому что время на дорогу. Можно вбить район не из списка — тогда стоимость договорная.
    • количества часов на которые орендуется техника.
    Используются модули

    Модули должны быть как минимум включены. Обращаем внимание на дату поста если в скобках указана версия.
    colorbox
    colorbox_node
    webform
    webform_ajax (7.x-1.1+4-dev)
    webform_calculator (7.x-2.0-beta1+5-dev)
    webform_default_fields

    Компоненты вебформы

    Создаем материал типа webform с компонентами. Настройки компонентов чуть ниже.

    Техника/модель

    Район

    Почему после точки нули? Скроллим наверх и читаем краткую инструкцию.
    n|Другой — свой вариант района. Цена будет договорная :)

    Количество часов


    Время на дорогу. Вот и наша первая формула. Просто получает число из списка районов.

    Общее время. Еще одна формула.

    Стоимость с учетом дороги. Не так важно что делает функция ceil, как откуда эта функция берется. Крутим вверх к краткой инструкции п.2.
    Сообщение об ошибке — договорная, появляется если пользователь ввел район, которого нет в списке (или еще что-то ввел, что не предусмотрел разработчик).

    Настройки вебформы

    Эти обязательные. Остальные настройки — по желанию.

    Пустая вебформа

    Полученная форма работает. Но ничего не считает.

    Вьюха для вывода кнопки заказа на ноде.

    Все настройки полей и контекстных фильтров на скринах.

    Контекстный фильтр вьюхи

    Код кнопки

    Вбита формула
    <a class="colorbox-node" href="/arenda-tehniki?product=[title]&tzena=[field_prise]" rel="nofollow" data-inner-width="600" data-inner-height="620">Заказать</a>

    Тут:
    colorbox-node – класс от модуля Colorbox node
    arenda-tehniki — урл нашей вебформы. Если пилите по это методичке самое время вернуться на вебформу и задать его.
    ?product=[title]&tzena=[field_prise] — соприкосновение полей вьюхи с полями формулы на вебформе.
    rel="nofollow" — директива для сеонистов, которые не хотят индексировать форму по ссылке.
    data-inner-width="600" data-inner-height="620" — ширина и высота всплывающего окна. Можно не использовать.

    Вывод кнопки на ноде.

    Полученная вьюха — это блок. Выводим его в нужном месте. Можно вывести блок программно. Можно добавить условия в фильтр вюхи. Или даже использовать модуль context. Можно воспользоваться модулем viewfield и тогда не будет потребности в выводе блока.

    В результате это должно выглядеть как-то так:

    По нажатию на кнопку закзать должна появится вебформа в колорбоксе. Заголовок формы (На скрине «Аренда техники») можно убрать через CSS или правку шаблонов.

    Вывод конопки заказа для группы нод

    Вьюху из примера можно модифицировать, для вывода группы нод (скрин ниже). Кнопка Заказать будет передавать на вебформу данные со своей ноды. Настройки полей аналогичны предыдущей вьюхе. Только на этот раз поля не скрыты.

    Должно получиться что-то типа:

    Всё. Надеюсь кому-то пригодится. Кому что не понятно — спрашиваем. Критика разрешается.

  • Drupal 7.*
  • Предлагаю решение
  • Установка и настройка
  • 5 Thanks
    Категории: Друпалургия

    Страницы

    Подписка на Друпалургия сбор новостей - Друпалургия