Друпалургия

Обновление Drupal (новая версия Drupal 8.4.2)

Drupal в рунете - пт, 03/11/2017 - 22:28


Примечания к выпуску:

Обновления с безопасностью отсутствуют.

Выпущена готовая к использованию версия Drupal 8.4.2

В этом релизе Drupal'а изменена, включенная в ядро, версия библиотеки ckeditor (с 4.7.3 до 4.7.2), в противном случае библиотека идентична Drupal 8.4.1

Если вы еще не обновили свой проект до версии ядра 8.4.0, то прочитайте об Drupal 8.4.0 перед обновлением.

Подробнее об этой версии Drupal

Ключевые слова: Drupal 8.4.2 Версия Drupal: Drupal 8.* Форумы: Безопасность 0 Thanks
Категории: Друпалургия

Обновление Drupal (новая версия Drupal 8.4.2)

Drupal в рунете - пт, 03/11/2017 - 22:28


Примечания к выпуску:

Обновления с безопасностью отсутствуют.

Выпущена готовая к использованию версия Drupal 8.4.2

В этом релизе Drupal'а изменена, включенная в ядро, версия библиотеки ckeditor (с 4.7.3 до 4.7.2), в противном случае библиотека идентична Drupal 8.4.1

Если вы еще не обновили свой проект до версии ядра 8.4.0, то прочитайте об Drupal 8.4.0 перед обновлением.

Подробнее об этой версии Drupal

Ключевые слова: Drupal 8.4.2 Версия Drupal: Drupal 8.* Форумы: Безопасность 0 Спасибо
Категории: Друпалургия

Обновление Drupal (новая версия Drupal 8.4.1)

Drupal в рунете - чт, 02/11/2017 - 13:59



Примечания к выпуску:

Обновления с безопасностью отсутствуют.

Выпущена готовая к использованию версия Drupal 8.4.1

Если вы еще не обновили свой проект до версии ядра 8.4.0, то прочитайте об Drupal 8.4.0 перед обновлением.

Ниже перечислены исправления, добавленные в Drupal 8.4.1 (в дополнение к десяткам других исправлений в Drupal 8.4.0):

Подробнее об этой версии Drupal

Ключевые слова: Drupal 8.4.1 Версия Drupal: Drupal 8.* Форумы: Безопасность 2 Thanks
Категории: Друпалургия

Обновление Drupal (новая версия Drupal 8.4.1)

Drupal в рунете - чт, 02/11/2017 - 13:59


Примечания к выпуску:

Обновления с безопасностью отсутствуют.

Выпущена готовая к использованию версия Drupal 8.4.1

Если вы еще не обновили свой проект до версии ядра 8.4.0, то прочитайте об Drupal 8.4.0 перед обновлением.

Ниже перечислены исправления, добавленные в Drupal 8.4.1 (в дополнение к десяткам других исправлений в Drupal 8.4.0):

Подробнее об этой версии Drupal

Ключевые слова: Drupal 8.4.1 Версия Drupal: Drupal 8.* Форумы: Безопасность 1 Спасибо
Категории: Друпалургия

Drupal: Установка Drupal 8 с помощью Composer и бубна

Всё чаще стали предлагать работу на Drupal 8, а я ещё толком за него и не брался. Дай думаю для начала создам свой профиль и переведу блог на восьмёрку, благо совсем недавно вышла версия 8.4.

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

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

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

Расширение промо-страницы why.drupal.ru

Drupal в рунете - чт, 26/10/2017 - 16:04
Вводная

В России несколько удивительная ситуация (мы про Битрикс преимущественно). В том плане, что проприетарные CMS, которые далеки от концепта "приятный читаемый и безопасный код", вкладываясь в маркетинг могут у широкой аудитории создавать мнение "Друпал и другие CMS использовать нельзя, они небезопасны, а Битрикс можно ". К сожалению эта позиция стала уже, видимо, "маркетинговой политикой партии", т.к. битрикс-продавцы замечены с этим аргументом в разных городах в разное время. Что иногда вызывает проблемы с продажей Drupal'а.

Что хотим

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

Кому это нужно

Всем кто продает Drupal. Собственно запрос на эту страницу поступил от Анатолия Полицина, одного из спонсоров самой промо-страницы (еще раз спасибо! https://drupal.dru.io/thanks ). Ну и всех донатеров на странице благодарностей обязательно разместим.

Как помочь?

Деньгами и/или временем.

Если собственные ресурсы времени на создание сейчас нет возможности выделить, а ждать пока найдется время или человек со временем не хочется - тут хорошо работает краудфандинг. Сильно повышает шанс что через месяц-два решение будет (вспомним тот же https://www.drupal.org/association/d8accelerate ).

http://yasobe.ru/na/drupalpromo - страница для сбора средств. https://github.com/dru-io/promo/issues - тут можно помочь кодом/контентом/дизайном.

Ключевые слова: drupal promotion Тип материала: Предлагаю решение Форумы: Решение проблем 2 Thanks
Категории: Друпалургия

Расширение промо-страницы why.drupal.ru

Drupal в рунете - чт, 26/10/2017 - 16:04
Вводная

В России несколько удивительная ситуация (мы про Битрикс преимущественно). В том плане, что проприетарные CMS, которые далеки от концепта "приятный читаемый и безопасный код", вкладываясь в маркетинг могут у широкой аудитории создавать мнение "Друпал и другие CMS использовать нельзя, они небезопасны, а Битрикс можно ". К сожалению эта позиция стала уже, видимо, "маркетинговой политикой партии", т.к. битрикс-продавцы замечены с этим аргументом в разных городах в разное время. Что иногда вызывает проблемы с продажей Drupal'а.

Что хотим

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

Кому это нужно

Всем кто продает Drupal. Собственно запрос на эту страницу поступил от Анатолия Полицина, одного из спонсоров самой промо-страницы (еще раз спасибо! https://drupal.dru.io/thanks ). Ну и всех донатеров на странице благодарностей обязательно разместим.

Как помочь?

Деньгами и/или временем.

Если собственные ресурсы времени на создание сейчас нет возможности выделить, а ждать пока найдется время или человек со временем не хочется - тут хорошо работает краудфандинг. Сильно повышает шанс что через месяц-два решение будет (вспомним тот же https://www.drupal.org/association/d8accelerate ).

http://yasobe.ru/na/drupalpromo - страница для сбора средств. https://github.com/dru-io/promo/issues - тут можно помочь кодом/контентом/дизайном.

Ключевые слова: drupal promotion Тип материала: Предлагаю решение Форумы: Решение проблем 2 Спасибо
Категории: Друпалургия

Ошибки Drush в Drupal 8 и как их лечить

Drupal в рунете - вт, 24/10/2017 - 22:05

Если вы работаете с Drupal и видите ошибки при выполнении Drush команд похожие на эту:

PHP Fatal error:  Declaration of Drush\Command\DrushInputAdapter::hasParameterOption() must be compatible with Symfony\Component\Console\Input\InputInterface::hasParameterOption($values, $onlyParams = false) in /Applications/DevDesktop/tools/vendor/drush/drush/lib/Drush/Command/DrushInputAdapter.php on line 27

Fatal error: Declaration of Drush\Command\DrushInputAdapter::hasParameterOption() must be compatible with Symfony\Component\Console\Input\InputInterface::hasParameterOption($values, $onlyParams = false) in /Applications/DevDesktop/tools/vendor/drush/drush/lib/Drush/Command/DrushInputAdapter.php on line 27
Drush command terminated abnormally due to an unrecoverable error.   [error]
Error: Declaration of
Drush\Command\DrushInputAdapter::hasParameterOption() must be
compatible with
Symfony\Component\Console\Input\InputInterface::hasParameterOption($values,
$onlyParams = false) in
/Applications/DevDesktop/tools/vendor/drush/drush/lib/Drush/Command/DrushInputAdapter.php,
line 27

Причиной является то, что в Drupal minor релизе (8.4.х) компоненты Symfony были обновлены до версии 3.2.
Это вызывает конфликт, который исправляется обновлением Drush до версии 9. Для этого нужно выполнить следующую команду:

composer require drush/drush:9.*

Оригинал здесь

Ключевые слова: drupal 8 Тип материала: Предлагаю решение Версия Drupal: Drupal 8.* Drupal 7.* Форумы: Решение проблем 2 Thanks
Категории: Друпалургия

Ошибки Drush в Drupal 8 и как их лечить

Drupal в рунете - вт, 24/10/2017 - 22:05

Если вы работаете с Drupal и видите ошибки при выполнении Drush команд похожие на эту:

PHP Fatal error:  Declaration of Drush\Command\DrushInputAdapter::hasParameterOption() must be compatible with Symfony\Component\Console\Input\InputInterface::hasParameterOption($values, $onlyParams = false) in /Applications/DevDesktop/tools/vendor/drush/drush/lib/Drush/Command/DrushInputAdapter.php on line 27

Fatal error: Declaration of Drush\Command\DrushInputAdapter::hasParameterOption() must be compatible with Symfony\Component\Console\Input\InputInterface::hasParameterOption($values, $onlyParams = false) in /Applications/DevDesktop/tools/vendor/drush/drush/lib/Drush/Command/DrushInputAdapter.php on line 27
Drush command terminated abnormally due to an unrecoverable error.   [error]
Error: Declaration of
Drush\Command\DrushInputAdapter::hasParameterOption() must be
compatible with
Symfony\Component\Console\Input\InputInterface::hasParameterOption($values,
$onlyParams = false) in
/Applications/DevDesktop/tools/vendor/drush/drush/lib/Drush/Command/DrushInputAdapter.php,
line 27

Причиной является то, что в Drupal minor релизе (8.4.х) компоненты Symfony были обновлены до версии 3.2.
Это вызывает конфликт, который исправляется обновлением Drush до версии 9. Для этого нужно выполнить следующую команду:

composer require drush/drush:9.*

Оригинал здесь

Ключевые слова: drupal 8 Тип материала: Предлагаю решение Версия Drupal: Drupal 8.* Drupal 7.* Форумы: Решение проблем 2 Спасибо
Категории: Друпалургия

Drupal 8 -> Блоки и конфигурация

Drupal в рунете - вт, 24/10/2017 - 22:04

Block API в Drupal 8 была изменена таким образом, что сейчас блоки являются плагинами(plugins) и сущностями(entities) одновременно. Блоки в Drupal 8 совмещают в себе две разных API структуры: Block Plugin API, которое является автономным повторно используемым API, и Block Entity API, которое представляет собой конкретный вариант использования блока и управление его видимости. Это означает, что блоки теперь являются объектами с полями и работают с новой системой плагинов введенной в Drupal 8. То есть теперь Вы можете создавать новые сущности, добавлять в них поля, и отображать их по разному.

Это изменение позволяет разработчикам использовать тот же самый блок в разных регионах, что было невозможно без дополнительных модулей до Drupal 8. По сути, это позволяет Вам создать много экземпляров того же блока. Также, Вы можете делать это когда Вы добавляете блок используя админ интерфейс.

Далее в этой статье мы будем использовать модуль block_example из проекта Examples.

Блоки в Drupal 8

Вместо использования до 4-х разных хуков, чтобы определить блок (как это делалось в Drupal 7), система плагинов позволяет сделать следующее:

  • Использовать один файл для каждого блока.
  • Если у Вас есть новый блок, то Вы можете скопировать и вставить содержимое файла в новый файл и обновить метаданные и реализацию, и Вы получите новый блок.
  • Вместо работы с 4-я разными функциями в четырех разных местах, в одном или двух файлах, Вам нужен только один файл для каждого блока.
  • Вся необходимая логика находиться под рукой.
  • Метаданные объявляются в том же месте.
  • Вам не прийдется переходить в какой-либо файл и объявлять путь к Вашему классу, так-как есть автозагрузка.
  • Все содержится и инкапсулируется в одном файле.
Создание простого блока

В проекте Examples Вы найдете модуль block_example, который содержит три примера для разных типов блоков в директории src/Plugin/Block. Мы попробуем протестировать самый простой пример в котором создается пустой блок. Новый блок называется ExampleEmptyBlock, и его реализация находится в файле ExampleEmptyBlock.php.

Классы и аннотации

Все файлы классов должны начинаться с объявления пространства имен(namespace) класса. После создания пространства имен для класса мы расширим класс ядра Drupal BlockBase для создания класса ExampleEmptyBlock. С этим мы можем использовать Drupal аннотацию, которая появилась с версии Drupal 8.

Общие PHP аннотации - это закомментированный текст, который позволяет автоматически находить мета-данные и информацию, относящуюся к файлу класса. Пример описанный выше содержит аннотации специально для блока Example: empty block, размещенные во втором комментарии. Используя аннотации, мы сообщаем Drupal-у, что мы хотим зарегистрировать новый тип блока (@Block), с id example_empty и административным названием Example: empty block, что пройдет через систему переводов перед использованием в системе.

Аннотация {@inheritdoc} может быть использована в классе, когда вы переопределяете его функцию. Эта аннотация сообщает системе, что необходимо использовать документации класса-родителя.

Обратите внимание, что Drupal не сможет найти блок до тех пор, пока не будет правильной аннотации.

Это расширяет класс BlockBase в наш ExampleEmptyBlock, внутри которого мы реализуем метод build(). Это один из наиболее важных методов, так-как он возвращает массив готовый для рендера и вывода блока.

Очистите все кэши, перейдите на страницу конфигурации /admin/structure/block и кликните на Place Block для выбора Вашего нового блока.

Добавляем форму конфигурации к блоку

Теперь мы знаем как создать новый тип блока для повторного использования на странице конфигурации блоков, теперь самое время изучить как использовать API для создания формы конфигурации блока. Эта новая настрой позволит Вам использовать пользовательский интерфейс для того, чтобы задать строку, которая будет выводиться в теле блока.

Дополнительные настойки конфигурации обрабатываются следующим образом:

  • Используя метод blockForm(), в котором Вы можете добавить элементы к получаемому массиву $form.
  • Используя метод blockSubmit() где вы сможете сохранить данные введенные пользователем.
  • Используя метод defaultConfiguration(), который задает значения конфигурации по умолчанию, отображаемые пользователю в момент первого открытия конфигурации.
Создание блока для формы

В этом примере мы будем использовать модуль block_example из проекта Examples. Код конфигурируемого блока размещается в файле block_example/src/Plugin/Block/ExampleConfigurableTextBlock.php.

Давайте рассмотрим новые возможности и функции:

  • Избегайте глобальных функций
    В Drupal 8 каждая часть кода содержит в себе все что может нам понадобиться. Это означает, что большинство функций содержатся в классах вместо глобальной видимости, то есть функции l() или t(), которые повсеместно использовались в Drupal 7 больше не рекомендованы. Их функциональность предоставляется классами через систему, называемую внедрение зависимости(dependency injection), которую мы обсудим в отдельной статье.
  • Расширение базовых классов
    Большинство компонентов, таких как блоки и контроллеры, используют шаблон в котором мы расширяем базовый класс. Базовый класс содержит большинство необходимого функционала, как например функцию t(). По этой причине, когда это возможно, полезно расширять базовый класс.

    В нашем примере мы создаем блок, который расширяет существующий класс BlockBase, что позволяет использовать метод класса $this->t(), делающий то же самое, что и функция t() в Drupal 7. Это дает нам возможность получить доступ к функции t() через вызов метода $this->t()

  • Трейты
    По сути трейт выполняет ту же роль, что и include, которая часто использовалась в Drupal 7. Он предоставляет дополнительные методы, которые могут быть включены в любой класс. Включая StringTranslationTrait в BlockBase, мы можем использовать любые методы трейта StringTranslationTrait как будто они являются частью BlockBase.

При написании статьи использовались следующие материалы:

Тип материала: Предлагаю решение Версия Drupal: Drupal 8.* Drupal 7.* Форумы: Программирование 3 Thanks
Категории: Друпалургия

Drupal 8 -> Блоки и конфигурация

Drupal в рунете - вт, 24/10/2017 - 22:04

Block API в Drupal 8 была изменена таким образом, что сейчас блоки являются плагинами(plugins) и сущностями(entities) одновременно. Блоки в Drupal 8 совмещают в себе две разных API структуры: Block Plugin API, которое является автономным повторно используемым API, и Block Entity API, которое представляет собой конкретный вариант использования блока и управление его видимости. Это означает, что блоки теперь являются объектами с полями и работают с новой системой плагинов введенной в Drupal 8. То есть теперь Вы можете создавать новые сущности, добавлять в них поля, и отображать их по разному.

Это изменение позволяет разработчикам использовать тот же самый блок в разных регионах, что было невозможно без дополнительных модулей до Drupal 8. По сути, это позволяет Вам создать много экземпляров того же блока. Также, Вы можете делать это когда Вы добавляете блок используя админ интерфейс.

Далее в этой статье мы будем использовать модуль block_example из проекта Examples.

Блоки в Drupal 8

Вместо использования до 4-х разных хуков, чтобы определить блок (как это делалось в Drupal 7), система плагинов позволяет сделать следующее:

  • Использовать один файл для каждого блока.
  • Если у Вас есть новый блок, то Вы можете скопировать и вставить содержимое файла в новый файл и обновить метаданные и реализацию, и Вы получите новый блок.
  • Вместо работы с 4-я разными функциями в четырех разных местах, в одном или двух файлах, Вам нужен только один файл для каждого блока.
  • Вся необходимая логика находиться под рукой.
  • Метаданные объявляются в том же месте.
  • Вам не прийдется переходить в какой-либо файл и объявлять путь к Вашему классу, так-как есть автозагрузка.
  • Все содержится и инкапсулируется в одном файле.
Создание простого блока

В проекте Examples Вы найдете модуль block_example, который содержит три примера для разных типов блоков в директории src/Plugin/Block. Мы попробуем протестировать самый простой пример в котором создается пустой блок. Новый блок называется ExampleEmptyBlock, и его реализация находится в файле ExampleEmptyBlock.php.

Классы и аннотации

Все файлы классов должны начинаться с объявления пространства имен(namespace) класса. После создания пространства имен для класса мы расширим класс ядра Drupal BlockBase для создания класса ExampleEmptyBlock. С этим мы можем использовать Drupal аннотацию, которая появилась с версии Drupal 8.

Общие PHP аннотации - это закомментированный текст, который позволяет автоматически находить мета-данные и информацию, относящуюся к файлу класса. Пример описанный выше содержит аннотации специально для блока Example: empty block, размещенные во втором комментарии. Используя аннотации, мы сообщаем Drupal-у, что мы хотим зарегистрировать новый тип блока (@Block), с id example_empty и административным названием Example: empty block, что пройдет через систему переводов перед использованием в системе.

Аннотация {@inheritdoc} может быть использована в классе, когда вы переопределяете его функцию. Эта аннотация сообщает системе, что необходимо использовать документации класса-родителя.

Обратите внимание, что Drupal не сможет найти блок до тех пор, пока не будет правильной аннотации.

Это расширяет класс BlockBase в наш ExampleEmptyBlock, внутри которого мы реализуем метод build(). Это один из наиболее важных методов, так-как он возвращает массив готовый для рендера и вывода блока.

Очистите все кэши, перейдите на страницу конфигурации /admin/structure/block и кликните на Place Block для выбора Вашего нового блока.

Добавляем форму конфигурации к блоку

Теперь мы знаем как создать новый тип блока для повторного использования на странице конфигурации блоков, теперь самое время изучить как использовать API для создания формы конфигурации блока. Эта новая настрой позволит Вам использовать пользовательский интерфейс для того, чтобы задать строку, которая будет выводиться в теле блока.

Дополнительные настойки конфигурации обрабатываются следующим образом:

  • Используя метод blockForm(), в котором Вы можете добавить элементы к получаемому массиву $form.
  • Используя метод blockSubmit() где вы сможете сохранить данные введенные пользователем.
  • Используя метод defaultConfiguration(), который задает значения конфигурации по умолчанию, отображаемые пользователю в момент первого открытия конфигурации.
Создание блока для формы

В этом примере мы будем использовать модуль block_example из проекта Examples. Код конфигурируемого блока размещается в файле block_example/src/Plugin/Block/ExampleConfigurableTextBlock.php.

Давайте рассмотрим новые возможности и функции:

  • Избегайте глобальных функций
    В Drupal 8 каждая часть кода содержит в себе все что может нам понадобиться. Это означает, что большинство функций содержатся в классах вместо глобальной видимости, то есть функции l() или t(), которые повсеместно использовались в Drupal 7 больше не рекомендованы. Их функциональность предоставляется классами через систему, называемую внедрение зависимости(dependency injection), которую мы обсудим в отдельной статье.
  • Расширение базовых классов
    Большинство компонентов, таких как блоки и контроллеры, используют шаблон в котором мы расширяем базовый класс. Базовый класс содержит большинство необходимого функционала, как например функцию t(). По этой причине, когда это возможно, полезно расширять базовый класс.

    В нашем примере мы создаем блок, который расширяет существующий класс BlockBase, что позволяет использовать метод класса $this->t(), делающий то же самое, что и функция t() в Drupal 7. Это дает нам возможность получить доступ к функции t() через вызов метода $this->t()

  • Трейты
    По сути трейт выполняет ту же роль, что и include, которая часто использовалась в Drupal 7. Он предоставляет дополнительные методы, которые могут быть включены в любой класс. Включая StringTranslationTrait в BlockBase, мы можем использовать любые методы трейта StringTranslationTrait как будто они являются частью BlockBase.

При написании статьи использовались следующие материалы:

Тип материала: Предлагаю решение Версия Drupal: Drupal 8.* Drupal 7.* Форумы: Программирование 2 Спасибо
Категории: Друпалургия

Drupal 8 в 2 шага

Drupal в рунете - вт, 24/10/2017 - 21:59

Drupal 8 - это последняя стабильная версия Drupal, современная, которая использует PHP 5.4+, REST совместимая, объектно-ориентированная. Концепция осталась прежней, но подход изменился. Drupal 8 использует возможности объектно-ориентированного программирования(ООП) для большинства подсистем, благодаря фреймворку Symfony 3.

Как мне объявить модуль?

В Drupal 8 для объявления модуля нужен только файл YAML (.info.yml):

name: D8 Test Module
description: D8 Test Module
type: module
core: 8.x
package: Custom

В Drupal 8 файл .module больше не является обязательным, таким образом, только файл .info.yml необходим для того, чтобы можно было включить модуль.

Как мне создать страницу

Создайте контроллер, который наследуется/расширяет ControllerBase класс и возвращает вывод страницы:
/modules/d8_example_module/src/Controller/D8ExampleModuleController.php

<?php
namespace Drupal\d8_example_module\Controller;

use 

Drupal\Core\Controller\ControllerBase;

class 

D8ExampleModuleController extends ControllerBase {

  public function 

test_page($from, $to) {
    $message = $this->t('%from to %to', [
      '%from' => $from,
      '%to' => $to,
    ]);

    return [

'#markup' => $message];
  }
}
?>

После того как это сделано, совместно с файлом .routing.yml мы можем задать путь, контроллер, заголовок и права доступа:

/modules/d8_example_module/d8_example_module.routing.yml

d8_example_module.test_page:
  path: '/test-page/{from}/{to}'
  defaults:
    _controller: 'Drupal\d8_example_module\Controller\D8ExampleModuleController::test_page'
    _title: 'Test Page!'
  requirements:
    _permission: 'access content' Как мне сделать контент темизируемым?

У нас до сих пор доступна функция hook_theme():

/modules/d8_example_module/d8_example_module.module

<?php
/**
 * Implements hook_theme().
 */
function d8_example_module_theme() {
  $theme['d8_example_module_page_theme'] = [
    'variables' => ['from' => NULL, 'to' => NULL],
    'template' => 'd8-theme-page',
  ];

  return 

$theme;
}
?>

Для темизации Drupal 8 использует Twig - система шаблонизации используемая в основном проектами на PHP. Для того, чтобы узнать больше про Twig ознакомьтесь с Twig in Drupal 8. Одной из полезных особенностей Twig является подсистема перевода строк:

/modules/d8_example_module/template/d8-theme-page.html.twig

<section>
  {% trans %}
    <strong>{{ from }}</strong> to <em>{{ to }}</em>
  {% endtrans %}
</section>

А потом связываем тему оформления со страницей:

/modules/d8_example_module/src/Controller/D8ExampleModuleController.php

<?php
namespace Drupal\d8_example_module\Controller;

use 

Drupal\Core\Controller\ControllerBase;

class 

D8ExampleModuleController extends ControllerBase {

  public function 

test_page($from, $to) {
    return [
      '#theme' => 'd8_example_module_page_theme',
      '#from' => $from,
      '#to' => $to,
    ];
  }
}
?> Как мне объявить переменную?

В Drupal 8 есть полностью новая система поддержки конфигураций, которая сохраняет конфигурации в YAML (.yml) файлах. Для дополнительной информации смотрите Managing configuration in Drupal 8.

Мы зададим переменные в config/install/*.settings.yml:

/modules/d8_example_module/config/install/d8_example_module.settings.yml

default_count: 3

Переменные будут сохранены в базе данных во время инсталляции модуля. Мы задаем схему для переменных в config/schema/*.settings.yml:

/modules/d8_example_module/config/schema/d8_example_module.settings.yml

d8_example_module.settings:
  type: mapping
  label: 'D8 Example Module settings'
  mapping:
    default_count:
      type: integer
      label: 'Default count' Как мне создать форму?

Для создания формы мы расширим базовый класс ConfigFormBase:

/modules/d8_example_module/src/Form/TestForm.php

<?php
namespace Drupal\d8_example_module\Form;

use 

Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;

class 

TestForm extends ConfigFormBase {
  public function getFormId() {
    return 'test_form';
  }

  public function 

buildForm(array $form, FormStateInterface $form_state) {
    $config = $this->config('d8_example_module.settings');

    

$form['default_count'] = [
      '#type' => 'number',
      '#title' => $this->t('Default count'),
      '#default_value' => $config->get('default_count'),
    ];
    return parent::buildForm($form, $form_state);
  }

  public function 

submitForm(array &$form, FormStateInterface $form_state) {
    $config = $this->config('d8_example_module.settings');
    $config->set('default_count', $form_state->getValue('default_count'));
    $config->save();
    parent::submitForm($form, $form_state);
  }
}
?>

Далее, используя файл .routing.yml мы можем задать путь, форму, заголовок и права доступа:

/modules/d8_example_module/d8_example_module.routing.yml

d8_example_module.test_form:
  path: /admin/config/system/test-form
  defaults:
    _form: 'Drupal\d8_example_module\Form\TestForm'
    _title: 'Test Form'
  requirements:
    _permission: 'configure_form'

Мы будем использовать друго YAML файл (.permissions.yml) для объявления прав доступа:

/modules/d8_example_module/d8_example_module.permissions.yml

'configure_form':
  title: 'Access to Test Form'
  description: 'Set the Default Count variable'

Также, мы используем еще один YAML файл (.links.menu.yml) для того, чтобы задать ссылки меню:

/modules/d8_example_module/d8_example_module.links.menu.yml

d8_example_module.test_form:
  title: 'Test Form'
  description: 'Set the Default Count variable'
  route_name: d8_example_module.test_form
  parent: system.admin_config_system Как мне создать блок?

Для создания блока мы расширим класс ConfigFormBase:

/modules/d8_example_module/src/Plugin/Block/TestBlock.php

<?php
namespace Drupal\d8_example_module\Plugin\Block;

use 

Drupal\Core\Block\BlockBase;

/**
 * Test Block.
 *
 * @Block(
 *   id = "test_block",
 *   admin_label = @Translation("Test Block"),
 *   category = @Translation("System")
 * )
 */
class TestBlock extends BlockBase {

  public function 

build() {
    return [
      '#markup' => $this->t('Block content...'),
    ];
  }
}
?>

После этого блок будет доступен для изменения конфигурации в CMS(/admin/structure/block). Далее следует пример более сложного блока:

<?php
namespace Drupal\d8_example_module\Plugin\Block;

use 

Drupal\Core\Block\BlockBase;
use Drupal\Core\Form\FormStateInterface;

/**
 * Test Block.
 *
 * @Block(
 *   id = "test_block",
 *   admin_label = @Translation("Test Block"),
 *   category = @Translation("System")
 * )
 */
class TestBlock extends BlockBase {

  public function 

defaultConfiguration() {
    return ['enabled' => 1];
  }

  public function 

blockForm($form, FormStateInterface $form_state) {
    $form['enabled'] = [
      '#type' => 'checkbox',
      '#title' => $this->t('Configuration enabled'),
      '#default_value' => $this->configuration['enabled'],
    ];

    return 

$form;
  }

  public function 

blockSubmit($form, FormStateInterface $form_state) {
    $this->configuration['enabled'] = (bool)$form_state->getValue('enabled');
  }

  public function 

build() {
    if ($this->configuration['enabled']) {
      $message = $this->t('Configuration enabled');
    }
    else {
      $message = $this->t('Configuration disabled');
    }
    return [
      '#markup' => $message,
    ];
  }
}
?> Структура модуля

Структура модуля должна выглядеть как в примере d8_example_module:

d8_example_module/
 |
 |- config/
   |
   |- install/
     |
     |- d8_example_module.setting.yaml
     |
     |- schema/
       |
       |- d8_example_module.settings.yaml
 |
 |- src/
   |
   |- Controller/
     |
     |- D8ExampleModuleController.php
   |
   |- Form/
     |
     |- TestForm.php
   |
   |- Plugin/
     |
     |- Block/
       |
       |- TestBlock.php
 |
 |- templates/
   |
   |- d8-theme-page.html.twig
 |
 |- d8_example_module.info.yml
 |
 |- d8_example_module.links.menu.yml
 |
 |- d8_example_module.module
 |
 |- d8_example_module.permissions.yml
 |
 |- d8_example_module.routing.yml Материалы Ключевые слова: drupal 8 Тип материала: Предлагаю решение Версия Drupal: Drupal 8.* Drupal 7.* Форумы: Программирование 4 Thanks
Категории: Друпалургия

Drupal 8 в 2 шага

Drupal в рунете - вт, 24/10/2017 - 21:59

Drupal 8 - это последняя стабильная версия Drupal, современная, которая использует PHP 5.4+, REST совместимая, объектно-ориентированная. Концепция осталась прежней, но подход изменился. Drupal 8 использует возможности объектно-ориентированного программирования(ООП) для большинства подсистем, благодаря фреймворку Symfony 2.

Как мне объявить модуль?

В Drupal 8 для объявления модуля нужен только файл YAML (.info.yml):

name: D8 Test Module
description: D8 Test Module
type: module
core: 8.x
package: Custom

В Drupal 8 файл .module больше не является обязательным, таким образом, только файл .info.yml необходим для того, чтобы можно было включить модуль.

Как мне создать страницу

Создайте контроллер, который наследуется/расширяет ControllerBase класс и возвращает вывод страницы:
/modules/d8_example_module/src/Controller/D8ExampleModuleController.php

<?php
namespace Drupal\d8_example_module\Controller;

use Drupal\Core\Controller\ControllerBase;

class D8ExampleModuleController extends ControllerBase {

  public function test_page($from, $to) {
    $message = $this->t('%from to %to', [
      '%from' => $from,
      '%to' => $to,
    ]);

    return ['#markup' => $message];
  }
}
?>

После того как это сделано, совместно с файлом .routing.yml мы можем задать путь, контроллер, заголовок и права доступа:

/modules/d8_example_module/d8_example_module.routing.yml

d8_example_module.test_page:
  path: '/test-page/{from}/{to}'
  defaults:
    _controller: 'Drupal\d8_example_module\Controller\D8ExampleModuleController::test_page'
    _title: 'Test Page!'
  requirements:
    _permission: 'access content' Как мне сделать контент темизируемым?

У нас до сих пор доступна функция hook_theme():

/modules/d8_example_module/d8_example_module.module

<?php
/**
 * Implements hook_theme().
 */
function d8_example_module_theme() {
  $theme['d8_example_module_page_theme'] = [
    'variables' => ['from' => NULL, 'to' => NULL],
    'template' => 'd8-theme-page',
  ];

  return $theme;
}
?>

Для темизации Drupal 8 использует Twig - система шаблонизации используемая в основном проектами на PHP. Для того, чтобы узнать больше про Twig ознакомьтесь с Twig in Drupal 8. Одной из полезных особенностей Twig является подсистема перевода строк:

/modules/d8_example_module/template/d8-theme-page.html.twig

<section>
  {% trans %}
    <strong>{{ from }}</strong> to <em>{{ to }}</em>
  {% endtrans %}
</section>

А потом связываем тему оформления со страницей:

/modules/d8_example_module/src/Controller/D8ExampleModuleController.php

<?php
namespace Drupal\d8_example_module\Controller;

use Drupal\Core\Controller\ControllerBase;

class D8ExampleModuleController extends ControllerBase {

  public function test_page($from, $to) {
    return [
      '#theme' => 'd8_example_module_page_theme',
      '#from' => $from,
      '#to' => $to,
    ];
  }
}
?> Как мне объявить переменную?

В Drupal 8 есть полностью новая система поддержки конфигураций, которая сохраняет конфигурации в YAML (.yml) файлах. Для дополнительной информации смотрите Managing configuration in Drupal 8.

Мы зададим переменные в config/install/*.settings.yml:

/modules/d8_example_module/config/install/d8_example_module.settings.yml

default_count: 3

Переменные будут сохранены в базе данных во время инсталляции модуля. Мы задаем схему для переменных в config/schema/*.settings.yml:

/modules/d8_example_module/config/schema/d8_example_module.settings.yml

d8_example_module.settings:
  type: mapping
  label: 'D8 Example Module settings'
  mapping:
    default_count:
      type: integer
      label: 'Default count' Как мне создать форму?

Для создания формы мы расширим базовый класс ConfigFormBase:

/modules/d8_example_module/src/Form/TestForm.php

<?php
namespace Drupal\d8_example_module\Form;

use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Form\FormStateInterface;

class TestForm extends ConfigFormBase {
  public function getFormId() {
    return 'test_form';
  }

  public function buildForm(array $form, FormStateInterface $form_state) {
    $config = $this->config('d8_example_module.settings');

    $form['default_count'] = [
      '#type' => 'number',
      '#title' => $this->t('Default count'),
      '#default_value' => $config->get('default_count'),
    ];
    return parent::buildForm($form, $form_state);
  }

  public function submitForm(array &$form, FormStateInterface $form_state) {
    $config = $this->config('d8_example_module.settings');
    $config->set('default_count', $form_state->getValue('default_count'));
    $config->save();
    parent::submitForm($form, $form_state);
  }
}
?>

Далее, используя файл .routing.yml мы можем задать путь, форму, заголовок и права доступа:

/modules/d8_example_module/d8_example_module.routing.yml

d8_example_module.test_form:
  path: /admin/config/system/test-form
  defaults:
    _form: 'Drupal\d8_example_module\Form\TestForm'
    _title: 'Test Form'
  requirements:
    _permission: 'configure_form'

Мы будем использовать друго YAML файл (.permissions.yml) для объявления прав доступа:

/modules/d8_example_module/d8_example_module.permissions.yml

'configure_form':
  title: 'Access to Test Form'
  description: 'Set the Default Count variable'

Также, мы используем еще один YAML файл (.links.menu.yml) для того, чтобы задать ссылки меню:

/modules/d8_example_module/d8_example_module.links.menu.yml

d8_example_module.test_form:
  title: 'Test Form'
  description: 'Set the Default Count variable'
  route_name: d8_example_module.test_form
  parent: system.admin_config_system Как мне создать блок?

Для создания блока мы расширим класс ConfigFormBase:

/modules/d8_example_module/src/Plugin/Block/TestBlock.php

<?php
namespace Drupal\d8_example_module\Plugin\Block;

use Drupal\Core\Block\BlockBase;

/**
 * Test Block.
 *
 * @Block(
 *   id = "test_block",
 *   admin_label = @Translation("Test Block"),
 *   category = @Translation("System")
 * )
 */
class TestBlock extends BlockBase {

  public function build() {
    return [
      '#markup' => $this->t('Block content...'),
    ];
  }
}
?>

После этого блок будет доступен для изменения конфигурации в CMS(/admin/structure/block). Далее следует пример более сложного блока:

<?php
namespace Drupal\d8_example_module\Plugin\Block;

use Drupal\Core\Block\BlockBase;
use Drupal\Core\Form\FormStateInterface;

/**
 * Test Block.
 *
 * @Block(
 *   id = "test_block",
 *   admin_label = @Translation("Test Block"),
 *   category = @Translation("System")
 * )
 */
class TestBlock extends BlockBase {

  public function defaultConfiguration() {
    return ['enabled' => 1];
  }

  public function blockForm($form, FormStateInterface $form_state) {
    $form['enabled'] = [
      '#type' => 'checkbox',
      '#title' => $this->t('Configuration enabled'),
      '#default_value' => $this->configuration['enabled'],
    ];

    return $form;
  }

  public function blockSubmit($form, FormStateInterface $form_state) {
    $this->configuration['enabled'] = (bool)$form_state->getValue('enabled');
  }

  public function build() {
    if ($this->configuration['enabled']) {
      $message = $this->t('Configuration enabled');
    }
    else {
      $message = $this->t('Configuration disabled');
    }
    return [
      '#markup' => $message,
    ];
  }
}
?> Структура модуля

Структура модуля должна выглядеть как в примере d8_example_module:

d8_example_module/
 |
 |- config/
   |
   |- install/
     |
     |- d8_example_module.setting.yaml
     |
     |- schema/
       |
       |- d8_example_module.settings.yaml
 |
 |- src/
   |
   |- Controller/
     |
     |- D8ExampleModuleController.php
   |
   |- Form/
     |
     |- TestForm.php
   |
   |- Plugin/
     |
     |- Block/
       |
       |- TestBlock.php
 |
 |- templates/
   |
   |- d8-theme-page.html.twig
 |
 |- d8_example_module.info.yml
 |
 |- d8_example_module.links.menu.yml
 |
 |- d8_example_module.module
 |
 |- d8_example_module.permissions.yml
 |
 |- d8_example_module.routing.yml Материалы Ключевые слова: drupal 8 Тип материала: Предлагаю решение Версия Drupal: Drupal 8.* Drupal 7.* Форумы: Программирование 2 Спасибо
Категории: Друпалургия

Drupal-школа - двенадцатое занятие: продвижение сайта на Drupal

Drupal в рунете - вс, 15/10/2017 - 20:28

Разбираем основы продвижения сайтов, в частности сайта на Drupal 8.

Версия Drupal: Drupal 8.* Форумы: DrupalSib 2 Thanks
Категории: Друпалургия

Drupal-школа - двенадцатое занятие: продвижение сайта на Drupal

Drupal в рунете - вс, 15/10/2017 - 20:28

Разбираем основы продвижения сайтов, в частности сайта на Drupal 8.

Тип материала: Есть вопрос Версия Drupal: Drupal 8.* Форумы: DrupalSib 0 Спасибо
Категории: Друпалургия

Обновление Drupal (новая версия Drupal 8.4.0)

Drupal в рунете - вс, 08/10/2017 - 02:16

Оригинал (опубликован Gábor Hojtsy 4 октября 2017 года): Drupal 8.4.0 is now available

Что нового в Drupal 8.4.0?

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

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

Загрузить Drupal 8.4.0

Важная информация: Если вы используете Drush для управления Drupal, обязательно обновите Drush до версии 8.1.12 или выше перед обновлением Drupal. Обновление до Drupal 8.4.0 с помощью Drush 8.1.11 или более ранней версии завершится с ошибками. (Всегда тщательно проверяйте минорные версии обновлений до применения на рабочей версии сайта.)

Inline Form Errors

Модуль Inline Form Errors предоставляет сводку любых ошибок проверки в верхней части формы и помещает отдельные сообщения об ошибках рядом с самими элементами формы. Это помогает пользователям понять, какие записи нужно исправлять, и как это сделать. Inline Form Errors был представлен в качестве экспериментального модуля в Drupal 8.0.0, но теперь он стабилен и достаточно отшлифован для использования.

Datetime Range

Модуль Datetime Range предоставляет тип поля, который позволяет конечным датам поддерживать дополнительные модули, такие как Calendar. Этот стабильный выпуск обратно совместим с экспериментальной версией Drupal 8.3.x и использует целостный API с другими полями Datetime. Будущие выпуски могут улучшить поддержку Views, юзабилити, проверку поля Datetime Range и поддержку REST.

Layout Discovery API

Модуль Layout Discovery предоставляет API для модулей или тем для регистрации макетов, а также пять общих макетов. Предоставление этого API в ядре позволяет быть совместимыми друг с другом модулям работы с макетами в ядре и сторонним модулям, таким как Panels и Display Suite. Этот стабильный выпуск обратно совместим с экспериментальной версией 8.3.x и вводит поддержку атрибутов для отдельных регионов.

Media API

Новый модуль ядра Media предоставляет API для многократного использования сущностей медиаданных и ссылок. Он основан на контриб модуле Media Entity.

Поскольку существует обширная экосистема контриб модулей Drupal, построенная на Media Entity, главным приоритетом для данного выпуска является обеспечение стабильного API ядра и модели данных для более плавного обновления этих модулей. Разработчики и профессиональные создатели сайтов теперь могут добавить Media как зависимость. Ведется работа по предоставлению способа обновления данных Media Entity для существующих сайтов и портирования существующих модулей на усовершенствованный API ядра.

Обратите внимание, что модуль Media в ядре помечен скрытым и не виден на странице «Расширения» (модуль администрирования). (Включение модуля, который зависит от основного модуля Media, автоматически включит Media.) Модуль будет отображаться для разработчиков сайтов, когда проблемы связанные с пользовательским опытом будут устранены в будущей версии.

Аналогично, API REST и нормализация для Media не являются окончательными, и поддержка отдельных приложений будет улучшена в будущей версии.

Улучшения в управлении контентом и администрировании сайта

Выпадающая кнопка «Сохранить и опубликовать / Сохранить неопубликованным» была заменена на чекбокс «Опубликовано» и отдельную кнопку «Сохранить». Выпадающая кнопка «Сохранить ...» была частью нового дизайна в Drupal 8, но пользователи сочли его запутанным, поэтому мы восстановили дизайн, который больше похож на интерфейс пользователя для Drupal 7 и более ранних версий.

Страницы администрирования «Комментарии» на «/admin/content/comment» и отчет «Последние записи журнала», формируемый dblog теперь являются настраиваемыми представлениями. Это позволяет разработчикам сайтов легко настраивать, заменять или клонировать данные представления.

Обновленные миграции

Этот релиз добавляет поддержку дат и связанных нод для миграций с Drupal 6 на Drupal 8. Ядро предоставляет миграции для большинства данных в Drupal 6 и может использоваться для переноса сайтов с Drupal 6 на Drupal 8, миграции Drupal 6-8 находятся в состоянии близком к бета стабильности. Остаются некоторые пробелы, в частности, некоторые данные интернационализации. Миграция с Drupal 7 на Drupal 8 является неполной, но подходит для разработчиков, которые хотели бы помочь улучшить миграции и может использоваться для тестирования обновления простых сайтов на Drupal 7. Наиболее важные миграции доступны.

Модерация и рабочие процессы

Модуль Workflows теперь также стабильный, однако он представляет только фреймворк для управления рабочими процессами и не является полезным непосредственно. Экспериментальный модуль Content Moderation позволяет применить рабочие процессы к контенту и в настоящее время находится в состоянии бета стабильности. Рабочие процессы управления контентом теперь можно применять к любому типу сущностей, которые поддерживают ревизии, также многочисленные проблемы и критические ошибки исправлены в этом выпуске.

Возможности платформы для веб-сервисов

Drupal 8.4 продолжает расширять в Drupal поддержку веб-сервисов, ориентированных для автономных сайтов и приложений, включая 15% повышение производительности для аутентифицированных REST запросов, расширенную REST функциональность и улучшения для разработчиков.

Более подробная информация о каждом разделе изложена в заметках к релизу 8.4.0.

Что это означает для меня? Владельцы сайтов на Drupal 8

Обновите Drupal до версии 8.4.0, чтобы продолжать получать исправления ошибок и безопасности. Следующий bugfix релиз (8.4.1) запланирован на 1 ноября 2017 года.

Обновление вашего сайта с 8.3.7 до 8.4.0 через update.php точно такое же, как и обновление с 8.3.6 до 8.3.7. Если вы используете Drush, обязательно обновите Drush до версии 8.1.12 или выше перед тем как использовать его для обновления Drupal с версии 8.3.7 до 8.4.0. Drupal 8.4.0 также включает мажорные обновления для нескольких зависимостей, включая Symfony, jQuery и jQuery UI. Модулям, темам и переводам может понадобиться обновление для этих и прочих изменений в данной минорной версии, поэтому, перед обновлением рабочего сайта тщательно протестируйте обновление.

Владельцы сайтов на Drupal 7

Drupal 7 все еще полностью поддерживается и будет продолжать получать исправления ошибок и безопасности на протяжении всех минорных релизов Drupal 8.

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

Владельцы сайтов на Drupal 6

Drupal 6 больше не поддерживается. Создайте сайт на Drupal 8 и попытайтесь перенести данные в него как можно скорее. Ваш сайт Drupal 6 может по-прежнему работать во время тестирования переноса данных с Drupal 6 в ваш новый сайт на Drupal 8. Ядро теперь предоставляет миграции для большинства данных Drupal 6, но, в частности, миграции многоязычных функций не являются завершенными. Если вы нашли не описанную в известных проблемах ошибку в экспериментальном наборе модулей миграции, ваш подробный отчёт с шагами для воспроизведения будет большой помощью!

Контрибьюторы переводов, модулей и тем оформления

Минорные релизы, такие как Drupal 8.4.0, включают обратно совместимые дополнения API для разработчиков, а также новые функции. Читайте заметки о выпуске 8.4.0 для получения более подробной информации об усовершенствованиях для разработчиков в этом выпуске.

Так как минорные релизы обратно совместимы, модули, темы и переводы, которые поддерживали Drupal 8.3.x и ранее, будут также совместимы с 8.4.x. Однако новая версия включают в себя некоторые изменения в строках, пользовательском интерфейсе и внутренних API (а также более значительные изменения в экспериментальных модулях). Это означает, что могут потребоваться небольшие обновления для ваших переводов, модулей и тем оформления. Смотрите объявление о релиз-кандидате 8.4.0 для получения дополнительной справочной информации.

Ключевые слова: release Версия Drupal: Drupal 8.* Форумы: Безопасность 8 Thanks
Категории: Друпалургия

Обновление Drupal (новая версия Drupal 8.4.0)

Drupal в рунете - вс, 08/10/2017 - 02:16

Оригинал (опубликован Gábor Hojtsy 4 октября 2017 года): Drupal 8.4.0 is now available

Что нового в Drupal 8.4.0?

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

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

Загрузить Drupal 8.4.0

Важная информация: Если вы используете Drush для управления Drupal, обязательно обновите Drush до версии 8.1.12 или выше перед обновлением Drupal. Обновление до Drupal 8.4.0 с помощью Drush 8.1.11 или более ранней версии завершится с ошибками. (Всегда тщательно проверяйте минорные версии обновлений до применения на рабочей версии сайта.)

Строчные ошибки форм

Модуль Inline Form Errors предоставляет сводку любых ошибок проверки в верхней части формы и помещает отдельные сообщения об ошибках рядом с самими элементами формы. Это помогает пользователям понять, какие записи нужно исправлять, и как это сделать. Inline Form Errors был представлен в качестве экспериментального модуля в Drupal 8.0.0, но теперь он стабилен и достаточно отшлифован для использования.

Datetime Range

Модуль Datetime Range предоставляет тип поля, который позволяет конечным датам поддерживать дополнительные модули, такие как Calendar. Этот стабильный выпуск обратно совместим с экспериментальной версией Drupal 8.3.x и использует целостный API с другими полями Datetime. Будущие выпуски могут улучшить поддержку Views, юзабилити, проверку поля Datetime Range и поддержку REST.

Layout Discovery API

Модуль Layout Discovery предоставляет API для модулей или тем для регистрации макетов, а также пять общих макетов. Предоставление этого API в ядре позволяет быть совместимыми друг с другом модулям работы с макетами в ядре и сторонним модулям, таким как Panels и Display Suite. Этот стабильный выпуск обратно совместим с экспериментальной версией 8.3.x и вводит поддержку атрибутов для отдельных регионов.

Media API

Новый модуль ядра Media предоставляет API для многократного использования сущностей медиаданных и ссылок. Он основан на контриб модуле Media Entity.

Поскольку существует обширная экосистема контриб модулей Drupal, построенная на Media Entity, главным приоритетом для данного выпуска является обеспечение стабильного API ядра и модели данных для более плавного обновления этих модулей. Разработчики и профессиональные создатели сайтов теперь могут добавить Media как зависимость. Ведется работа по предоставлению способа обновления данных Media Entity для существующих сайтов и портирования существующих модулей на усовершенствованный API ядра.

Обратите внимание, что модуль Media в ядре помечен скрытым и не виден на странице «Расширения» (модуль администрирования). (Включение модуля, который зависит от основного модуля Media, автоматически включит Media.) Модуль будет отображаться для разработчиков сайтов, когда проблемы связанные с пользовательским опытом будут устранены в будущей версии.

Аналогично, API REST и нормализация для Media не являются окончательными, и поддержка отдельных приложений будет улучшена в будущей версии.

Улучшения в управлении контентом и администрировании сайта

Выпадающая кнопка «Сохранить и опубликовать / Сохранить неопубликованным» была заменена на чекбокс «Опубликовано» и отдельную кнопку «Сохранить». Выпадающая кнопка «Сохранить ...» была частью нового дизайна в Drupal 8, но пользователи сочли его запутанным, поэтому мы восстановили дизайн, который больше похож на интерфейс пользователя для Drupal 7 и более ранних версий.

Страницы администрирования «Комментарии» на «/admin/content/comment» и отчет «Последние записи журнала», формируемый dblog теперь являются настраиваемыми представлениями. Это позволяет разработчикам сайтов легко настраивать, заменять или клонировать данные представления.

Обновленные миграции

Этот релиз добавляет поддержку дат и связанных нод для миграций с Drupal 6 на Drupal 8. Ядро предоставляет миграции для большинства данных в Drupal 6 и может использоваться для переноса сайтов с Drupal 6 на Drupal 8, миграции Drupal 6-8 находятся в состоянии близком к бета стабильности. Остаются некоторые пробелы, в частности, некоторые данные интернационализации. Миграция с Drupal 7 на Drupal 8 является неполной, но подходит для разработчиков, которые хотели бы помочь улучшить миграции и может использоваться для тестирования обновления простых сайтов на Drupal 7. Наиболее важные миграции доступны.

Модерация и рабочие процессы

Модуль Workflows теперь также стабильный, однако он представляет только фреймворк для управления рабочими процессами и не является полезным непосредственно. Экспериментальный модуль Content Moderation позволяет применить рабочие процессы к контенту и в настоящее время находится в состоянии бета стабильности. Рабочие процессы управления контентом теперь можно применять к любому типу сущностей, которые поддерживают ревизии, также многочисленные проблемы и критические ошибки исправлены в этом выпуске.

Возможности платформы для веб-сервисов

Drupal 8.4 продолжает расширять в Drupal поддержку веб-сервисов, ориентированных для автономных сайтов и приложений, включая 15% повышение производительности для аутентифицированных REST запросов, расширенную REST функциональность и улучшения для разработчиков.

Более подробная информация о каждом разделе изложена в заметках к релизу 8.4.0.

Что это означает для меня? Владельцы сайтов на Drupal 8

Обновите Drupal до версии 8.4.0, чтобы продолжать получать исправления ошибок и безопасности. Следующий bugfix релиз (8.4.1) запланирован на 1 ноября 2017 года.

Обновление вашего сайта с 8.3.7 до 8.4.0 через update.php точно такое же, как и обновление с 8.3.6 до 8.3.7. Если вы используете Drush, обязательно обновите Drush до версии 8.1.12 или выше перед тем как использовать его для обновления Drupal с версии 8.3.7 до 8.4.0. Drupal 8.4.0 также включает мажорные обновления для нескольких зависимостей, включая Symfony, jQuery и jQuery UI. Модулям, темам и переводам может понадобиться обновление для этих и прочих изменений в данной минорной версии, поэтому, перед обновлением рабочего сайта тщательно протестируйте обновление.

Владельцы сайтов на Drupal 7

Drupal 7 все еще полностью поддерживается и будет продолжать получать исправления ошибок и безопасности на протяжении всех минорных релизов Drupal 8.

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

Владельцы сайтов на Drupal 6

Drupal 6 больше не поддерживается. Создайте сайт на Drupal 8 и попытайтесь перенести данные в него как можно скорее. Ваш сайт Drupal 6 может по-прежнему работать во время тестирования переноса данных с Drupal 6 в ваш новый сайт на Drupal 8. Ядро теперь предоставляет миграции для большинства данных Drupal 6, но, в частности, миграции многоязычных функций не являются завершенными. Если вы нашли не описанную в известных проблемах ошибку в экспериментальном наборе модулей миграции, ваш подробный отчёт с шагами для воспроизведения будет большой помощью!

Контрибьюторы переводов, модулей и тем оформления

Минорные релизы, такие как Drupal 8.4.0, включают обратно совместимые дополнения API для разработчиков, а также новые функции. Читайте заметки о выпуске 8.4.0 для получения более подробной информации об усовершенствованиях для разработчиков в этом выпуске.

Так как минорные релизы обратно совместимы, модули, темы и переводы, которые поддерживали Drupal 8.3.x и ранее, будут также совместимы с 8.4.x. Однако новая версия включают в себя некоторые изменения в строках, пользовательском интерфейсе и внутренних API (а также более значительные изменения в экспериментальных модулях). Это означает, что могут потребоваться небольшие обновления для ваших переводов, модулей и тем оформления. Смотрите объявление о релиз-кандидате 8.4.0 для получения дополнительной справочной информации.

Ключевые слова: release Версия Drupal: Drupal 8.* Форумы: Drupal Юг 1 Спасибо
Категории: Друпалургия

Релиз drupal.ru 2 Октября 2017

Drupal в рунете - пн, 02/10/2017 - 04:06


Завершён второй релиз "2-ое октября 2017" с новой структурой и были внесены следующие изменения:

В разработке участвовали

В этот раз было проделано много работы в сфере DevOps:

Кроме того:

  • Поднят отдельный сервер для разработки и тестирования нового функционала.
  • Поднят TeamSpeak сервер
  • Плановые работы по улучшению производительности и защиты серверов
  • Начата работа по улучшению работы почты
  • Настроен мониторинг серверов
  • Настроено бэкпирование базы и файлов
Благодарности

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

Ключевые слова: release project release drupal.ru Форумы: Сайт и проект Drupal.ru 13 Thanks
Категории: Друпалургия

Релиз drupal.ru 2 Октября 2017

Drupal в рунете - пн, 02/10/2017 - 04:06


Завершён второй релиз "2-ое октября 2017" с новой структурой и были внесены следующие изменения:

В разработке участвовали

В этот раз было проделано много работы в сфере DevOps:

Кроме того:

  • Поднят отдельный сервер для разработки и тестирования нового функционала.
  • Поднят TeamSpeak сервер
  • Плановые работы по улучшению производительности и защиты серверов
  • Начата работа по улучшению работы почты
  • Настроен мониторинг серверов
  • Настроено бэкпирование базы и файлов
Благодарности

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

Ключевые слова: release project release drupal.ru Форумы: Сайт и проект Drupal.ru 8 Спасибо
Категории: Друпалургия

Drupal-школа - одиннадцатое занятие: подключение Google Analytics, выбор эффектов для стилей изображений

Drupal в рунете - пт, 29/09/2017 - 21:07

Подключаем к сайту на Drupal 8 Google для вебмастеров (Google Search Console) и Google Analytics. Настраиваем стили изображений, применяя различные эффекты.

Ключевые слова: друпалшкола Версия Drupal: Drupal 8.* Drupal 7.* Форумы: DrupalSib 0 Thanks
Категории: Друпалургия

Страницы

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