Рубрика "Новости Drupal"

Тестирование производительности – модуль Performance Monitor (Агабеков Роман) [DrupalCamp Краснодар 2016]

Администрируете Drupal?
В докладе Роман Агабеков рассказал как проще и лучше сделать это с помощью модуля Perfomance Monitor.
Презентация находится здесь -> https://www.slideshare.net/DrupalYug/performance-monitor-76091640
Наш канал на YouTube -> https://www.youtube.com/user/drupalyug
Делимся этой записью с друзьями и коллегами, а с нами делимся лайками!

>> Все презентации с конференции “DrupalCamp Краснодар 2016″

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 0 Спасибо

Источник: http://drupal.ru/node/134413

Модули доставки и оплаты для интернет магазинов на Drupal (Андрей Тымчук) [DrupalCamp Краснодар 2016]

Реализовать доставку в Commerce и Ubercart для Drupal 7?
Что в Drupal использовать для интеграции с сервисами доставки и оплаты?
На Drupal Camp Краснодар 2016 ответы на эти вопросы в своём докладе дал Андрей Тымчук.
Презентация находится здесь -> https://www.slideshare.net/DrupalYug/drupal-76090661
Наш канал на YouTube -> https://www.youtube.com/user/drupalyug
Как обычно ждём лайки и репосты

>> Все презентации с конференции “DrupalCamp Краснодар 2016″

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 0 Спасибо

Источник: http://drupal.ru/node/134401

План развития drupal.ru

Всем привет!

Многие уже знакомы с постом, ознаменовавшим перемены на drupal.ru и уход Егора (@gor) со всех позиций связанных с drupal.ru. Вместе с этим, сменился и координатор сайта сообщества, им стал Максим Баев. Со временем стало понятно, что одному человеку сложно направлять такое большое сообщество. Появилась необходимость разбить процесс развития сообщества на направления и найти желающих заниматься каждым из них, но об этом позже.

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

Текущее состояние дел План на ближайшее будущее Социальный Стратегический Общение Технический Критические задачи Глобальные задачи Функциональные задачи Минимум задач, которые стоят передо мной О том, что сделано за последние недели Итог

Но прежде…

Кто такой Максим Баев (mbaev)

Привет, это я!
Раз уж я являюсь куратором проекта на текущий момент, то будет справедливо немного рассказать о себе.
Познакомился с Друпалом примерно в 2009 году, начал зарабатывать на нём примерно в 2011, а с 2012 года занимаюсь уже профессиональной разработкой, глубоким кодингом и организацией архитектуры приложений. В своём арсенале на drupal.org имею информационную помощь сообществу, правки документаций и багрепорты, в том числе о несекьюрных дырах в популярных модулях. Также веду блог с заметками о Друпале и других околопрограмистских темах. Владею опытом координатора и идейного лидера игрового сообщества (~700 человек с постоянным онлайном минимум 50 человек).
Не участвовал в конфликтах на drupal.ru.

За исключением случая с Виктором Степаньковым (RxB), когда я отказался удалять его материалы.
Всё ещё надеюсь мы найдём общий язык и начнём наше взаимоотношение заново.

Терпелив.
Ровно год назад получил апрув на полное визуальное изменение и начал переработку текущей версии drupal.ru. В феврале этого года уже пошёл фидбэк, по которому прототип шлифовался, и через месяц он был опубликован на сайте http://drupal.mbaev.com.
Активный участник не в конфликтах, но в жизни сайта. Дальнейшее развитие вижу только в одном ключе: установка фикс-поинта в текущем времени, после которого будут забыты конфликты прошлых лет. Дальше мы вместе, с удвоенной силой, будем тянуть лямку развития русскоязычного сообщества. Таким образом, мы добьёмся репутации мощного сообщества в Друпал-мире и предложим провести DrupalCon 2019 в России!

Текущее состояние дел

На очередном обсуждении состояния drupal.ru, меня выдвинули в качестве координатора, выразив таким образом своё доверие, за что всем большое спасибо! От меня было предложение найти человека со свободным временем, инициативой и желанием, но в текущей, сумбурной ситуации такого не нашлось и я беру на себя роль временного координатора drupal.ru в течении следующих 3-х месяцев.

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

Зачем нужны тимлиды

Появлению этого состава послужило много причин:

Если координатор проекта внезапно пропадёт, то эти ребята гарантируют, что работа не остановится. Т.е. это некая гарантийная подушка между куратором и инициативной группой Это один из способов снять вопрос, который иногда звучал “один человек всё решает”. Но это не отменят главный механизм разработки с помощью инициатив и открытого голосования Каждое из направлений – это большой кусок, которые нельзя укусить одновременно Это один из пунктов тимбилдинга. Гораздо интересней делать дело с командой Они будут принимать решения гораздо быстрей, чем это будет делать один человек

Также, если Вы можете предложить своё участие в каком-либо направлении, то тимлиды помогут начать. Они берут на себя ответственность за развитие деятельности, решения в спорных ситуациях и организационных вопросах. А главное, они смогут более качественно проследить за открытостью всех процессов от выдвижения идеи до её внедрения.

Это та новая структура, которая позволит нам, путём перевыборов каждые пол года:
во-первых, продлевать творческую работу для тех кто заслужил доверие;
во-вторых, закончить работать тем, кто по каким-либо причинам не может или не хочет продолжать.
Детали условий в Уставе.

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

Модераторский отдел Тахтабаев Ильдар (Tahtabaev) Связь с общественностью Денис Маслов (radionete) Технический отдел Максим Баев (mbaev) Продвижение (SEO) Денис Маслов (radionete) Редакторский отдел Денис Маслов (radionete) Графическое оформление Александр Матросов (multpix) Финансы Максим Баев (mbaev) План на ближайшее будущее Всё, что я напишу далее можно считать только моим мнением и видением развития сообщества. Оно не было обговорено или согласовано с кем-либо. Это видение будет обсуждаться и моё дальнейшее участие будет напрямую зависеть от того, насколько оно совпадает с мнением сообщества. Социальный

Есть мнение, что пора заканчивать заниматься самоуничтожением, собирать тех людей, кто готов конструктивно разговаривать об улучшениях, нововведениях и работать над их внедрением. Только сообща, только с помощью открытых голосований, но в разумных рамках, ибо в открытых сообществах процессы текут медленно, а ждать результатов голосования несколько дней, чтобы добавить очевидно необходимую метрику на сайт – не разумно. Здесь тимлид может дать апрув под свою ответственность. Считаю, что ввести периодические видео-митинги – хорошо. Спринты с релизами – обсуждаемо. Общение в чатах – не обязательны. Общение в раздельных чатах – плохо.
Если цель общая, то придётся поступиться с некоторыми своими принципами и переступить гордыню. Это сложно, но нужно уметь прощать во имя общей цели. В конечном итоге, останутся те, кто адаптирован на коллаборацию – закон природы и с этим ничего не поделать.

Стратегический

Как бы это ни было горько, но за 10 лет текущий формат изжил себя. Сейчас drupal.ru уже больше чем просто форум! Это большая община: профессиональные разработчики, ученики, студенты, студии, работодатели, организаторы кэмпов и пора уже дать то, чего всем так сильно не хватает! Заказчикам – иметь возможность не быть униженными, ученикам – найти ответы на вопросы, организаторам кэмпов – возможность быстро доставлять информацию до максимального количества потенциальных участников и возможность планировать мероприятия, а база в 70 000 пользователей только и ждёт этого. Уверен, что в ваших головах полно других идей.

Общение Приходи ради программы, оставайся ради сообщества!

Общение на форуме – это наиважнейшая составляющая сего окружения, которой должно уделяться особое внимание. Как сообщество не может развиваться без популяризации Друпала, так и популяризация не может продвигаться без привлечения новых людей. Помощь новичкам в поиске информации – вот одна из основных жилок для привлечения новых людей, которую выработал этот форум за долгие годы. Кроме этого, неотъемлемым фактором является простое, человеческое общение ведь Друпал комьюнити известно своим доброжелательным отношением к людям, которое является основой Кодекса поведения (англ) в сообществе Друпал.

Технический

Ответственность за техническую часть также лежит на мне. Всё, что касается деплоя, процесса разворачивания локального окружения, репозиторий на GitHub и поддержка хостинга и т.д. Помогать в настройке всего этого будет крутой спец, который имеет безграничный лимит моего доверия и для многих не нуждается в представлении – Даниэль Ишмаев (@dan).
В целом, этот раздел требует особого внимания и более подробного разъяснения. Он заслуживает отдельного поста или видео-чата. Пока же, мы ограничимся основными идеями.

Критические задачи

Это те задачи, которые нужно сделать как можно быстрее и желательно ещё вчера.

Окружения. На данный момент есть только продакшн окружение и даже почту мы восстанавливали тестируя здесь. Это первая и критическая задача, работу над которой мы начнём в ближайшие дни. Деплой. В данный момент, работа парализована отсутствием деплоя т.к. он не был восстановлен в том виде, в котором был, до переезда. Причина, которая блокирует выполнение этого задания – отсутствие окружений. Перенос новой версии. Этой процедурой мы протестируем деплой и доставку кода, через все окружения, до прода. Глобальные задачи Процесс развёртывания проекта локально. Будем делать его максимально простым. Донат. Теперь drupal.ru находится на собственном обеспечении. Поэтому мы создали страничку, где каждый может пожертвовать любую сумму на поддержку стабильной работы форума и развитие сообщества в целом. Модерирование. Текущий формат модерирования имеет право на жизнь в местах, с постоянным доходом, где можно нанять взвод модераторов, а при необходимости заменить. Модерация – это неприятное и неблагодарное занятие, которое убивает любую другую инициативу.
Но ведь у нас достаточно умных людей, которые способны вместе выдумать и реализовать систему саморегулирования, которые уже реализовали все крупные IT-площадки. Самоуправление позволяет им спокойно расти, ведь чем больше пользователей на сайте, тем точнее работает эта система. Функциональные задачи За прошедший год было достаточно времени для проведения глубокого исследование проекта и могу ответственно заявить: у нас полно работы, ребята! Нам понадобится мощный шлифовальный аппарат для этого бриллиантового булыжника!

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

Разделение типов материалов. На данный момент сайт имеет только один тип материала – “Запись в блог”, с помощью которой создаётся все: вопросы, решения, запросы от работодателей, поиск работы, системные страницы, правила и другое. Этот подход необходимо пересмотреть в корне, что может повлечь за собой значительные изменения на сайте. Мероприятия или события. Нужно добавить больше функционала: рассылки о событиях, регистрация на них. Рассылки. Один из простых инструментов доставки информации до пользователей – рассылка. Её обязательно нужно использовать. Регистрация. Трекер. Форматы ввода. Входа в систему. Раздел “Форум” (кто-нибудь им пользуется вообще?) и другие рядовые задачи тоже надо переосмыслить. Минимум задач, которые стоят передо мной

Так как на данный момент я всего лишь временный куратор и скорее “переходное звено”, чем “главный руководитель”, то для меня стоит минимум две обязательные задачи:

Внедрение новой версии сайта drupal.ru

Эта задача со стороны может показаться простой, но под ней таится минимум настройка деплоймента и связанные с ним процессы: qa, система голосований и апрувов, система разворачивания локального проекта.

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

Здесь подразумевается контроль достоверности выбора следующего координатора, путём голосования.

О том, что сделано за последние недели

Три недели назад наш координатор Егор начал передачу всего, чем владел. Были выдвинуты пожелания разработать условия, при которой активные члены сообщества смогут занять место координатора или куратора определённого направления. Как результат работы было сделано следующее:

Коллективно был написан Устав и Дополнение к Уставу Разработана процедура выбора ответственных за направления С помощью голосования, выбраны тимлиды Проведено несколько митингов Обговорено множество организационных моментов

после чего:

Организован хостинг, арендованный на пожертвования активных членов сообщества Настроено окружение, способное принять поток пользователей Нам был передан репозиторий вместе со скриптами для QA и деплоя Начата процедура перенятия под своё управление аккаунтов и групп в соц. сетях, связанных с drupal.ru Итог

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

Ключевые слова:  drupal.ru




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Сайт и проект Drupal.ru 5 Спасибо

Источник: http://drupal.ru/node/134378

Drupal-школа – восьмое занятие: блок представления и управление видимостью блоков на Drupal 8

Практическое занятие про работу с блоками на drupal 8. Делаем отдельный блок для пользовательского фильтра представления (раскрытая форма). Настраиваем видимость блоков – в каком разделе блок будет виден, а в каком – нет.


Drupal-школа – проект посвященный обучению школьников (13 гимназия, г. Новосибирск) веб-разработке на основе CMS Drupal 8. Поддерживается администрацией школы, сибирским сообществом друпаллеров DrupalSib и группой компаний i20.

Версия Drupal:  Drupal 8.* Ключевые слова:  друпалшкола




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  DrupalSib 0 Спасибо

Источник: http://drupal.ru/node/134386

Модуль Deploy – Стейджинг материалов

Модуль  deploy предназначен для упрощения подготовки и пред-просмотра контента Drupal сайта.

Deploy автоматически обслуживает зависимости между объектами (например взаимосвязанные сущности). Он содержит богатый API

Deploy был повторно переписан для Drupal 8 и основывается на  Multiversion и  replication модулях.
Он обеспечивает очень гибкую и эффективную платформу для создания контента в Drupal8.

Для установки достаточно просто получить код модуля в соответствующую директорию (например modules/contrib)
и активировать (например с помощью UI или drush).

Модуль зависим от  Workspace.

У модуля  Deploy нет страницы настройки конфигурации, что бы он работал, пользователь должен убедиться, что целевые рабочие области и/или внешний доступ настроены корректно (страницы настройки рабочих областей предоставляются модулем  workspace).

В качестве пользовательского интерфейса (UI), Deploy предоставляет только ссылки для запуска развертывания текущей активной рабочей области и ее целей:

Если для текущей активной рабочей области не настроено целевое рабочее пространство, то по нажатии ссылки “Развернуть”, пользователь получает сообщение об ошибке:

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

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


По мотивам https://www.drupal.org/docs/8/modules/deploy/drupal-to-drupal-deployment-between-two-or-more-sites следует продолжение этой статьи,
в комментариях – прошу ваши вопросы и пожелания.

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 8.* Ключевые слова:  deploy




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Установка и настройка 6 Спасибо

Источник: http://drupal.ru/node/134380

Contenta CMS – Модный Друпал

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

Но эволюция современного web оставила далеко позади потребность в традиционных сайтах,
генерирующих страницы на сервере.

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

Для организации хранения данных таких приложений может послужить Drupal.
В новой версии есть все необходимые инструменты, однако существует более продвинутое решение.
Contenta CMS это Drupal дистрибутив, из коробки предоставляющий современный API.
В нем собран весь необходимый список контриб модулей, необходимых для организации API.
Предоставлены примеры для различных js фреймворков, и пример приложения drupal.

Официальный ресурс проекта http://www.contentacms.org
содержит исчерпывающую информацию по установке и использованию.

Проект упакован в удобный шаблон и содержит установочный профиль.
Подробнее про drupal project тут: Прощай Drush Make, Привет Composer
Сборка и установка включая демо данные – дело 2х-3х минут.

composer create-project contentacms/contenta-jsonapi-project api –stability dev –no-interaction
cd api/web
drush si contenta_jsonapi –db-url=sqlite://sites/default/files/.ht.sqlite

Для запуска встроенного веб сервера

drush rs

По адресу 0.0.0.0:8888 у нас работающее приложение.

В примере содержатся упорядоченные ссылки на документацию, в частности на плейлисты доков по использованию  jsonapi и  simple_oauth .

Для API Существует отличная документация

А в целом – это привычный Drupal со всем своими UI, и улучшенной темой для администрирования.

Однако теперь он отвечает на запросы клиентских приложений, и отдает данные в JsonAPI формате.

Для работы с API незаменимый инструмент это Postman

Существует несколько примеров реализации клиентского приложения.

В этой статье рассматривается минималистичный фреймворк Nuxt.js для создания веб приложений на Vue.js.

Что такое Nuxt.js?

Nuxt.js — это фреймворк для универсальных приложений на Vue.js.

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

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

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

Кроме того, мы также предоставляем другую опцию разработки: nuxt generate. С помощью неё можно статически генерировать приложения на Vue.js. На наш взгляд, эта опция может оказаться следующим большим шагом на пути разработки микросервисных веб-приложений.

Как фреймворк, Nuxt.js привносит множество возможностей, помогающих разработке, таких как: асинхронные данные, middleware, шаблоны и др.

Пример клиентского приложения достаточно просто получить и использовать.
https://github.com/contentacms/contenta_vue_nuxt

git clone https://github.com/contentacms/contenta_vue_nuxt.git
cd contenta_vue_nuxt

# установка зависимостией
npm install

# запуск сервера для localhost:3000
npm run dev

# продакшн сборка и запуск сервера
npm run build
npm run start

# генерация статического проекта
npm run generate

# запуск тестов из test/unit каталога
npm test

# для выгрузки на github страницу :
# НЕОБХОДИМО работать с репозоторием  "youname.github.io"
npm run deploy

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

Бонусом: эти два приложения удобно запускать одновременно, например с foreman примерно так:

# Procfile.dev
vue_js: npm –prefix=$(pwd)/web run dev
drupal: drush –root=$(pwd)/api/web rs

foreman start -f Procfile.dev

В итоге мы получаем простой и симпатичный каталог кулинарных рецептов, для стилизации используется bluma css

На фронтенд работает реактивный Vue с серверным рендером от Nuxt, на бекенд Drupal 8 с JSON API и Simple Oauth.
Это отличный пример Drupal Headless

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 8.* Ключевые слова:  Headless Модули и темы:  jsonapi simple_oauth




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Программирование 4 Спасибо

Источник: http://drupal.ru/node/134348

Глобальные изменения в работе drupal.ru (aka ответ на претензии Дубовского)

1 .Почему был снят с публикации в разделе бизнеса РаДон

По морально-этическим причинам. Детали:

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

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

Как вы будете строить отношения с этим человеком дальше – дело сообщества. Я с ним дел иметь не намерен. Далее причин с ним общаться у меня более не будет.

2. Как так оказалось, что Константин рулит твиттером?

По датам точно не помню, но в момент изменений drupal.ru он пришел и сказал: “вот твиттер акк, я его раскручивал как мог. Держи пароли, забирай” (вольный пересказ, цитату долго искать).
Мой ответ был прост (вольный пересказ):
- наведи порядок, рекомендую убрать все, что не связано с друпалом, я прикручу сейчас кросспостинг с главной. Рули дальше. Инициатива наказуема исполнением.

3. Почему я игнорирую В. Степанькова

Без комментариев.

4. Что дальше?

Некоторое время назад я понял, что дальше тянуть эту лямку не могу. Попытался настроить мосты с Воиновым. Потом появилась информация из пункта 1. Я пошел на встречу, замял конфликт и готов был идти на диалог. Мои требования при передаче домена:

С тех пор прошло 2 месяца. Дубовской создал очередную волну “все плохо”, “царь все сам решает” и “давит конкурентов”, что привело к этому посту.

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

Временным исполняющим обязанности куратора стал @mbaev. И банально по причине, что “больше не кому”.

Тут много написано, большие скриншоты. Мое уважение тем, кто дочитал до конца. Значит вам не безразлична судьба ВАШЕГО сообщества.

Как последний совет, даже напутствие – если у вас возникло желание помочь ресурсу, не дать ему быть захваченным людьми, для которых Drupal = Деньги === Бизнес, чтобы ресурс был не просто справочником, но площадкой с возможностью ОТКРЫТОГО обмена мнением (пусть и с ТМ или другим механизмом) – проявляйте активность. Решите для самих себя – чем именно вы готовы помочь и сделайте это. Пусть это будет даже разовая помощь на форуме, пример культурного ответа новичку или банальный твит на интересный топик. Все это важно! Главное от души и от сердца.

А я что мог, то сделал. Мое время помогать сообществу прошло.
Удачи вам!

PS: На текущий момент у меня нет никаких прав на сайте drupal.ru (обычный пользователь), сайт размещен не на моих серверах. Мною не будет проводится никакой деятельности для сообщества и для сайта как такового. Я убрал свой бизнес из раздела “бизнес”. Свернул финансирование Друпал и буду заниматься совсем другими делами.






email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Модераторский 22 Спасибо

Источник: http://drupal.ru/node/134345

Модуль “Версия для слабовидящих” (Drupal 8)

Кто разрабатывал сайты для государственных, муниципальных, образовательных учреждений знает, что у сайта должна быть обязательно “версия для слабовидящих”. Хочу предложить своё решение этого вопроса. Думая над логикой модуля, чтобы всё не усложнять я пришел к следующему решению: проще всего сделать “версию для слабовидящих” отдельной темой оформления и переключать темы на лету. Необходимо установить и подготовить тему оформления, которая будет “для слабовидящих”. В admin/config/special_module/settings выбрать эту тему. Сама панель с кнопками находится в теме оформления и выглядит вот так:

Да-да, интерфейс позаимствовал с небезызвестного правительственного сайта Модуль после включения создаёт 2 уже готовых блока: “версия для слабовидящих”

и “обычная версия”.

Первый нужно разместить на обычной теме оформления, а второй соответственно на “версии для слабовидящих”. Вот собственно и всё, с помощью этих двух блоков мы переключаем тему оформления.

Так же с помощью CSS можно изменить изображения на кнопках в блоках.

Подробнее на официальной странице проекта

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 8.*




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Программирование 0 Спасибо

Источник: http://drupal.ru/node/134340

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

Newsletter:  Новости Друпал


Примечания к выпуску:
Настоятельно рекомендуется обновить существующие сайты на Drupal 8, т.к. в новой версии решена проблема связанная с безопасностью Drupal Core – Critical – Multiple Vulnerabilities – SA-CORE-2017-004

0 Спасибо

Источник: http://drupal.ru/node/134331

Оптимизация каталога интернет магазина для продвижения (Дарья Бочкарёва) [DrupalCamp Краснодар 2016]

В своём докладе Дарья Бочкарёва расскажет о вариантах настройки индексации фильтров в разделах каталога, об оптимизации страниц фильтров под низко- и среднечастотные запросы.
Презентация находится здесь -> https://www.slideshare.net/DrupalYug/ss-75922646
Репосты и лайки приветствуются, заходим в группу мероприятия и на наш канал на YouTube -> https://www.youtube.com/user/drupalyug

>> Все презентации с конференции “DrupalCamp Краснодар 2016″

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 0 Спасибо

Источник: http://drupal.ru/node/134310

Drupal-школа – седьмое занятие: форматы ввода и представления на Drupal 8

Практическое занятие по настройке форматов ввода и созданию представлений на Drupal 8.

Содержание: настройка форматов ввода на drupal 8; особенности безопасной настройки форматов ввода для сайтов, размещающих контент от множества пользователей; основы работы с представлениям: представление как настраиваемый список материалов сайта, создание нового представления; настройка выводимых полей; настройка типа представления; настройка фильтрации материалов; настройка сортировки материалов; тестирование представления; добавление представления в меню сайта; настраиваемая посетителем сайта фильтрация и сортировка вывода; метки и столбцы выводимых данных в представлении на drupal 8.

Drupal-школа – проект посвященный обучению школьников (13 гимназия, г. Новосибирск) веб-разработке на основе CMS Drupal 8. Поддерживается администрацией школы, сибирским сообществом друпаллеров DrupalSib и группой компаний i20.

Версия Drupal:  Drupal 8.* Ключевые слова:  друпалшкола




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  DrupalSib 1 Спасибо

Источник: http://drupal.ru/node/134309

Аудит безопасности Drupal (Кочетов Дмитрий) [DrupalCamp Краснодар 2016]

А вот и снова доклад с DrupalCamp Краснодар 2016 от Дмитрия Кочетова о том, как правильно провести аудит безопасности Drupal сайта.
Презентация находится здесь -> https://www.slideshare.net/secret/amUTHSnIJyzCIp
Видео: https://www.youtube.com/user/drupalyug
А ваши лайки должны находиться под этим видео. Смотрим и делимся с друзьями.

>> Все презентации с конференции “DrupalCamp Краснодар 2016″

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 0 Спасибо

Источник: http://drupal.ru/node/134287

Реактивный фронтенд фреймворк для людей (Константин Комелин) [DrupalCamp Краснодар 2016]

Очередной крутой доклад с Drupal Camp Краснодар 2016. Константин Комелин рассказал, что такое Vue.js, чем он удобен и, естественно, как интегрировать этот фреймворк с нашим любимым Drupal!
Презентация находится здесь -> https://www.slideshare.net/DrupalYug/ss-74813987
Видео: https://www.youtube.com/user/drupalyug
Репосты, лайки и подписка – простые шаги, чтобы увидеть все доклады, с нашего мероприятия!

>> Все презентации с конференции “DrupalCamp Краснодар 2016″

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 2 Спасибо

Источник: http://drupal.ru/node/134266

Практический обзор Google AMP (Accelerated Mobile Pages) в Drupal 8 (Богдан Романенко) [DrupalCamp Краснодар 2016]

Теперь доклад Богдана Романенко о том, как, зачем и кому нужно ускорить работу web-страниц на мобильных устройствах и, собственно, как можно реализовать Google AMP в Drupal 8.
Презентация здесь -> https://www.slideshare.net/secret/9OQXBRSi64y1Pm
Видео: https://www.youtube.com/user/drupalyug
Ждём ваши лайки и репосты, а видео с DrupalCamp Краснодар 2016 на этом не заканчиваются, поэтому продолжаем следить за новостями!

>> Все презентации с конференции “DrupalCamp Краснодар 2016″

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 1 Спасибо

Источник: http://drupal.ru/node/134243

За 5 секунд до аварии (Андрей Левашов) [DrupalCamp Краснодар 2016]

Живой доклад Андрея Левашова с Drupal Camp 2016, в котором он поделился опытом своей студии о том, как понять, что всё закончится плохо, когда ещё ничего не началось.
Презентация находится здесь -> https://www.slideshare.net/secret/qujLhElPqyHj7M
Лайки, репосты и подписка это то, что нужно не только нам, но и вам, ведь ещё так много интересных докладов!
https://www.youtube.com/user/drupalyug

>> Все презентации с конференции “DrupalCamp Краснодар 2016″

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 0 Спасибо

Источник: http://drupal.ru/node/134201

Модуль “Архив блога”

Когда-то давно у меня был блог на платформе гугла blogger.com Там был хороший блок “Архив блога”, который разбивал записи по месяцам

Сейчас блог на Drupal 7 и мне захотелось такой же блок. Готовых решений найдено не было, были лишь вопросы на форумах и редкие ответы. Собрав всю информацию воедино, я сделал модуль. Он создает представление (view), и с помощью JavaScript можно сворачивать разворачивать данные.

Скачать модуль можно с официальной страницы проекта

Посмотреть “вживую” можно здесь

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.*




email





facebook





linkedin





twitter





google+





pinterest
4 Спасибо

Источник: http://drupal.ru/node/134195

Drupal-школа – шестое занятие: настройка отображения полей; управление меню и блоками на Drupal 8

Практическое занятие по Drupal 8: настройка отображения полей материала; создание и размещение дополнительного меню; создание и управление блоками содержимого.

Содержание: настройка отображения полей типа материала (в тизере и в основном материале); настройка и скрытие метки поля; создание и настройка навигационного меню; добавление ссылок в меню; добавление блока меню в нужный регион сайта; добавление и редактирование кастомного блока (с произвольным содержанием).

Версия Drupal:  Drupal 8.*




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  DrupalSib 2 Спасибо

Источник: http://drupal.ru/node/134192

Промо-страница для Drupal

У нас хорошие новости)

Была проведена инициатива по сбору средств на публичную страницу была проведена в Drupal-чате https://gitter.im/dru-io/Drupal , github-странице https://github.com/dru-io/promo/issues/1, телеграм-чате https://t.me/drupal_rus . Мы хотели общими силами сделать понятную, современную страницу, отвечающую на вопрос “Что такое Drupal?”.

Мы сделали первую итерацию этой страницы, она доступна по адресу http://drupal.dru.io/ . На нее может ссылаться каждый, когда ему задают вопрос “А почему Drupal?”.

Будет еще дорабатываться, пожелания писать в гитхабе https://github.com/dru-io/promo/issues/ . Исходники доступны также в гитхабе https://github.com/dru-io/drupal.dru.io . По вашим пожеланиям и корректировкам страницы уже ушло много коммитов в продакшн, все готовы развивать идею дальше.

Спасибо всем участникам: http://drupal.dru.io/thanks !

Версия Drupal:  Drupal 8.*




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  FAQ 4 Спасибо

Источник: http://drupal.ru/node/134184

Как владельцам облачных сервисов выйти на рынок Drupal (Антон Шлома)[DrupalCamp Краснодар 2016]

А вот и доклад Антона Шломы в котором он освещает следующие вопросы:
1. Что такое облачные сервисы?
2. Микросервисная архитектура
3. API
4. Какой интерес у сервиса?
5. Целевая аудитория
6. Почему Drupal идеально подходит?
7. Семь шагов к выходу на рынок Drupal.
8. Пример работы с клиентом облачного сервиса, обзор работ и продуктов.
Остальные видео с Drupal Camp Краснодар 2016 вы можете найти у нас в группе или же на нашем канале https://www.youtube.com/channel/UCKMeeh1W1pNu6SqMWw3Mokg
Презентация находится здесь -> https://www.slideshare.net/DrupalYug/drupal-73641756
Смотрим, делимся этим видео с друзьями и лайками с этой записью

>> Все презентации с конференции “DrupalCamp Краснодар 2016″

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 2 Спасибо

Источник: http://drupal.ru/node/134177

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

Newsletter:  Новости Друпал

Примечания к выпуску:
Обновления с безопасностью отсутствуют.

Выпущена готовая к использованию версия Drupal 8.3.6
Исправлена ошибка:
#2897576: Resaving a view display results in deletion of view display

Подробнее об новой версии
Узнайте больше о Drupal 8

Ключевые слова:  Drupal 8.3.6 0 Спасибо

Источник: http://drupal.ru/node/134165

Batch, Entity и другие вспомогательные инструменты для импорта данных в Drupal (Геворг Мкртчян) [DrupalCamp Краснодар 2016]

А вот и доклад Геворга Мкртчяна прямиком с Drupal Camp Краснодар 2016!
В своём докладе Геворг рассказывает о том, как интегрировать Drupal с разными внешними сервисами и системами.
Презентация здесь -> https://www.slideshare.net/DrupalYug/batch-queue-entity
Видео: https://www.youtube.com/watch?v=TEmaWBSs9Dw (не забудьте ПОДПИСАТЬСЯ!)
Как обычно смотрим, комментируем, ставим лайки и репостим себе!

>> Все презентации с конференции “DrupalCamp Краснодар 2016″

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 0 Спасибо

Источник: http://drupal.ru/node/134157

Как организовать REST API в Drupal 8 (Евгений Ильин) [DrupalCamp Краснодар 2016]

А теперь у нас мощный доклад от Евгения Ильина, который на Drupal Camp Краснодар 2016 рассказал о том, как организовать Rest Api на Drupal 8
Видео здесь: https://www.youtube.com/watch?v=Fsa8Dwu4Ewo (Не забудьте ПОДПИСАТЬСЯ!)
Репостим, отдаём свои лайки и естественно подписываемся на нашу группу, чтобы видеть и следующие доклады!

>> Все презентации с конференции “DrupalCamp Краснодар 2016″

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 0 Спасибо

Источник: http://drupal.ru/node/134141

Интересный способ получить список категорий бренда в Drupal

Получение списка категорий бренда – с виду довольно тривиальная задача, но при её решении всплывают подводные камни. Давайте разберёмся: как правило, в интернет-магазинах товары классифицируются как минимум по двум словарям – каталог и бренд. Например, товар под названием “мобильный телефон” относится к термину “мобильные телефоны” из словаря “каталог” и к термину “Завод имени Ленина” из словаря “производители”. Довольно часто заказчик ставит перед разработчиком задачу отобразить на странице производителя все категории, в которых у производителя есть товары. Т.е. на странице “Завод имени Ленина” необходимо отобразить ссылки на разделы “мобильные телефоны”, “холодильники”, “ядерные боеголовки”. Любой, кто знаком с друпалом, но не сталкивался с решением этой задачи, с ходу скажет, что это решается за 1 минуту через Views. Однако, на самом деле всё не так просто. Сразу напрашивается алгоритм – выводим материалы, с контекстным фильтром по бренду, отображаем только поле “Каталог” и дело якобы в шляпе. Но ведь товаров могут быть тысячи, поэтому категории многократно продублируются, а поскольку вьюс сделан по нодам, то ни уникальность запроса, ни агрегация нам не помогут. Не поможет также и группировка полей, т.к. помимо поля группировки, надо вывести ещё что-нибудь. Можно конечно же раздраконить шаблон представления, убрать оттуда вывод $rows, оставить только заголовки, но это костыль, ведь вьюс всё равно будет собирать тысячи товаров, которые не будет выводить.

Именно поэтому я решил, что оптимально будет написать свой запрос в базу, чтобы получить айдишники нужных терминов, а далее уже как-нибудь их обработать – либо вывести кодом, либо передать айдишники во views, и там уже настроить вывод, как душе угодно. Сам запрос делается в таблицу taxonomy_index, а для того, чтобы получить термины другого словаря, мы просто приджойним эту таблицу к самой себе. Собственно, код:

<?php
// Select terms
  $query = db_select('taxonomy_index', 'ti');
  $query->innerJoin('taxonomy_index', 'ti2', 'ti.nid=ti2.nid');
  // Если вам не нужно название термина, то эту строку можно пропустить
  $query->innerJoin('taxonomy_term_data', 'td', 'td.tid=ti2.tid');
  $query->fields('ti2', array('tid'));
  // и эту тоже
  $query->fields('td', array('name'));
  $query->condition('ti.tid', $args[0]);
  $query->condition('ti2.tid', $args[0], '<>');
  $query->distinct();
  $terms = $query->execute()->fetchAll();
?>

Приведённый код я использовал в своём Custom Ctools content type, поэтому аргумент с айдишником бренда указан как $args[0], естественно, вы можете использовать это и в другом контексте, например, в кастомном модуле, блоке, шаблоне и т.д. Из полученных айдишников я сгенерировал ссылки вида catalog/%category/%brand, которые ведут на страницы с вьюсами с двумя контекстными фильтрами, чтобы показать товары, относящиеся одновременно и к указанной категории, и к бренду.

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

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

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Ключевые слова:  Drupal Таксономия




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  FAQ 5 Спасибо

Источник: http://drupal.ru/node/134125

Системных администраторов поздравляю с профессиональным праздником

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

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

Мое вам уважение и благодарность за труд!
С днем Сисадмина!

Отдельный поклон команде, поддерживающей работоспособность нашего форума!






email





facebook





linkedin





twitter





google+





pinterest
2 Спасибо

Источник: http://drupal.ru/node/134091

Первое правило дизайна – никому не говорить о дизайне (Вадим Кендюхов) [DrupalCamp Краснодар 2016]

А сегодня у нас доклад Вадима Кендюхова о дизайне, куда, где и как правильно его применять. Ещё один доклад с Drupal Camp 2016 Краснодар, который достоин лайков, репостов и подписки на нашу группу!
Презентация лежит вот по этому адресу -> https://www.slideshare.net/DrupalYug/ss-73641529/1
Видео: https://www.youtube.com/watch?v=9WTMWqwvkbc

>> Все презентации с конференции “DrupalCamp Краснодар 2016″

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 0 Спасибо

Источник: http://drupal.ru/node/134087

Как работать с конфигурациями в Drupal 8 (Александр Дубовской) [DrupalCamp Краснодар 2016]

Очередной доклад с DrupalCamp 2016 Краснодар от Александра Дубовского в котором он расскажет о том, как
работать с конфигурациями в Drupal.

Видео здесь: https://www.youtube.com/watch?v=oWM5xgp8NyU (Не забудьте ПОДПИСАТЬСЯ!)
Презентация: https://www.slideshare.net/DrupalYug/drupal-8-73641490
Лайки, репосты и подписка это то, что нужно не только нам, но и вам, ведь ещё так много интересных докладов!

>> Все презентации с конференции “DrupalCamp Краснодар 2016″

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 2 Спасибо

Источник: http://drupal.ru/node/134064

Инструменты для SEO в CMS Drupal 7.x/8.x.x (Пётр Селфин) [DrupalCamp Краснодар 2016]

Какой бы крутой сайт не был сделан, все усилия будут напрасны, если его никто не посетит. А с помощью чего вывести сайт в топ я расскажу в своём докладе про инструменты SEO в Drupal.
Видео: https://www.youtube.com/watch?v=uEIrLr42OyE (Не забудьте ПОДПИСАТЬСЯ!)
Презентация: https://www.slideshare.net/DrupalYug/seo-cms-drupal

Лайки, репосты и подписка всё также радуют нас!

>> Все презентации с конференции “DrupalCamp Краснодар 2016″

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 0 Спасибо

Источник: http://drupal.ru/node/134058

Drupal-школа – пятое занятие: связывание раздела на сайте и типа материала на Drupal 8

Практическое занятие по связыванию раздела на сайте и типа материала на Drupal 8.

Содержание: создание терма таксономии, связанной с разделами сайта; добавление поля для связи с разделом в нужный тип материала; добавление раздела в навигационное меню; настройка видимости поля раздела в материале.

Фрагмент занятия от 8.02.2017.

Drupal-школа – проект, посвященный обучению школьников (13 гимназия, г. Новосибирск) веб-разработке на основе CMS Drupal 8. Поддерживается администрацией школы, сибирским сообществом друпаллеров DrupalSib и группой компаний i20.

Версия Drupal:  Drupal 8.* Ключевые слова:  друпалшкола




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  DrupalSib 1 Спасибо

Источник: http://drupal.ru/node/133906

Про RestFul в Drupal 8

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

В общем-то, он прав. Но я бы хотел поделиться чем-то, что мне нравится и что уже успешно применено на практике.

Речь пойдет о RESTful Web Services API.

Эта новинка Drupal 8 дает возможность сторонним разработчикам использовать (и изменять) данные приложений. Например, взаимодействие с мобильными приложениями или фронтэнд построен таким образом, что от сервера требуются только данные, а отрисовка HTML происходит на клиенте.

Эти функции как-то в один момент сглаживают неуклюжесть младенца и сразу появляется желание понаблюдать за ним еще, не правда ли? Давайте разбираться дальше.

Методы HTTP

GET для получения данных (SELECT).

В случае “удачного” (или не содержащего ошибок) адреса, GET возвращается представление ресурса в формате XML или JSON (в зависимости от значения переменной _format) в сочетании с кодом состояния HTTP 200 (OK).
В случае наличия ошибок обычно возвращается код 404 (NOT FOUND) или 400 (BAD REQUEST).

По этому поводу есть отличный пример:

        GET http://example.com/api/v1/program/1?_format=json
        HEADERS: Content-Type: application/json POST для добавления данных (INSERT)

При успешном создании ресурса возвращается HTTP код 201, а также в заголовке ‘Location’ передается адрес созданного ресурса.

Пример:

        GET http://example.com/entity/user/?_format=json
        HEADERS:
                Content-Type: application/json
                Authorization: Basic XXXX
                X-CSRF-Token: XXXX  - получить его можно по этому пути http://example.com/rest/session/token
        BODY:
                {
                        "name":[{"value":"test"}],
                        "status":[{"value":"1"}],
                        "mail":[{"value":"

Великолепный nuxt.js шаблон приложения vue.js и drupal 8 в одной коробке

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

Мы же понимаем, что ни один здравомыслящий фронтэнд разработчик не будет планировать drupal для api,
но… Drupal тоже может)

В этом обзоре я рассмотрю установку каркаса проекта с акцентом на удобства разработчика.

Цель: локальная среда для фулстек разработки на базе drupal8 и vue.js

Выбрав ЯП, принимаем соответствующий менеджер зависимостей.

В этом примере применяются: php, js, ruby

Следовательно, используем composer, npm, bundler

Руби используем с одной целью, пакет foreman позволит запустить в одном сеансе наши локальные сервера разработчиков.

Создадим каталог проекта

mkdir application

Сфокусируем внимание на построении каркаса приложения.

Первой командой соберем фронтенд

vue init nuxt/starter app

Второй командой соберем бэкенд

composer create-project drupal-composer/drupal-project:8.x-dev api –stability dev –no-interaction

Создадим Gemfile и укажем в нем foreman

# Gemfile
gem ‘foreman’

Установим

bundle install

Настроим

# Procfile.dev
vue: npm –prefix $(pwd)/app run dev
drupal: drush rs –root=$(pwd)/api/web

Теперь у нас есть возможность запуска обоих приложений:

foreman start -f Procfile.dev

Создадим скрипт обертку для этой команды

mkdir bin
touch bin/server
echo "foreman start -f Procfile.dev" > bin/server
chmod +x bin/server

Запуск

./bin/server

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

Например для добавления в проект axios:

cd app
yarn add axios

Или, для добавления модулей и установки drupal:

cd ../api
composer require jsonapi simple_oauth devel
cd web
drush si –db-url=sqlite://sites/default/files/.ht.sqlite

В итоге получаем полное разделение:
отдельное серверное приложение на базе drupal 8 организует api для доступа клиентского приложения к данным,
отдельное клиентское приложение на базе nuxt.js обеспечивает интерфейс пользователя.


Документация для работы со стеком nuxt.js drupal8:

https://babeljs.io/learn-es2015/ https://ru.vuejs.org/v2/guide/ https://ru.nuxtjs.org/guide https://github.com/mzabriskie/axios https://github.com/drupal-composer/drupal-project https://www.youtube.com/watch?v=–ZL3EAhnwc&list=PLZOQ_ZMpYrZsyO-3IstImK1okrpfAjuMZ https://www.youtube.com/watch?v=rTcC0maPLSA&list=PLZOQ_ZMpYrZtqy5-o7KoDhM3n6M0duBjX

Исходный код примера в репозитории на GitLab:

https://gitlab.com/multpix/vue_drupal Тип материала:  Предлагаю решение Версия Drupal:  Drupal 8.* Ключевые слова:  Headless Vue.js Модули и темы:  jsonapi simple_oauth




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Установка и настройка 2 Спасибо

Источник: http://drupal.ru/node/133837

Что такое headless Drupal?


В последнее время идёт очень много разговоров о headless (иногда ещё его называют decoupled) Drupal. Давайте попробуем разобраться, что же это такое и какие преимущества это может нам дать. Headless означает “безголовый”, т.е. друпалу просто взяли и зачем-то оторвали голову, как в том анекдоте про змею:

«- Давайте отрубим ей хлебало!
- Нет, давайте лучше отрубим ей хвост!
- Точно! По самое хлебало!»

Этот анекдот весьма уместен в нашем контексте, ибо в концепции headless Drupal под головой понимается именно то, что многие привыкли называть “мордой”, т.е. весь слой темизации – сама тема и всё, что отвечает непосредственно за рендеринг html. Второе название этой концепции – decoupled – означает “разделённый”, что подразумевает, то, что функции рендеринга где-то всё же выполняются, но не в друпале. В общем, в headless-системах Drupal отдаёт данные не в виде HTML-страниц, а посредством REST-сервисов в форматах JSON, XML, HAL и т.д. Основные кейсы применения такого подхода приблизительно следующие:

– когда доступ к контенту осуществляется посредством мобильных приложений;
– когда контент изначально предназначен для отправки в другую систему (автоматизированный обмен данными);
– когда нужно сделать обычный сайт;

Если с первыми двумя пунктами всё понятно, то третий наверняка у многих вызывает вопросы, ведь нормально же работали годами, а тут какой-то хэдлес появился. Типичный кейс, когда такой подход будет наиболее выигрышным – это сайт с обилием динамических элементов страниц и с большим количеством форм, например, соцсеть или CRM-система. Однако даже для простеньких бложиков такой подход может дать множество преимуществ, но об этом чуть позже, сперва давайте разберёмся, что нужно для построения такой системы. Возможно, вы уже догадались, что фронтенд и бэкенд в таком случае будут двумя совершенно раздельными приложениями. По сути, это два разных сайта, расположенных в разных доменах (субдоменах)

Backend

В качестве бэкенда необходимо взять Drupal 8. Ни в коем случае не 7, т.к. там глубина интеграции с REST-сервисами изначально не такая большая, как в восьмёрке. Достаточно включить модуль Rest, входящий в ядро, и уже можно получать, создавать, удалять через REST любые сущности, а также создавать вьюсы в формате REST-экспорта. Однако, “родной” формат, в котором Drupal 8 выдаёт JSON, изначально не совсем удобен для работы, поэтому я также рекомендую установить модуль JSONAPI, с ним вам даже не понадобится включать Views, но это отдельная история, заслуживающая целой публикации (которую я планирую написать в ближайшее время).

Frontend

В качестве фронтенда берём любой актуальный javascript-фреймворк, например React или Vue. Для тех, кто любит мастерить велосипеды и составлять картину мира из миллионов маленьких фрагментов, предпочтителен React, для тех же, кто привык следовать чётко выверенным инструкциям, лучше выбрать Vue. Глобально же никакой особой разницы нет.

Сервер

Если вы ленивый идиот начинающий разработчик и привыкли деплоить сайты по FTP, то вы сможете разместить свой сайт на любом хостинге, правда о сервер-сайд рендеринге (SSR) придётся забыть. Если же вы привыкли пользоваться системой контроля версий, то вам будет необходим как минимум виртуальный сервер, чтобы вы смогли установить на нём Node.js – это позволит вам собирать фронтенд-приложение из исходников прямо на сервере с учётом всех переменных окружения.

В итоге получается приблизительно так: в домене site.com располагается файл index.html, который также подгружает скрипты и стили. Сами же данные забираются с домена backend.site.com и отображаются в вашем фронтенд-приложении. Роутинг (обработка ссылок) при этом происходит не на сервере, а во фронетнд-приложении, это называется клиентский роутинг. Т.е. по сути вы загружаете одну единственную HTML-страницу, которая сама решает, как отображать нужные данные. Именно поэтому такие приложения часто называют SPA – Single Page Application (одностраничное приложение). Яркие примеры таких приложений – Facebook, Gitter, LinkedIn.

Зачем мне всё это?

Самая важная проблема, стоящая на пути освоения новых технологий – это мотивация. Я постараюсь вам её дать Если в двух словах, то при построении сайтов по принципу headless Drupal + какой-нибудь современный js-фреймворк вы легко сможете делать сайты с реально крутым и быстрым интерфейсом. При этом для разработчика появляются следующие преимущества:

1. То, что раньше вы делали с помощью JQuery, теперь можно делать значительно быстрее. Ведь в JQuery для обработки какого-либо события приходилось отлавливать само событие и потом к нему цеплять логику обработки элементов страницы. С использованием современных фреймворков это не нужно, т.к. большинство из них поддерживают “реактивность” – это связанность отображения с данными. Т.е. если элемент выводит некий переменный текст, достаточно указать, что он выводит некую переменную, и затем, при обновлении значения переменной элемент перерисуется автоматически.

2. В разы ускоряется настройка самого друпала. Если вы используете JSONAPI, то всё, что вам нужно – это создать необходимые типы контента и добавить им нужные поля. И всё! Не нужно настраивать отображение, не нужно делать вьюсы. Буквально полчаса настройки и можно переходить к проектированию фронтенда.

3. Больше не нужно устанавливать или писать самому модули для “украшательств”. Больше не понадобится писать hook_form_alter, чтобы повесить на поле “.col-sm-3″. Больше не надо мучаться с AJAX-коллбэками. Для динамических форм вам больше не нужен богомерзкий “#states”.

4. Снижается нагрузка на сервер. При запросе данных через jsonapi часто происходит неполный бутстрап друпала, не вызываются функции темизации, не вызывается ничего лишнего, ведь при запросе ноды вы получите только ноду, а не кучу контента из хэдера, футера, сайдбаров, менюшек и т.д. А некоторые страницы фронтенд-приложение и вовсе сможет обрабатывать без запросов к серверу.

5. За этим будущее. Со временем люди забудут про спиннеры, перестанут пускать туман с запахом печенья, отнесут гироскутер на балкон или в подвал, но хайп вокруг SPA-приложений не утихнет ещё очень долго.

Я знаю, о чём вы сейчас подумали.

Действительно, если нам в друпале не нужно делать ничего, связанного с темизацией, то нам придётся сделать это в javascript. Однако, спешу вас заверить – это не так сложно, как кажется. Один из основных принципов разработки фронтенда на javascript – это использование готовых компонентов. Хотите галерею – вот вам готовая галерея, хотите графики строить – на выбор есть десятки компонентов разной степени навороченности, хотите всё сделать в стиле Material Design – получите полный сет стилизованных компонентов. Да, многие компоненты уже изначально поставляются со своими стилями, и бывает так, что на вёрстку практически не нужно тратить время. Кроме того, создавать собственные компоненты вовсе не сложно, равно как и совсем не сложно переопределить стили сторонних компонентов.

И традиционная ссылка на оригинал статьи в моём блоге

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 8.* Ключевые слова:  Headless




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Установка и настройка 3 Спасибо

Источник: http://drupal.ru/node/133803

Что будет если соединить Drupal 8 и React.js узнали при переносе сайта

Эта статья о том, как уже существующий проект переносили на React.

Библиотека React считается быстрым из-за VirtualDOM. В компоненте есть метод render, который вызывается при каждом обновлении компонента. Затем результат рендера (здесь и далее под рендером будет иметься в виду именно вызов функции render компонента, а не рендер в реальный DOM) обрабатывается Реактом, сравнивается результат текущего рендера с результатом предыдущего и в реальный DOM вносятся только необходимые изменения, а не целиком. Учитывая, что операции с реальным DOM медленные, это должно быть быстрее.

React хорош тем, что его можно использовать с любым backend. При разворачивании проекта, запуск
npm run build приведет к созданию оптимизированной сборки приложения в build-папке.

В качестве документации был взят сайт https://facebook.github.io/react/.

Начнем мы с создания среды для успешной разработки на React.

npm install -g create-react-app
create-react-app my-app
 
cd my-app
npm start

Создали файл package.json, который является инструкцией/описанием для нашего проекта. Выглядит он таким образом:

{
  "name": "VelvetDev",
  "version": "0.1.0",
  "private": true,
  "dependencies": {
    "axios": "^0.16.2",
    "jquery": "^3.2.1",
    "prop-types": "^15.5.10",
    "react": "^15.5.4",
    "react-dom": "^15.5.4",
    "react-popup": "^0.8.0",
    "react-slick": "^0.14.11",
    "react-validation": "^2.10.9",
    "slick-carousel": "^1.6.0",
    "validator": "^7.0.0"
  },
  "devDependencies": {
    "react-scripts": "1.0.7"
  },
  "scripts": {
    "start": "react-scripts start",
    "build": "react-scripts build",
    "test": "react-scripts test –env=jsdom",
    "eject": "react-scripts eject"
  }
}

Заполним наш index.html файл

<!doctype html>
<html lang="en">
  <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <meta name="theme-color" content="#000000">
    <meta name="description" content="VelvetDev is a Drupal Development company that specialized in portals, social Network and E-commerce sites. Drupal is our passion. Drupal is our life. Drupal is our everything."/>
    <meta name="keywords" content=”drupal, drupal 7, drupal 8, php,
         development, site” />
 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/latest/css/bootstrap.min.css">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/latest/css/bootstrap-theme.min…>
    <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick.min.css" />
    <link rel="stylesheet" type="text/css" href="https://cdnjs.cloudflare.com/ajax/libs/slick-carousel/1.6.0/slick-theme…. />
    <title>VelvetDev – Drupal Development company</title>
  </head>
  <body>
    <noscript>
      You need to enable JavaScript to run this app.
    </noscript>
    <div id="root"></div>
    <div id="popupContainer"></div>
  </body>
</html>

Далее, запустим наш сайт с помощью команды npm start, это возможно, потому что у нас в файле package.json есть секция scripts, в которой прописана команда start.

Главный компонент App

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

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

Файл app.js выглядит следующим образом:

import React, {Component} from ‘react’;
import ‘./App.css’;
import Header from ‘./components/Header/Header’;
import Welcome from ‘./components/Welcome/Welcome’;
import Services from ‘./components/Services/Services’;
import WhatWeDo from ‘./components/WhatWeDo/WhatWeDo’;
import Team from ‘./components/Team/Team’;
import Contacts from ‘./components/Contacts/Contacts’;
import Footer from ‘./components/Footer/Footer’;
import axios from ‘axios’;
 
const baseUrl = ‘YUOR_SITE’;
const suffixUrl = ‘YOUR_SUFFIX’;
 
class App extends Component {
 
  constructor(props) {
    super(props);
    this.state = {
      configData: {},
      xCSRFToken: ”
    };
  };
 
  componentDidMount() {
    axios.get(baseUrl + suffixUrl + ‘/jsonapi/config_pages/front_page’)
      .then(res => {
        if (res.status === 200) {
          const configData = res.data.data[0].attributes;
          this.setState({configData: configData});
        }
      });
    axios.get(baseUrl + suffixUrl + ‘/session/token’)
      .then(res => {
        if (res.status === 200) {
          this.setState({xCSRFToken: res.data});
        }
      });
  }
 
  render() {
    return (
      <div className="App">
        <Header configData={ this.state.configData }
                baseUrl={ baseUrl }
                xCSRFToken={ this.state.xCSRFToken } />
        <div className="wrapper">
          <div className="container-fluid">
            <Welcome configData={ this.state.configData } />
            <Services configData={ this.state.configData }
                      baseUrl={ baseUrl }
                      source={suffixUrl + "/api/v1/services"} />
            <WhatWeDo configData={ this.state.configData }
                      baseUrl={ baseUrl }
                      source={suffixUrl + "/api/v1/projects"} />
            <Team configData={ this.state.configData }
                  baseUrl={ baseUrl }
                  source={suffixUrl + "/api/v1/teams"} />
            <Contacts configData={ this.state.configData }
                      baseUrl={ baseUrl + suffixUrl }
                      xCSRFToken={ this.state.xCSRFToken } />
            <Footer configData={ this.state.configData }
                    baseUrl={ baseUrl }
                    source={suffixUrl + "/api/v1/social-links"} />
          </div>
        </div>
      </div>
    );
  }

}
 
export default App;

Опишем используемые для создания Velvetdev методы и компоненты

Создание класса: class App extends Component.

       Состояние
Задавая свойство state для текущего класса, мы говорим реакту: “Это данные, за которыми стоит следить”. При изменении состояния React будет проводить свои магические манипуляции с виртуальным DOM и заново рендерить все изменившиеся элементы. При использовании свойства state необходимо придерживаться одного простого правила: состояние задается присваиванием всего один раз при инициализации компонента. Другими словами, не стоит присваивать значения напрямую, а вместо этого использовать функцию setState. Событие onChange меняет состояние.

setStateng> изменяет состояние компонента и сообщает React, что этот компонент и его дочерние элементы должны быть повторно отображены с обновленным состоянием. Это основной метод, который мы используем для обновления пользовательского интерфейса в ответ на обработчики событий и ответы сервера.

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

У каждого компонента могут быть свойства. Они хранятся в this.props, и передаются компоненту как атрибуты. В свойство можно передать любой javascript примитив, объект, переменную и даже выражение. Значение свойства должно быть взято в фигурные скобки.

Ключевое слово this будет относиться к экземпляру компонента внутри которого находится.

getInitialState() вызывается один раз перед монтированием компонента. Возвращаемое значение будет использоваться в качестве начального значения this.state.

       Рендеринг

Мы создали компонент. Но React пока не знает, что с ним делать. Чтобы увидеть результат нашей работы необходимо сообщить библиотеке react-dom, что надо это отрендерить и показать. Делается это с помощью функции render, которую мы предварительно изъяли из библиотеки: первым параметром функция принимает компонент, который нужно отрендерить, вторым — DOM элемент (или элементы) в которых нужно отрендерить данный компонент.

       Валидация

Валидация нужна для блока контакты. Код этого блока выглядит следующим образом:

import React, {Component} from ‘react’;
import Validation from ‘react-validation’;
import axios from ‘axios’;
import Popup from ‘react-popup’;
 
class ContactForm extends Component {
 
  constructor(props) {
    super(props);
    this.state = {
      email: ”,
      name: ”,
      message: ”,
    };
    this.onChange = this.onChange.bind(this);
    this.onSubmit = this.onSubmit.bind(this);
  }
 
  onChange(event) {
    let fieldName = event.target.name;
    let stateObject = {};
    stateObject[fieldName] = event.target.value;
    this.setState(stateObject);
  }
 
  onSubmit(event) {
    event.preventDefault();
    const self = this;
    const url = this.props.baseUrl + ‘/entity/contact_message?_format=json’;
    const data = {
      "name": [{"value": this.state.name}],
      "mail": [{"value": this.state.email}],
      "subject": [{"value": this.state.message.split(‘ ‘)[0]}],
      "contact_form": [{"target_id": "contact"}],
      "uid": [{"target_id": "0"}],
      "message": [{"value":  this.state.message}]
    };
    axios.get(this.props.baseUrl + ‘/session/token’)
      .then(res => {
        if (res.status === 200) {
          const instance = axios.create({
            headers: {‘X-CSRF-Token’: res.data}
          });
          instance.post(url, data)
            .then(function (response) {
              if (response.status === 201) {
                Popup.alert(‘Your message has been successfully sent!’);
                self.setState({
                  email: ”,
                  name: ”,
                  message: ”,
                });
              }
            }).catch(function (error) {
            console.log(error);
            Popup.alert(‘Error!’);
          });
        }
      });
  }
 
  render() {
    return <Validation.components.Form ref={c => {
      this.form = c
    }} className="contact-form" onSubmit={this.onSubmit}>
      <div className="col-md-8">
        <div className="contacts-form form-group">
          <div className="form-group border row">
            <div className="col-md-5 half-block top row ">
              <label className="col-sm-4 half-left text-left">
                Name*
              </label>
              <div className="col-sm-8 half-right">
                <Validation.components.Input className="form-control border"
                                             onChange={this.onChange}
                                             value={this.state.name}
                                             errorClassName=‘error’
                                             placeholder="Name" name=‘name’
                                             validations={[‘required’]}/>
              </div>
            </div>
            <div className="col-md-2">
            </div>
            <div className="col-md-5 half-block top row">
              <label className="col-sm-4 half-left text-left">
                Email*
              </label>
              <div className="col-sm-8 half-right">
                <Validation.components.Input className="form-control border"
                                             onChange={this.onChange}
                                             errorClassName=‘error’
                                             value={this.state.email}
                                             placeholder="Email" name=‘email’
                                             validations={[‘required’, ‘email’]}/>
              </div>
            </div>
            <div className="col-md-12 whole-block row">
              <label className="col-sm-4 col-form-label whole-left text-left">
                Message*
              </label>
              <div className="col-sm-8 half-center">
                <Validation.components.Textarea className="form-control border"
                                                onChange={this.onChange}
                                                value={this.state.message}
                                                placeholder="Hi"
                                                errorClassName="error"
                                                name=‘message’
                                                validations={[‘required’]}/>
              </div>
            </div>
            <div className="col-md-12 col-null">
              <Validation.components.Button
                className="btn btn-lg btn-primary btn-block text-uppercase send left">Submit</Validation.components.Button>
            </div>
          </div>
        </div>
      </div>
    </Validation.components.Form>;
  }
 
}
 
export default ContactForm;

Непросто проверять формы с помощью React. Причина – односторонний стиль потока данных. В этом случае мы не можем легко влиять на формы с входов. React-validation предоставляет несколько компонентов, которые «подключены» к форме через метод ввода, прикрепленный компонентом Form.
ПРИМЕЧАНИЕ. Всегда нужно передавать name и validations реквизиты. Они необходимы.
Для использования валидации мы установили react-validation:

npm install react-validation

Компоненты и реквизит

React-validation обеспечивает components объект, который содержит Form, Input, Select, Textarea и Button компоненты. Все они – только пользовательские обертки вокруг собственных компонентов. Они могут принимать любые действительные атрибуты и несколько дополнительных:

containerClassName – Input, Select и Textarea: react-validation обертывает нативные компоненты дополнительным блоком. Эта опора добавляет className к обертке. errorContainerClassName: Модификатор ошибки обертки className. validations- Input, Select и Textarea: принимает массив строк проверки, который ссылается на ключи объекта правил. errorClassName – Input, Select, Button и Textarea: добавляет переданное значение className на появлениях ошибок.

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

       Validation.components.Form

Самый важный компонент, который обеспечивает сердцевину проверки реакции. Он в основном смешивает привязку между самой формой и дочерними компонентами проверки реакции через context. Любые действительные реквизиты могут быть легко перенесены на Form такие onSubmit и method.
Form Предоставляет четыре общедоступных метода:

validate(name)- проверяет ввод с переданным именем. Разница между этим методом и проверкой по умолчанию заключается в том, что validate маркирует ввод как isUsed и isChanged. name — имя соответствующего компонента. showError(name [,hint])- помогает обрабатывать ошибки асинхронного API. hint – необязательный подсказку для показа. Может быть строкой (ключ ошибки, ex ‘required’) или функция, которая возвращает подсказку (jsx). hideError(name) – скрывает ошибку соответствующего компонента. validateAll()- проверяет все компоненты проверки реакции. Возвращает карту (ключ: имя поля prop, значение: Array не прошел правила проверки) недопустимых полей.

       Mounting: componentDidMount

componentDidMount()

Вызывается один раз, только на клиенте (не на сервере), сразу же после того, как происходит инициализация рендеринга. На данном этапе в жизненном цикле компонент имеет представление DOM, к которому мы можем получить доступ с помощью this.getDOMNode().

       Array.prototype.map()

Для нашего сайта использовались массивы, для хранения объектов. Поэтому нам пригодился такой метод как map().
Метод map() создаёт новый массив с результатом вызова указанной функции для каждого элемента массива. Метод map вызывает переданную функцию callback один раз для каждого элемента, в порядке их появления и конструирует новый массив из результатов её вызова. Функция callback вызывается только для индексов массива, имеющих присвоенные значения, включая rel=”nofollow”>undefined. Она не вызывается для пропущенных элементов массива (то есть для индексов, которые никогда не были заданы, которые были удалены или которым никогда не было присвоено значение.

Функция callback вызывается с тремя аргументами: значением элемента, индексом элемента и массивом, по которому осуществляется проход.
Если в метод map был передан параметр thisArg, при вызове callback он будет использоваться в качестве значения this. В противном случае в качестве значения this будет использоваться значение
undefined . В конечном итоге, значение this, наблюдаемое из функции callback, определяется согласно обычным правилам определения this, видимого из функции.

Метод map не изменяет массив, для которого он был вызван (хотя функция callback может это делать).

Диапазон элементов, обрабатываемых методом map, устанавливается до первого вызова функции callback. Элементы, добавленные в массив после начала выполнения метода map, не будут посещены функцией callback. Если существующие элементы массива изменяются функцией callback, их значения, переданные в функцию, будут значениями на тот момент времени, когда метод map посетит их; удалённые элементы посещены не будут.
Код из блока Team, где использовался данный метод:

<Slider {…settings}>
            {
              this.state.team.map(function (el, key) {
                return (
                  <div key={key}>
                    <TeamItem
                      image={ self.props.baseUrl + el.user_picture }
                      name={el.first_name}
                      position={el.position}
                    />
                  </div>
                );
              })
            }
</Slider>

Мы использовали у родительского элемента атрибут key. Если объяснить предельно просто: реакту нужна уникальность, чтобы все его механизмы работали корректно. По “ключу” он будет понимать с каким именно дочерним узлом мы работаем и какому родителю он принадлежит.

       React-axios

Данный метод используется для получения данных.
Axios.get является асинхронной функцией, которая означает, что остальная часть кода будет выполнена. И когда ответ сервера будет получен, функция then будет выполнена.

Код из блока WhatWeDo, где использовался данный метод:

  componentDidMount() {
    axios.get(this.props.baseUrl + this.props.source)
      .then(res => {
        if (res.status === 200) {
          this.setState({ projects:res.data });
        }
      });
  } d8.png448.3 КБ Тип материала:  Предлагаю решение Версия Drupal:  Drupal 8.* Ключевые слова:  Drupal8 create-react-app scss перенос сайта




email





facebook





linkedin





twitter





google+





pinterest
1 Спасибо

Источник: http://drupal.ru/node/133787

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

Newsletter:  Новости Друпал


Примечания к выпуску:
Обновления с безопасностью отсутствуют

Выпущена готовая к использованию версия Drupal 8.3.5.
Переводчикам следует обратить внимание на несколько незначительных изменений со времени последней версии.
Узнайте больше о Drupal 8.

Ключевые слова:  Drupal 8.3.5 0 Спасибо

Источник: http://drupal.ru/node/133784

Drupal-школа – четвертое занятие: создание нового типа контента, управление полями и их отображением на Drupal 8.

Практическое занятие по созданию нового типа материалов и работе с полями на Drupal 8.

Содержание: добавление нового вида материалов; настройка полей; настройка полей с изображениями (минимальное и максимальное разрешение и пр.); управление отображением полей в материале и его тизере; настройка показа материала на главой странице; настройка показа автора и даты публикации материала .

Фрагмент занятия от 1.02.2017.

Drupal-школа – проект посвященный обучению школьников (13 гимназия, г. Новосибирск) веб-разработке на основе CMS Drupal 8. Поддерживается администрацией школы, сибирским сообществом друпаллеров DrupalSib и группой компаний i20.

Версия Drupal:  Drupal 8.* Ключевые слова:  друпал-школа




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  DrupalSib 4 Спасибо

Источник: http://drupal.ru/node/133695

Обновление Drupal (новые версии Drupal 7.56 и Drupal 8.3.4)

Newsletter:  Новости Друпал

Примечания к выпуску:
Настоятельно рекомендуется обновить существующие сайты на Drupal 7 и Drupal 8, т.к. в новых версиях решена проблема связанная с безопасностью DRUPAL-SA-CORE-2017-003

Описание:

PECL YAML – CVE-2017-6920

Парсер PECL YAML не безопасно обрабатывает объекты PHP во время определенных операций в ядре Drupal. Это может привести к удаленному выполнению кода.

Файл REST ресурса неправильно проверяет – CVE-2017-6921

Ресурс REST файла неправильно обрабатывает некоторые поля при работе с файлами. Сайт будет затронут этим, лишь в том случае, если на сайте включен модуль RESTful Web Services (rest), ресурс REST файла включен и разрешает запросы PATCH, а злоумышленник может получить или зарегистрировать учетную запись пользователя на сайте с разрешениями на загрузку файлов и изменить файловый ресурс.

Файлы, загруженные анонимными пользователями в частную файловую систему, могут быть доступны другим анонимным пользователям – CVE-2017-6922

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

Команда безопасности Drupal также получила сообщения о том, что эта уязвимость используется для целей спама, аналогично сценарию, обсуждаемому в PSA-2016-003 для общедоступной файловой системы.

Подробнее об новых версиях

0 Спасибо

Источник: http://drupal.ru/node/133662

Как создать подтему (sub-theme) Drupal 7 и для чего это нужно

Добрый день в этом посте я вам расскажу, как создать подтему (англ. sub-theme) для Drupal 7 и для чего это нужно. Чтоб не читать сей длинный опус предлагаю посмотреть видео:

Ну а для тех, кто лучше воспринимает информацию визуально вот некая расшифровка видео.

Для чего это нужно

Вариант №1. Скачали вы тему с d.org или где-то ее купили, есть большая вероятность того, что вас эта тема устраивает не полностью. И вы начинаете вносить в нее какие-то изменения. Но вот автор темы выпустил обновления, вы не думая обновились и все вроде бы прекрасно, но все ваши изменения пропали.

Вариант №2. Создали вы свою тему и все у вас прекрасно, но вот пришел заказчик, начальник или вы сами вдруг решили не много изменить тему под какой-то, например, праздник. Не переделывать же основную тему, а через какое-то время ее менять обратно.

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

Как создать

В друпал 7 есть стандартная тема Бартик, на ее основе мы будем делать подтему. Для начала переходим в папку sites/all/themes и создаем там папку с нашей темой, допустим swd. Называться наша тема должна на английском и начинаться с буквы. Внутри папки swd создаем файл swd.info, именно по этому файлу друпал поймет, что мы создали тему. Так же содаем папку css и в ней файл style.css. Так как мы создаём тему на основе Бартика, то рекомендую вам просто скопировать содержимое bartik.info в наш файл, с не большими изменениями:

name = SWD
description = SWD Bartik sub-theme
package = Core
version = 0.1
core = 7.x
base theme = bartik

stylesheets[all][] = css/style.css

regions[header] = Header
regions[help] = Help
regions[page_top] = Page top
regions[page_bottom] = Page bottom
regions[highlighted] = Highlighted

regions[featured] = Featured
regions[content] = Content
regions[sidebar_first] = Sidebar first
regions[sidebar_second] = Sidebar second

regions[triptych_first] = Triptych first
regions[triptych_middle] = Triptych middle
regions[triptych_last] = Triptych last

regions[footer_firstcolumn] = Footer first column
regions[footer_secondcolumn] = Footer second column
regions[footer_thirdcolumn] = Footer third column
regions[footer_fourthcolumn] = Footer fourth column
regions[footer] = Footer

Самое главное в нашем файле, это строка base theme = bartik, где bartik машинное имя родительской темы. На нашем сайте заходим в Оформление и видим, что появилась наша тема, включаем ее по умолчанию и переходим на главную страницу. Видим, что тут слегка все перекошено. Все это потому, что у нас пустой css, вы можете заполнять его своими свойствами или полностью скопировать css родительской темы и вносить свои изменения.

Так же можно переопределять шаблоны рендеринга страниц в нашей теме. Например, из папки themes/bartik/templates мы можем скопировать файл page.tpl.php в нашу тему (рекомендую в нашей теме создать папку templates и копировать туда, но можно и в корень нашей темы). Этот файл отвечает за рендеринг страниц нашего файла. Для того чтобы убедиться, что все работает предлагаю удалить из него, например, вот это:

<?php if ($main_menu): ?>
      <div id="main-menu" class="navigation">
        <?php print theme(‘links__system_main_menu’, array(
          ‘links’ => $main_menu,
          ‘attributes’ => array(
            ‘id’ => ‘main-menu-links’,<h3></h3>
            ‘class’ => array(‘links’, ‘clearfix’),
          ),
          ‘heading’ => array(
            ‘text’ => t(‘Main menu’),
            ‘level’ => ‘h2′,
            ‘class’ => array(‘element-invisible’),
          ),
        )); ?>
      </div> <!– /#main-menu –>
    <?php endif; ?>

Этот кусок отвечает за вывод main menu (основного меню). Обязательно очищаем кэш, переходим на главную страницу и видим, что меню в верху страницы больше нет, а значит все подключилось и прекрасно работает.

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

Вместо заключения

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

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Ключевые слова:  sub-theme




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Установка и настройка 2 Спасибо

Источник: http://drupal.ru/node/133615

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

Newsletter:  Новости Друпал

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

В данной версии Drupal отсутствую исправления связанные с безопасностью.

В версия Drupal 7.55 сделаны изменения в .htaccess

Изменена поддержка таких сервисов, как Let’s Encrypt, заставив Drupal не блокировать известный каталог, определенный RFC 5785 (см. # 2847325). Изменение, позволяющее сайтам Drupal корректно работать на Apache 2.4, когда модуль mod_access_compat Apache отключен (см. # 1599774).

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

Подробнее об новой версии

0 Спасибо

Источник: http://drupal.ru/node/133504

Выпущен Drupal 8.3.3

Newsletter:  Новости Друпал

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

Выпущена готовая к использованию версия Drupal 8.3.3. См. CHANGELOG.txt для ознакомления с изменениями и улучшениями со времени последней минорной версии. Узнайте больше о Drupal 8.

Этот выпуск содержит только исправления ошибок, а также улучшения документации и тестирования.

В этой версии Drupal 8 решены следующие важные проблемы:

# 2302137: Повысить производительность, если значение ссылки в меню совпадает с исходным значением # 2804391: Ссылки на резервные ссылки, указывающие на не-ноды, меняют тип на ноды и разрывают ссылку

Изменения в процессе обновления с Drupal 8.2.3

Drupal 8.2.3 (и последующие), больше не будут содержать библиотек разработки PHP (ранее они находились в ядре Drupal 8, а теперь их надо будет дополнительно устанавливать). Drupal 8 больше не будет включать зависимости разработчиков в пакетах выпуска. См. UPDATE.TXT в Drupal для получения полных инструкций по обновлению.

Подробнее об новой версии

Ключевые слова:  Выпущен Drupal 8.3.3 0 Спасибо

Источник: http://drupal.ru/node/133496

Не используйте PHP фильтр!

На форуме некоторые товарищи, иногда рекомендуют для решения задачи использовать встроенный в ядро PHP фильтр, или Views PHP. Никогда так не делайте! И вот почему:

Данный код пишется в базу, поэтому его нельзя будет отследить через систему контроля версий, например git. (если вы не используете систему контроля версий в разработке – это тоже плохо). Поля с php-фильтром не кэшируются. Код в php-фильтре выполняется через eval(). Код через eval работает медленнее, не кэшируется opcache-м, а на некоторых хостингах eval может быть отключен из соображений безопасности. Не информативные сообщения об ошибках. Что-то типа error in eval() on line 4. Где этот кусок кода, что с ним делать? Проблемы с обновлением модулей. Обновление модуля – и у вас куча ошибок, которые сложно найти и исправить. Сложно писать и поддерживать такой код. В обычном textfield – нет форматирования как в IDE, да и шрифт не моноширинный. Копировать туда-обратно тоже заколебаться можно. Человеческий фактор. Всегда существует возможность ошибки в конфигурации, которая позволит не доверенным пользователям заюзать php-фильтр. ОЙ! Безопасность в целом. Любой сайт могут взломать, но присутствие на сайте php-фильтра может сделать последствия взлома гораздо тяжелее. XSS, SQL-инъекция – и вот вас уже shell прямо в базе. =) Сложности деплоя. Нельзя просто обновить файлы на сервере. Надо лезть в админку, и копипастить код в нужные места. Хотя обычно в PHP-фильтр пишут прямо на продакте. Не стоит работать на продакте. Повышается цена ошибки. Одна небольшая опечатка в сквозном блоке – и всё пропало, шеф.

Хорошо, PHP-фильтр использовать не стоит. А что же тогда делать?

Через template_preprocess хуки. Можно создать свой токен и вставлять его с помощью  token_filter Можно создавать вычисляемые поля с помощью  computed_field. Этот модуль даже сам подскажет вам, какое название функции использовать. Если используется Display Suite – можно написать своё Display Suite поле Ещё варианты, тысячи их! В зависимости от задачи. Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Модули и темы:  PHP filter display suite computed_field token_insert




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Программирование 8 Спасибо

Источник: http://drupal.ru/node/133488

Модуль Performance Monitor – оценка производительности системного окружения

Всем привет!

Недавно я опубликовал модуль Performance monitor, который позволяет быстро и из админки Drupal оценить производительность системного окружения Drupal сайта.

В каким случаях он будет полезен:

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

Модуль помогает:

Оценить время генерации страниц. Проверить статус и настройки MySQL. Проверить включен ли php opcache. Проверить используется ли сайтом Memcached для кэширования. Собрать статистику по потреблению системных ресурсов для дальнейшей оптимизации.

Надеюсь модуль будет полезен, буду рад услышать комментарии и предложения по использованию, доработке, исправлению ошибок в модуле.

Ссылка на краткую инструкцию в блоге: https://drupal-admin.ru/blog/performance-monitor
Ссылка на модуль: https://www.drupal.org/project/perfmon

performance-monitor1.png109.87 КБ Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Ключевые слова:  Drupal 7 производительность Модули и темы:  perfmon




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Системное окружение 5 Спасибо

Источник: http://drupal.ru/node/133474

Земельная реформа друпал.ру

Access Level Control (ALC) Проблемы Притеснение новичков со стороны старожилов Дублирование контента Контент не по тематике Цели Снизить травлю новичков Заинтересовать сообщество в создании качественного контента Решение

Для решения данной задачи требуется реорганизация структуры проекта с внедрением ограничения на публикацию контента. Всех пользователей ресурса можно разделить на 5 категорий:

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

Предлагается “лестничное разграничение прав” на доступ к контенту. Проблема заключается в следующем: к “новичок -> администратор -> кодер” можно спокойно применить “лестницу”, то “спамеры” и “заказчики” под этот принцип не попадают. Принцип лестничного разграничения прав предполагает, что любая ступенька “лестницы” может просматривать контент всех остальных ступений, за исключением закрытых разделов для каждой ступени. Публикация контента возможна внутри своей ступени и остальные низлежащие ступени за исключением закрытых разделов этих ступеней.

Повышение/понижение прав доступа

Для проверки уровня доступа предлагается использовать целочисленный счётчик для каждого пользователя. Чтобы всё не скатилось в кармафаппинг за “спасибки” необходима умная расчётная система.

Баллы начисляются:

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

Баллы снимаются:

Тёмная материя Нарушение правил Минусование вопросов (за глупость, некорректность) Публикация материалов в вышестоящие ступени

Возможна при ручном переносе модератором. Для этого вопрос должен иметь флаг на необходимость переноса топика вверх по лестнице (возможно даже указание ступени), либо находится в специальном разделе. Решение по переносу вопроса принимает модератор.

Реорганизация структуры контента

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

ALC В зависимости от количества баллов юзера: Спамеры, Заказчики (0кацэ) Новички (10кацэ) Администраторы (20кацэ) Кодеры (30кацэ). Типы контента - На данный момент я вижу пока 5 типов контента: Публикация – обучающий или инфо материал (Доступен всем, кроме первой категории) Вопрос – Собственно вопрос, как сделать какую-нить “хреньку” (Всем, кроме первой категории) Ответ – Ответ на вопрос (Всем, кроме первой категории) Услуги – Раздел для спаммеров, рекламирующих свой хостинг и прочую якобы полезную “лабуду” (Доступен всем) Заказы – Раздел, где заказчики, могут оставлять свои заказы (Доступен всем)

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

На этом у меня всё. Вопросы, критика, предложения в комменты.






email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Сайт и проект Drupal.ru 7 Спасибо

Источник: http://www.drupal.ru/node/133433

Земельная реформа друпал.ру

Access Level Control (ALC) Проблемы Притеснение новичков со стороны старожилов Дублирование контента Контент не по тематике Цели Снизить травлю новичков Заинтересовать сообщество в создании качественного контента Решение

Для решения данной задачи требуется реорганизация структуры проекта с внедрением ограничения на публикацию контента. Всех пользователей ресурса можно разделить на 5 категорий:

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

Предлагается “лестничное разграничение прав” на доступ к контенту. Проблема заключается в следующем: к “новичок -> администратор -> кодер” можно спокойно применить “лестницу”, то “спамеры” и “заказчики” под этот принцип не попадают. Принцип лестничного разграничения прав предполагает, что любая ступенька “лестницы” может просматривать контент всех остальных ступений, за исключением закрытых разделов для каждой ступени. Публикация контента возможна внутри своей ступени и остальные низлежащие ступени за исключением закрытых разделов этих ступеней.

Повышение/понижение прав доступа

Для проверки уровня доступа предлагается использовать целочисленный счётчик для каждого пользователя. Чтобы всё не скатилось в кармафаппинг за “спасибки” необходима умная расчётная система.

Баллы начисляются:

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

Баллы снимаются:

Тёмная материя Нарушение правил Минусование вопросов (за глупость, некорректность) Публикация материалов в вышестоящие ступени

Возможна при ручном переносе модератором. Для этого вопрос должен иметь флаг на необходимость переноса топика вверх по лестнице (возможно даже указание ступени), либо находится в специальном разделе. Решение по переносу вопроса принимает модератор.

Реорганизация структуры контента

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

ALC В зависимости от количества баллов юзера: Спамеры, Заказчики (0кацэ) Новички (10кацэ) Администраторы (20кацэ) Кодеры (30кацэ). Типы контента - На данный момент я вижу пока 5 типов контента: Публикация – обучающий или инфо материал (Доступен всем, кроме первой категории) Вопрос – Собственно вопрос, как сделать какую-нить “хреньку” (Всем, кроме первой категории) Ответ – Ответ на вопрос (Всем, кроме первой категории) Услуги – Раздел для спаммеров, рекламирующих свой хостинг и прочую якобы полезную “лабуду” (Доступен всем) Заказы – Раздел, где заказчики, могут оставлять свои заказы (Доступен всем)

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

На этом у меня всё. Вопросы, критика, предложения в комменты.






email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Сайт и проект Drupal.ru 7 Спасибо

Источник: http://drupal.ru/node/133433

Drupal и vue.js: как работать без jquery

Вольный перевод: https://www.adcisolutions.com/knowledge/drupal-vuejs-how-work-without-jquery

Начиная с 5-ой версии, Drupal содержит jQuery.
Это замечательный инструмент для разработчика. Был)
В настоящее время мы сталкиваемся с массой задач, проблем, которые эта библиотека не решает, и не снимает.

Зачем обращать внимание на Vue.js? О чем пойдет речь в статье?

Как улучшить пользовательский интерфейс без jQuery. Как работать с компонентами Vue.js. Как интегрировать Vue.js со сторонними библиотеками. Как создать простое одностраничное приложение.

Начало

Самый простой способ подключить библиотеку vue.js – используя тег script

<script src="https://unpkg.com/vue"></script>

Кроме этого можно использовать npm пакет или модуль drupal.

Улучшение пользовательского интерфейса

Увы, Drupal не позволяет нам разрабатывать современный реактивный пользовательский интерфейс.
В ядре есть jQuery – но эта либа, не для этих дел)
Попробуем Vue.js для улучшения некоторых пользовательских элементов Drupal.

К примеру, мы хотим показать кнопку “Создать нового пользователя” только тогда, когда заполнены поля “Почта” и “Имя пользователя”.

<form enctype="multipart/form-data" action="/user/register" method="post" id="user-register-form" accept-charset="UTF-8">
<div id="edit-account" class="form-wrapper">
 <div class="form-item form-type-textfield form-item-name">
   <label for="edit-name">Username <span class="form-required" title="This field is required.">*</span></label>
   <input class="username form-text required" autocapitalize="none" type="text" id="edit-name" name="name" value="" size="60" maxlength="60" v-model="name">
 </div>
<div class="form-item form-type-textfield form-item-mail">
 <label for="edit-mail">Email <span class="form-required" title="This field is required.">*</span></label>
<input type="text" id="edit-mail" name="mail" value="" size="60" maxlength="254" class="form-text required" v-model="mail">
</div>
<div class="form-actions form-wrapper" id="edit-actions"><input type="submit" id="edit-submit"
name="op" value="Create new account" class="form-submit" v-show="name && mail"></div>
</div>
</form>

var app = new Vue({
 el: ‘#user-register-form’,
 data: {
   name: ”,
   mail: ”,
 }
})

Компоненты Vue.js

Сообщество Vue.js может предложить множество потрясающих компонентов, один из которых попробуем использовать.

Цель, проверить входные данные на стороне клиента, добавим следующее:

<script src=”https://cdn.jsdelivr.net/vee-validate/2.0.0-beta.25/vee-validate.js”></script>

vee-validate это легкий плагин Vue.js, позволяющий проверять поля ввода и отображать ошибки

Изменим элементы ввода

<input class="username form-text required" autocapitalize="none" type="text" id="edit-name"
name="name" value="" size="60" maxlength="60" v-model="name" v-validate.initial="name"
data-rules="required|alpha|min:3">
<input type="text" id="edit-mail" name="mail" value="" size="60" maxlength="254"
class="form-text required" v-model="mail" v-validate.initial="email"
data-rules="required|email">

Как вы видите, использовать Vue.js и ее компоненты для улучшения существующих элементов – не сложно.

Vue.js и другие библиотеки

В этом примере интегрируем jQuery плагин select2 обернув его в свой компонент.

<div id="el"></div>

<!– using string template here to work around HTML <option> placement restriction –>
<script type="text/x-template" id="demo-template">
  <div>
    <p>Selected: {{ selected }}</p>
    <select2 ptions="options" v-model="selected">
      <option disabled value="0">Select one</option>
    </select2>
  </div>
</script>

<script type="text/x-template" id="select2-template">
  <select>
    <slot></slot>
  </select>
</script>

Vue.component(’select2′, {
  props: [‘options’, ‘value’],
  template: ‘#select2-template’,
  mounted: function () {
    var vm = this
    $(this.$el)
      // init select2
      .select2({ data: this.options })
      .val(this.value)
      .trigger(‘change’)
      // emit event on change.
      .on(‘change’, function () {
        vm.$emit(‘input’, this.value)
      })
  },
  watch: {
    value: function (value) {
      // update value
      $(this.$el).val(value).trigger(‘change’);
    },
    options: function (options) {
      // update options
      $(this.$el).select2({ data: options })
    }
  },
  destroyed: function () {
    $(this.$el).off().select2(‘destroy’)
  }
})

var vm = new Vue({
  el: ‘#el’,
  template: ‘#demo-template’,
  data: {
    selected: 2,
    options: [
      { id: 1, text: ‘Hello’ },
      { id: 2, text: ‘World’ }
    ]
  }
});

Vue.js не ведет себя так, как будто она одна на весь сайт (в отличии от React).
Мы можем использовать другие js-компоненты и позволить им работать с Virtual DOM.

Одностраничное приложение

Все что нужно для создания одностраничного приложения – есть в vue-router.

<script src=”https://unpkg.com/vue-router/dist/vue-router.js”></script>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>

<div id="app">
  <h1>Hello App!</h1>
  <p>
    <!– use router-link component for navigation. –>
    <!– specify the link by passing the `to` prop. –>
    <!– <router-link> will be rendered as an `<a>` tag by default –>
    <router-link to="/foo">Go to Foo</router-link>
    <router-link to="/bar">Go to Bar</router-link>
  </p>
  <!– route outlet –>
  <!– component matched by the route will render here –>
  <router-view></router-view>
</div>

const Foo = { template: ‘<div>foo</div>’ }
const Bar = { template: ‘<div>bar</div>’ }

// Each route should map to a component. The "component" can
// either be an actual component constructor created via
// Vue.extend(), or just a component options object.
// We’ll talk about nested routes later.
const routes = [
  { path: ‘/foo’, component: Foo },
  { path: ‘/bar’, component: Bar }
]

// You can pass in additional options here, but let’s
// keep it simple for now.
const router = new VueRouter({
  routes // short for routes: routes
})

// Make sure to inject the router with the router option to make the
// whole app router-aware.
const app = new Vue({
  router
}).$mount(‘#app’)

Заключение

Как мы уже убедились – Vue.js прост в использвании, и полезен для проектов любого масштаба.
Надеюсь, после прочтения статьи, вы начнете удовлетворять свое любопытство на практике.
Сылки ниже могут быть полезны.

http://vuejs.org/
https://www.npmjs.com/package/vue
https://www.drupal.org/project/vuejs
http://about.gitlab.com/2016/10/20/why-we-chose-vue/
https://github.com/jcottrell/vue-example-contact-form
https://medium.freecodecamp.com/vue-js-introduction-for-people-who-know-just-enough-jquery-to-get-by-eab5aa193d77

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 8.* Ключевые слова:  Vue.js




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Программирование 2 Спасибо

Источник: http://www.drupal.ru/node/133411

Drupal и vue.js: как работать без jquery

Вольный перевод: https://www.adcisolutions.com/knowledge/drupal-vuejs-how-work-without-jquery

Начиная с 5-ой версии, Drupal содержит jQuery.
Это замечательный инструмент для разработчика. Был)
В настоящее время мы сталкиваемся с массой задач, проблем, которые эта библиотека не решает, и не снимает.

Зачем обращать внимание на Vue.js? О чем пойдет речь в статье?

Как улучшить пользовательский интерфейс без jQuery. Как работать с компонентами Vue.js. Как интегрировать Vue.js со сторонними библиотеками. Как создать простое одностраничное приложение.

Начало

Самый простой способ подключить библиотеку vue.js – используя тег script

<script src="https://unpkg.com/vue"></script>

Кроме этого можно использовать npm пакет или модуль drupal.

Улучшение пользовательского интерфейса

Увы, Drupal не позволяет нам разрабатывать современный реактивный пользовательский интерфейс.
В ядре есть jQuery – но эта либа, не для этих дел)
Попробуем Vue.js для улучшения некоторых пользовательских элементов Drupal.

К примеру, мы хотим показать кнопку “Создать нового пользователя” только тогда, когда заполнены поля “Почта” и “Имя пользователя”.

<form enctype="multipart/form-data" action="/user/register" method="post" id="user-register-form" accept-charset="UTF-8">
<div id="edit-account" class="form-wrapper">
 <div class="form-item form-type-textfield form-item-name">
   <label for="edit-name">Username <span class="form-required" title="This field is required.">*</span></label>
   <input class="username form-text required" autocapitalize="none" type="text" id="edit-name" name="name" value="" size="60" maxlength="60" v-model="name">
 </div>
<div class="form-item form-type-textfield form-item-mail">
 <label for="edit-mail">Email <span class="form-required" title="This field is required.">*</span></label>
<input type="text" id="edit-mail" name="mail" value="" size="60" maxlength="254" class="form-text required" v-model="mail">
</div>
<div class="form-actions form-wrapper" id="edit-actions"><input type="submit" id="edit-submit"
name="op" value="Create new account" class="form-submit" v-show="name && mail"></div>
</div>
</form>

var app = new Vue({
 el: ‘#user-register-form’,
 data: {
   name: ”,
   mail: ”,
 }
})

Компоненты Vue.js

Сообщество Vue.js может предложить множество потрясающих компонентов, один из которых попробуем использовать.

Цель, проверить входные данные на стороне клиента, добавим следующее:

<script src=”https://cdn.jsdelivr.net/vee-validate/2.0.0-beta.25/vee-validate.js”></script>

vee-validate это легкий плагин Vue.js, позволяющий проверять поля ввода и отображать ошибки

Изменим элементы ввода

<input class="username form-text required" autocapitalize="none" type="text" id="edit-name"
name="name" value="" size="60" maxlength="60" v-model="name" v-validate.initial="name"
data-rules="required|alpha|min:3">
<input type="text" id="edit-mail" name="mail" value="" size="60" maxlength="254"
class="form-text required" v-model="mail" v-validate.initial="email"
data-rules="required|email">

Как вы видите, использовать Vue.js и ее компоненты для улучшения существующих элементов – не сложно.

Vue.js и другие библиотеки

В этом примере интегрируем jQuery плагин select2 обернув его в свой компонент.

<div id="el"></div>

<!– using string template here to work around HTML <option> placement restriction –>
<script type="text/x-template" id="demo-template">
  <div>
    <p>Selected: {{ selected }}</p>
    <select2 ptions="options" v-model="selected">
      <option disabled value="0">Select one</option>
    </select2>
  </div>
</script>

<script type="text/x-template" id="select2-template">
  <select>
    <slot></slot>
  </select>
</script>

Vue.component(’select2′, {
  props: [‘options’, ‘value’],
  template: ‘#select2-template’,
  mounted: function () {
    var vm = this
    $(this.$el)
      // init select2
      .select2({ data: this.options })
      .val(this.value)
      .trigger(‘change’)
      // emit event on change.
      .on(‘change’, function () {
        vm.$emit(‘input’, this.value)
      })
  },
  watch: {
    value: function (value) {
      // update value
      $(this.$el).val(value).trigger(‘change’);
    },
    options: function (options) {
      // update options
      $(this.$el).select2({ data: options })
    }
  },
  destroyed: function () {
    $(this.$el).off().select2(‘destroy’)
  }
})

var vm = new Vue({
  el: ‘#el’,
  template: ‘#demo-template’,
  data: {
    selected: 2,
    options: [
      { id: 1, text: ‘Hello’ },
      { id: 2, text: ‘World’ }
    ]
  }
});

Vue.js не ведет себя так, как будто она одна на весь сайт (в отличии от React).
Мы можем использовать другие js-компоненты и позволить им работать с Virtual DOM.

Одностраничное приложение

Все что нужно для создания одностраничного приложения – есть в vue-router.

<script src=”https://unpkg.com/vue-router/dist/vue-router.js”></script>
<script src="https://unpkg.com/vue/dist/vue.js"></script>
<script src="https://unpkg.com/vue-router/dist/vue-router.js"></script>

<div id="app">
  <h1>Hello App!</h1>
  <p>
    <!– use router-link component for navigation. –>
    <!– specify the link by passing the `to` prop. –>
    <!– <router-link> will be rendered as an `<a>` tag by default –>
    <router-link to="/foo">Go to Foo</router-link>
    <router-link to="/bar">Go to Bar</router-link>
  </p>
  <!– route outlet –>
  <!– component matched by the route will render here –>
  <router-view></router-view>
</div>

const Foo = { template: ‘<div>foo</div>’ }
const Bar = { template: ‘<div>bar</div>’ }

// Each route should map to a component. The "component" can
// either be an actual component constructor created via
// Vue.extend(), or just a component options object.
// We’ll talk about nested routes later.
const routes = [
  { path: ‘/foo’, component: Foo },
  { path: ‘/bar’, component: Bar }
]

// You can pass in additional options here, but let’s
// keep it simple for now.
const router = new VueRouter({
  routes // short for routes: routes
})

// Make sure to inject the router with the router option to make the
// whole app router-aware.
const app = new Vue({
  router
}).$mount(‘#app’)

Заключение

Как мы уже убедились – Vue.js прост в использвании, и полезен для проектов любого масштаба.
Надеюсь, после прочтения статьи, вы начнете удовлетворять свое любопытство на практике.
Сылки ниже могут быть полезны.

http://vuejs.org/
https://www.npmjs.com/package/vue
https://www.drupal.org/project/vuejs
http://about.gitlab.com/2016/10/20/why-we-chose-vue/
https://github.com/jcottrell/vue-example-contact-form
https://medium.freecodecamp.com/vue-js-introduction-for-people-who-know-just-enough-jquery-to-get-by-eab5aa193d77

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 8.* Ключевые слова:  Vue.js




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Программирование 2 Спасибо

Источник: http://drupal.ru/node/133411

Дружелюбный Drupal сайт (Василий Устинов) [DrupalCamp Краснодар 2016]

Череду докладов с DrupalCamp Краснодар 2016 продолжает Василий Устинов с докладом о том, чем является удобный и дружелюбный сайт с точки зрения пользователя и как сделать Drupal-сайт таковым!
Презентацию вы найдёте здесь -> https://www.slideshare.net/secret/GYZWYdirfp3gkp
Лайки, комментарии, подписка и репосты – лучшая поддержка хорошего доклада, смотрим и делимся с друзьями и коллегами!

>> Все презентации с конференции “DrupalCamp Краснодар 2016″

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 1 Спасибо

Источник: http://www.drupal.ru/node/133297

Дружелюбный Drupal сайт (Василий Устинов) [DrupalCamp Краснодар 2016]

Череду докладов с DrupalCamp Краснодар 2016 продолжает Василий Устинов с докладом о том, чем является удобный и дружелюбный сайт с точки зрения пользователя и как сделать Drupal-сайт таковым!
Презентацию вы найдёте здесь -> https://www.slideshare.net/secret/GYZWYdirfp3gkp
Лайки, комментарии, подписка и репосты – лучшая поддержка хорошего доклада, смотрим и делимся с друзьями и коллегами!

>> Все презентации с конференции “DrupalCamp Краснодар 2016″

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 1 Спасибо

Источник: http://drupal.ru/node/133297

Service Desk на базе Drupal (Максим Хабибуллин) [DrupalCamp Краснодар 2016]

Представляем вашему вниманию доклад Максима Хабибулина с ­DrupalCamp Краснодар 2016 о реальном кейсе работы над их Service Desk для промышленных предприятий, какой функционал реализовывали в сжатые сроки и много чего ещё интересного!
Видео: https://www.youtube.com/watch?v=QBEmJBgtaG8
Презентацию вы можете найти здесь -> https://www.slideshare.net/secret/BkV2XXZ0RmPgvb
Лайки, комментарии и подписка обязательна!!!

>> Все презентации с конференции “DrupalCamp Краснодар 2016″

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 1 Спасибо

Источник: http://www.drupal.ru/node/133269

Service Desk на базе Drupal (Максим Хабибуллин) [DrupalCamp Краснодар 2016]

Представляем вашему вниманию доклад Максима Хабибулина с ­DrupalCamp Краснодар 2016 о реальном кейсе работы над их Service Desk для промышленных предприятий, какой функционал реализовывали в сжатые сроки и много чего ещё интересного!
Видео: https://www.youtube.com/watch?v=QBEmJBgtaG8
Презентацию вы можете найти здесь -> https://www.slideshare.net/secret/BkV2XXZ0RmPgvb
Лайки, комментарии и подписка обязательна!!!

>> Все презентации с конференции “DrupalCamp Краснодар 2016″

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 1 Спасибо

Источник: http://drupal.ru/node/133269

Профессия Drupal-разработчик (Николай Шаповалов) [DrupalCamp Краснодар 2016]

А в этом докладе с DrupalCamp Краснодар 2016 о том, что же это такое – быть Drupal-разработчиком, с нами поделился Николай Шаповалов.
Смотрим и комментируем, лайки и подписка тоже приветствуются!
Видео: https://www.youtube.com/watch?v=WUHu1fSLF10
Презентацию вы можете найти здесь -> https://www.slideshare.net/secret/ehOdq0pjy4VjcT
>> Все презентации с конференции “DrupalCamp Краснодар 2016″ (обновлен)

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 1 Спасибо

Источник: http://www.drupal.ru/node/133268

Профессия Drupal-разработчик (Николай Шаповалов) [DrupalCamp Краснодар 2016]

А в этом докладе с DrupalCamp Краснодар 2016 о том, что же это такое – быть Drupal-разработчиком, с нами поделился Николай Шаповалов.
Смотрим и комментируем, лайки и подписка тоже приветствуются!
Видео: https://www.youtube.com/watch?v=WUHu1fSLF10
Презентацию вы можете найти здесь -> https://www.slideshare.net/secret/ehOdq0pjy4VjcT
>> Все презентации с конференции “DrupalCamp Краснодар 2016″ (обновлен)

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 1 Спасибо

Источник: http://drupal.ru/node/133268

Как проверить взломан ли сайт на Друпале и как это исправить

С каждым владельцем сайта хоть раз происходит очень неприятная вещь: его сайт кто-то взломал. Об этом можно узнать по разным признакам: появились непонятные страницы с кучей рекламы, пришло предупреждение из Гугла, Яндекса о том, что Ваш сайт взломан, сайт еле-еле грузится и так далее, одним словом с сайтом “что-то не так”.

Итак, приступим:

1. Устанавливаем модуль  drupalgeddon:

drush dl drupalgeddon

2. Устанавливаем  Site Audit:

drush dl site_audit --dev

3. Устанавливаем  Hacked!:

drush dl hacked --dev; drush en hacked -y

4. Устанавливаем  Security Review:

drush en security_review -y

Можно и сразу всё установить.

drush dl drupalgeddon -y; drush dl site_audit --dev -y; drush dl hacked --dev -y; drush en hacked -y; drush en security_review -y

5. Запускаем drupalgeddon в режиме проверки (аудита) сайта.

Что также запустит всё вышеустановленные модули и создаст файл отчета ‘report.html’. Мы его откроем и увидим наши проблемы.
Удаляем все найденные вломанными файлы, ноды, модули.
drush aa --html --bootstrap --detail --skip=insights > ./report.html
Находим все подозрительные файлы и директории и удаляем их. Усиливаем защиту сайта.

6. Запускаем Hacked в Drush

Просматриваем все измененные проекты/модули:

drush hacked-list-projects --force-rebuild
После этого для каждого измененного проекта/модуля, например changedproject, запускаем:

drush hacked-details changedproject
Также, после этого находим все файлы/директории, которых нет в проекте/модуле:

drush hacked-diff changedproject

7. Drupalgeddon

drush asec

8. Удаляем пользователей

drush user-cancel username
drush ucan username

9. Сбрасываем пароль первого пользователя/администратора

drush uli

10. Изменяем пароли пользователей drush user-password username –password="NEWPASS"
#или
drush upwd username –password="NEWPASS"

Переходим на сайте по /admin/reports/security-review/, смотрим, что у нас взломали.

11. Находим и удаляем взломанные файлы find . -size 494c -name "*.php"
# также можно так:
find . -size 494c -name "*.php" | xargs rm 12. Находим файлы с PCT4B инъекцией grep -Rl PCT4BA6ODSE .
# и
grep -Rl  q6ae4d5 . 13. Определяем местонахождение разных зараженных файлов grep -Rl SOL_TCP .
grep -Rl SOCK_STREAM .
grep -Rl SOCK_DGRAM .
grep -Rl SOL_UDP .
grep -Rl SO_REUSEADDR .
​grep -Rl SO_RCVTIMEO .
​​grep -Rl SO_SNDTIMEO .

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

cd /var/log/httpd/
grep -iR ‘ИМЯ_ЗАРАЖЕННОГО_ФАЙЛА.php’ .

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

14. Устанавливаем правильные права

cd /DRUPAL_DIR find . -type d -print0 | xargs -0 chmod 755; find . -type f -print0 | xargs -0 chmod 644; chmod 777 sites/default/files; find ./sites/default/files -type d -print0 | xargs -0 chmod 777; find ./sites/default/files -type f -print0 | xargs -0 chmod 666;

Или создаем и запускаем скрипт.

Копируешь код скрипта в файл и называешь его, нарример “fix-permissions.sh” и запускаешь:

sudo bash fix-permissions.sh --drupal_path=your/drupal/path --drupal_user=your_user_name
т.е. с нашими данными, это примерно так:

sudo bash fix-permissions.sh --drupal_path=..../директория_нашего_сайта --drupal_user=www-data

Также можно использовать скрипт для нормальных прав:

Запускаем его так:

/usr/local/bin/fix-permissions.sh --path=/home/USER/public_html --user=USER --group=GROUP

Скрипт для расстановки строгих прав:

Запускаем его так:

/usr/local/bin/fix-permissions-strict.sh --drupal_path=/home/USER/public_html --drupal_user=USER --httpd_group=GROUP

15. Проверяем лог файлы

grep cwd /var/log/exim/mainlog | grep -v /var/spool | awk -F"cwd=" '{print $2}' | awk '{print $1}' | sort | uniq -c | sort -n

В DirectAdmin:

/var/log/directadmin/error.log
/var/log/directadmin/errortaskq.log
/var/log/directadmin/system.log
/var/log/directadmin/security.log

В Apache:

/var/log/httpd/error_log
/var/log/httpd/access_log
/var/log/httpd/suexec_log
/var/log/httpd/fpexec_log
/var/log/httpd/domains/domain.com.error.log
/var/log/httpd/domains/domain.com.log
/var/log/messages (generic errors)

В Proftpd:

/var/log/proftpd/access.log
/var/log/proftpd/auth.log
/var/log/messages (generic errors)

В PureFTPd:

/var/log/pureftpd.log

В Dovecot и vm-pop3d:

/var/log/maillog
/var/log/messages

В сообщениях:

/var/log/messages

В exim:

/var/log/exim/mainlog
/var/log/exim/paniclog
/var/log/exim/processlog
/var/log/exim/rejectlog
#вместо ‘username’ впиши имя пользователя системы
/home/username/.php/php-mail.log

В mysqld:

Debian:

/var/log/syslog

В crond:

/var/log/cron

Чтобы удобнее просматривать логи:

less /var/log/filename

Где /var/log/filename это путь к лог файлу, который Вы собираетесь просмотреть. Если лог файл очень большой используйте команду “tail”:

tail -n 30 /var/log/filename

Где 30 это число линий от конца файла.

16. Удаляем подозрительные письма в exim

Настройте exim.conf для автоматического удаления подозрительных писем

vi /etc/exim.conf

Устанавливаем следующие значения:

ignore_bounce_errors_after = 0h
timeout_frozen_after = 0h

Удаляем замороженные (заблокированные) письма в exim

exipick -zi | xargs exim -Mrm

Удаляем письма в очереди

exim -bp | awk '{ print $3 }' | xargs exim -Mrm

Удаляем письма старше 1 дня

exiqgrep -z -o 86400 -i | xargs -r exim -Mrm

Устанавливаем ограничение на отправку писем в exim

vi /etc/virtual/limit_USER
#добавляем максимально разрешенное число писем за 1 день… например: 300
————————————————————————————————————
Дополнительно:
Защита от ботов fail2ban+csf сервера nginx c друпалом на борту

Тип материала:  Предлагаю решение Ключевые слова:  безопасность взлом drupalgeddon Модули и темы:  drupalgeddon site_audit hacked security_review




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Безопасность 5 Спасибо

Источник: http://www.drupal.ru/node/133195

Как проверить взломан ли сайт на Друпале и как это исправить

С каждым владельцем сайта хоть раз происходит очень неприятная вещь: его сайт кто-то взломал. Об этом можно узнать по разным признакам: появились непонятные страницы с кучей рекламы, пришло предупреждение из Гугла, Яндекса о том, что Ваш сайт взломан, сайт еле-еле грузится и так далее, одним словом с сайтом “что-то не так”.

Итак, приступим:

1. Устанавливаем модуль  drupalgeddon:

drush dl drupalgeddon

2. Устанавливаем  Site Audit:

drush dl site_audit --dev

3. Устанавливаем  Hacked!:

drush dl hacked --dev; drush en hacked -y

4. Устанавливаем  Security Review:

drush en security_review -y

Можно и сразу всё установить.

drush dl drupalgeddon -y; drush dl site_audit --dev -y; drush dl hacked --dev -y; drush en hacked -y; drush en security_review -y

5. Запускаем drupalgeddon в режиме проверки (аудита) сайта.

Что также запустит всё вышеустановленные модули и создаст файл отчета ‘report.html’. Мы его откроем и увидим наши проблемы.
Удаляем все найденные вломанными файлы, ноды, модули.
drush aa --html --bootstrap --detail --skip=insights > ./report.html
Находим все подозрительные файлы и директории и удаляем их. Усиливаем защиту сайта.

6. Запускаем Hacked в Drush.

Просматриваем все измененные проекты/модули:

drush hacked-list-projects --force-rebuild
После этого для каждого измененного проекта/модуля, например changedproject, запускаем:

drush hacked-details changedproject
Также, после этого находим все файлы/директории, которых нет в проекте/модуле:

drush hacked-diff changedproject

7. Drupalgeddon

drush asec

8. Удаляем пользователей

drush user-cancel username
drush ucan username

9. Сбрасываем пароль первого пользователя/администратора

drush uli

10. Изменяем пароли пользователей drush user-password username –password="NEWPASS"
#или
drush upwd username –password="NEWPASS"

Переходим на сайте по /admin/reports/security-review/, смотрим, что у нас взломали.

11. Находим и удаляем взломанные файлы find . -size 494c -name "*.php"
# также можно так:
find . -size 494c -name "*.php" | xargs rm 12. Находим файлы с PCT4B инъекцией grep -Rl PCT4BA6ODSE .
# и
grep -Rl  q6ae4d5 . 13. Определяем местонахождение разных зараженных файлов grep -Rl SOL_TCP .
grep -Rl SOCK_STREAM .
grep -Rl SOCK_DGRAM .
grep -Rl SOL_UDP .
grep -Rl SO_REUSEADDR .
​grep -Rl SO_RCVTIMEO .
​​grep -Rl SO_SNDTIMEO .

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

cd /var/log/httpd/
grep -iR ‘ИМЯ_ЗАРАЖЕННОГО_ФАЙЛА.php’ .

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

14. Устанавливаем правильные права

cd /DRUPAL_DIR find . -type d -print0 | xargs -0 chmod 755; find . -type f -print0 | xargs -0 chmod 644; chmod 777 sites/default/files; find ./sites/default/files -type d -print0 | xargs -0 chmod 777; find ./sites/default/files -type f -print0 | xargs -0 chmod 666;

Или создаем и запускаем скрипт.

Копируешь код скрипта в файл и называешь его, нарример “fix-permissions.sh” и запускаешь:

sudo bash fix-permissions.sh --drupal_path=your/drupal/path --drupal_user=your_user_name
т.е. с нашими данными, это примерно так:

sudo bash fix-permissions.sh --drupal_path=..../директория_нашего_сайта --drupal_user=www-data

Также можно использовать скрипт для нормальных прав:

Запускаем его так:

/usr/local/bin/fix-permissions.sh --path=/home/USER/public_html --user=USER --group=GROUP

Скрипт для расстановки строгих прав:

Запускаем его так:

/usr/local/bin/fix-permissions-strict.sh --drupal_path=/home/USER/public_html --drupal_user=USER --httpd_group=GROUP

Сейчас ещё модуль для drush появился для правильной расстановки прав для файлов:  File permissions

15. Проверяем лог файлы

grep cwd /var/log/exim/mainlog | grep -v /var/spool | awk -F"cwd=" '{print $2}' | awk '{print $1}' | sort | uniq -c | sort -n

В DirectAdmin:

/var/log/directadmin/error.log
/var/log/directadmin/errortaskq.log
/var/log/directadmin/system.log
/var/log/directadmin/security.log

В Apache:

/var/log/httpd/error_log
/var/log/httpd/access_log
/var/log/httpd/suexec_log
/var/log/httpd/fpexec_log
/var/log/httpd/domains/domain.com.error.log
/var/log/httpd/domains/domain.com.log
/var/log/messages (generic errors)

В Proftpd:

/var/log/proftpd/access.log
/var/log/proftpd/auth.log
/var/log/messages (generic errors)

В PureFTPd:

/var/log/pureftpd.log

В Dovecot и vm-pop3d:

/var/log/maillog
/var/log/messages

В сообщениях:

/var/log/messages

В exim:

/var/log/exim/mainlog
/var/log/exim/paniclog
/var/log/exim/processlog
/var/log/exim/rejectlog
#вместо ‘username’ впиши имя пользователя системы
/home/username/.php/php-mail.log

В mysqld:

Debian:

/var/log/syslog

В crond:

/var/log/cron

Чтобы удобнее просматривать логи:

less /var/log/filename

Где /var/log/filename это путь к лог файлу, который Вы собираетесь просмотреть. Если лог файл очень большой используйте команду “tail”:

tail -n 30 /var/log/filename

Где 30 это число линий от конца файла.

16. Удаляем подозрительные письма в exim

Настройте exim.conf для автоматического удаления подозрительных писем

vi /etc/exim.conf

Устанавливаем следующие значения:

ignore_bounce_errors_after = 0h
timeout_frozen_after = 0h

Удаляем замороженные (заблокированные) письма в exim

exipick -zi | xargs exim -Mrm

Удаляем письма в очереди

exim -bp | awk '{ print $3 }' | xargs exim -Mrm

Удаляем письма старше 1 дня

exiqgrep -z -o 86400 -i | xargs -r exim -Mrm

Устанавливаем ограничение на отправку писем в exim

vi /etc/virtual/limit_USER
#добавляем максимально разрешенное число писем за 1 день… например: 300
————————————————————————————————————
Дополнительно:
Защита от ботов fail2ban+csf сервера nginx c друпалом на борту

Тип материала:  Предлагаю решение Ключевые слова:  безопасность взлом drupalgeddon Модули и темы:  drupalgeddon site_audit hacked security_review




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Безопасность 5 Спасибо

Источник: http://drupal.ru/node/133195

Конец Mollom

Будьте бдительны!

Со 2 апреля 2018 года Acquia прекращает работу анти-спам сервиса Mollom.

Альтернатива:  reCAPTCHA и  Honeypot.

Источник: https://www.mollom.com/eol

Ключевые слова:  mollom антиспам Модули и темы:  mollom




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Безопасность 0 Спасибо

Источник: http://www.drupal.ru/node/133174

Конец Mollom

Будьте бдительны!

Со 2 апреля 2018 года Acquia прекращает работу анти-спам сервиса Mollom.

Альтернатива:  reCAPTCHA и  Honeypot.

Источник: https://www.mollom.com/eol

Ключевые слова:  mollom антиспам Модули и темы:  mollom




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Безопасность 0 Спасибо

Источник: http://drupal.ru/node/133174

Prepopulate значений множественных коллекций полей в entity form

Есть:

1. Форма entity form
2. В этой форме множественное поле типа “Коллекция полей” с двумя дочерними полями: тест (число) и список выбора (select).

Требуется:

Сделать в hook_form_alter добавление и предзаполнение коллекций полей множественными значениями по умолчанию при создании новой сущности. То есть автоматически добавить несколько рядов произвольных данных, не прибегая к ручному добавлению с помощью кнопки “Add more”. И даже вообще скрыть кнопки “Add more” и “Remove”, поскольку в рамках именно этой задачи они не нужны.

Решение:

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

<?php
function mymodule_form_alter(&$form, &$form_state, $form_id) {

        // Проверяем, что это "наша" форма и что она используется в данный момент для создания новой сущности
        // (а не для редактирования)
    if ($form_id == 'my_form_name' && isset($form_state['build_info']['args'][0]->is_new)) {

        // Общее количество значений для инициализации        
        $items_count = 6;
        // Название поля-коллекции
        $field_name = 'field_field_collection';
        $form_theme = $form[$field_name][LANGUAGE_NONE]['#theme'];
        
        // Скрываем кнопки "Add more" и "Remove"
        $form[$field_name][LANGUAGE_NONE][0]['remove_button']['#access'] = FALSE;
        $form[$field_name][LANGUAGE_NONE]['add_more']['#access'] = FALSE;

        $items = &$form_state['field'][$field_name][LANGUAGE_NONE];
        
        // Генерируем необходимое количество значений для коллекции
        if ($items_count > 1 and $items['items_count'] != $items_count) {
          $items['items_count'] = $items_count;
          $items['field']['cardinality'] = $items_count;
          $form[$field_name][LANGUAGE_NONE] = field_multiple_value_form($items['field'], $items['instance'], LANGUAGE_NONE, array(), $form, $form_state);
            // Восстанавливаем имя функции темы формы поскольку field_multiple_value_form() изменяет его
            $form[$field_name][LANGUAGE_NONE]['#theme'] = $form_theme;
        }

        // Заполняем новые ряды значениями
        for ($delta = 0; $delta < $items_count; $delta++) {
          // Текст/число по умолчанию
          $form['field_field_collection'][LANGUAGE_NONE][$delta]['field_user_number'][LANGUAGE_NONE][0]['value']['#default_value'] = '4';
          // Select (позиция) по умолчанию
          $form['field_field_collection'][LANGUAGE_NONE][$delta]['field_user_select'][LANGUAGE_NONE]['#default_value'] = '1';
            }
    }
}?>

PS. Для новичков, и во избежание “у меня не работает!”. Обратите внимание, что в массивах отличающихся типов полей может быть разный “маршрут” до значений по умолчанию ‘#default_value’ (строчки внутри цикла for). Также не забывайте в этих строчках изменить имена дочерних полей на имена ваших полей.

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Ключевые слова:  multivalue entity form prepopulate множественное поле field collection коллекция полей




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Программирование 3 Спасибо

Источник: http://www.drupal.ru/node/132992

Prepopulate значений множественных коллекций полей в entity form

Есть:

1. Форма entity form
2. В этой форме множественное поле типа “Коллекция полей” с двумя дочерними полями: тест (число) и список выбора (select).

Требуется:

Сделать в hook_form_alter добавление и предзаполнение коллекций полей множественными значениями по умолчанию при создании новой сущности. То есть автоматически добавить несколько рядов произвольных данных, не прибегая к ручному добавлению с помощью кнопки “Add more”. И даже вообще скрыть кнопки “Add more” и “Remove”, поскольку в рамках именно этой задачи они не нужны.

Решение:

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

<?php
function mymodule_form_alter(&$form, &$form_state, $form_id) {

        // Проверяем, что это "наша" форма и что она используется в данный момент для создания новой сущности
        // (а не для редактирования)
    if ($form_id == 'my_form_name' && isset($form_state['build_info']['args'][0]->is_new)) {

        // Общее количество значений для инициализации        
        $items_count = 6;
        // Название поля-коллекции
        $field_name = 'field_field_collection';
        $form_theme = $form[$field_name][LANGUAGE_NONE]['#theme'];
        
        // Скрываем кнопки "Add more" и "Remove"
        $form[$field_name][LANGUAGE_NONE][0]['remove_button']['#access'] = FALSE;
        $form[$field_name][LANGUAGE_NONE]['add_more']['#access'] = FALSE;

        $items = &$form_state['field'][$field_name][LANGUAGE_NONE];
        
        // Генерируем необходимое количество значений для коллекции
        if ($items_count > 1 and $items['items_count'] != $items_count) {
          $items['items_count'] = $items_count;
          $items['field']['cardinality'] = $items_count;
          $form[$field_name][LANGUAGE_NONE] = field_multiple_value_form($items['field'], $items['instance'], LANGUAGE_NONE, array(), $form, $form_state);
            // Восстанавливаем имя функции темы формы поскольку field_multiple_value_form() изменяет его
            $form[$field_name][LANGUAGE_NONE]['#theme'] = $form_theme;
        }

        // Заполняем новые ряды значениями
        for ($delta = 0; $delta < $items_count; $delta++) {
          // Текст/число по умолчанию
          $form['field_field_collection'][LANGUAGE_NONE][$delta]['field_user_number'][LANGUAGE_NONE][0]['value']['#default_value'] = '4';
          // Select (позиция) по умолчанию
          $form['field_field_collection'][LANGUAGE_NONE][$delta]['field_user_select'][LANGUAGE_NONE]['#default_value'] = '1';
            }
    }
}?>

PS. Для новичков, и во избежание “у меня не работает!”. Обратите внимание, что в массивах отличающихся типов полей может быть разный “маршрут” до значений по умолчанию ‘#default_value’ (строчки внутри цикла for). Также не забывайте в этих строчках изменить имена дочерних полей на имена ваших полей.

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Ключевые слова:  multivalue entity form prepopulate множественное поле field collection коллекция полей




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Программирование 3 Спасибо

Источник: http://drupal.ru/node/132992

Выпущен Drupal 8.3.1

Настоятельно рекомендуется обновить!!!
В данной версии устранена критическая уязвимость.

Краткое описание. Критическая уязвимость DRUPAL-SA-CORE-2017-002 позволяет обходить права доступа. Возможна при следующих условиях:

На сайте активен модуль веб-служб RESTful (rest). Разрешены PATCH запросы . Атакующий имеет или может создать учетную запись. Проще говоря – атакующий авторизован.

Хотя обычно команда разработчиков безопасности Drupal.org не предоставляют выпуски безопасности для не поддерживаемых минорных версий, учитывая потенциальную серьезность этой проблемы, они представили версию 8.2.8, чтобы сайты, которые сразу не могут обновиться до Drupal 8.3.0, смогли это сделать как можно безопаснее.

Версия Drupal 8.3.1

Важно!!!
Если вы используете Drupal 8.2.7 или более раннюю его версию, то обновите Drupal до версии Drupal 8.2.8 и лишь по том устанавливайте обновление до Drupal 8.3.1 Это поможет более безопасно установить последнюю версию “восьмёрки”. (Рано или поздно, вам все равно придётся планировать обновление до 8.3.х, так как серия 8.2.x устарела и больше не будет получать обновлений.)

Версия Drupal 8.2.8

Версия Drupal:  Drupal 8.*




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Безопасность 1 Спасибо

Источник: http://www.drupal.ru/node/132965

Выпущен Drupal 8.3.1

Настоятельно рекомендуется обновить!!!
В данной версии устранена критическая уязвимость.

Краткое описание. Критическая уязвимость DRUPAL-SA-CORE-2017-002 позволяет обходить права доступа. Возможна при следующих условиях:

На сайте активен модуль веб-служб RESTful (rest). Разрешены PATCH запросы . Атакующий имеет или может создать учетную запись. Проще говоря – атакующий авторизован.

Хотя обычно команда разработчиков безопасности Drupal.org не предоставляют выпуски безопасности для не поддерживаемых минорных версий, учитывая потенциальную серьезность этой проблемы, они представили версию 8.2.8, чтобы сайты, которые сразу не могут обновиться до Drupal 8.3.0, смогли это сделать как можно безопаснее.

Версия Drupal 8.3.1

Важно!!!
Если вы используете Drupal 8.2.7 или более раннюю его версию, то обновите Drupal до версии Drupal 8.2.8 и лишь по том устанавливайте обновление до Drupal 8.3.1 Это поможет более безопасно установить последнюю версию “восьмёрки”. (Рано или поздно, вам все равно придётся планировать обновление до 8.3.х, так как серия 8.2.x устарела и больше не будет получать обновлений.)

Версия Drupal 8.2.8

Версия Drupal:  Drupal 8.*




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Безопасность 1 Спасибо

Источник: http://drupal.ru/node/132965

Рынок Drupal (Александр Воинов) [DrupalCamp Краснодар 2016]

Александр Воинов о мировом рынке Drupal.
Ссылка на презентацию: https://www.slideshare.net/secret/KIvd2LUeWAXLgh

Мало кто реально осознает мощь рынка Drupal.
Мы провели гигантскую аналитическую работу собирая факты и делая выводы.
Мы подготовили фильм о мощи друпал, который будет показан во время доклада.
Премьера фильма о рынке Друпал!
Фильм и доклад будут полезны разработчикам, руководителям девелоперских компаний и конечно клиентам.

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 2 Спасибо

Источник: http://www.drupal.ru/node/132918

Рынок Drupal (Александр Воинов) [DrupalCamp Краснодар 2016]

Александр Воинов о мировом рынке Drupal.
Ссылка на презентацию: https://www.slideshare.net/secret/KIvd2LUeWAXLgh

Мало кто реально осознает мощь рынка Drupal.
Мы провели гигантскую аналитическую работу собирая факты и делая выводы.
Мы подготовили фильм о мощи друпал, который будет показан во время доклада.
Премьера фильма о рынке Друпал!
Фильм и доклад будут полезны разработчикам, руководителям девелоперских компаний и конечно клиентам.

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 2 Спасибо

Источник: http://drupal.ru/node/132918

Drupal в КубГУ (Сергей Синица) [DrupalCamp Краснодар 2016]

Доклад Сергея Синицы о внедрении CMS Drupal в инфраструктуру крупнейшего ВУЗа ЮФО – КубГУ.
Видео: https://www.youtube.com/watch?v=ECvbF5zCcTU
Ссылка на презентацию: https://www.slideshare.net/secret/jVTpOp1yLFGKzN
>> Все презентации с конференции “DrupalCamp Краснодар 2016″

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 2 Спасибо

Источник: http://www.drupal.ru/node/132917

Drupal в КубГУ (Сергей Синица) [DrupalCamp Краснодар 2016]

Доклад Сергея Синицы о внедрении CMS Drupal в инфраструктуру крупнейшего ВУЗа ЮФО – КубГУ.
Видео: https://www.youtube.com/watch?v=ECvbF5zCcTU
Ссылка на презентацию: https://www.slideshare.net/secret/jVTpOp1yLFGKzN
>> Все презентации с конференции “DrupalCamp Краснодар 2016″

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  DrupalCamp DrupalYug




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Drupal Юг 2 Спасибо

Источник: http://drupal.ru/node/132917

jCarousel 8.x-4.0 released

Пару дней назад стал co-maintainer jCarousel и Выпустил релиз jCarousel 8.x-4.0
Код полностью переписан с учетом последней версии библиотеки.
Что поменялось:

jCarousel v0.3 обновлены на более адекватно выглядящие skins без изменения имен. Интеграция с Views была переписана и реализован jCarousel пейджер для корректной поддержки AJAX прелоада слайдов Добавлен форматер поля jCarousel. Для обратной совместимости через админку можно включить глобальную загрузку библиотеки (чтобы работала jcarousel_add() из D7. (Not recomended) Страница помощи приведена к актуальному состоянию. Поддерживается API jCarousel v0.3 насколько получилось в полном объеме. События и настройки настраивается через data-* атрибуты Подключение своих шкур через MYMODULE.jcarousel_skins.yml file

Планы

улучшить responsive добавить swipe

Отзывы и тестирование приветствуется.

PS: Версия 7.х поддерживается в ограниченном режиме – что смогу буду править по мере наличия времени.

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 8.* Модули и темы:  jcarousel




email





facebook





linkedin





twitter





google+





pinterest
4 Спасибо

Источник: http://www.drupal.ru/node/132869

jCarousel 8.x-4.0 released

Пару дней назад стал co-maintainer jCarousel и Выпустил релиз jCarousel 8.x-4.0
Код полностью переписан с учетом последней версии библиотеки.
Что поменялось:

jCarousel v0.3 обновлены на более адекватно выглядящие skins без изменения имен. Интеграция с Views была переписана и реализован jCarousel пейджер для корректной поддержки AJAX прелоада слайдов Добавлен форматер поля jCarousel. Для обратной совместимости через админку можно включить глобальную загрузку библиотеки (чтобы работала jcarousel_add() из D7. (Not recomended) Страница помощи приведена к актуальному состоянию. Поддерживается API jCarousel v0.3 насколько получилось в полном объеме. События и настройки настраивается через data-* атрибуты Подключение своих шкур через MYMODULE.jcarousel_skins.yml file

Планы

улучшить responsive добавить swipe

Отзывы и тестирование приветствуется.

PS: Версия 7.х поддерживается в ограниченном режиме – что смогу буду править по мере наличия времени.

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 8.* Модули и темы:  jcarousel




email





facebook





linkedin





twitter





google+





pinterest
4 Спасибо

Источник: http://drupal.ru/node/132869

Drupal 8.3.0

Выпущена обещанная версия друпала – drupal 8.3.0

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

  Минорная версия drupal 8.3.0 обеспечивает новые улучшения и функциональность без нарушения обратной совместимости (анг. backward compatibility или сокращённо BC) для общедоступных API. Обратите внимание, что могут быть изменения (не совместимостью с ядром Drupal) во внутренних API, экспериментальных модулях и темах.

 Дополнительные сведения об изменениях API смотрите в отчетах об изменении ядра Drupal. Переводчики друпала должны принимать во внимание незначительные изменения после последней версии.

 Изменения в новой версии

Исправлена ошибка #2751325. Это исправление может потребовать обновление клиентского приложения.

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

 Важные исправления ошибок от версии друпала 8.2.x

# 2640496, # 2606772, # 2665152, # 2846782, # 2822190

 Новые стабильные функции

 В этой версии друпала, модуль BigPipe стал стабильным Этот модуль обеспечивает продвинутую реализацию стратегии отображения страницы BigPipe Facebook, что значительно улучшает воспринимаемую производительность страниц с динамическим, персонализированным или неприкасаемым содержимым. См. cтраницу BigPipe.

 Улучшенные функции авторинга

#2831442, #2421427, #2307451, #2239419

Улучшено создание сайтов и административные функции

#665790, #2656278, #2574767, #2830449, #2840832, #2075889, #2826728 и разрешен #2858852.

Улучшенные функции веб-служб

 Drupal 8.3.0 значительно улучшает поддержку REST и API-интерфейса со следующими новыми функциями, улучшениями API и разработчиками, а также исправлениями ошибок. #2808233, #2815845, #2291055, #2807501, #2737719, #2808233

 Улучшения в тестировании

 #2605664, #2809117, #2294731, #2849222, #2770921

 Добавлены новые экспериментальные модули

 Workflows, Layout Discovery, Field Layout

 Обновлены экспериментальные модули

 Migrate, Migrate Drupal and Migrate Drupal UI, Settings Tray, DateTime Range, Place Block, Inline Form Errors, Content Moderation

 Важно! Если вы ранее установили Content Moderation в 8.2.x, вам необходимо удалить его перед обновлением до 8.3.0, иначе вы столкнетесь с фатальными ошибками. После обновления и повторного включения модерации контента вам необходимо будет перенастроить рабочие процессы и переходы с помощью нового модуля, поэтому обязательно заблаговременно создайте их резервную копию. (Путь обновления не поставляется, поскольку модуль по-прежнему имеет альфа-стабильность.)

 Модуль Content Moderation включает в себя множество дополнительных улучшений в этой версии:

 #2787881, #2799785, #2809123, #2830581, #2850601

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

 #2758737, #2866109, #2809477

 Другие улучшения API

 #2810303, #2287073, #2721179, #2767025, добавлены #2789315 и #2810381 чтобы дать #2812811, общий API и будут использоваться для Node и Comment типов.

З.Ы. Список экспериментальных модулей в друпал 8

И многое другое…

Полная информация об версии друпала 8.3.0

Версия Drupal:  Drupal 8.* Ключевые слова:  релизы Drupal 8




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Сайт и проект Drupal.ru 5 Спасибо

Источник: http://www.drupal.ru/node/132779

Drupal 8.3.0

Выпущена обещанная версия друпала – drupal 8.3.0

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

  Минорная версия drupal 8.3.0 обеспечивает новые улучшения и функциональность без нарушения обратной совместимости (анг. backward compatibility или сокращённо BC) для общедоступных API. Обратите внимание, что могут быть изменения (не совместимостью с ядром Drupal) во внутренних API, экспериментальных модулях и темах.

 Дополнительные сведения об изменениях API смотрите в отчетах об изменении ядра Drupal. Переводчики друпала должны принимать во внимание незначительные изменения после последней версии.

 Изменения в новой версии

Исправлена ошибка #2751325. Это исправление может потребовать обновление клиентского приложения.

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

 Важные исправления ошибок от версии друпала 8.2.x

# 2640496, # 2606772, # 2665152, # 2846782, # 2822190

 Новые стабильные функции

 В этой версии друпала, модуль BigPipe стал стабильным Этот модуль обеспечивает продвинутую реализацию стратегии отображения страницы BigPipe Facebook, что значительно улучшает воспринимаемую производительность страниц с динамическим, персонализированным или неприкасаемым содержимым. См. cтраницу BigPipe.

 Улучшенные функции авторинга

#2831442, #2421427, #2307451, #2239419

Улучшено создание сайтов и административные функции

#665790, #2656278, #2574767, #2830449, #2840832, #2075889, #2826728 и разрешен #2858852.

Улучшенные функции веб-служб

 Drupal 8.3.0 значительно улучшает поддержку REST и API-интерфейса со следующими новыми функциями, улучшениями API и разработчиками, а также исправлениями ошибок. #2808233, #2815845, #2291055, #2807501, #2737719, #2808233

 Улучшения в тестировании

 #2605664, #2809117, #2294731, #2849222, #2770921

 Добавлены новые экспериментальные модули

 Workflows, Layout Discovery, Field Layout

 Обновлены экспериментальные модули

 Migrate, Migrate Drupal and Migrate Drupal UI, Settings Tray, DateTime Range, Place Block, Inline Form Errors, Content Moderation

 Важно! Если вы ранее установили Content Moderation в 8.2.x, вам необходимо удалить его перед обновлением до 8.3.0, иначе вы столкнетесь с фатальными ошибками. После обновления и повторного включения модерации контента вам необходимо будет перенастроить рабочие процессы и переходы с помощью нового модуля, поэтому обязательно заблаговременно создайте их резервную копию. (Путь обновления не поставляется, поскольку модуль по-прежнему имеет альфа-стабильность.)

 Модуль Content Moderation включает в себя множество дополнительных улучшений в этой версии:

 #2787881, #2799785, #2809123, #2830581, #2850601

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

 #2758737, #2866109, #2809477

 Другие улучшения API

 #2810303, #2287073, #2721179, #2767025, добавлены #2789315 и #2810381 чтобы дать #2812811, общий API и будут использоваться для Node и Comment типов.

З.Ы. Список экспериментальных модулей в друпал 8

И многое другое…

Полная информация об версии друпала 8.3.0

Версия Drupal:  Drupal 8.* Ключевые слова:  релизы Drupal 8




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Сайт и проект Drupal.ru 5 Спасибо

Источник: http://drupal.ru/node/132779

Drupal-школа – третье занятие: работа с содержимым страницы, меню и адреса страниц сайта на Drupal 8.

Практическое занятие по работе со содержимым (контентом) страниц, меню сайта и адресами страниц на Drupal 8 для самых новичков.

Содержание: добавление нового материала, редактирование форматирования контента страницы, добавление изображений и подписей к ним, добавление страницы в меню сайта, настройка адреса страницы.

Drupal-школа – проект посвященный обучению школьников (13 гимназия, г. Новосибирск) веб-разработке на основе CMS Drupal 8. Поддерживается администрацией школы, сибирским сообществом друпаллеров DrupalSib и группой компаний i20.

Версия Drupal:  Drupal 8.* Ключевые слова:  друпал-школа




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  DrupalSib 2 Спасибо

Источник: http://www.drupal.ru/node/132771

Drupal-школа – третье занятие: работа с содержимым страницы, меню и адреса страниц сайта на Drupal 8.

Практическое занятие по работе со содержимым (контентом) страниц, меню сайта и адресами страниц на Drupal 8 для самых новичков.

Содержание: добавление нового материала, редактирование форматирования контента страницы, добавление изображений и подписей к ним, добавление страницы в меню сайта, настройка адреса страницы.

Drupal-школа – проект посвященный обучению школьников (13 гимназия, г. Новосибирск) веб-разработке на основе CMS Drupal 8. Поддерживается администрацией школы, сибирским сообществом друпаллеров DrupalSib и группой компаний i20.

Версия Drupal:  Drupal 8.* Ключевые слова:  друпал-школа




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  DrupalSib 2 Спасибо

Источник: http://drupal.ru/node/132771

Создания Nginx VirtualHost и установка Drupal одной командой

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

Для начала нам нужно создать файл с конфигом Nginx для Drupal. Создадим папку conf. В ней файл drupal и в вставим в него:

server {
    listen 80;
    listen [::]:80;
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}

server {
    listen 80;
        listen [::]:80;

        server_name example.com;
        root /var/www/example.com;

        client_max_body_size 100m;

        access_log off;
        error_log /home/username/logs/nginx-example.com-error.log; ## username заменить на ваше имя пользователя

        # Enable compression, this will help if you have for instance advagg‎ module
        # by serving Gzip versions of the files.
        gzip_static on;

        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }

        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

        # This matters if you use drush prior to 5.x
        # After 5.x backups are stored outside the Drupal install.
        #location = /backup {
        #        deny all;
        #}

        # Very rarely should these ever be accessed outside of your lan
        location ~* \.(txt|log)$ {
                allow 192.168.0.0/16;
                deny all;
        }

        location ~ \..*/.*\.php$ {
                return 403;
        }

        # No no for private
        location ~ ^/sites/.*/private/ {
                return 403;
        }

        # Block access to "hidden" files and directories whose names begin with a
        # period. This includes directories used by version control systems such
        # as Subversion or Git to store control files.
        location ~ (^|/)\. {
                return 403;
        }

        location / {
                # This is cool because no php is touched for static content
                try_files $uri @rewrite;
        }

        location @rewrite {
                # You have 2 options here
                # For D7 and above:
                # Clean URLs are handled in drupal_environment_initialize().
                rewrite ^ /index.php;
                # For Drupal 6 and bwlow:
                # Some modules enforce no slash (/) at the end of the URL
                # Else this rewrite block wouldn’t be needed (GlobalRedirect)
                #rewrite ^/(.*)$ /index.php?q=$1;
        }

        location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        }

        # Fighting with Styles? This little gem is amazing.
        # This is for D6
        #location ~ ^/sites/.*/files/imagecache/ {
        # This is for D7 and D8
        location ~ ^/sites/.*/files/styles/ {
                try_files $uri @rewrite;
        }

        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }
}

Установим pwgen:

apt-get install pwgen

Создаем в файл si.sh в папке пользователя /home/username/:

#!/bin/bash
sd=/var/www # папка где будет создан сайт
sc=/home/username/conf # папка с конфигом
PASS=`pwgen -s 30 1` # генерируем пароль
echo "Creating virtual host $1"
sudo cp $sc/drupal /etc/nginx/conf.d/$1.conf
echo "Updating vhost confin for $1"
sudo sed -i s,example.com,$1,g /etc/nginx/conf.d/$1.conf
sudo sed -i s,$sd/example.com,$sd/$1,g /etc/nginx/conf.d/$1.conf
echo "Restarting Nginx"
sudo systemctl reload nginx
echo "Create database $2"
mysql -u root -p << EOF
CREATE DATABASE $2 CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER ‘$2′@‘localhost’ IDENTIFIED BY ‘$PASS’;
GRANT ALL PRIVILEGES ON $2.* TO ‘$2′@‘localhost’;
FLUSH PRIVILEGES;
EOF
echo "Instal Drupal"
cd $sd
drush dl drupal-7.54
mv drupal-7.54 $1
cd $1
git clone https://github.com/totaku/fellema-dev.git profiles/fellema # мой профиль для Drupal
drush si fellema –locale=ru –site-name=$1  –db-url=mysql://$2:$PASS@localhost/$2 –account-name=admin –account-pass=admin –account-mail=admin@admin.admin
chmod 0777 -R $sd/$1/sites/default/files
echo "Finished!"
echo "MySQL user created."
echo "Username: $2"
echo "Password: $PASS"
echo "Local address: $sd/$1"
echo "Web address: http://$1"

Сохраним и дадим файлу права на исполнение:

sudo chmod a+x si.sh

Скрипт готов к работе, запускаем его с помощью команды:

./si test.com test

Где test.com ваш домен, test база данных сайта и имя пользователя.

Орингинал как обычно в блоге.

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Ключевые слова:  nginx




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  FAQ 3 Спасибо

Источник: http://www.drupal.ru/node/132661

Создания Nginx VirtualHost и установка Drupal одной командой

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

Для начала нам нужно создать файл с конфигом Nginx для Drupal. Создадим папку conf. В ней файл drupal и в вставим в него:

server {
    listen 80;
    listen [::]:80;
    server_name www.example.com;
    return 301 $scheme://example.com$request_uri;
}

server {
    listen 80;
        listen [::]:80;

        server_name example.com;
        root /var/www/example.com;

        client_max_body_size 100m;

        access_log off;
        error_log /home/username/logs/nginx-example.com-error.log; ## username заменить на ваше имя пользователя

        # Enable compression, this will help if you have for instance advagg‎ module
        # by serving Gzip versions of the files.
        gzip_static on;

        location = /favicon.ico {
                log_not_found off;
                access_log off;
        }

        location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
        }

        # This matters if you use drush prior to 5.x
        # After 5.x backups are stored outside the Drupal install.
        #location = /backup {
        #        deny all;
        #}

        # Very rarely should these ever be accessed outside of your lan
        location ~* \.(txt|log)$ {
                allow 192.168.0.0/16;
                deny all;
        }

        location ~ \..*/.*\.php$ {
                return 403;
        }

        # No no for private
        location ~ ^/sites/.*/private/ {
                return 403;
        }

        # Block access to "hidden" files and directories whose names begin with a
        # period. This includes directories used by version control systems such
        # as Subversion or Git to store control files.
        location ~ (^|/)\. {
                return 403;
        }

        location / {
                # This is cool because no php is touched for static content
                try_files $uri @rewrite;
        }

        location @rewrite {
                # You have 2 options here
                # For D7 and above:
                # Clean URLs are handled in drupal_environment_initialize().
                rewrite ^ /index.php;
                # For Drupal 6 and bwlow:
                # Some modules enforce no slash (/) at the end of the URL
                # Else this rewrite block wouldn’t be needed (GlobalRedirect)
                #rewrite ^/(.*)$ /index.php?q=$1;
        }

        location ~ \.php$ {
        try_files $uri =404;
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        }

        # Fighting with Styles? This little gem is amazing.
        # This is for D6
        #location ~ ^/sites/.*/files/imagecache/ {
        # This is for D7 and D8
        location ~ ^/sites/.*/files/styles/ {
                try_files $uri @rewrite;
        }

        location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
                expires max;
                log_not_found off;
        }
}

Установим pwgen:

apt-get install pwgen

Создаем в файл si.sh в папке пользователя /home/username/:

#!/bin/bash
sd=/var/www # папка где будет создан сайт
sc=/home/username/conf # папка с конфигом
PASS=`pwgen -s 30 1` # генерируем пароль
echo "Creating virtual host $1"
sudo cp $sc/drupal /etc/nginx/conf.d/$1.conf
echo "Updating vhost confin for $1"
sudo sed -i s,example.com,$1,g /etc/nginx/conf.d/$1.conf
sudo sed -i s,$sd/example.com,$sd/$1,g /etc/nginx/conf.d/$1.conf
echo "Restarting Nginx"
sudo systemctl reload nginx
echo "Create database $2"
mysql -u root -p << EOF
CREATE DATABASE $2 CHARACTER SET utf8 COLLATE utf8_general_ci;
CREATE USER ‘$2′@‘localhost’ IDENTIFIED BY ‘$PASS’;
GRANT ALL PRIVILEGES ON $2.* TO ‘$2′@‘localhost’;
FLUSH PRIVILEGES;
EOF
echo "Instal Drupal"
cd $sd
drush dl drupal-7.54
mv drupal-7.54 $1
cd $1
git clone https://github.com/totaku/fellema-dev.git profiles/fellema # мой профиль для Drupal
drush si fellema –locale=ru –site-name=$1  –db-url=mysql://$2:$PASS@localhost/$2 –account-name=admin –account-pass=admin –account-mail=admin@admin.admin
chmod 0777 -R $sd/$1/sites/default/files
echo "Finished!"
echo "MySQL user created."
echo "Username: $2"
echo "Password: $PASS"
echo "Local address: $sd/$1"
echo "Web address: http://$1"

Сохраним и дадим файлу права на исполнение:

sudo chmod a+x si.sh

Скрипт готов к работе, запускаем его с помощью команды:

./si test.com test

Где test.com ваш домен, test база данных сайта и имя пользователя.

Орингинал как обычно в блоге.

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Ключевые слова:  nginx




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  FAQ 3 Спасибо

Источник: http://drupal.ru/node/132661

SEO-наркомания. Часть 1. Параметрические ссылки

Предисловие

SEO-продвижение – сложная и нужная вещь. Но, к сожалению, многие думают, что для того, чтобы заняться SEO, достаточно лишь отложить в сторону вязальные спицы или плуг. Поэтому в сео-среде полно недоучек, которые без знания технической базы нахватаются умных фраз в чьих-то блогах и уже спешат ломать, крушить сайты и раздавать дурацкие задания разработчикам и задавать тупые вопросы на форумах разработчиков. Собственно, это явление и получило название SEO-наркомания. Когда я просто читал дурацкие вопросы на форумах, я ещё терпел, но когда мне лично пришлось столкнуться в работе с последствиями действий сео-наркоманов, я понял, что не могу больше это терпеть. С SEO-наркоманией необходимо бороться. И лично я буду выжигать эту заразу огнём Просвещения!

Часть 1. Параметрические ссылки.

Параметрические ссылки – это те, что содержат get-параметры. Грубо говоря, это ссылки, в которых есть вопросительный знак, амперсанды и знаки равенства. Все современные движки сайтов умеют генерировать красивые ЧПУ-ссылки, поэтому распространение параметрической ссылочной массы считается нежелательным, якобы поисковики этого не любят. Какой-то “добрый человек” запустил этот слух в народ и сейчас в интернете развернулась нешуточная борьба с параметрическими ссылками. Многие владельцы сайтов оказываются повержены в шок, узнав, что если добавить в конец ЧПУ-ссылки на их сайте что-то вроде ?ololo=trololo&alala=tralala , то страница всё равно откроется как ни в чём не бывало. И какой-то не менее “добрый” человек подсказал решение, что такие ссылки можно редиректить на 404 или ещё куда-нибудь на уровне .htaccess или в конфиге nginx. Так делать нельзя! И вот почему:

1. Параметрические ссылки могут использоваться для пагинации (хотя не всегда).
2. Параметрические ссылки используются в фильтрах подбора и сортировки списков.
3. Параметрические ссылки используются в административном интерфейсе.
4. utm-метки – это по сути параметрические ссылки.
5. AJAX-запросы могут содержать параметры в адресах.
Если перенаправить все параметрические ссылки на страницу ошибки, то весь вышеперечисленный функционал может не работать. Перенаправлять лишь некоторые из параметров на страницы ошибок также глупо. Мне доводилось видеть сайт, на котором были перечислены около 20 параметров, с которыми сервер должен был отдавать код 410. Один из них был name, в результате невозможно было добавить компонент в вебформу, однако изначально я этого не знал и на решение внезапно появившейся проблемы пришлось потратить целый час.

И что же делать?

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

Во-вторых, чтобы параметрические ссылки действительно не засоряли поисковик, воспользуйтесь следующими рекомендациями:

1. Настройте canonical
2. На ссылки пейджера, фильтров, сортировок и т.д. повесьте rel=”nofollow”
3. В крайнем случае, если какие-то нежелательные ссылки попали в поисковик, воспользуйтесь инструментами вебмастера.
4. Помните о том, что если ваш сайт не будет полезен для людей, никакое SEO вам не поможет.

PS: по вопросу параметрических ссылок у меня всё, но в ближайшее время я планирую написать ещё пару статей о других проявлениях сео-наркомании.
PPS: ссылка на эту статью в моём блоге.

Тип материала:  Предлагаю решение Ключевые слова:  seo sucks




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  SEO 5 Спасибо

Источник: http://www.drupal.ru/node/132414

SEO-наркомания. Часть 1. Параметрические ссылки

Предисловие

SEO-продвижение – сложная и нужная вещь. Но, к сожалению, многие думают, что для того, чтобы заняться SEO, достаточно лишь отложить в сторону вязальные спицы или плуг. Поэтому в сео-среде полно недоучек, которые без знания технической базы нахватаются умных фраз в чьих-то блогах и уже спешат ломать, крушить сайты и раздавать дурацкие задания разработчикам и задавать тупые вопросы на форумах разработчиков. Собственно, это явление и получило название SEO-наркомания. Когда я просто читал дурацкие вопросы на форумах, я ещё терпел, но когда мне лично пришлось столкнуться в работе с последствиями действий сео-наркоманов, я понял, что не могу больше это терпеть. С SEO-наркоманией необходимо бороться. И лично я буду выжигать эту заразу огнём Просвещения!

Часть 1. Параметрические ссылки.

Параметрические ссылки – это те, что содержат get-параметры. Грубо говоря, это ссылки, в которых есть вопросительный знак, амперсанды и знаки равенства. Все современные движки сайтов умеют генерировать красивые ЧПУ-ссылки, поэтому распространение параметрической ссылочной массы считается нежелательным, якобы поисковики этого не любят. Какой-то “добрый человек” запустил этот слух в народ и сейчас в интернете развернулась нешуточная борьба с параметрическими ссылками. Многие владельцы сайтов оказываются повержены в шок, узнав, что если добавить в конец ЧПУ-ссылки на их сайте что-то вроде ?ololo=trololo&alala=tralala , то страница всё равно откроется как ни в чём не бывало. И какой-то не менее “добрый” человек подсказал решение, что такие ссылки можно редиректить на 404 или ещё куда-нибудь на уровне .htaccess или в конфиге nginx. Так делать нельзя! И вот почему:

1. Параметрические ссылки могут использоваться для пагинации (хотя не всегда).
2. Параметрические ссылки используются в фильтрах подбора и сортировки списков.
3. Параметрические ссылки используются в административном интерфейсе.
4. utm-метки – это по сути параметрические ссылки.
5. AJAX-запросы могут содержать параметры в адресах.
Если перенаправить все параметрические ссылки на страницу ошибки, то весь вышеперечисленный функционал может не работать. Перенаправлять лишь некоторые из параметров на страницы ошибок также глупо. Мне доводилось видеть сайт, на котором были перечислены около 20 параметров, с которыми сервер должен был отдавать код 410. Один из них был name, в результате невозможно было добавить компонент в вебформу, однако изначально я этого не знал и на решение внезапно появившейся проблемы пришлось потратить целый час.

И что же делать?

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

Во-вторых, чтобы параметрические ссылки действительно не засоряли поисковик, воспользуйтесь следующими рекомендациями:

1. Настройте canonical
2. На ссылки пейджера, фильтров, сортировок и т.д. повесьте rel=”nofollow”
3. В крайнем случае, если какие-то нежелательные ссылки попали в поисковик, воспользуйтесь инструментами вебмастера.
4. Помните о том, что если ваш сайт не будет полезен для людей, никакое SEO вам не поможет.

PS: по вопросу параметрических ссылок у меня всё, но в ближайшее время я планирую написать ещё пару статей о других проявлениях сео-наркомании.
PPS: ссылка на эту статью в моём блоге.

Тип материала:  Предлагаю решение Ключевые слова:  seo sucks




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  SEO 5 Спасибо

Источник: http://drupal.ru/node/132414

Drupal 7 Ubercart 3 Сurrency – Вводим валюту на сайт и меняем при помощи свитчера

Долго в интернете искал решение своей проблемы, и нашел модуль самописнный на офф сайте уберкарта
(http://www.ubercart.org/project/uc_currency) который не хотел норм ставиться но пару манипуляций и он заработал как родной

Сразу к делу. Допустим у вас есть сайт на Drupal 7 с установленным модулем Ubercart 3 и настроенным и товаров пару штук тестовых, что дальше:
1. Качаем модуль Currency и устанавливаем.
2. Заходим в папку “sites/all/modules/currency/currency_api” и заменяем файл currency_api.module (по умолчанию он должен быть пустым) на файл который вложен (или Яндекс.Диск)
4. Скачиваем и устанавливаем модуль uc_currency (доступный как вложение или через Яндекс.Диск)

5. Настраиваем модуль Ubercart по пути: YOURSITE.ME/admin/store/settings/store
Так настроено у меня:

6. Настраиваем модуль uc_currency по пути: YOURSITE.ME/admin/store/settings/currency
Так настроено у меня:

PS: USD rate to UAH выставлено 0.0371 так как мой курс 1$ = 27грн в итоге коефициент умножения будет 1/27 = 0.0371
7. Вывести переключатель можно через Структура>Блоки>Currency Switcher
или программно


<?php
$block = block_load('uc_currency', 'uc_currency_block');
print drupal_render(_block_get_renderable_array(_block_render_blocks(array($block))));
?>
uc_currency_.zip4.27 КБ currency_api.module28.37 КБ Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Ключевые слова:  ubercart currency conversation




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Установка и настройка 0 Спасибо

Источник: http://www.drupal.ru/node/132391

Drupal 7 Ubercart 3 Сurrency – Вводим валюту на сайт и меняем при помощи свитчера

Долго в интернете искал решение своей проблемы, и нашел модуль самописнный на офф сайте уберкарта
(http://www.ubercart.org/project/uc_currency) который не хотел норм ставиться но пару манипуляций и он заработал как родной

Сразу к делу. Допустим у вас есть сайт на Drupal 7 с установленным модулем Ubercart 3 и настроенным и товаров пару штук тестовых, что дальше:
1. Качаем модуль Currency и устанавливаем.
2. Заходим в папку “sites/all/modules/currency/currency_api” и заменяем файл currency_api.module (по умолчанию он должен быть пустым) на файл который вложен (или Яндекс.Диск)
4. Скачиваем и устанавливаем модуль uc_currency (доступный как вложение или через Яндекс.Диск)

5. Настраиваем модуль Ubercart по пути: YOURSITE.ME/admin/store/settings/store
Так настроено у меня:

6. Настраиваем модуль uc_currency по пути: YOURSITE.ME/admin/store/settings/currency
Так настроено у меня:

PS: USD rate to UAH выставлено 0.0371 так как мой курс 1$ = 27грн в итоге коефициент умножения будет 1/27 = 0.0371
7. Вывести переключатель можно через Структура>Блоки>Currency Switcher
или программно


<?php
$block = block_load('uc_currency', 'uc_currency_block');
print drupal_render(_block_get_renderable_array(_block_render_blocks(array($block))));
?>
uc_currency_.zip4.27 КБ currency_api.module28.37 КБ Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Ключевые слова:  ubercart currency conversation




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Установка и настройка 0 Спасибо

Источник: http://drupal.ru/node/132391

Sevendie (улучшенная административная тема на основе Seven)

Визуально улучшенная админ-тема на основе Seven. Делал для себя.
Ругайте/хвалите.

Описание:

Очень часто приходится работать в административном интерфейсе, и тема позволяет делать это с большим комфортом. Кроме того, она приятнее на глаз, чем стандартная Seven. Тема должна понравится любителям стандартных административных тем.

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

Перейдите в раздел admin/appearance/ Включить Sevendie В “Тема оформления административных страниц” в нижней части страницы, выберите Sevendie из выпадающего списка и нажмите кнопку “Сохранить”

Скриншоты:







Ссылка в песочницу на drupal.org: https://www.drupal.org/sandbox/deadie/2858199

Для нетерпеливых и не знакомых с git’ом ссылка на архив (Яндекс.Диск): https://yadi.sk/d/32pTGRbf3F9wsW

sevendie-screenshot-01.png16.08 КБ sevendie-screenshot-02.png43.28 КБ sevendie-screenshot-03.png2.6 КБ sevendie-screenshot-04.png16.64 КБ sevendie-screenshot-05.png24.68 КБ sevendie-screenshot-06.png57.95 КБ sevendie-screenshot-07.png6.18 КБ Версия Drupal:  Drupal 7.* Ключевые слова:  admin theme Drupal 7 Модули и темы:  Bartik и Seven




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Программирование 3 Спасибо

Источник: http://www.drupal.ru/node/132354

Sevendie (улучшенная административная тема на основе Seven)

Визуально улучшенная админ-тема на основе Seven. Делал для себя.
Ругайте/хвалите.

Описание:

Очень часто приходится работать в административном интерфейсе, и тема позволяет делать это с большим комфортом. Кроме того, она приятнее на глаз, чем стандартная Seven. Тема должна понравится любителям стандартных административных тем.

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

Перейдите в раздел admin/appearance/ Включить Sevendie В “Тема оформления административных страниц” в нижней части страницы, выберите Sevendie из выпадающего списка и нажмите кнопку “Сохранить”

Скриншоты:







Ссылка в песочницу на drupal.org: https://www.drupal.org/sandbox/deadie/2858199

Для нетерпеливых и не знакомых с git’ом ссылка на архив (Яндекс.Диск): https://yadi.sk/d/32pTGRbf3F9wsW

sevendie-screenshot-01.png16.08 КБ sevendie-screenshot-02.png43.28 КБ sevendie-screenshot-03.png2.6 КБ sevendie-screenshot-04.png16.64 КБ sevendie-screenshot-05.png24.68 КБ sevendie-screenshot-06.png57.95 КБ sevendie-screenshot-07.png6.18 КБ Версия Drupal:  Drupal 7.* Ключевые слова:  admin theme Drupal 7 Модули и темы:  Bartik и Seven




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Программирование 3 Спасибо

Источник: http://drupal.ru/node/132354

Важное сообщение – Тест Версии 3.0 Drupal.ru

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

Поиск багов, Новые ощущения, Драйв, вам обеспечен!


Для более спокойных и адекватных господ, членов сообщества, краткий экскурс в историю нашего многолетнего, местами успешного, ресурса.

Немного истории

Старая версия на шестёрке, это милый… хороший… привычный… дом, за который хотелось перегрызть горло врагам, воевать, отстаивать. Сейчас это на уровне Ностальжи.

Мы жили, устраивали традиционные шоу, бои быков, битьё тарелок и просто банальный пятничный мордобой, случайно попавшимся под руку, новым посетителям.
Казалось, в этом мире никогда и ничего не изменится…
Но ROOT поменял род занятий, на квартирантов внимание обращал редко и у дома покосились стены. Чтоб открыть двери, нужно было закрыть глаза и сосчитать мысленно до шести. Унылый дизайн пятиэтажной хрущёвки с высотами потолков 2700мм не оставлял шансов на гордость, собственно, CMS. Спамеров можно было считать до четырёхсот и выше. Временно смотрящий появлялся, только если лично оскорбить его маму, бабушку, прабабушку и финансовую отчётность его личного предприятия.
Работы по редизайну отодвинули на “Осень” и, с годами, слово стало общепринятым мемом, выражающим крайнюю степень уныния, безнадёжности и разочарования во всех, происходящих в доме, процессах. Ладно, я повторяюсь и это не только мои слова.
Десятки топиков, сотни комментариев, а в ответ тишина…

Перемены

Ветер перемен, пришел… как раз таки осенью, как ни странно, 2015 года. Ресурс выкупил новый владелец. Долго и внимательно всех выслушивал, но потом… сделал всё по своему.

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

Из плохого

За смелые высказывания на кухне, приходили соседи, и оклеивали твою комнату чёрным целлофаном. Ты правда можешь им отомстить, а они ночью ещё раз отомстят тебе и эта война продолжается, пока кому-то мстить не надоест. Участковый отмахивается, дескать это ваши игры и ваши эмоции, но если что, я приду и всех этим целлофаном оклею, инипикнете. Логично. Вроде самодисциплина и самоуправление, даже автомодерация в своём блоге. Личный автомат в квартире. Живи и радуйся.

Всё не так

Поиск. На сайте миллиард полезной информации, но всё легло в дальней комнате, и чтоб добраться туда, надо быть или очень настырным, или опытным. Поэтому, пользователь почесав затылок и вздохнув от предчувствия встречи с троллями, создаёт новую тему, содержимое в 88% случаев боян, вызывающие лёгкое подёргивание левого глазного века у аборигенов и давноживущие, идут со своими ключами, открывают ту комнату, и вытаскивают на свет нужную информацию. Новички принять ключи отказываются наотрез, там надо чот-вот-так-и-вот-так, мы лучше спросим в стопицотый раз, выуж патерпити. В противном случае, демонстративно хлопают дверьми и идут мучить более лояльные общества параллельных галактик.

Модерация

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

Версия 3.0

Подходим к самому главному: в доме объявился Зодчий, Архитектор, Мастер.

Сначала объём работ его немного встревожил, он даже ходил по комнатам и пытался вызвать Сочувствие. Лол.
Интересный человек, у нас у всех свои заботы и проблемы, Господь тебе в помощь, и прикрыть двери, чтоб он опять не пришел. Но Маэстро был настойчив. То тут, то там мы обнаруживали стоящие лазерные уровни, и спотыкались о его протянутые разметочные лески.
И однажды… он сказал что может озвучить, показать, и рассказать обо всём, что творит.
Мы собрались в компании, на кухне, с неработающими микрофонами, выражая мысли жестами и текстом, кто-то кашлял из деликатности, думая что его никто не слышит, кто-то пытался объявить глобальную переменную, в конце разговора нам были розданы ключи от квартир, с условиями опробовать и отчитаться, даже бои быков и битьё тарелок разрешили, временно конечно.

ISSUE

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

Cоздавать топики, писать комментарии, вставлять картинки, видео, код и прочия. Тест спасибок, тёмной материи, новейшей экзальтированной ЛС,с тайными комнатами для правительственных заговоров Cистемно всплывающие в дальнем углу уведомлялки, даже в мобильном приложении. ищем жуков по щелям и хлопаем их тапками…

Озвучивашим полосу между лесом, и медведем – вы услышаны и поняты. Все иссуе, на Гитхабе и чатах Телеграма, Скайпа и Гиттера, так-же на рассмотрении.
Там можно: создавать краткие топики, выражающие негодование, ужас, или ликование от происходящих событий.
Крайне желательно! Все предложения, пожелания, требования и претензии оформляйте тегом ISSUE, issue это обеспечит необходимую фильтрацию, ой да кому я объясняю.
Имеем надежду на скорейшую приёмку Генеральным Проверяющим и сдачу в эксплуатацию с торжественным разбитием о борт шампанского, и спуском на воду.

О будущем

После вступления в строй версии 3.0, начнётся строительство следующей. В версии 4.0 будет голосовой/жестовый набор всех имеющихся варнингов и нотисэ, маленький нюанс, с акцентом не прокатит, только чистейший оксфордский. Лан, шутка.
Надеюсь не утомил длительными многобуквами.


Урл сайта
Урл регистрации
Урл входа.
Урл выхода.

Картинка для привлечения внимания.

Тип материала:  Предлагаю решение Ключевые слова:  3.0 Drupal.ru issue




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Сайт и проект Drupal.ru 4 Спасибо

Источник: http://www.drupal.ru/node/132337

Важное сообщение – Тест Версии 3.0 Drupal.ru

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

Поиск багов, Новые ощущения, Драйв, вам обеспечен!


Для более спокойных и адекватных господ, членов сообщества, краткий экскурс в историю нашего многолетнего, местами успешного, ресурса.

Немного истории

Старая версия на шестёрке, это милый… хороший… привычный… дом, за который хотелось перегрызть горло врагам, воевать, отстаивать. Сейчас это на уровне Ностальжи.

Мы жили, устраивали традиционные шоу, бои быков, битьё тарелок и просто банальный пятничный мордобой, случайно попавшимся под руку, новым посетителям.
Казалось, в этом мире никогда и ничего не изменится…
Но ROOT поменял род занятий, на квартирантов внимание обращал редко и у дома покосились стены. Чтоб открыть двери, нужно было закрыть глаза и сосчитать мысленно до шести. Унылый дизайн пятиэтажной хрущёвки с высотами потолков 2700мм не оставлял шансов на гордость, собственно, CMS. Спамеров можно было считать до четырёхсот и выше. Временно смотрящий появлялся, только если лично оскорбить его маму, бабушку, прабабушку и финансовую отчётность его личного предприятия.
Работы по редизайну отодвинули на “Осень” и, с годами, слово стало общепринятым мемом, выражающим крайнюю степень уныния, безнадёжности и разочарования во всех, происходящих в доме, процессах. Ладно, я повторяюсь и это не только мои слова.
Десятки топиков, сотни комментариев, а в ответ тишина…

Перемены

Ветер перемен, пришел… как раз таки осенью, как ни странно, 2015 года. Ресурс выкупил новый владелец. Долго и внимательно всех выслушивал, но потом… сделал всё по своему.

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

Из плохого

За смелые высказывания на кухне, приходили соседи, и оклеивали твою комнату чёрным целлофаном. Ты правда можешь им отомстить, а они ночью ещё раз отомстят тебе и эта война продолжается, пока кому-то мстить не надоест. Участковый отмахивается, дескать это ваши игры и ваши эмоции, но если что, я приду и всех этим целлофаном оклею, инипикнете. Логично. Вроде самодисциплина и самоуправление, даже автомодерация в своём блоге. Личный автомат в квартире. Живи и радуйся.

Всё не так

Поиск. На сайте миллиард полезной информации, но всё легло в дальней комнате, и чтоб добраться туда, надо быть или очень настырным, или опытным. Поэтому, пользователь почесав затылок и вздохнув от предчувствия встречи с троллями, создаёт новую тему, содержимое в 88% случаев боян, вызывающие лёгкое подёргивание левого глазного века у аборигенов и давноживущие, идут со своими ключами, открывают ту комнату, и вытаскивают на свет нужную информацию. Новички принять ключи отказываются наотрез, там надо чот-вот-так-и-вот-так, мы лучше спросим в стопицотый раз, выуж патерпити. В противном случае, демонстративно хлопают дверьми и идут мучить более лояльные общества параллельных галактик.

Модерация

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

Версия 3.0

Подходим к самому главному: в доме объявился Зодчий, Архитектор, Мастер.

Сначала объём работ его немного встревожил, он даже ходил по комнатам и пытался вызвать Сочувствие. Лол.
Интересный человек, у нас у всех свои заботы и проблемы, Господь тебе в помощь, и прикрыть двери, чтоб он опять не пришел. Но Маэстро был настойчив. То тут, то там мы обнаруживали стоящие лазерные уровни, и спотыкались о его протянутые разметочные лески.
И однажды… он сказал что может озвучить, показать, и рассказать обо всём, что творит.
Мы собрались в компании, на кухне, с неработающими микрофонами, выражая мысли жестами и текстом, кто-то кашлял из деликатности, думая что его никто не слышит, кто-то пытался объявить глобальную переменную, в конце разговора нам были розданы ключи от квартир, с условиями опробовать и отчитаться, даже бои быков и битьё тарелок разрешили, временно конечно.

ISSUE

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

Cоздавать топики, писать комментарии, вставлять картинки, видео, код и прочия. Тест спасибок, тёмной материи, новейшей экзальтированной ЛС,с тайными комнатами для правительственных заговоров Cистемно всплывающие в дальнем углу уведомлялки, даже в мобильном приложении. ищем жуков по щелям и хлопаем их тапками…

Озвучивашим полосу между лесом, и медведем – вы услышаны и поняты. Все иссуе, на Гитхабе и чатах Телеграма, Скайпа и Гиттера, так-же на рассмотрении.
Там можно: создавать краткие топики, выражающие негодование, ужас, или ликование от происходящих событий.
Крайне желательно! Все предложения, пожелания, требования и претензии оформляйте тегом ISSUE, issue это обеспечит необходимую фильтрацию, ой да кому я объясняю.
Имеем надежду на скорейшую приёмку Генеральным Проверяющим и сдачу в эксплуатацию с торжественным разбитием о борт шампанского, и спуском на воду.

О будущем

После вступления в строй версии 3.0, начнётся строительство следующей. В версии 4.0 будет голосовой/жестовый набор всех имеющихся варнингов и нотисэ, маленький нюанс, с акцентом не прокатит, только чистейший оксфордский. Лан, шутка.
Надеюсь не утомил длительными многобуквами.


Урл сайта
Урл регистрации
Урл входа.
Урл выхода.

Картинка для привлечения внимания.

Тип материала:  Предлагаю решение Ключевые слова:  3.0 Drupal.ru issue




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Сайт и проект Drupal.ru 4 Спасибо

Источник: http://drupal.ru/node/132337

Bundle clone – самый простой способ копирования полей

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

Издревле многие друпалеры мучаются вопросом, каким образом лучше всего создать одинаковое поле сразу в нескольких типах содержимого. Для этого даже придумали опцию “вставить существующее поле”, но эта опция делает всё не в один шаг, кроме того, многие настройки всё равно приходится заполнять, а настройки отображения таким способом не копируются вовсе. А ведь бывают ситуации, когда нужно несколько одинаковых полей создать сразу в десятках типа содержимого. И вот совсем недавно я наткнулся на модуль  Bundle Clone. Что примечательно, модуль не очень распространён и пишут о нём незаслуженно мало. Итак, что же он делает – модуль позволяет копировать любые поля из любого типа сущности в любые другие её бандлы.

Давайте посмотрим, как это выглядит на практике. Итак, устанавливаем модуль, идём в настройки: admin/structure/bundle_clone. Выбираем тип сущности (картинка ниже).

Затем выбираем Source, после выбора подтягивается список его полей и выбираем, что и куда будем копировать, доступен множественный выбор. Копировать из одного типа сущностей в другой нельзя (например из термина в ноду). Зато можно копировать сразу несколько полей в сразу несколько бандлов. При копировании уже существующих полей, они не создаются повторно, а обновляются их настройки. Поля копируются вместе с настройками отображения. Если после копирования вы изменили настройки в одном типе содержимого, вы можете их скопировать отдельно на вкладке Update display.

Вот такой вот простой и полезный модуль

И традиционная спам-ссылка на мой говноблог

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Ключевые слова:  cck поля материал




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Установка и настройка 12 Спасибо

Источник: http://www.drupal.ru/node/132319

Bundle clone – самый простой способ копирования полей

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

Издревле многие друпалеры мучаются вопросом, каким образом лучше всего создать одинаковое поле сразу в нескольких типах содержимого. Для этого даже придумали опцию “вставить существующее поле”, но эта опция делает всё не в один шаг, кроме того, многие настройки всё равно приходится заполнять, а настройки отображения таким способом не копируются вовсе. А ведь бывают ситуации, когда нужно несколько одинаковых полей создать сразу в десятках типа содержимого. И вот совсем недавно я наткнулся на модуль  Bundle Clone. Что примечательно, модуль не очень распространён и пишут о нём незаслуженно мало. Итак, что же он делает – модуль позволяет копировать любые поля из любого типа сущности в любые другие её бандлы.

Давайте посмотрим, как это выглядит на практике. Итак, устанавливаем модуль, идём в настройки: admin/structure/bundle_clone. Выбираем тип сущности (картинка ниже).

Затем выбираем Source, после выбора подтягивается список его полей и выбираем, что и куда будем копировать, доступен множественный выбор. Копировать из одного типа сущностей в другой нельзя (например из термина в ноду). Зато можно копировать сразу несколько полей в сразу несколько бандлов. При копировании уже существующих полей, они не создаются повторно, а обновляются их настройки. Поля копируются вместе с настройками отображения. Если после копирования вы изменили настройки в одном типе содержимого, вы можете их скопировать отдельно на вкладке Update display.

Вот такой вот простой и полезный модуль

И традиционная спам-ссылка на мой говноблог

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Ключевые слова:  cck поля материал




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Установка и настройка 12 Спасибо

Источник: http://drupal.ru/node/132319

Drupal 8.3.0-rc1

В преддверии выпуска Друпал 8.3.0, для ознакомления и тестирования, выпущена первая подготовительная версия версия Drupal 8.3.0-rc1
Все любопытные или желающие принять участие в тестировании, уже могут ознакомиться с этой версией.

Версия Drupal:  Drupal 8.*




email





facebook





linkedin





twitter





google+





pinterest
0 Спасибо

Источник: http://www.drupal.ru/node/132304

Drupal 8.3.0-rc1

В преддверии выпуска Друпал 8.3.0, для ознакомления и тестирования, выпущена первая подготовительная версия версия Drupal 8.3.0-rc1
Все любопытные или желающие принять участие в тестировании, уже могут ознакомиться с этой версией.

Версия Drupal:  Drupal 8.*




email





facebook





linkedin





twitter





google+





pinterest
0 Спасибо

Источник: http://drupal.ru/node/132304

Видео второго занятия Drupal-школы: Основы работы с контентом и дизайном сайта на Drupal 8

Запись второго занятия Drupal-школы.

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

Данное же занятие является практическим и посвящено основам веб-разработки и системе управления контентом на Drupal 8.
Самое начало, для самых новичков.

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

Напомню, что Drupal-школа – это проект посвященный обучению школьников (13 гимназия, г. Новосибирск) веб-разработке на основе CMS Drupal 8. Поддерживается администрацией школы, сибирским сообществом друпаллеров DrupalSib и группой компаний i20.






email





facebook





linkedin





twitter





google+





pinterest
4 Спасибо

Источник: http://www.drupal.ru/node/132202

Видео второго занятия Drupal-школы: Основы работы с контентом и дизайном сайта на Drupal 8

Запись второго занятия Drupal-школы.

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

Данное же занятие является практическим и посвящено основам веб-разработки и системе управления контентом на Drupal 8.
Самое начало, для самых новичков.

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

Напомню, что Drupal-школа – это проект посвященный обучению школьников (13 гимназия, г. Новосибирск) веб-разработке на основе CMS Drupal 8. Поддерживается администрацией школы, сибирским сообществом друпаллеров DrupalSib и группой компаний i20.






email





facebook





linkedin





twitter





google+





pinterest
4 Спасибо

Источник: http://drupal.ru/node/132202

YO! Зацените скаффолдер для модулей Drupal 7


Есть, значит, для Drupal 8 – консолько, а для Drupal 7 – пилите все руками, да?

Неее… ))

Надо бы трохи подправить баланс справедливости. Благо братья наши, нодJSники, делают кучу полезных инструментов (нам бы перенимать у них, ну да ладно… не об этом сейчас).

Есть, такая полезность как YEOMAN. Работает на ноде, позволяет скаффолдеры строить для разного.

Вот и решил я немного скрасить рутину, для начала – автоматизировав создание кастомных модулей.

Сразу про “А чо не драш” или “А чо не брать готовые  модули“:

Делал, в первую очередь, для себя. Надоело копировать это каждый раз. На ноде работает хорошо, быстро. Пишется и поддерживается – удобно. Короч, вот так.

Ок. Как юзать:

ясен пень – должна быть нода

(Установка: Linux, Mac, Windows)

так же должен быть установлен сам модуль – YO npm install -g yo и, вслед, ставим генератор Drupal-модулей npm install -g generator-dmodule

(ключик “-g” означает что модуль будет установлен глобально – не для отдельного проекта, и будет доступен в любой директории.)

Вооот…. Теперь можно модульки делать – хоть обделаться! )) Создаем папку модуля в “нужном месте”, переходим в нее..:

mkdir my_module && cd my_module

..и, генерируем модуль:

yo dmodule

По-ходу, отвечаем на все поставленные вопросы, типа: “Имя модуля”, “Необходимые хуки”, “Генерируемые файлы” и т.п.

На выходе получаем готовый скелетон модуля! Как2ПальцаАбАсфальт…

Пока способности – не безграничны, но рутину скрашивает на раз-два. Чего могет:

Генерация .info Генерация .module Генерация .install (при необходимости) Генерация статических файлов – JS / CSS (при необходимости) Имплементация некоторых хуков – hook_permission, hook_menu, hook_install/hook_uninstall, hook_schema (при необходимости)

Хуки, на выходе – с готовыми шаблонами.

Если “взлетит” (если будет интерес к проекту) – буду дальше развивать. Внедрю еще хуков, настроек им приделаю, все дела…

Вот Вам скрины:

Странички проекта:

GItHub NPM

Пока еще свежак, так-что смотрите-фидбечте. Тута, тама – де удобно.

Красивых вам модулей, YO!

ЗЫ – немного про YEOMAN можно почитать тут и здесь. Ну и канешн в гуглах, если уж понесло… ))

drupal_yeoman.png17.08 КБ yo1.png64.77 КБ yo2.png95.86 КБ yeoman.png49.84 КБ yeoman_multiple.png39.68 КБ Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Ключевые слова:  scaffold скаффолдинг module_builder builder yeoman yo




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Программирование 8 Спасибо

Источник: http://www.drupal.ru/node/132147

YO! Зацените скаффолдер для модулей Drupal 7


Есть, значит, для Drupal 8 – консолько, а для Drupal 7 – пилите все руками, да?

Неее… ))

Надо бы трохи подправить баланс справедливости. Благо братья наши, нодJSники, делают кучу полезных инструментов (нам бы перенимать у них, ну да ладно… не об этом сейчас).

Есть, такая полезность как YEOMAN. Работает на ноде, позволяет скаффолдеры строить для разного.

Вот и решил я немного скрасить рутину, для начала – автоматизировав создание кастомных модулей.

Сразу про “А чо не драш” или “А чо не брать готовые  модули“:

Делал, в первую очередь, для себя. Надоело копировать это каждый раз. На ноде работает хорошо, быстро. Пишется и поддерживается – удобно. Короч, вот так.

Ок. Как юзать:

ясен пень – должна быть нода

(Установка: Linux, Mac, Windows)

так же должен быть установлен сам модуль – YO npm install -g yo и, вслед, ставим генератор Drupal-модулей npm install -g generator-dmodule

(ключик “-g” означает что модуль будет установлен глобально – не для отдельного проекта, и будет доступен в любой директории.)

Вооот…. Теперь можно модульки делать – хоть обделаться! )) Создаем папку модуля в “нужном месте”, переходим в нее..:

mkdir my_module && cd my_module

..и, генерируем модуль:

yo dmodule

По-ходу, отвечаем на все поставленные вопросы, типа: “Имя модуля”, “Необходимые хуки”, “Генерируемые файлы” и т.п.

На выходе получаем готовый скелетон модуля! Как2ПальцаАбАсфальт…

Пока способности – не безграничны, но рутину скрашивает на раз-два. Чего могет:

Генерация .info Генерация .module Генерация .install (при необходимости) Генерация статических файлов – JS / CSS (при необходимости) Имплементация некоторых хуков – hook_permission, hook_menu, hook_install/hook_uninstall, hook_schema (при необходимости)

Хуки, на выходе – с готовыми шаблонами.

Если “взлетит” (если будет интерес к проекту) – буду дальше развивать. Внедрю еще хуков, настроек им приделаю, все дела…

Вот Вам скрины:

Странички проекта:

GItHub NPM

Пока еще свежак, так-что смотрите-фидбечте. Тута, тама – де удобно.

Красивых вам модулей, YO!

ЗЫ – немного про YEOMAN можно почитать тут и здесь. Ну и канешн в гуглах, если уж понесло… ))

drupal_yeoman.png17.08 КБ yo1.png64.77 КБ yo2.png95.86 КБ yeoman.png49.84 КБ yeoman_multiple.png39.68 КБ Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Ключевые слова:  scaffold скаффолдинг module_builder builder yeoman yo




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Программирование 8 Спасибо

Источник: http://drupal.ru/node/132147

40+ шпаргалок для веб дизайнеров и разработчиков


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

CSS шпаргалки

CSS Vocabulary Cheatsheet (apps.workflower.fi) тычь по ссылке →
The Complete CSS Cheatsheet (websitesetup.org) тычь по ссылке →
The CSS3 Cheatsheet (smashingmagazine.com) тычь по ссылке →
Responsive Web Design Cheatsheet (uxpin.com) тычь по ссылке →
CSS Media Queries Cheatsheet (mac-blog.org.ua) тычь по ссылке →
CSS Animation Cheatsheet (justinaguilar.com) тычь по ссылке →
The Ultimate Flexbox Cheatsheet (sketchingwithcss.com) тычь по ссылке →

HTML шпаргалки

HTML Vocabulary Cheatsheet (apps.workflower.fi) тычь по ссылке →
The Mega HTML5 Cheatsheet (makeawebsitehub.com) тычь по ссылке →
The HTML Elements Index (meiert.com) тычь по ссылке →
HTML5 Canvas Cheatsheet (simon.html5.org) тычь по ссылке →

JavaScript и jQuery шпаргалки

JavaScript Cheatsheet (overapi.com) тычь по ссылке →
jQuery Cheatsheet (overapi.com) тычь по ссылке →
jQuery Quick API Reference (oscarotero.com) тычь по ссылке →

PHP шпаргалки

The PHP Cheatsheet (overapi.com) тычь по ссылке →
PHP Cheatsheets (phpcheatsheets.com) тычь по ссылке →

Markdown шпаргалки

Markdown Cheasheet (code.ahren.org) тычь по ссылке →
Markdown Here Cheatsheet (github.com) тычь по ссылке →

Bootstrap Framework шпаргалки

Bootstrap 4 Cheatsheet (hackerthemes.com) тычь по ссылке →
Bootstrap 3 Cheatsheet (creativealive.com) тычь по ссылке →
Glyphicons Cheatsheet (glyphicons.bootstrapcheatsheets.com) тычь по ссылке →

Drupal шпаргалки

Drupal Console Cheat Sheet тычь по ссылке →
Drupal 7 database Cheat Sheet тычь по ссылке →
Drupal 8 Entity Cheat Sheet тычь по ссылке →
Drupal 7 Theming Cheat Sheet тычь по ссылке →
Drupal Core API Cheat Sheet тычь по ссылке →
Drupal Cheat Sheet Desktop Wallpaper тычь по ссылке →
Drupal 7 to Drupal 8: The Cheat Sheet тычь по ссылке →

WordPress шпаргалки

Copy/Paste WordPress Cheatsheet (buildyourownblog.net) тычь по ссылке →
The Ultimate WordPress Development Cheatsheet (wefixyourwp.com) тычь по ссылке →

Git шпаргалки

Git Cheatsheet (overapi.com) тычь по ссылке →
Git Pretty (justinhileman.info) тычь по ссылке →

Шпаргалки web-шрифтов и типографики

Compatibility Tables for Default Local Fonts (fontfamily.io) тычь по ссылке →
Google Font Cheatsheet (ricostacruz.com) тычь по ссылке →
Font Awesome Cheatsheet (fontawesome.io/cheatsheet) тычь по ссылке →
The Anatomy of Type Cheatsheet (speckyboy.com) тычь по ссылке →
The Periodic Table of Typefaces Cheatsheet (squidspot.com) тычь по ссылке →

Шпаргалки по горячим клавишам редакторов кода

Sublime Text Cheatsheet (speckyboy.com) тычь по ссылке →
Sublime Text Cheatsheet Plugin (github.com) тычь по ссылке →
Commonly Used Sublime Text Commands (csnipp.com) тычь по ссылке →
Atom Editor Cheatsheet (cloudfront.net) тычь по ссылке →
Atom Editor Keyboard Shortcut Cheatsheet (blog.bugsnag.com) тычь по ссылке →
Vim Cheatsheet (vim.rtorr.com) тычь по ссылке →
Notepad++ Cheatsheet (drive.google.com) тычь по ссылке →

Разные шпаргалки

The Web Developer’s SEO Cheatsheet (moz.com) тычь по ссылке →
MySQL Command Line Cheatsheet (github.com) тычь по ссылке →
htaccess Cheatsheet (htaccesscheatsheet.com) тычь по ссылке →
The Foundation Framework Cheatsheet (sudheerdev.github.io) тычь по ссылке →
The Color Theory Cheatsheet (paper-leaf.com) тычь по ссылке →
The Screen Resolution Cheatsheet (design215.com) тычь по ссылке →

UPD: Добавил друпал шпаргалки.
Оригинал

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  PHP CSS шпаргалки




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Разное непонятное 6 Спасибо

Источник: http://www.drupal.ru/node/132121

40+ шпаргалок для веб дизайнеров и разработчиков


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

CSS шпаргалки

CSS Vocabulary Cheatsheet (apps.workflower.fi) тычь по ссылке →
The Complete CSS Cheatsheet (websitesetup.org) тычь по ссылке →
The CSS3 Cheatsheet (smashingmagazine.com) тычь по ссылке →
Responsive Web Design Cheatsheet (uxpin.com) тычь по ссылке →
CSS Media Queries Cheatsheet (mac-blog.org.ua) тычь по ссылке →
CSS Animation Cheatsheet (justinaguilar.com) тычь по ссылке →
The Ultimate Flexbox Cheatsheet (sketchingwithcss.com) тычь по ссылке →

HTML шпаргалки

HTML Vocabulary Cheatsheet (apps.workflower.fi) тычь по ссылке →
The Mega HTML5 Cheatsheet (makeawebsitehub.com) тычь по ссылке →
The HTML Elements Index (meiert.com) тычь по ссылке →
HTML5 Canvas Cheatsheet (simon.html5.org) тычь по ссылке →

JavaScript и jQuery шпаргалки

JavaScript Cheatsheet (overapi.com) тычь по ссылке →
jQuery Cheatsheet (overapi.com) тычь по ссылке →
jQuery Quick API Reference (oscarotero.com) тычь по ссылке →

PHP шпаргалки

The PHP Cheatsheet (overapi.com) тычь по ссылке →
PHP Cheatsheets (phpcheatsheets.com) тычь по ссылке →

Markdown шпаргалки

Markdown Cheasheet (code.ahren.org) тычь по ссылке →
Markdown Here Cheatsheet (github.com) тычь по ссылке →

Bootstrap Framework шпаргалки

Bootstrap 4 Cheatsheet (hackerthemes.com) тычь по ссылке →
Bootstrap 3 Cheatsheet (creativealive.com) тычь по ссылке →
Glyphicons Cheatsheet (glyphicons.bootstrapcheatsheets.com) тычь по ссылке →

Drupal шпаргалки

Drupal Console Cheat Sheet тычь по ссылке →
Drupal 7 database Cheat Sheet тычь по ссылке →
Drupal 8 Entity Cheat Sheet тычь по ссылке →
Drupal 7 Theming Cheat Sheet тычь по ссылке →
Drupal Core API Cheat Sheet тычь по ссылке →
Drupal Cheat Sheet Desktop Wallpaper тычь по ссылке →
Drupal 7 to Drupal 8: The Cheat Sheet тычь по ссылке →

WordPress шпаргалки

Copy/Paste WordPress Cheatsheet (buildyourownblog.net) тычь по ссылке →
The Ultimate WordPress Development Cheatsheet (wefixyourwp.com) тычь по ссылке →

Git шпаргалки

Git Cheatsheet (overapi.com) тычь по ссылке →
Git Pretty (justinhileman.info) тычь по ссылке →

Шпаргалки web-шрифтов и типографики

Compatibility Tables for Default Local Fonts (fontfamily.io) тычь по ссылке →
Google Font Cheatsheet (ricostacruz.com) тычь по ссылке →
Font Awesome Cheatsheet (fontawesome.io/cheatsheet) тычь по ссылке →
The Anatomy of Type Cheatsheet (speckyboy.com) тычь по ссылке →
The Periodic Table of Typefaces Cheatsheet (squidspot.com) тычь по ссылке →

Шпаргалки по горячим клавишам редакторов кода

Sublime Text Cheatsheet (speckyboy.com) тычь по ссылке →
Sublime Text Cheatsheet Plugin (github.com) тычь по ссылке →
Commonly Used Sublime Text Commands (csnipp.com) тычь по ссылке →
Atom Editor Cheatsheet (cloudfront.net) тычь по ссылке →
Atom Editor Keyboard Shortcut Cheatsheet (blog.bugsnag.com) тычь по ссылке →
Vim Cheatsheet (vim.rtorr.com) тычь по ссылке →
Notepad++ Cheatsheet (drive.google.com) тычь по ссылке →

Разные шпаргалки

The Web Developer’s SEO Cheatsheet (moz.com) тычь по ссылке →
MySQL Command Line Cheatsheet (github.com) тычь по ссылке →
htaccess Cheatsheet (htaccesscheatsheet.com) тычь по ссылке →
The Foundation Framework Cheatsheet (sudheerdev.github.io) тычь по ссылке →
The Color Theory Cheatsheet (paper-leaf.com) тычь по ссылке →
The Screen Resolution Cheatsheet (design215.com) тычь по ссылке →

UPD: Добавил друпал шпаргалки.
Оригинал

Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  PHP CSS шпаргалки




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Разное непонятное 6 Спасибо

Источник: http://drupal.ru/node/132121

Друпал-школа. Видео лекции: Веб-разработка: CMS Drupal 8.

У меня получилось объединить свои компетенции преподавателя и веб-разработчика в рамках проекта “Drupal-школа”. Теперь я учу школьников веб-разработке)

Drupal-школа – проект посвященный обучению школьников (13 гимназия, г. Новосибирск) веб-разработке на основе CMS Drupal 8. Поддерживается администрацией школы, сибирским сообществом друпаллеров DrupalSib и группой компаний i20.

Записи проведенных занятий буду постепенно выкладывать. Это – первое, лекционное.

Версия Drupal:  Drupal 8.* Ключевые слова:  друпал-школа видео занятий drupal 8




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  DrupalSib 4 Спасибо

Источник: http://www.drupal.ru/node/132101

Друпал-школа. Видео лекции: Веб-разработка: CMS Drupal 8.

У меня получилось объединить свои компетенции преподавателя и веб-разработчика в рамках проекта “Drupal-школа”. Теперь я учу школьников веб-разработке)

Drupal-школа – проект посвященный обучению школьников (13 гимназия, г. Новосибирск) веб-разработке на основе CMS Drupal 8. Поддерживается администрацией школы, сибирским сообществом друпаллеров DrupalSib и группой компаний i20.

Записи проведенных занятий буду постепенно выкладывать. Это – первое, лекционное.

Версия Drupal:  Drupal 8.* Ключевые слова:  друпал-школа видео занятий drupal 8




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  DrupalSib 4 Спасибо

Источник: http://drupal.ru/node/132101

Выпущены Drupal 8.2.6 и Drupal 7.54

Подробности об изменениях Drupal 8.2.6
Это последнее обновление серии 8.2.x
Следующее обновление будет Drupal 8.3.0 (планируемая дата: 2017 апрель 5).

Подробности об изменениях Drupal 7.54
Критических ошибок нет.






email





facebook





linkedin





twitter





google+





pinterest
0 Спасибо

Источник: http://www.drupal.ru/node/131933

Обновление ядра для Семёрки и Восьмёрки

Подробности об изменениях Drupal 8.2.6

Это последнее обновление серии 8.2.x
Следующее обновление будет Drupal 8.3.0 (планируемая дата: 2017 апрель 5).

Подробности об изменениях Drupal 7.54

Критических ошибок нет.

Дубль с новостной ленты для соцсетей

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 8.* Drupal 7.*




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Установка и настройка 2 Спасибо

Источник: http://www.drupal.ru/node/131920

Выпущены Drupal 8.2.6 и Drupal 7.54

Newsletter:  Рассылка

Подробности об изменениях Drupal 8.2.6
Это последнее обновление серии 8.2.x
Следующее обновление будет Drupal 8.3.0 (планируемая дата: 2017 апрель 5).

Подробности об изменениях Drupal 7.54
Критических ошибок нет.

1 Спасибо

Источник: http://www.drupal.ru/node/131919

Новый модераторский состав Drupal.ru

Господа форумчане, рад вам представить новых модераторов форума.

Прошу любить и жаловать:

Softovick

dmitry.s

sibero

radontt

Приветствую, господа!

Теперь живем таким составом, так что не флудим и живем улыбаясь

Всем успехов!

Напомню, на всякий, свод наших правил можно найти здесь, тут и там.
Так же, есть дополнительные правила для размещения вакансий. И про “Темную Материю”.

Ключевые слова:  правила Drupal.ru модерация




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Сайт и проект Drupal.ru 4 Спасибо

Источник: http://www.drupal.ru/node/131915

Установка Let’s Encrypt на сервер, сложности с Drupal

В последнее время, Хром начал вселять в пользователей всё больше недоверия к не сертифицированным сайтам. Само-подписанные сертификаты уже не являются в полной мере решением проблемы. Появились значки и прямые указания на ненадёжность ресурса, причём уже на понятном пользователем языке, и – если это кого-то настораживает, прямой отток можно сказать начат. С этим можно и надо бороться.
В сети можно легко найти пособия и рекомендации, по установке сертификата на любые оси и конфигурации, в статье делаю акцент на наличие установленного сайта с Drupal и проверке подлинности владения доменным именем.

Let’s Encrypt – некоммерческий удостоверяющий центр, который предоставляет бесплатные X.509 сертификаты для TLS шифрования с помощью автоматизированного процесса, направленного на замену текущего сложного процесса ручного создания, проверки, подписи, установки и обновления сертификатов для защищённых веб-сайтов.

Официальный сайт сервиса: Let’s Encrypt.

Let’s Encrypt имеет ограничения:

Можно заказать только 5 сертификатов в неделю (TLD, включая его поддомены) То есть – заказываем один сертификат на site.ru, устанавливаем, и 4 на поддомены вида new.site.ru и ждём неделю для дальнейшего сертифицирования нашего зоопарка. Инфа по ограничению выдана управлением ISP панели и мною не проверена. Не поддерживаются wildcard сертификаты Срок действия Let’s Encrypt сертификата 3 месяца (каждые 3 месяца ISPmanager выполняет перевыпуск Let’s Encrypt сертификатов)
Обновление происходит в автоматическом режиме, админу стоит лишь проконтролировать сервер в “критические” дни.

Собственно речь идёт о ISP – панели, знаю что на форуме, она пользуется популярностью. Начиная с версии ISPmanager 5.65 в панели появилась возможность полуавтоматической установки сертификата Let’s Encrypt. То есть – никаких пугающих чёрных консолей, многочасового поиска инструкций по установке.

По умолчанию модуль выключен. Включаем его у рута, в разделе Интеграция пункт Модули

После включения модуля, это будет выглядеть так -

Далее, идём в аккаунт пользователя и там входим в раздел WWW-домены

Жмём на нужный нам домен/поддомен и там ставим галочку на Защищенное соединение (SSL)

Не знаю особенности управления вашего сервера, у меня приходится на время сертифицирования, так-же в
Режим работы PHP выбирать модуль Apache

Отвлекаясь скажу – гораздо проще всё делать “с чистого листа”, на вновь созданном домене-сайте, ну это, как сами понимаете – редкость. Обычно мы уже имеем что-либо и приходится вникать.

Сорри что отвлёкся, когда мы выставили галочку на Повышенная безопасность SSL, внизу раскрываются настройки, и там нужно сделать такой выбор (указано красной стрелкой)

Сохраняем, и получаем окно

Вводим свои данные и жмём ОК

Далее, в разделе WWW заходим в SSL-сертификаты и там видим по тырку на сертификат

Если доменное имя свежее и папка сайта пуста, сервис Let’s Encrypt в течении 5-7 минут проверит подлинность владения, и процесс выдачи сертификата практически завершен, журнал событий Let’s Encrypt покажет:

по адресу http://site.ru откроется https://site.ru и будет иметь плашку:

Если доменное имя новое и папка сайта пуста Let’s Encrypt проверяя подлинность владения именем, прописывает директорию .well-known/acme-challenge

Теперь рассмотрим самое важное для Друпаллеров. Для Шестёрки-Семёрки, сайт не пропустит проверку, Let’s Encrypt будет семафорить в журнале ошибкой, которая легко гуглится и наводит на размышления, поэтому кратко. Нужно удалить htaccess из корня сайта (предварительно скачав его на ваш компьютер, заархивировав, или просто удалить, если вы знаете где взять свежий). Удалить сертификат и по-новой начать проверку. После признания сервисом Let’s Encrypt вернуть на место htaccess.

Теперь идём в ~/www/site.ru/sites/default/settings.php Cтавим временно права на sites, default, settings.php 777

Заходим в редакцию settings.php немного ниже под вводами логинов-паролей для базы ищем строку # $base_url = ‘http://www.example.com‘; // NO trailing slash!
И прописываем под ней следующее:
$base_url = ‘https://site.ru‘; Никаких слэшей к конце! Это важно.

В Семёрке это приблизительно, 280-281 строка.
В Восьмёрке это приблизительно, 509-510 строка.
После сохранения, не забываем вернуть права трём папкам.

По настройке сертификата на существующей Восьмёрке, информация данная в этой статье неполная, пока в стадии тестирования.

shotjmz2m.png31.51 КБ Тип материала:  Предлагаю решение Версия Drupal:  Drupal 8.* Drupal 7.* Drupal 6.* Ключевые слова:  Let’s Encrypt




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Хостинг 4 Спасибо

Источник: http://www.drupal.ru/node/131774

Open Social Drupal 8


Есть интересный дистрибутив drupal 8 для создания сообществ Open Social

Дистрибутив содержит в себе стандартный набор допустимого контента в форме постов, создания групп, подписки на группы и события.

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

Вам нужно будет иметь на сервере расширение mbstring

для php7 его можно поставить коммандой

apt-get install php7.0-mbstring
И для drupal8 вообще вам нужно еще расширение php7.0-mbstring

Если его на сервере нет, то
apt-get install  php7.0-mbstring
Это расширение доступно из репозиториев ubuntu 16 или от dotdeb для debian jessie

Другие дистрибутивы не рассматриваю, так как не использовал.

Особенностью этого дистрибутива является модуль address, который можно поставить только c помощью composer

Скачиваете дистрибутив как обычно это делается при установке drupal

У вас должны стоять composer и drush

Далее из корневой директории сайта добавляем реп для composer

composer config repositories.drupal composer https://packages.drupal.org/8

И производим установку модуля address

composer require "drupal/address ~1.0"

После этого вы можете установить дистрибутив обычным способом.

Demo http://opensocial.graytone.ru/

Версия Drupal:  Drupal 8.* Ключевые слова:  opensocial




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Разработка и установка 6 Спасибо

Источник: http://www.drupal.ru/node/131683

Выпущен drupal 8.2.5

Newsletter:  Новости Друпал

Критических ошибок нет.
Подробности изменений

0 Спасибо

Источник: http://www.drupal.ru/node/131473

Panels – использовать или нет?

Пожалуй, нет ни одного другого модуля под drupal, о котором мнения разработчиков будут так же диаметрально различаться, как о Panels. То, что модуль гибок и функционален, не вызывает сомнений ни у кого, но вот целесообразность его использования многие ставят под вопрос. Я долгое время избегал использования панелей, чтобы не перегружать сайт лишними (как мне казалось) модулями. Старался обходиться блоками, но со временем стал замечать всё больше и больше недостатков и ограничений блочной системы Drupal. Поэтому однажды я решил поглубже разобраться в панелях и понял, что они порой дают неоспоримые преимущества перед любыми другими решениями. Итак, поехали.

Когда нужно использовать Panels

1. Если нужно выводить поле контента в другом регионе, либо вставить блок между полями.

Это можно сделать и без панелей, через views + блоки, но ведь вьюху ещё нужно создать и настроить, а в панелях прямо из коробки доступны панели со всеми отдельными полями контента. Более того, тут будет прирост по быстродействию, т.к. панели используют уже загруженный объект ноды из контекста, а вьюс возьмёт nid из url страницы и полезет за полем в базу.

2. Вывести один блок одновременно в два региона.

Панели позволяют любое содержимое вставлять в макет страницы сколько угодно раз. К слову, вовсе не обязательно выводить блок на страницу дважды, задача может стоять так, чтобы вывести блок на одних страницах в одном регионе, а на других в другом. Блочная система не позволяет этого сделать, а панели – запросто.

3. Сделать разный шаблон для разных словарей таксономии.

Если вам нужно выводить блок на страницах терминов одного словаря, а на страницах другого не нужно, то кроме панелей, это ничем не решить. Можно, конечно, сделать костыль – включить пхп-фильтр и задать в конкретных блоках пхп-условие видимости, но php-фильтр лучше не использовать никогда. И вообще, панели работают с таксономией значительно лучше, чем тот же Taxonomy Display. В частности, при использовании Taxonomy Display не работают Ajax Facets.

4. Работа с фасетами

Во-первых, при использовании панелей не нужно создавать тот странный невидимый блок для фасетов. Во-вторых, в интерфейсе фасеты идут отдельной категорией, не смешиваясь с остальными блоками. Тот, кто делал магазин хотя бы на 20-30 фасетов, должен оценить это преимущество.

5. При наличии в дизайне сайта большого количества разных шаблонов со сложной структурой колонок.

Во-первых, панели позволяют использовать гибкие лэйауты либо легко создавать свои. Есть также модуль Radix Layouts, который сожержит около 30 разных лэйаутов, совместимых с bootstrap. Во-вторых, как было сказано выше, вы можете выводить один блок в разных лэйаутах в разные регионы, что не позволяет делать блочная система. В третьих, при использовании CSS-фреймворков с сетками, вы можете легко задавать панелям нужные классы и id, чтобы выстроить их по сетке.

6. Если нужно выводить на страницу что-то дико кастомное.

Панели используют Ctools API, которое позволяет легко выводить что угодно и как угодно при довольно простом коде. Более того, подобные задачи – одни из самых любимых на собеседовании у многих работодателей, поэтому овладеть этим кун-фу будет в любом случае полезно

Когда не нужно использовать Panels

1. Когда у вас на сайте всего три одинаковые страницы и полтора блока.

2. Когда вы не поняли ничего из того, что было написано выше

Примечания

1. Чтобы не сломать головной мозг, при использовании панелей лично я рекомендую использовать в теме всего один регион, в котором будет всего один блок. В крайнем случае можно вывести ещё хэдер и футер, но в этом далеко не всегда есть необходимость.

2. Всё вышесказанное относится к Drupal 7, в восьмой версии функционал панелей сильно урезан, а функционал блоков наоборот – расширен.

И традиционная спам-ссылка на оригинал статьи в моём говноблоге: http://wellsolutions.by/article/panels-ispolzovat-ili-net

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Модули и темы:  panels




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Установка и настройка 3 Спасибо

Источник: http://www.drupal.ru/node/131309

Drupal 8 CI/CD c Docker и CircleCI

перевод (рус.) статьи Drupal 8 CI/CD with Docker via CircleCI

Автор @csandanov


В этой статье я продемонстрирую организацию работы CI для вашего Drupal8 сайта, используя Docker. Мы будем использовать CircleCI в качестве CI/CD (непрерывная интеграция/доставка) инструментария и docker4drupal для тестового окружения.
Это статья из двух частей. В первой части мы создадим наш CircleCI, развернем тестовое окружение используя docker4drupal контейнер, и запустим несколько наборов тестов из ядра.
Во второй части, мы подготовим архив для выгрузки на AWS S3. Затем мы развернем новое окружение для Drupal на базе Docker, и выгрузим туда свой архив.

Непрерывная интеграция

Изначально, добавим проект на CircleCI. Я буду использовать свой публичный репозиторий drupal (являющийся форком оф. Drupal репозитория). Как только вы добавите свой проект, CircleCI будет автоматически запускать сборку при каждом коммите.

Тестовое окружение

Добавьте следующий docker-compose.yml файл в свой репозиторий, это упрощенная версия docker4drupal:

version: "2"

services:
  mariadb:
    image: wodby/drupal-mariadb
    environment:
      MYSQL_RANDOM_ROOT_PASSWORD: 1
      MYSQL_DATABASE: drupal
      MYSQL_USER: drupal
      MYSQL_PASSWORD: drupal

  php:
    image: wodby/drupal-php:7.0
    environment:
      PHP_SITE_NAME: dev
      PHP_HOST_NAME: localhost:8000
      SIMPLETEST_BASE_URL: http://nginx
      SIMPLETEST_DB: mysql://drupal:drupal@mariadb/drupal
    volumes:
      – ./:/var/www/html

  nginx:
    image: wodby/drupal-nginx
    environment:
      NGINX_SERVER_NAME: localhost
      NGINX_UPSTREAM_NAME: php
      DRUPAL_VERSION: 8
    volumes_from:
      – php

docker-compose.yml определяет набор служб/контейнеров для тестового окружения. Кроме PHP, нам нужны MariaDB и Nginx контейнеры, так как мы будем запускать функциональные тесты, которым необходимы веб-сервер и сервер базы данных. По той-же причине, мы добавили две переменные для Simpletest в PHP контейнер.

Сборка CircleCI

Добавим следующий circle.yml файл в свой репозиторий для ручной сборки:

machine:
  pre:
    – curl -sSL https://s3.amazonaws.com/circle-downloads/install-circleci-docker.sh | bash -s — 1.10.0
  services:
    – docker
dependencies:
  pre:
    – rm /opt/circleci/php/$(phpenv global)/etc/conf.d/xdebug.ini
  override:
    – sudo pip install docker-compose
    – docker-compose up -d mariadb
    – docker-compose up -d nginx
test:
  pre:
    – composer global require "hirak/prestissimo:^0.3"
    – composer require "wikimedia/composer-merge-plugin:~1.3" –no-interaction
    – composer update -n
    – composer update -n -d ./scripts
    – sudo chown -R 82:82 .
  override:
    – docker-compose run –user 82 php vendor/bin/phpunit -c core core/tests/Drupal/Tests/Core/Password/PasswordHashingTest.php
    – docker-compose run –user 82 php vendor/bin/phpunit -c core core/tests/Drupal/KernelTests/Component/Utility/SafeMarkupKernelTest.php
    – docker-compose run –user 82 php vendor/bin/phpunit -c core core/tests/Drupal/FunctionalTests/Breadcrumb/Breadcrumb404Test.php

Давайте быстро пробежим по его секциям:

machine: установит docker 1.10 версии (дефолный 1.8 здесь не сработает) dependencies: в зависимостях мы убрали xdebug (из соображений производительности), установили docker-compose, прикрутили mariadb и nginx службы, определенные в нашем docker-compose.yml файле. test: сначала, посредством composer, мы получим зависимости Drupal и зависимости для Wodby PHP SDK в каталог ./scripts. Сменим владельца на 82, это id пользователя www-data в php/nginx контейнерах. Так-же, в секции override, мы запускаем 4-ре набора тестов (unit и функциональные) из ядра Drupal.

Запуск сборки

Теперь у нас есть все необходимое. Включим в коммит все добавленные файлы. CircleCI автоматически запустит процесс сборки:

Запустит наши тесты:

Все тесты проходят. Это значит, что мы можем перейти ко второй части, в которой развернем нашу сборку.

Непрерывная доставка

Это не универсальное руководство по доставке вашей сборки в рабочую среду. Все зависит от вашего рабочего процесса и инфраструктуры.

Кроме того, с докером возможны два варианта:

Доставка кода (архив развертки) Доставка контейнера docker с кодом

В этой статье мы рассмотрим первый вариант, доставим код в инфраструктуру, подготовленную Wodby. Мы подготовим архив развертки и выгрузим его на AWS S3. Затем, развернем наше новое окружение для Drupal на базе docker с помощью Wodby, и отправим в него наш архив с кодом.

Добавим следующие строки в circle.yml файл:

deployment:
  production:
    branch: /.*/
    commands:
      – tar -c –exclude=‘.git’ –exclude=‘.gitignore’ –exclude="./docker-runtime" . | gzip -9 | aws s3 cp – "s3://$AWS_S3_BUCKET/$AWS_S3_FILE_NAME-$CIRCLE_BUILD_NUM.tar.gz"
      – php -f ./scripts/wodby.php

В секции deployment мы создаем архив с кодом и загружаем его на AWS S3 хранилище. Мы запустим wodby.php скрипт, который будет выгружать новый экземпляр Drupal приложения на сервер, подключенный к Wodby.

Простое безопасное хранилище AWS

Мы используем AWS S3 для хранения архива развертки, так как он интегрирован с CircleCI, но вы можете использовать любое другое хранилище. Откройте консоль AWS S3 и создайте новый бакет:

Перейдите к AWS IAM сервису, и создайте нового пользователя для CircleCI. Скопируйте сгенерированные ключи (Access Key Id и Secret Access Key), они нам понадобятся позднее.

Добавьте к правам этого пользователя AmazonS3FullAccess политику:

Теперь, открыв настройки проекта CircleCI, и перейдя к AWS разрешениям, добавьте ваши ключи:

Доставка сборки посредством Wodby

Развертка вашего Drupal сайта с Wodby. По умолчанию, создается dev экземпляр. Мы будем создавать его копию, и импортировать ее в наш архив кода посредством Wodby PHP SDK. Сборка (набор контейнеров) от Wodby на 95% состоит из docker4drupal контейнеров.



Скрипты доставки

Скопируйте следующие скрипты из этого репозитория (кат. circle-ci) в свой Drupal project:

wodby.php этот скрипт развернет новый экземпляр приложения, развернутого с Wodby и импортирует сборку composer.json здесь указанна Wodby PHP SDK, как зависимость для нашего php скрипта

Этот скрипт использует Wodby PHP SDK для развертки новых экземпляров приложения на сервере, подключенном к Wodby, а после, импортирует архив развертки из AWS S3.

Настройка переменных окружения

Нам необходимо определить следующие переменные окружения и токены для наших скриптов доставки. Мы можем сделать это на странице настроек нашего CircleCI проекта:

AWS_S3_BUCKET имя вашего AWS S3 бакета, из которого выгружается архив развертки AWS_S3_FILE_NAME базовое имя архива (вы можете использовать название проекта), к которому номер сборки будет добавлен как суффикс WODBY_API_TOKEN вы можете скопировать этот токен со страницы вашего профиля Wodby WODBY_SERVER_ID на панели управления Wodby, перейдите на стр. серверов и скопируйте ID из адресной строки


WODBY_APP_ID перейдя на стр. приложений в панели управления Wodby, копируйте Application UUID на вкладках Настройки -> Информация WODBY_SOURCE_INSTANCE_ID Там-же копируйте Instance UUID. Этот экземпляр будет использован как источник базы данных и файлов для нового экземпляра.

Запуск сборки

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

Теперь, мы имеем только-что созданный экземпляр с информацией о нашей сборке:

Это наш результат. Все необходимое, вы можете найти в этом репозитории, в каталоге circle-ci

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 8.* Ключевые слова:  docker deploy




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Установка и настройка 2 Спасибо

Источник: http://www.drupal.ru/node/131184

Эффективная разработка фронтенда на Drupal


В этой статье речь не пойдёт о новомодных ES6-фреймворках и headless-drupal. Речь пойдёт о банальной вёрстке. И не спешите закрывать страницу, если вы гордо именуетесь бэкенд девелопером, т.к. часть из рассматриваемых вопросов частично касается и бэкенда, ведь банальный альтеринг формы для добавления нужных классов и обёрток лежит как раз в зоне ответственности бэкенда. А тому, кто сам и верстает, и кодит, тем более должно быть интересно.

Сразу оговорюсь, что имеется в виду разработка коммерческих сайтов с уникальным дизайном, т.е. по макетам, нарисованным профессиональным дизайнером, не лишённым навыков и чувства вкуса. Под словом “эффективность” понимается простота и скорость самого процесса разработки. Изложенная ниже информация почерпнута не из умных книжек, а из жизненного опыта. Итак, начнём.
1. Выучи уже наконец-то CSS!
Звучит глуповато? Но не настолько глупо, как вопросы разработчиков с почти 10-летним стажем о том, как увеличить кнопку при наведении. Нормальные люди в помощью CSS рисуют попугаев и даже создают игры, а ты даже не знаешь, как приделать треугольничек к всплывающей подсказке, не вводя новых html-элементов. Изучи каскады, специфичность, анимации через transition и keyframes, гадиенты там всякие, особенности разных position, псевдоклассы, псевдоэлементы. И не мучай людей дурацкими вопросами – всё давно написано в гугле.

2. Используй препроцессоры.
SASS или LESS – это по вкусу, но ни в коем случае не копайся в богомерзком CSS! Недавно слышал мнение одного признанного специалиста, что ему препроцессоры не нужны, т.к. в его проектах обычно поверх базовой темы порядка 200 строк оверрайда CSS. Ну если ты делаешь сайты для гиков вроде себя или меня, то бутстрап с другим логотипом вполне сойдёт, а нормальным людям такое не интересно, поэтому и денег тебе за такое никто не даст. В любом коммерческом сайте будет от 3000-5000 строк CSS и выше, потому используй препроцессоры, чтобы не копипастить куски длинных селекторов и не насиловать скролл в поисках нужного цвета. Что касается сборщика (компилятора), сейчас в моде gulp. Хотя можно использовать и что-нибудь другое, более того, при должном умении тебя не будет смущать, что проект до тебя скомпилировали чем-то другим, если он попал к тебе на доработку, можешь перекопилировать тем, чем тебе удобно, главное, предварительно изучить старый конфиг, чтобы не упустить ничего, например автопрефиксер. А некоторые вообще компилят LESS и SASS саблаймом или PHPStorm-ом, что, должно быть удобно, но не так гибко настраиваемо.

3. Используй CSS-фреймворки.
Благо их полно на любой вкус. Никто не сомневается в твоих способностях задавать ширину колонкам, но фреймворки принято использовать лишь потому, что многие вещи там сделаны до тебя. Вопреки распространённому мнению, CSS-фреймворки не делают сайты похожими друг на друга. Любой вменяемый дизайн можно сделать одинаково хорошо на любом фреймворке, либо без него, внешне различий не будет, но будут различия в затраченном времени. Не забываем предыдущий пункт, поэтому должно быть ясно, что под CSS-фреймворком понимается его SASS или LESS-версия. Раньше я использовал Zen-grids, сейчас использую Bootstrap. Бутстрап, конечно, будет помощнее. Бутстрап – это не только сетка и менюшка-гамбургер. Там полно совершенно потрясающих вещей, таких, как bootstrap-modal, с помощью которого достаточно обернуть блок в нужный класс и сделать ссылку с нужным классом, по клику на которую блок будет всплывать в модульном окне, а по умолчанию он будет скрыт. Весьма удобно для небольших форм, например обратного звонка. А буквально на днях я узнал, что там есть даже карусель Пусть и сильно простая, но иногда сойдёт. В общем, не поленись изучить документацию по используемому фреймворку и жить станет легче.
4. Наследуйся от базовых тем.
Под любой распространённый фреймворк есть базовая тема drupal. Благодаря использованию базовой темы, ты получишь уже сконфигурированный фреймворк, останется только навести красоту. Более того, я рекомендую использовать те темы, которые поддерживают создание субтем через drush, ибо взрослому дяде не подобает руками копаться в файлах, копируя и переименовывая их. Именно поэтому я использую не bootstrap, а  Radix. Есть там правда один маленький косяк, я писал об этом здесь, но пока не пофиксили, т.к. надо будет немного переписать drush-команду. Обязательно изучи документацию по используемой теме, в первую очередь почитай, как там надо запускать Gulp. Некоторых смущает, что в базовых темах и генерируемых субтемах “много хлама”. На самом деле это не так. Там отражён правильный и стандартизованный подход к темизации, а если ты привык всё валить в один файл – переучивайся.

5. Всегда начинай вёрстку с переопределения variables.
Есть в любой нормальной теме файл _variables.scss или _variables.less. В этом файле описаны все базовые переменные – брейкпоинты, цвета, размеры и типы шрифтов и т.д. Этот файл нужно обязательно изучить вдоль и поперёк и переопределить всё под текущий проект, ибо не зная этого, можно написать десятки строк кода, переопределяя, к примеру, цвет и размер инпутов вместо того, чтобы задать значения двум-трём переменным.

6. Сделай нормальную легенду цветов.
Легенда цветов должна быть по схеме “название цвета: код цвета; назначение цвета: название цвета”. Почему? Расмотрим пример:

$gray: #ccc;
input {
  background-color: $gray
}
button {
  color: $gray;
}

Вроде бы всё круто. Если нам понадобится сменить оттенок серого, то мы можем сделать это в одном месте. А что будет, если нам для кнопок и инпутов вдруг понадобится два разных оттенка? Придётся лезть в код и выискивать, где мы применяли переменную $gray и менять её на другую. Но ведь можно сделать проще:

$gray: #ccc;
$input_bg: $gray;
$button_color: $gray;
input {
  background-color: $input_bg;
}
button {
  color: $button_color;
}

Теперь мы можем просто присвоить новое значение для $button_color и не париться с поиском его упоминаний. Может быть на двух цветах это выглядит неочевидно, но когда у нас в реальном проекте с десяток цветов и несколько десятков групп элементов, то это очень полезно.

7. Используй классы фреймворка в шаблонах.

Это очень удобно, когда ты просто переопределил шаблон, а у тебя уже всё стоит на своих местах. Не забывай, что классы можно назначать и из админки, например в панеляхи представлениях, но порой этого недостаточно и бывает проще создать пару новых шаблонов, чем потом мучаться определять всё в стилях. Кстати, для любителей панелей и bootstrap есть замечательный модуль  Radix Layouts, который содержит порядка 30 лэйаутов для панелей, оптимизированных под bootstrap. Модуль совместим с любыми темами, использующими bootstrap.

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

Кстати, во многих фреймворках есть миксины, имитирующие поведение стандартных классов, поэтому вовсе не обязательно писать на каждую мелочь шаблоны или препроцессы и уж тем более не обязательно вручную задавать все ширины и отступы, когда можно просто написать что-то вроде “@include make-sm-column(3)” и элемент будет вести себя так же, как если бы у него был класс “.col-sm-3″.

8. Структурируй код
Не вали весь свой код в один файл. Подключай импортом к одному файл много своих less или sass-файлов и компилируй их в один css. В большинстве распространённых тем в субтеме уже есть множество заготовок в виде пустых файлов.
Если надо, создавай свои файлы, главное, чтобы стили в них были объединены тематически. Зачем так делать? Есть три причины:
1. Звук скролла твоей мышки раздражает окружающих.
2. От обильного пользования скроллом может развиться туннельный синдром
3. Преждевременно вышедшие из строя мышки загрязняют окружающую среду.
Если этих причин недостаточно, то поверь на слово, что навигация по коду становится намного более быстрой, порой можно даже не смотреть номер строки в фаербаге, ведь и так понятно, в каком файле текст, а в его 200 строках всё как на ладони.

9. Грамотно используй медиа-запросы
Когда-то было модно писать медиа-запросы в отдельном файле или все вместе в конце файла. Это неудобно, т.к. стили одного и того же элемента оказываются разбросаны в разных местах. Лучше сразу писать медиазапрос для элемента в конце блока его стилей.

nav > li {
  display: block;
  @include breakpoint(md) {
    display: inline-block;
  }
}

Например, как в примере выше. Тут мы использовали миксин breakpoint – довольно удобная штука, подобное есть во многих фреймворках, поэтому не лишним будет изучить, как пользоваться этим миксином. Как правило, breakpoint задаёт min-width, следовательно, правила по умолчанию пишутся под самый маленький экран и с увеличением экрана могут переопределяться. Однако по ситуации можно писать и более сложные запросы, например, с указанием максимальной и минимальной ширины одновременно. И конечно же, не забудь про @media print {} ! В 21 веке только идиоты пишут какой-то отдельный функционал для версий для печати, а у нормальных людей под печать просто отдельные правила CSS.

10. Используй миксины
Любой фрагмент кода, состоящий из более, чем трёх строк, встречающийся в коде более двух раз, уже достоин того, чтобы стать миксином. Заверни в миксины всякие часто встречающиеся в проекте градиенты, тени и т.д.

11. Не используй монструозные модули для слайдеров

Взять к примеру тот же Slick – чтобы повесить его на вьюху, надо скачать библиотеку Slick, установить его модуль, а также отдельный модуль для вьюс и ещё чёрти что. И это для того, чтобы получить интерфейс с десятками настроек, которые надо настраивать отдельно под каждый слайдер на сайте. А потом ещё будешь, как дурак, переопределять его стандартные стили. Зачем? Можно же проще – берём slick.min.js, подключаем его к своей теме, а в скрипте темы инициализируем slick всего парой строчек js. При этом html-разметку вообще не надо переопределять.

Вангую вонь в комментах по поводу того, что нет смысла подключать скрипт, который, возможно, нужен не на всех страницах. Могу сразу ответить на это: slick.min.js месит 41 килобайт и при включенной агрегации js пусть лучше он загрузится на первой странице, закэшируется в браузере и не будет создавать при загрузке других страниц лишник http-запросов.

12. Удаляй из шаблонов лишние обёртки
Ни для кого не секрет, что html-код, выдаваемый друпалом по умолчанию избыточен и содержит множество обёрток. Нельзя сказать, что это большая проблема, но и хорошего в этом мало, ведь на некоторых страницах количество байт разметки может превышать количество информативного текста, а это всё паразитный трафик. Поэтому я при переопределении любых шаблонов всегда смотрю, какие из обёрток мне не нужны, ведь простую разметку и верстать легче. Но тут главное не переборщить – некоторые из обёрток могут быть критически важны для AJAX-запросов.

Ну вот, пока у меня всё. Надеюсь, мой стиль изложения не задел ничью тонкую душевную организацию

И традиционно в качестве пиара моего говнобложика ссылка на оригинал статьи: http://wellsolutions.by/article/effektivnaya-razrabotka-frontenda-na-drupal

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  drupal верстка frontend




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Дизайн и вёрстка 4 Спасибо

Источник: http://www.drupal.ru/node/131103

Длина Друпала в попугаях

Это пост, в котором не будет описания установки модуля, программного создания ноды или того, как избавиться от ошибок. Только попугаи!
Оригинал лежит здесь.

Длина попугая Кеши

Вот взбрела же дурацкая мысль посчитать Друпал в попугаях… Нормальные люди считают в байтах, в деньгах или, на крайний случай, в человеко-часах. Но я не ищу лёгких путей! Как же посчитать длину попугая? Его нужно запрограммировать! Тогда можно будет посчитать количество получившихся строк кода.

Можно написать ИИ попугая, но тогда этот пост будет закончен не раньше следующего века )) Можно посчитать рост попугая в сантиметрах, но все попугаи разных размеров. Да и рост попугая имеет мало общего с программированием. Можно нарисовать попугая с помощью CSS.

Пожалуй, третий способ подходит отлично: и рост попугаю можно сделать любой, и выглядеть будет, как умный. В XXI-ом веке жить хорошо, тут есть CSS3, поэтому нарисовать попугая не составит труда (особенно если уметь гуглить фразы типа “Попугай CSS”, “Parrot CSS” =) ).

Итак, наш Кеша готов и уже куда-то летит. Все кредиты за Кешу получает Mahesh из Индии.

Теперь мы можем посчитать Кешу – его длина составляет 304 строки!

Измеряем Друпал 7 версия 7.52

Берем скрипт, который я заготовил в статье Скрипт подсчета строк в проекте и считаем длину седьмого Друпала. Получаем:

    Total: 329207
        Text – 4519
            txt – 4519
        PHP – 52476
            php – 52476
        JavaScript – 9278
            js – 9278
        CSS – 11378
            css – 11378
        Images – 2302
            jpg – 29
            gif – 74
            png – 2192
            ico – 7
        Other – 249254
            editorconfig – 14
            gitignore – 6
            htaccess – 149
            inc – 103501
            info – 1765
            install – 14609
            module – 55510
            test – 70174
            xml – 469
            html – 73
            po – 28
            script – 7
            sql – 1
            sh – 1773
            gz – 1068
            profile – 36
            engine – 25
            config – 46

Значит Друпал 7 получился длиной 329207 строк. Теперь берем калькулятор и считаем: 329207 / 304 = 1082.9 (последний попугай, видимо, не разговаривает или лысый =) )

Вот и посчитали, засим объявляю: в Друпале версии 7.52 примерно 1083 попугая!

Сколько седьмых в восьмом версия 8.2.3

Но у нас же еще есть и другие версии, что может оказаться даже интереснее. Посчитаем, например, Друпал 8.

    Total: 1408609
        Text – 25176
            txt – 12826
            md – 12350
        PHP – 1123110
            php – 1123110
        JavaScript – 44743
            js – 44743
        CSS – 22232
            css – 22232
        Images – 3087
            jpg – 59
            jpeg – 1
            gif – 173
            png – 2847
            ico – 7
        Other – 190261
            csslintrc – 37
            editorconfig – 45
            eslintignore – 8
            eslintrc – 98
            gitattributes – 56
            htaccess – 212
            json – 7953
            lock – 6280
            gitignore – 156
            map – 4
            yml – 77142
            inc – 26371
            svg – 219
            module – 31199
            install – 6189
            twig – 15430
            xml – 2519
            html – 90
            po – 112
            script – 7
            sql – 1
            engine – 207
            profile – 26
            sh – 2637
            theme – 618
            gz – 5404
            svgz – 18
            dist – 955
            data – 16
            license – 762
            properties – 6
            gitmodules – 3
            upgrade_to_2_1 – 39
            upgrade_to_2_2 – 61
            makefile – 42
            credits – 11
            exe – 21
            m4 – 63
            w32 – 13
            h – 60
            c – 283
            phpt – 347
            xsd – 3422
            ser – 166
            changelog – 828
            rst – 15
            config – 110

Вот и получается, что в восьмом Друпале ~ 4633 попугая или 4.2 седьмого Друпала.
Однако, до новых встреч!

Оригинал с кодом попугая на CSS3 смотрите в статье Длина Друпала в попугаях.

Версия Drupal:  Drupal 8.* Drupal 7.*




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Разное непонятное 11 Спасибо

Источник: http://www.drupal.ru/node/131012

Чек-лист при переносе контента.

Если у вас есть проблема и вы решили использовать регулярные выражения, у вас уже две проблемы

Как-то так сложилось, что большинство моих проектов на друпал – это не сайты с нуля, а апгрейд предыдущего, причём на другой CMS. Соответственно, возникает проблема переноса конетнта с предыдущего сайта. Чаще всего сайт-донор – это какая-нибудь древняя Joomla, на втором месте самопис, на третьем – спарсенные данные с других сайтов.

Данный пост – это небольшое раширение моего чек-листа для переноса из 6-ти пунктов.

1. Инлайн-стили и мусорные атрибуты

Это тот самый кошмар, который добавляют wysiwyg-редакторы.
Примеры: <p class="msoNormal>, <span style="line-height:1.3;">, <strong style="color:red;">
Все их стоит безжалостно выдирать.

Примеры регулярок:

Убрать все атрибуты у определённых тэгов.
Исходная строка: <p class="MsoNormal" style="color:#FF0000;">
Поиск: <(p|span|strong|em|i|b|ul|li).*?>
Замена: <$1>
Результат: <p>

Убрать все атрибуты, кроме определённых:
Исходная строка: <a class="MsoNormal" href="someurl" style="color:#FF0000;">
Поиск: <a\s.*?(href=".*?").*?>
Замена: <a $1>
Результат: <a href="someurl">

Убрать все инлайн-стили у тэга, кроме float:
Исходная строка: <img class="MsoNormal" style="color:#FF0000;float:left;" src="someurl" />
Поиск: <img\s(.*?)style=".*?float:(right|left|none).*?"(.*?)>
Замена: <img $1style="float:$2"$3>
Результат: <img class="MsoNormal" style="float:left" src="someurl" />

2. Пустые и лишние тэги

Путые строки в конце, тэги без содержимого, <br> между </p><p>, пробелы между блочными элементами? двойные пробелы и т.п.
Они не несут смысловой нагрузки, и могут поломать вёрстку.
Примеры: <p></p>, <b><i>&nbsp;</i></b>, </p>        <p>

Примеры регулярок:

Убрать все пустые тэги (при условии, что они уже без атрибутов). Для пустых с тэгов с вложенностью может понадобиться несколько прогонов.
Поиск: <(.*?)>\s*</\1>
Замена: на ничто =)

Убрать вообще определённые тэги.
Поиск: </?(span|font|br).*?>
Замена: на ничто =)

3. Инлайн изображения

В случае с изображениями всё просто. Закидываем папку с изображениями со старого сайта к себе в sites/default/files/files_old (ну или куда хотите), затем регуляркой меняем старый префикс на новый. Пути лучше использовать относительные. В случае относительного пути – важно не забыть слэш в начале. Также стоит прогнать все изображения через оптимизатор, гугл это любит.

Пример регулярки:

Поиск: src="(https?://old-site.ru)?/assets/images/(.*?)"
Замена: src="/sites/default/files/images_old/$2"

4. Ссылки внутри.

Тут всё несколько сложнее. Часть ссылок может вести на скачивание каких-либо файлов. Часть ссылок может быть внешними. У некоторых могут быть относительные пути без слэша в начале, и ТАК ЗАДУМАНО. Общий совет – включить мозг и действовать по ситуации. =) Или сохранять старую структуру урлов на новом сайте. Или заранее прикинуть, какие урлы будут при переносе – вы же это уже сделали, да?

5. Редиректы.

Если структура урлов меняется, то естествено необходимо настроить редиректы со старых урлов на новые. Для этого нужны модули redirect и path_redirect_import
Модуль path_redirect_import позволяет импортировать данные по редиректам из csv файла. Если новые урлы кардинально другие, и чётко вычисляемой зависимости старый-новый нет, это придётся делать несколько через ж нетривиально.
В импортируемом материале создаём поле для хранения старого алиаса (например field_old_alias)
Для импортируемого типа материала задаём временный шаблон в pathauto, например articles/[node:field_old_path]
Импортируем редиректы. Модуль редирект – умный, он создаёт редиректы не на алиас, а на внутренний путь. Таким образом, как бы не менялись урлы материалов на сайте, урлы со старого сайта будут перенаправлять на соответствующие им материалы.
Задаём новый шаблон для импортированных материалов, обновляем алиасы. Вуаля.

6. Метатэги.

Наверняка на старом сайте есть метатэги, в каком либо виде. Модуль feeds дружит с модулем metatag, поэтому проблем возникнуть не должно.

И просто пара советов:
1. В CSV колонки с HTML делайте последними, так до них легче добраться регуляркой.
2. У phpmyadmin есть гениальная функция экспорта результата текущего запроса в csv. Только надо поставить галочку “Удалять переносы строк”
3. Если у сайта нет БД – есть модули feeds_querypath_parser и feeds_xpathparser. А также можно выдирать данные с помощью sed, awk и такой-то матери.
4. Не забывайте, что если ничто не помогает, данные можно перенести и вручную.

Тип материала:  Предлагаю решение Ключевые слова:  CSV импорт




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Разное непонятное 4 Спасибо

Источник: http://www.drupal.ru/node/131006

Решение вопроса на drupal.ru

Здравствуйте! Если вы недавно зарегистрировались на форуме drupal.ru или просто еще не познакомились с функциональностью “вопрос – ответ”, то я немного расскажу о ней.
Каждый пользователь на этом форуме может создать пост с вопросом, после чего другие пользователи сайта, как правило, предлагают варианты решения. Если какой-либо комментарий оказался решением Вашей проблемы, то Вы можете указать это нажав на пункт меню “Решение” для комментария. Таким образом, другие участники форума, которые имеют тот же вопрос, что и у вас – сразу смогут найти свое решение.
После того, как вы отметите комментарий как “Решение”, в вашем вопросительном посте появится метка “[Решен]“.

Цитата:

Не нужно изменять заголовок и вписывать туда слова “[Решен], [Решено], [Порешал], [Решительный]” и так далее.

После того, как вы проделали эти сложные манипуляции – считайте, что Вы сделали очень доброе дело! Потому как в будущем на этот форум будет приходить много людей задавая вопрос в Google. А мы договорились с Google, что в первую очередь он будет посылать всех на решённые вопросы.

Коротко Задаём вопрос Ждем комментариев Указываем один из комментариев как “Решение”. Довольствуемся собой за хороший поступок, ибо хорошее Вам вернется. Где найти это ваше “Решение”?

Если вы автор поста, то вам доступен дополнительный пункт меню “Решение” в каждом из комментариев.

Важно! На данный момент нельзя отменить “Решение” или изменить в пользу другого комментария – будьте внимательны. В будущем такая возможность появится.

Трюк!

Если Вы нашли решение самостоятельно, то можете ответить комментарием на свой же вопрос и указать его в качестве решения =)






email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Создание документации WIKI.DRUPAL.RU 11 Спасибо

Источник: http://www.drupal.ru/node/130971

Вариант строки поиска с автоподстановкой без использования Search API

Как уже многие начали составлять методички о внедрении поиска с автоподстановкой на сайт.
http://drupal.ru/node/130905 gun_dose предлагает внедрять подобное на сайт с Search API, я пишу от поиске без Search API. Результат тут http://ukrigrushka.com.ua/

Понадобятся модули:
 search_autocomplete
 better_exposed_filters
 mefibs
 views_selective_filters
 views_block_filter_block – не обяз

Поехали.

1. Вьюха, которая выводит товары. Помещена на отдельную страницу.

Ставим 2 блока для вывода фильтров

1) Строка поиска (в шапке, то для чего вы это читаете) – блок defaul
2) Фильтры производитель, материала, тип товара – блоки с фильтрами. Необязательно, но я поставил.


Будут выглядеть так:

Расставляем фильтры вьюхи по блокам.

1) Строка поиска ищет по заголовку товара, поэтому Заголовок в блок default
2) Каталог, Производитель, материал и т.п. – в блок с фильтрами. Внимание! Использован views_filters_selective.


Настройки Better Exposed Filters


Расставляем блоки в теме

1) Блок строки поиска – в “шапку”. У меня регион для телефонов.
2) Блок остальных фильтров в содержимое. Показывать блок только на странице product-search* – путь главной вьюхи (крутим вверх.)

2. Вьюха автоподстановки. Выпадает в строке поиска.

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

3. Настройки автоподстановки.

Собственно настройки модуля search_autocomplete. Находяться по адресу admin/config/search/search_autocomplete
Добавляем форму. Я уже добавил, поэтому редактирую свою.


Самое главное тут:
Use an existing view: – вьюха автоподстановки.
ID-селектор этой формы – Инпут строки поиска в “шапке”. Firebug в помощь. Либо временно на странице настроек модуля включить “Use autocompletion helper tool for Search Autocomplete administrators.”

1_-_main-view.png47.71 КБ 2_-_main-view_-_blocks.png9.8 КБ 3_-_main-view_-_blocks_-_def.png6.05 КБ 4_-_main-view_-_filter_1.png6.73 КБ 5_-_main-view_-_filter_5.png9.57 КБ 6_main-view_-_bef1.png18.71 КБ 7_main-view_-_bef2.png13.85 КБ 8_blocks_1.png2.1 КБ 9_blocks_2.png2.13 КБ 10_autocompl-view.png35.07 КБ 11_autocompl-view-row-sett.png11.4 КБ 12_-_autocompl_-_base.png20.74 КБ 13_-_autocompl_-_sett_1.png40.96 КБ 14_-_autocompl_-_sett_2.png20.06 КБ primer1.png10.61 КБ primer2.png91.99 КБ Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Модули и темы:  search_autocomplete better_exposed_filters mefibs_bef views_filters_selective views_block_filter_block




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Установка и настройка 5 Спасибо

Источник: http://www.drupal.ru/node/130923

Выпущены Drupal 8.2.3 и Drupal 7.52

Newsletter:  Новости Друпал

Выпущены Drupal 8.2.3 и Drupal 7.52 с устранениями критических ошибок.
Рекомендуется обновить!
Подробности об ошибках Drupal 8.2.3
Подробности об ошибках Drupal 7.52

1 Спасибо

Источник: http://www.drupal.ru/node/130920

Живой поиск на Drupal

Здарова, щеглы! Сегодня я вам расскажу, как сделать живой поиск на друпал. Для этого нам понадобятся:

 Search API
 Search API Database Search
 Search API pages
 Search API live results
Скачиваем и включаем все эти модули вручную или по-нормальному через
drush en search_api search_api_db search_api_page search_api_live_results -y
Затем идём в “Конфигурация – Поиск и метаданные – Search API – Добавить сервер” и заполняем там поля, как показано на картинке ниже. Поле “минимальная длина слова” определяет, после ввода скольких символов будут появляться результаты. Один символ – это насилие над базой данных, а вот 3-5 – в самый раз. Галочка “Искать по частичным совпадениям” означает, что поиск будет вестись по фрагментам слов. Если её не выставить, то результаты будут находиться только по целым словам, что не всегда удобно.

Теперь, когда у нас есть сервер, можно создать поисковый индекс. Идём аналогично – “Конфигурация – Поиск и метаданные – Search API – Добавить сервер” и заполняем там поля следующим образом: имя – любое вменяемое имя, машинное имя, согласно правилам для машинных имён drupal, “Тип элемента” – тип сущности (материал(нода), термин таксономии и т.д. Тут как правило, имеет смысл выбирать именно материал, если у вас есть например связанные продукты commerce – их поля потом можно будет также добавить. “Наборы” – выбираем те типы материалов, которые собираемся индексировать. Тут важно не забыть никакой тип, но и не ставить галочки туда, куда не надо, чтобы не захламлять базу данных. В поле “Сервер” выбираем наш только что созданный сервер. “Только чтение” – не трогаем, оставляем невыбранным. “Проиндексировать элементы сразу” – выставляем обязательно. Если не выставить, то новые материалы в индексе будут появляться только по крону, если же выставить, то любые изменения будут индексироваться сразу. “Cron batch size” – оставляем, как есть – 50. Это означает, что если есть что-то неиндексированное, то по крону будет индексироваться по 50 элементов. Сорри, что не сделал скрин – он был бы слишком длинный и не очень информативный

После нажатия кнопки сохранить нас перебросит на форму добавления полей в индекс. Я обычно выбираю в добавок ко всему остальному тип материала и ID. Для живого поиска выбираем заголовок и Body. Если у вас есть ещё какие-то важные текстовые поля, выберите и их. Важно: выбирайте для текстовых полей тип Fulltext, т.к. в Fulltext можно производить поиск по фрагментам текста. Однако, Fulltext не позволяет делать сортировку, для этого нужен тип “Строка”. Если же вы хотите искать и сортировать по одному и тому же полю, то это можно настроить на вкладке “Фильтры” в настройках поискового индекса, но об этом я расскажу как-нибудь в следующий раз

Если вы ищете в полях Body, не отчаивайтесь. Текст с форматом ввода – это сложносоставное поле, поэтому его нужно добавлять как связанное поле. Да-да, вот там внизу кнопка “Добавить связанные поля”. Но прежде чем жать эту кнопку, сохраните форму, иначе внесённые изменения потеряются! Такая вот засада. На этом с поисковым индексом пока всё.

Теперь нам нужна форма поиска для нашего поискового индекса. Стандартная форма нам не подходит, т.к. это вообще другой поиск. К слову, при использовании Search API стандартный модуль поиска Search лучше отключить и анинсталлить. А для формы поиска нам нужен модуль Search API Pages. Идём в “Конфигурация – Поиск и метаданные – Search API – Страницы поиска – Добавить страницу поиска”. Там всё просто – вводим заголовок поисковой страницы и её путь, выбираем наш поисковый индекс, остальное по вкусу и согласно здравому смыслу.

И последний шаг – включить живой поиск. Для этого идём на страницу редактирования поискового индекса, заходим на вкладку Live Results и ставим галочку напротив недавно созданной страницы поиска. Сохраняемся. Если нажать “Изменить”, то можно задать количество выпадающих результатов и тип отображения – просто кликабельное название либо стиль отображения live results search. К слову, этот стиль отображения полностью настраивается в настройках отображения материала, а также есть шаблон для него, который можно найти в папке модуля. Естественно, для переопределения шаблона надо скопировать его в свою тему.

Форма поиска доступна как блок на странице управления блоками. Также её можно вызвать программно:

<?php
$search_page = entity_load_single('search_api_page', 1);
$search_form = drupal_get_form('search_api_page_search_form_search', $search_page);
?>

Поздравляю! Теперь ваш сайт стал чуточку менее колхозным, ведь около 100% разработчиков практически не волнуются о том, как работает окошко поиска на сайте, в результате чего оно не всегда работает в принципе. А если вы сделали всё по инструкции, то у вас должна получиться красота такая же, как на картинке в начале статьи. Ну само собой, что надо ещё немного поверстать, чтобы оно смотрелось как на этой картинке:

PS: на всякий случай, не надо путать live results и автокомплит, т.к. у них в корне разное поведение. Если по клику на живой результат вы переходите на его страницу, то по клику на вариант из автокомплита этот вариант просто вставляется в окно ввода текста и это логично, ведь автодополнение должно просто помогать вводить данные и ничего более.

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

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Ключевые слова:  Drupal7 поиск Модули и темы:  search api




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Установка и настройка 11 Спасибо

Источник: http://www.drupal.ru/node/130905

Прощай Drush Make, Привет Composer!

немного вольный перевод статьи:
https://www.lullabot.com/articles/goodbye-drush-make-hello-composer
от Karen Stevenson

Чтоб попробовать новые модули, темы Drupal 8, экспериментировать с новым функционалом, таким как миграции, мною строено-перестроено множество демо-сайтов на Drupal 8. После длительных ручных установок Drupal 8, решено было сеть и выяснить – как упростить это, создавая новые Drupal сайты с помощью Composer.
Это на самом деле очень удобный путь, подобный тому, как мы использовали Drush Make раньше; что-бы не хранить у себя код ядра и сопутствующих модулей Drupal, вы просто указываете, какие их версии вам нужны, и получаете их автоматически

Меня немного беспокоила перспектива смены привычного процесса, но мои опасения не оправдались. Тем, кто привык к Drush, скорей всего будет просто разобраться и с этим.

МНОГАБУКВ-НИЧИТАЛ*: Как в чистой директории, парой команд развернуть полностью функциональный Drupal сайт.

composer create-project drupal-composer/drupal-project:~8.0 drupal –stability dev –no-interaction
cd drupal/web && ../vendor/bin/drush site-install –db-url=mysql://{username}:{password}@localhost/{database}

Установка Composer
Первый шаг – это установка Composer в вашей локальной системе.
Поглядите https://getcomposer.org/download/ для получения информации о том, как установить Composer.

Настройка проекта с Composer
Для создания нового Drupal проекта используя Composer, выполните следующие команды, где /var/drupal требуемое месторасположение кода:

cd /var
composer create-project drupal-composer/drupal-project:~8.0 drupal –stability dev –no-interaction

В процессе сборки загрузятся все модули ядра, Drush и Drush Console, затем весь Drupal код будет помещен в поддиректорию web. Сторонний код будет помещен в vendor вне корневой web директории. Новая файловая структура выглядит следующим образом:

В конечном итоге, вы получаете в основе проекта composer.json файл, который выглядит следующим образом.

{
    "name": "drupal-composer/drupal-project",
    "description": "Project template for Drupal 8 projects with composer",
    "type": "project",
    "license": "GPL-2.0+",
    "authors": [
        {
            "name": "",
            "role": ""
        }
    ],
    "repositories": [
        {
            "type": "composer",
            "url": "https://packagist.drupal-composer.org"
        }
    ],
    "require": {
        "composer/installers": "^1.0.20",
        "drupal/core": "8.0.*",
        "drush/drush": "8.*",
        "drupal/console": "~0.8",
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "scripts": {
        "post-install-cmd": "scripts/composer/post-install.sh"
    },
    "extra": {
        "installer-paths": {
            "web/core": ["type:drupal-core"],
            "web/modules/contrib/{$name}": ["type:drupal-module"],
            "web/profiles/contrib/{$name}": ["type:drupal-profile"],
            "web/themes/contrib/{$name}": ["type:drupal-theme"],
            "web/drush/commands/{$name}": ["type:drupal-drush"]
        }
    }
}

Как вы видите в начале списка модулей в секции “зависимости” – Drush и Drush console включены по умолчанию. Так-же вы видите, что согласно правил, сопутствующие модули расположены в подкаталоге /contrib.

Такая организация сайта происходит отсюда: https://github.com/drupal-composer/drupal-project/tree/8.x. README.md содержит описание процесса и действий, таких как обновление ядра. Сопутствующие модули получаются из Packagist а не из Drupal.org. Это обусловлено тем, что существующая система версионирования Drupal, не квалифицируется как семантическое версионирование, необходимое системе. Дискуссия по поводу как это исправить, продолжается: https://www.drupal.org/node/1612910.

Установка Drupal
Свежая версия Drupal 8 собрана уже в коробке. Если у вас есть пустая база данных, вы можете сразу-же установить Drupal, пользуясь коробочной версией Drush:

cd drupal/web
../vendor/bin/drush site-install –db-url=mysql://{username}:{password}@localhost/{database}

Если вы не производите установку с помощью Drush, вам придется вручную сделать все, что Drush делает за вас. Ручной процесс установки Drupal8 следующий:

Скопировать default.settings.php в settings.php, и открыть для записи. Скопировать default.license.yml в license.yml , и открыть для записи. Создать и открыть для записи директорию sites/files Перейти по адресу EXAMPLE.COM/install для предоставления данных доступа к базе данных и следовать дальнейшим инструкциям.

Добавление дополнительных модулей из Packagist

Добавление дополнительных модулей происходит немного иначе. Вместо добавления модулей используя drush dl, дополнительные модули добавляются путем выполнения composer команд из корня проекта. (это на один уровень выше корневой директории Drupal):

composer require drupal/migrate_upgrade 8.1.*@dev
composer require drupal/migrate_plus 8.1.*@dev

По мере выполнения этих команд, каждый модуль будет загружен из Packagist, а
composer.json файл будет обновлен с добавлением соответствующей строки в список модулей.
Вы можете взглянуть на содержимое composer.json файла и увидеть, как эволюционирует секция зависимостей.
Делайте так, пока не добавите все необходимые дополнительные модули.
Такой composer.json файл будет эквивалентом Drush make файла, документирующего все ваши модули.

Для достижения еще большего паритета с Drush Make, вы также можете добавлять в composer.json сторонние библиотеки, и используя плагин, указывать необходимые патчи. Более подробно обо всех этих вариантах читайте https://www.drupal.org/node/2471553.

Фиксация файлов в репозитории

Зафиксируйте изменения composer.json в репозитории. Файлы, загруженные Composer, не нужны в репозитории. Гляньте содержимое .gitignore полученного из коробки. В вашем git репозитории будут сохранены только composer.json, .gitignore, код в /web/modules/custom и контент в /web/sites подкаталоге (кроме директории files).

# Ignore directories generated by Composer
vendor
web/core
web/modules/contrib
web/themes/contrib
web/profiles/contrib

# Ignore Drupal’s file directory
web/sites/default/files

Обновление файлов

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

composer update

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

composer require drupal/module_name 8.1.*@dev

Это добавит еще одну строку в composer.json для соответствующего нового модуля. Теперь изменение composer.json должно быть зафиксировано и отправлено в репозиторий. Остальные инсталляции, в последствии будут принимать эти изменения, и получать новые модули в результате выполнения composer update.

Команда composer update должна быть запушена после каждой отправки или получения изменений от git репозитория. Таким образом, стандартная процедура для обновления из репозитория может быть следующей:

git pull
composer update
drush updb

Новый чекаут

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

composer install

Это все
Итак, это все. По началу было немного стремно, но, как оказалось, этим очень легко управлять.
Вы можете использовать этот-же метод, с незначительными изменениями, для Drupal 7 сайтов.
Для своих нужд – измените 8.1.*@dev из примера, на необходимые вам актуальные стабильные версии ядра и дополнительных модулей.

multpix: Конец статьи и мое небольшое дополнение

*TLDR (а также tldr и тлдр) — сокращение от too long; didn’t read (слишком длинно; не читал). Аналог фразы «многа букаф, ниасилил». Часто замещает «Резюмируя» после пространных объяснений, которые, как справедливо считает автор этих объяснений, не вся аудитория возжелает прочитать целиком, либо, наоборот, идет первым абзацем.

Полезные ссылки по теме:
Drupal Composer рецепты
Освоение Composer: советы и приемы использования
Drupal Packagist
https://github.com/drupal-composer/drupal-project
https://www.drupal.org/docs/develop/using-composer/using-composer-with-drupal
Drupal Composer

И помните главное правило:
Где не работает голова – там работают руки

Тип материала:  Предлагаю решение Ключевые слова:  composer




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Программирование 10 Спасибо

Источник: http://www.drupal.ru/node/130881

Собрал модуль. Отдаленно похож на taxonomy_menu, но из двух словарей

наедаюсь не велосипед.

перед установкой обязательно сделать копию базы


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

принцип такой.
1. берятся один словарь, и в цикле ищутся материалы с термином.
2. Из найденных материалов выбираются все термины из второго словаря и добавляются как потомки к первому.
3. Все это записывается в меню.

Меню может получится чересчур большим.
есть небольшие косяки, но в основном работает.

зы: у меня каталог на 20к обновляет за 5 секунд.

taxonomy_menu_two_in_one.zip4.08 КБ taxonomy_menu_two_in_one_v2.rar3.75 КБ Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.*




email





facebook





linkedin





twitter





google+





pinterest
4 Спасибо

Источник: http://www.drupal.ru/node/130779

Оптимизация сайта, первый шаг

В этой статье поговорим о скорости сайта.

Многие, очень многие люди имеют сайт с скоростью 15%. Если им указать на долгую загрузку, начинают возражать, дескать у вас инет слабый и всё такое.
Хорошо.
Что такое скорость, и как её определить, хотя бы условно. Увидеть в сравнении например. Слепой человек не отличит серое от белого, правильно?
Есть много разных ресурсов, я остановлюсь на наиболее полезном, на мой взгляд, ресурсе.

https://developers.google.com/speed/pagespeed/insights/

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

Заходите на сайт, вставляете свой скопированный урл в окошко и жмёте “Анализировать”

Сайт выдаёт показатели, будем сейчас говорить о самом важном. Очень часто контент-менеджеры льют фоточки с мыльниц, по 2мб, по 3мб и выше. Сами знаете, ставят на фон сайта портянку на 8мб. Разработчик в ужасе. Сайт показывает 10%, но “Хозяйке нравится и мы менять ничего не будем”
Это причина, следствие в Гугланалистике 40, а то и 80% ОТКАЗОВ. То есть люди зашли, молча секунд 20 посмотрели на белый экран и УШЛИ.
Это – деньги, оплата разработчикам, аренда хостинга, в конце концов это исчезнувший клиент, покупатель наконец!

1. Открываем аккордеончик “Оптимизируйте изображения” Жмём “Как исправить” Если его нет в верхнем списке, значит у вас с картинками порядок на сайте. Так же, если там заявлено Оптимизируйте следующие изображения, чтобы уменьшить их размер на 17,6 КБ, то это тоже вам особо не поможет.
Если там от 300кб, и выше, то заняться очень даже стоит.
Идём в зону над подвалом и там видим:

Тыркаем туда где указано красной стрелкой.

На комп падает архив, распакуйте его и зайдите в папку optimized_contents.
Нас интересует папка image
Посмотрите и сравните, то что у вас на сервере, размер, и что в этой папке. Разница весьма ощутима, не правда ли?

Теперь надо работать с самыми тяжеловесными файлами, они обычно вверху, наводите мышью на первую строку

К сожалению я работу уже выполнил, поэтому на скрине показаны остатки, например первый файл весил 850кб.

Хорошо посмотрите на путь картинки, и идите по этому пути на сервер, через файловый менеджер хостинга, или Файлозиллу, неважно. Зайдите в папку и желательно найдите этот файл. Если вы уверены что не ошиблись в пути, то начинайте закачку на сервер с компа первого файла с этим же именем. Сервер его должен перезаписать. Работа монотонно идёт до той поры, пока вы устанете, или завершите замену хотя бы самых тяжеловесных файлов.
Так же, чтоб понимать, о какой именно картинке речь, можно с Гуглоспида открывать её по урлу в новом окне браузера, если картинок много в папке оптимизированного контента, то это очень поможет.

Что ещё, если сайт у клиента запущен “донельзя”, эту работу придётся выполнять циклично несколько раз. Так как Гуглоспид оптимизирует часто ступенями.
Важно не переиграть, в погоне за скоростью получить сайт с размытыми пикселями, ну это я утрирую конечно.
——————-
Здесь я допустил неточность, уставший утром был.
Если в списке 40 фоточек и каждая примерно может сбросить вес 40кб, но работа идёт настолько тугомотно, так как постоянно разные урлы, длинные названия фото, поэтому проще разбить в моём случае работу на 4 этапа по 10 фото.
Лью первый архив, обрабатываю, затем вторую десятку и так далее, в четвёртом архиве оставшиеся десять фото для заключительного аккорда. Предыдущие распакованные папки и архивы можно сразу удалять из папки загрузок. В не летающей птице там иначе.
——————-
В данном случае – из папки оптимизированного контента, я залил лишь четыре картинки на сервер

Это дало прирост по скорости – было 40%, стало 70%

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

Мне возразят что нужно настраивать сам сайт, но… Вы же знаете, если есть хоть один вариант сделать сайту хуже, клиент обязательно им воспользуется, поверьте моему опыту.

Хотел идеально пошагово, с начальными и конечными результатами, но получилось как всегда. Ладно.
Удочка теперь ваша, ловите рыбу ))

ПС. Топик к Друпалу не имеет абсолютно никакого отношения, таким способом можно работать где угодно, если позволят права и прочее.

Тип материала:  Предлагаю решение




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Масштабируемость, нагрузка и быстродействие 5 Спасибо

Источник: http://www.drupal.ru/node/130618

Перенос конфигураций с drush config

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

Решение.
Не нужно трогать продакшн сервер, не нужно заморачиваться с дампами БД ради переноса конфигурации,
все намного проще.

В Drupal8 проще – появилась система управления конфигурациями, Configuration Management.

Работая с Drupal8-сайтом, возникает необходимость сохранять и переносить следующее:
Конфигурации, Контент, Сессии, Состояния.

Короткий разговор пойдет именно о переносе конфигураций.

Конфигурация, это настройки сайта: название и слоган, активная тема, активные модули, типы материалов и поля, вьюсы, и прочие настройки.
Грубо говоря то, что “накликано” )))

Хранение настроек в БД – полохо.
Хорошо то, что Drupal8 может хранить множество своих настроек в .yaml файлах.

Инструменты для работы с конфигурациями – модуль configure из ядра Drupal 8 (имеющий ui) и drush.

Прошу рассмотреть пример работы над проектом work_with_conf с использованием drush.

Создадим каталог для проекта, содержащий каталог для хранения своих конфигураций,
загрузим свежий drupal:
mkdir -p work_with_conf/config && cd work_with_conf && drush dl drupal

Получили следующую структуру:

work_with_conf/
├── config
└── drupal-8.2.1
    ├── autoload.php
    ├── composer.json
    ├── composer.lock
    ├── core
    ├── example.gitignore
    ├── index.php
    ├── LICENSE.txt
    ├── modules
    ├── profiles
    ├── README.txt
    ├── robots.txt
    ├── sites
    ├── themes
    ├── update.php
    ├── vendor
    └── web.config

Инсталлируем drupal-сайт,
активируем модуль configure,
сделаем попроще пароль (не делайте так в продакшн),
подкорректируем права для внесения изменений в файлы,
скопируем из примера файл локальных настроек:

drush si minimal –db-url=sqlite://sites/default/files/.ht.sqlite
drush en config
drush upwd admin –password=‘12345′
chmod 0755 sites/default && chmod 0644 sites/default/settings.php
cp sites/example.settings.local.php sites/default/settings.local.php

Отредактируем settings.php и settings.local.php файлы следующим образом:

# Файл settings.php
# Эта конструкция позволит нам использовать файл локальных настроек, в продакшн это лишнее
# Достаточно просто снять комментарий с этих строк
#
if (file_exists(__DIR__ . ‘/settings.local.php’)) {
  include __DIR__ . ‘/settings.local.php’;
};
#
# При установке сайта, создается следующая строка,
# определяющая путь к каталогу sync
# тут имеет смысл хранить конфигурации, когда сайт в продакшн
#
$config_directories[’sync’] = ’sites/default/files/config_ХЕШ_СТРОКА/sync’; # Файл  settings.local.php
# Так мы указали каталоги, в которые будем сохранять свои конфигурации
#
$config_directories = array(
  ‘active’ => ‘../config/active’,
  ’staging’ => ‘../config/staging’
);

Восстановим нужные права для файлов и каталогов:
chmod 0555 sites/default && chmod 0444 sites/default/settings.php

Теперь мы можем это использовать.
В случае продакшн, мы синхронизируем настройки из sync каталога
При локальной разработки мы оперируем active и staging каталогами.
В active мы храним то, к чему в случае чего хотим вернуться.
В staging мы храним нашу работу

Пример использования:

# Запустим свой drupal-сайт локально, он будет доступен по адресу http://0.0.0.0:8888
#
drush rs

# Экспортируем изначальное состояние в active
#
drush config-export active

# Активируем тему, к примеру Bartik
# Добавим тип материала foo
# Изменим имя сайта, слоган, добавим вьюс…

# Экспортируем измененное состояние в staging
#
drush config-export staging

# Вернемся к варианту active
#
drush config-import active
# в выводе наблюдаем – какие настройки будут добавлены, удалены или обновлены,
# примерно так:
 Collection  Config                            Operation                
             core.extension                    update
             system.theme                      update
             block.block.bartik_login          delete  
             block.block.bartik_tools          delete  
             block.block.bartik_admin          delete  
             block.block.bartik_branding       delete  
             block.block.bartik_messages       delete  
             block.block.bartik_page_title     delete  
             block.block.bartik_local_tasks    delete  
             block.block.bartik_local_actions  delete
Import the listed configuration changes? (y/n):

# Вернемся к варианту staging
#
drush config-import staging

На этом пример завершен.

Возможности drush config не ограничиваются рассмотренными,
подробная информация в документации:
https://drushcommands.com/drush-8x/config/
прошу сразу обратить ваше внимание на аргумент --partial для экспорта/импорта.

P.S
хотя у модуля config и есть отличный ui,
я надеюсь, что приведенные мною примеры, как минимум пробудят интерес к drush у тех, кто его еще не использует.

и как само собой разумеющееся:
код храним в git, который не стесняемся изучать.

Всем добра

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 8.* Ключевые слова:  configuration Модули и темы:  drush




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Установка и настройка 5 Спасибо

Источник: http://www.drupal.ru/node/130460

Мотивация программистов

Мотивация

Периодически дополняется

Мотивация – это комплекс мер и действий , применяемая для улучшения каких-либо показателей. В данном слове есть мотив – то есть это подразумевает определенное воздействие на сотрудника ,не всегда положительное. Есть пряник, а есть и кнут
«А надо ли вообще мотивировать деньгами? IT-специалисты работают хорошо не из-за денег их нужно мотивировать по другому! »

На основе личного опыта и общения с руководителями выделю два основных мотива
В порядке приоритета
1.Интерес
2.Деньги

Какие показатели могут существовать для стимулирования программистов?

Оценка руководителя.
Можно ставить «Отлично», «Хорошо», «Удовлетворительно» , «Плохо», «Очень плохо»

Каждая оценка несет в себе определенный числовой коэффициент , что удобно для работы с показателями

Данный показатель легко разбивается на периоды. Наиболее оптимален – неделя.

В общем, это безумно полезный субъективный показатель, которым руководитель может влиять на ЗП сотрудника.

Выполнение регламентов

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

Например – 1.Ответ на сообщения , не позднее 1 минуты с их получения
2.Обязательный отчет о выполненной работе , ваши пожелания себе по данной задаче на будущее, что вам нужно улучшить, что в данной задаче не получилось. Каких показателей вы планируете достичь. И тд.

Основная идея в том, чтобы скорость разработки росла. Предполагается, что программист должен сделать задач на 85% своего рабочего времени. Остальные 15% даются, чтобы сходит в туалет и попить кофе.

Планирование объема работ

Программисту планируются задачи в часах в разрезе месяца, если он сделал больше, то значение этого показателя пропорционально увеличивается, если меньше, то – уменьшается.

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

Такой показатель нужно обязательно уравновешивать, в идеале показателями качества SLA. Формально он уравновешивается оценкой руководителя.

Оценка заказчика по задачам
Очень полезный показатель, направленный на повышения качества и клиент-ориентированность.

Оценка проверки задач

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

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

Грейдирование и степирование.
Все должности в компании привязываются к грейдам. Грейд — это зарплатная вилка, минимум и максимум, который можно получать в данной должности. Сотрудники привязаны к степам. На основе степа, максимума и минимума грейда вычисляется базовый оклад.

Например вы нанимаете сотрудника за 120 тыс рублей.
При минимальных показателях вы можете ему платить 20 тыс рублей.
При выполнении всех показателей на максимуме вы можете платить ему 150.

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

Некоторые программисты сильно мотивируются деньгами, и работаю много. В конце месяца коэффициент эффективности у некоторых может достигать 135%. Поэтому все, что больше 120% можно обрезать до 120%. Что бы можно было влезть в бюджет и чтобы люди успевали отдыхать.

Внедряя расчет KPI, первое время лучше переплатить сотрудникам, иначе можно демотивировать, и будут думать, что систему мотивации внедряют ради экономии.

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

А в бизнесе закон спроса и предложения,как известно, является определяющим

Для комментаторов
Данная схема хорошо работает на рынках с преобладанием предложения, на данный момент рынок СНГ ,страны Индии ,некоторые страны Азии являются такими рынками.
Средний разрез цен на услуги на данном форуме, на основных биржах на форуме dru.io и на hh.ru позволяет сделать такое предположение. А также количество соискателей

Дополнения по поступившим вопросам

Ситуация первая
1. Работник в конце месяца получил свои 20 тыс рублей. Но он ожидал получить 120 тыс рублей
Свои задачи все выполнил. Но не выполнил мотивацию. При приеме на работу эту тему вы показали ему вскользь
Соответсвенно он увольняется.
Что делать?

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

При хорошем пулле работников замену можно произвести от нескольких часов до нескольких дней.

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.*




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Решение проблем 1 Спасибо

Источник: http://www.drupal.ru/node/130455

Ember.js и Drupal 8


upd:
Эта статья кардинально отличается от своей первой редакции, добавлено демо приложения.
31.10.16
Прикрыл репозиторий с кодом в преддверии обновления,
но оставил открытой wiki – если кому интересно: https://bitbucket.org/multpix/ember2drupal/wiki/browse/.
Первая версия демо так и работает по адресу: http://multpix.bitbucket.org.

Вопросы не новы:
Should we decouple Drupal with a client-side framework?
Selecting a client-side framework for Drupal
Can Drupal outdo native applications?

Таблица сравнения js-фреймворков:

(Лично мне приглянулся Ember.js – это замечательный фреймворк для клиента, который позволяет делать удивительные вещи.)

Смотрите доки на оф.сайте, а ниже линки на интересные видео с конф.

Decoupled Drupal and Ember

Amazing User Experiences with Drupal and Ember

Конкретизируя, Headless Drupal8 – эта та тема, которую я хочу обсудить с участниками сообщества drupal.ru.

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

Я остановился на крайнем правом варианте – полностью отдельные бэкенд и фронтенд приложения.
Ember – это полное приложение (mvc), на стороне клиента;
на стороне сервера – Drupal хранит данные, предоставляя все прелести своей системы пользовательских ролей и прав, в связке со своей моделью данных (сущности – поля).
Обмен данными между клиентом и сервером происходит в формате JSON API – это замечательная спецификация json для организации api.

Принципиальной особенностью использования drupal в этой связке является следующее:
минимальное применение контриб-модулей от сторонних разработчиков.

Это одна из главных проблем большинства пользовательских инсталляций drupal-based сайтов.
Простых пользователей привлекают такие характеристики drupal, как: безопасность, универсальность…
но фактически – установив ядро и добавляя к нему контриб на каждый “чих”
– пользователь получает весьма ресурсо-прожорливую конструкцию, неимоверной степени сложности, сомнительную в плане безопасности.

В моем варианте, из контриб модулей я использовал только  jsonapi, библиотеку docson
(ну и  devel, известно зачем – в продакшн он уже не нужен).

Это простейший пример, как брать данные из drupal и скармливать их ember,
формат – api_json.

А теперь по порядку.

Установка и первоначальная настройка Drupal тривиальна:

drush dl drupal && mv drupal-8.2.1 drupalback && cd drupalback
mkdir libraries && cd libraries
git clone https://github.com/lbovet/docson.git && cd ../
drush dl devel jsonapi –destination=‘modules/contrib’
drush en seven toolbar field_ui  devel_generate jsonapi
drush config-set system.theme default seven
drush pm-uninstall stark

Настройка cors (для разработки)

chmod 0755 sites/default/
cp sites/default/default.services.yml sites/default/services.yml
chmod 0555 sites/default

vim sites/default/services.yml

# Enable CORS for develop in services.yml file:
cors.config:
  enabled: true
  allowedOrigins: [‘*’]

Сменить пароль да запустить:

drush upwd admin –password=‘12345′
drush rs

Далее, то что так подкупает в drupal – ui,
создаем нужные сущности и связи используя field_ui,
создаем необходимую систему ролей и прав пользователей,
дополнительно – возможно использовать views_ui для организации административных интерфейсов управления данными и пользователями.

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


Вот и все с серверной частью, теперь фронт.

Что-бы Ember без проблем принимал api_json, который отдает drupal, нужно использовать и расширять дефолтные адаптер и сериализатор, соответственно: JSONAPIAdapter и JSONAPISerializer.
Несколько особенностей я опубликовал в примере кода здесь.

Для демонстрации простого приложения, сделано следующее:
для бэкенд – в pantheon.io развернут drupal 8,
для фронтенд – сборка ember выгружена на мою страницу bitbucket.org.

Приложение кране простое, не удивляйтесь некоторым его “приколам” – не все проработано до должного уровня,
это просто небольшая демонстрация возможностей
Точка входа в приложение: http://multpix.bitbucket.org/
Обратите внимание, что при переходе по ссылкам приложения, перезагрузки страниц не происходит.
Посмотрите на эффект перехода между articles <–>users, это работает liquid-fire.
Сама верстка – foundation 6.

Я считаю, что потенциал у подобного стека – огромный

Краткое описание Ember.js:

Ember.js это JavaScript фреймворк для создания динамичных web приложений. Реализует MVC шаблон, предназначен для упрощения создания масштабируемых одностраничных веб-приложений.

Основные особенности:

Толстые объектные модели Вычисляемые свойства Декларативная двусторонняя привязка данных Автоматически обновляемые шаблоны с Handlebars.js Маршрутизатор для управления состоянием приложения Включение зависимостей

Принципы

Изначально Ember проектировался с учетом нескольких ключевых идей:

Фокусировка на амбициозных web приложениях
Ember нацелен на полное решение всех задач приложений на стороне клиента, в отличии от многих JavaScript фреймворков, которые реализуют составляющую V в MVC (т.е., Представление из шаблона Модель-Представление-Контроллер).

Больше продуктивности из коробки
Ember является одним из компонентов целого комплекса инструментов для полного стека разработки. Цель этих инструментов – немедленно повысить продуктивность разработки. Например, Ember CLI (интерфейс командной строки) обеспечивает возможности автоматического создания стандартной структуры приложения, генерацию типового кода, инструменты тестирования, проксирование на внутренний сервер, живую перезагрузку браузера при редактировании кода. Он также обладает расширяемой архитектурой и обширным списком дополнений.

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

Предвидение будущих web стандартов
Ember один из первых внедрял много новшеств в сфере Web и JavaScript, таких как промисы, web компоненты, ES6 синтакс. Иегуда Катц, один из основателей Ember, участник группы TC39, ответственной за будущее развитие языка Javascript.

Ember, подобно Ruby on Rails, следует принципам Convention over Configuration (CoC) – Соглашение превыше Конфигурации, и Don’t Repeat Yourself (DRY) – Не повторяйся. Он описывается как высоко опциональный, гибкий фреймворк

Примеры работы Ember:
https://cloud.digitalocean.com
https://dashboard.heroku.com

http://discuss.emberjs.com/
https://forum.ionicframework.com/
http://help.apple.com/watch/

Вот и все.
У кого какие вопросы или замечания – в комменты

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 8.* Ключевые слова:  RESTful Headless Модули и темы:  jsonapi




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Программирование 2 Спасибо

Источник: http://www.drupal.ru/node/130426

Пражский Drupal Iron Camp

Давайте встретимся в Праге, 24-27 ноября

Несколько лет тому назад, участники Drupal сообществ Центральной и Восточной Европы почувствовали необходимость организовать совместную встречу.

Эти стремления приняли более конкретные очертания в форме DrupalCon Амстердам и вот, спустя некоторое время, это событие наконец-то произойдет в Праге, с 24 по 27 ноября 2016.

Это будет прекрасная возможность

- пообщаться с Drupal энтузиастами и профессионалами
- встретить старых друзей и завести новых
- улучшить свои знания Drupal
- встретиться с потенциальными деловыми партнерами
- найти работу своей мечты или коллегу

Где и когда

Первый Drupal Iron Camp пройдет в Праге с 24 по 27 ноября 2016.
Расширенные спринты будут проходить в течение всей недели до воскресенья 27.
Четверг 24: CxO день, когда владельцы компаний и менеджеры смогут вместе обсудить Drupal бизнес.
Пятница и суббота: 2 дня сессий в 2 или 3 потока.

Вечеринки и мероприятия каждый вечер.

Не стесняйтесь и приобретайте билеты! http://www.drupalironcamp.com/buy-a-ticket

У вас есть интересные предложения? Вам есть чем поделится с Drupal сообществом? Напишите нам!

Хотите, чтобы вас заметили? Улучшите свою карму присоединившись к нашим спонсорам (Acquia, Amazee Labs, Dream Production, Druid and MD Systems)!






email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Разное непонятное 3 Спасибо

Источник: http://www.drupal.ru/node/130403

Release Drupal 8.2.1


Минорный релиз Drupal 8.2.1 состоялся! Всех прошу к столу!

Релиз ноты

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

Download Drupal 8.2.1

P.S.

Там что-то напутали с описанием, говоря о том, что следующий стабильный релиз Drupal 8.2.0 будет 5го октября.

Цитата:

The next stable release planned for Drupal 8 will be the Drupal 8.2.0 minor release, which is scheduled for October 5, 2016

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 8.* Ключевые слова:  drupal 8 release




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Установка и настройка 1 Спасибо

Источник: http://www.drupal.ru/node/130391

Первый ежегодный опрос CEO Drupal сообщает, что есть светлое будущее для Drupal в корпоративном сегменте

Newsletter:  Новости Друпал

Результаты глобального делового опроса CEO* Drupal, проведенного при участии One Shoe и Exove, в партнерстве с Ассоциацией Drupal, показывают, что Drupal будет принимать роль в качестве платформы корпоративного уровня. CEO Survey Drupal была проведена в этом году первый раз и дает понимание ключевых вопросов, с которые сталкиваются владельцы агентств Drupal и руководители компаний по всему миру.
Среди обследованных 75 компаний Drupal, респонденты C-уровня в основном работают в цифровых агентствах (37,8%) и в компаниях программного обеспечения (27%). Большинство из опрошенных компаний были небольшими и средними предприятиями. Только 9,9% сказали, что они имеют более 80 сотрудников, в то время как 21,9% сообщили, что имеют пять или меньше сотрудников.

Светлое будущее для Drupal в корпоративном сегменте
Подавляющее большинство (90,5%) считает, что Drupal заново открыл себя с выпуском Drupal 8, новейшей версии CMS, выпущенный в ноябре 2015 года Несмотря на то, Drupal стала несколько более сложной CMS, респонденты не думают, что это выключение для разработчиков (77,1%). Как сказал один из респондентов, “Некоторые разработчики будут возмущаться дополнительной сложностью, но я вижу, что становится стандартом де-факто для” корпоративной “CMSs.” Этот респондент не единственный: 89,2% респондентов считают, что популярность Drupal для клиентов будет расти в течение ближайших трех лет. Drupal рассматривается как лидер в крупных корпоративных внедрений в будущем. Как заявил один из респондентов, “Drupal будет продолжение роста для клиентов, которые стремятся к их цифровой стратегии и увидеть ее важность в рамках своих общих бизнес-целей Но уменьшением для клиентов, которые просто нужен сайт “Или, как другой респондент видит:”.. Drupal станет платформой для решений уровня предприятия “

Drupal является популярным для проектов предприятий здравоохранения
Опрошенные компании обслуживать клиентов различных отраслях промышленности. С корпоративной точки зрения, основными отраслями промышленности являются предприятий здравоохранения и медицины (40,0% респондентов имеют клиентов из этой отрасли), банковское дело и страхование (38,7%), а также розничной торговли (37,3%). В целом, Drupal компании также работают с благотворительными и некоммерческими организациями (64%), правительственными и государственного управления (56,0%), средства массовой информации (49,3%), информационными технологиями (45,3%), а также искусства и культуры (36,0%).

Стоимость проекта корпоративного решения варьируется от компании к компании. Большинство компаний (28,0%) работают в диапазоне 100,000 – 250,000 евро, в то время как 18,7% компаний 250,000 – 500,000 евро. Еще 18,7% доход 50,000 – 100,000 евро для решения уровня предприятия, построенного на Drupal. Лишь несколько компаний, 4,0%, заряда между полмиллиона и один миллион евро. По сравнению с типичной стоимости решений на уровне предприятия, на основе Drupal решения реализованы с меньшими затратами. Это связано с хорошей подходе Drupal для нужд корпораций, гибкости платформы, а также огромного количества готовых модулей.

Drupal расширяет возможности развития
Самые важные стратегические приоритеты компаний также сосредоточены на развития: найти правильный талант, 53,3%; обеспечение финансового роста, 45,3%; и разработка новых стратегий роста, 41,3%. Руководители ожидают столкновений с проблемами в ближайшие три года в тех же самых областях: найти правильный талант, 59,5%; удержания талантов, 36,5%; и обеспечения финансового роста, 33,8%.

В то время как поиск и сохранение талантов видится сложной задачей, 60,0% респондентов не используют сторонних подрядчиков для работы с поставщиками. Компании, работающие в Европе меньше использования аутсорсинг, так как 67,0% этих компаний не используют поставщиков. Европейские компании аутсорсинг в Азии (17,0%) и в Европе (17,0%), в то время как не европейские компании используют поставщиков в Северной Америке (25,0%), Южной Америке (25,0%) и Азии (19%) ..

Кроме того, иллюстрирующий рост расширения прав и возможностей аспекты Drupal является географическое присутствие компаний. Одна треть (31,1%) опрошенных компаний имеют офисы в более чем одной стране, а 12,0% имеет офисы в пяти и более странах.

Комментарии:
Организаторы опроса Janne Kalliola из Exove и Michel van Velde из One Shoe очень довольны результатами. “Это исследование подтверждает ряд положительных показаний о Drupal, которые мы наблюдаем на наших рынках. Я особенно доволен сильной корпоративной направленности Drupal компаний по всему миру, так как наши опыты с корпоративными клиентами подтвердили, что Drupal является отличным нужным на предприятиях,” – говорит Janne Kalliola . Michel van Velde продолжает: ” Мы предвидели устойчивый рост Drupal в ряде рынков. Есть так много неиспользованных возможностей для Drupal, и это здорово видеть, что Drupal 8 теперь оснащен, чтобы конкурировать с закрытыми исходными решениями, таких как Sitecore и Adobe.”

Megan Sanicki, исполнительный директор Drupal ассоциации говорит: “Я очень рад, что это исследование было сделано, и что многие Drupal компании ответили на вызов. Результаты проверки положительны и энергичны чувство мы видим и слышим на рынке Drupal Для того, чтобы помочь агентствам, Ассоциация Drupal работает совместно с бизнес-сообществом Drupal, чтобы усилить успех Drupal по Drupal.org. Мы подключаем предприятия, оценивающих Drupal с агентствами, предоставляющих услуги Drupal, мы организуем DrupalCons, чтобы привлечь и обучить новые таланты для работы с Drupal, и мы поддерживаем местные бизнес-сообщества в странах по всему миру. “

Dries Buytaert, основатель и руководитель проекта Drupal, президент Drupal Ассоциации и главный технический директор Acquia говорит: “Результаты опроса подтвердили мое понимание ситуации компаний в бизнес-сообществе Drupal. Я очень горжусь новыми возможностями и перспективами этих компании сделанных для Drupal – а также чувствую себя удовлетворенным, что Drupal рассматривается как хорошо подходящее для их потребностей. И это станет еще лучше с выпуском Drupal 8.2. “

Об Exove
Exove обеспечивает цифровой развитие. Мы помогаем нашим клиентам развивать свой цифровой бизнес за счет проектирования и создания решений, с гибкой основой методологий проектирования услуг и открытых технологий. Нашими клиентами являются Sanoma, Fiskars, Neste, Informa, Trimble и Finnlines. Мы также обслуживаем начинающие компании, профсоюзы и общественный сектор. Exove имеет офисы в Хельсинки, Оулу и Тампере, Финляндии; Таллинне, Эстонии и Лондоне, Соединенном Королевстве. Для получения дополнительной информации, пожалуйста, посетите www.exove.com

Об One Shoe
One Shoe является агентством интегрированной рекламы и цифрового производства с более чем 10-летний опыт работы с Drupal. Обладая более чем 40 специалистами, One Shoe сочетает в себе стратегию, UX, дизайн, рекламу, интернет и мобильного развития, поставляет уникальные результаты для международных клиентов, таких как DHL, Shell, Sanofi, LeasePlan, MedaPharma и многих других. Для получения дополнительной информации, пожалуйста, посетите www.oneshoe.com.

О Drupal Ассоциации
Drupal Ассоциация является некоммерческой организацией со штаб-квартирой в Портленде, штат Орегон, США. Это помогает проекту Drupal и сообществу процветать с финансированием, инфраструктурой и событиями. Их видение, чтобы помочь создать пространство, где любой желающий, в любом месте, мог бы использовать Drupal для создания амбициозных цифровых опытов. Для получения дополнительной информации, пожалуйста, посетите association.drupal.org
Оригинал статьи
Перевод и адаптация Van’Denis

Примечание:
CEO* – англ. Chief Executive Officer — главный исполнительный директор

Ключевые слова:  опрос CEO Drupal Exove One Shoe Drupal Ассоциация 2 Спасибо

Источник: http://www.drupal.ru/node/130388

Критическая уязвимость 7.x, 8.x


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

Больше всего такой баг репортовали с отсылкой на модуль  webform.

Исправление

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

Настройте поля, через которые анонимы и недоверительные пользователи могут закачивать файлы на сайт, на приватную файловую систему. Удостоверьтесь, что крон работает нормально. О настройке крона для Drupal 7 (англ) и Drupal 8 (англ). Рассмотрите вариант с принуждением пользователя на создание учетной записи, перед загрузкой файла. Удостоверьтесь, что вы храните валидные (нет посторонних) файлы в своей публичной файловой системе.

Источник Drupal file upload by anonymous or untrusted users into public file systems — PSA-2016-003 (англ.)

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 8.* Drupal 7.* Ключевые слова:  vulnerability уязвимости Модули и темы:  webform




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Установка и настройка 5 Спасибо

Источник: http://www.drupal.ru/node/130386

Собственная тема в Drupal 8

Предлагаю к ознакомлению базовый примитив для создания собственной темы в Drupal 8.
Иметь свою тему хорошо и полезно.

Итак, приступим

Создание своей стартовой темы у вас не займёт много времени, основное время у вас уйдёт на написание стилей css.

Структура темы

Пусть наша тема будет иметь название light, тем более она будет точно соответствовать этому имени, так как в сущности будет иметь каркас темы, а дальнейшие расширения вы сможете применить в случае необходимости позже. Для старта нам её вполне хватит.

Создаем папку light

На картинке наглядно видно дерево темы

В папке light находятся файлы light.info.yml, light.libraries.yml,

light.theme,  html.html.twig, favicon.ico, logo.svg 

и директории css, js, images, templates.

В директории css находятся файлы стилей.
В директории js – файлы для javascript или вызовов функий библиотеки JQuery.
В директории images фоновые картинки.
В директории templates- шаблоны отображения нод и страниц.

Где брать шаблоны? Как и в Drupal 7 в восьмёрке шаблоны страниц лежат в папке system/templates Найти её можно по пути

/core/modules/system/templates
Скопируем в свою тему оттуда шаблоны page.html.twig и шаблон html.html.twig
Для темизации шаблона ноды возьмём шаблон node.html.twig в папке модуля node по пути

/core/modules/node/templates

Скопируйте эти шаблоны: html.html.twig в папку light, а шаблоны page.html.twig и node.html.twig в папку light/templates В дальнейшем, если вам нужно будет переопределить каки-нибудь шаблоны, то ищите их в папке модулей

по пути /core/modules
и копируйте себе в тему.

В папке css создайте файл стилей syle.css для оформления стилей темы.
В папке js создайте файл script.js для js кода в вашей темы.

Итак.
Мы создали директории темы, файлы yml и скопировали шаблоны.

Заполним файлы yml.

Файл light.info.yml

name: light 
description: A starter theme for Drupal 8. 
type: theme
core: 8.x 
libraries: 
  – light/global-css 
  – light/global-js 
stylesheets-remove: 
  – core/assets/vendor/normalize-css/normalize.css 
  – core/modules/system/css/system.module.css 
  – core/modules/system/css/system.theme.css 
  – core/modules/views/css/views.module.css 
regions:
  header: ‘Header’ 
  primary_menu: ‘Primary menu’ 
  secondary_menu: ‘Secondary menu’ 
  breadcrumb: ‘Breadcrumb’ 
  highlighted: ‘Highlighted’ 
  help: ‘Help’ 
  content: ‘Content’ 
  sidebar_first: ‘Sidebar first’ 
  sidebar_second: ‘Sidebar second’ 
  footer: ‘Footer’

В файле идет описание темы, удаление файлов css стилей ядра,чтобы они не мешали вашей вёрстке, подключение библиотек, в которых прописаны пути для стилей и js- кода и описание регионов темы.

Если вам нужно добавить свой регион в тему, то в файле info темы в секции регионов вы прописываете свой регион

my_region: ‘My region’

И в файле page.html.twig прописываете свой регион в любом месте разметки, где вам необходимо

{% if page.my_region %} 
<section class="my_region" role="complementary"> 
{{ page.my_region }}
</section> 
{% endif %} 

Шаблонизатор произведёт проверку на наличие контента в регионе 

{% if page.my_region %}

содержимое

 {% endif %} 

И если вы в админке вывели блок в этот регион, то он его выведет в поток браузеру для отображения.

Обратите внимание вот на что. Это важно!

Если вы используете <section>, то у блока, выводимого в секции должен быть заголовок, так как это сематнический элемент разметки, а не обёртка.

Если вам нужно вывести в блоке что- то другое, не имеющее семантического смысла,  то для обёртки испольуйте <div> и в таком случае код вывода региона будет выглядеть так:

<code>{% if page.my_region %} 
<div class="my_region"> 
{{ page.my_region }}
</div> 
{% endif %} 

Если вы выводите регион в секции <section>, от обратите внимание на атрибут role

Ниже описания этого атрибута:

banner - Содержит главный или внутренний заголовок страницы. Брендирование. Рекомендуется использовать не больше одного раза на странице.
complementary - Информационный блок. Отделен от основного содержания.
contentinfo -Информация о содержании страницы. Используйте не более одного раза
definition - Определение термина или понятия.
main - Основное содержание страницы. использовать не более одного раза.
navigation - Навигационный блок. Использовать не более одного раза.
note - Заметка или краткая анотация к основному содержимому.
search - Область поиска на сайте.

Файл light.libraries.yml

global-css: 
  css: 
   theme: 
    css/style.css: {} 
global-js: 
  js: 
   js/script.js: {}

Файл light.theme

В нём пишут некоторые переопределения, ради которых не охота пистать модули. Он выполняет ту же роль как файл template.php в семёрке На этом собственно и всё. logo.svg и favicon.ico вы сможете сделать сами))

Профит

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

Папку с темой нужно положить в директорию themes по пути   

/themes

Ниже можно скачать zip архив с темой

Чуток добавил стилей в базовую тему, перезалил архив с темой

Демо темы можно посмотреть здесь http://themedemo.graytone.ru/

base theme for drupal 8113.69 КБ Версия Drupal:  Drupal 8.* Ключевые слова:  создание темы




email





facebook





linkedin





twitter





google+





pinterest
2 Спасибо

Источник: http://www.drupal.ru/node/130347

Как исправить предупреждения “The following module is missing from the file system…”

Если на вашем сайте вы видите предупреждения PHP, такие как “The following module is missing from the file system…” (Модуль отсутствует в файловой системе …”), (или аналогичные), на этой странице Вы найдете узнаете как это исправить.

Эти предупреждения были введены начиная с версии Drupal 7.50 и отображаются, когда Drupal пытается найти модуль или тему в файловой системе, но либо не может его найти либо не находит его в установленном месте. Обычно это указывает на наличие проблем с сайтом. Хоть и не серьезных, но, в идеале они должны быть исправлены, по возможности. (Для получения дополнительной информации об этом предупреждении см. эту статью, и инструкцию о том, как избежать предупреждений подобных этому, и никогда не отображать их для конечных пользователей вашего сайта, а только регистрировать в админ-журнале.)

Есть несколько возможных причин, а так же соответствующие решения:

Вы удалили модуль из файловой системы без отключения и деинсталляции

Возможные решения:

Восстановление модуля на прежнее место и отключение, с последующим удалением (рекомендуется, если это возможно): Во-первых, восстановите модуль в исходное место в файловой системе. После, необходимо перейти на страницу модулей и отключить/удалить его с помощью инструментов Drupal, или использовать  Drush:          

drush dis module_name && drush pm-uninstall module_name
         

Где, module_name должен быть заменен на машинное имя удаляемого модуля. Вручную удалите все следы модуля в базе данных. Это решение не рекомендуется использовать, так как большинство модулей выполняют очистку во время процесса отключения/удаления, и это решение приведет к пропуску этих процессов. Во многих случаях это будет означать, что работа модуля будет нарушена, если попытаться когда-либо его восстановить, для использования на этом сайте. Тем не менее, если вы решили воспользоваться этим решением (например, для устаревших модулей, которые больше не существуют, или которые не могут быть добавлены обратно), вот несколько способов как это можно решить: Drupal 7 Используйте административный интерфейс, предоставляемый модулем  Module Missing Message Fixer. Использование  Drush

Например, выполните команду, подобную следующей:

         
       
drush sql-query "DELETE from system where name = ‘old_module1′ AND type = ‘module’;"
         
       

Когда это сделано, очистите кэш. (например drush cc all). Напишите update hook в пользовательском модуле

Вы можете использовать код, подобный приведенному ниже примере, который будет удалять недостающие модули при запуске update.php:

<?php
      

/**
      

* Delete {system} records for long-lost modules.
      

*/
      

function MYMODULE_update_7100() {
      

$modules = array(
      

'old_module1',
      

'old_module2',
      

'old_module3',
      

);
      

db_delete('system')
      

->condition('name', $modules, 'IN')
      

->condition('type', 'module')
      

->execute();
      

}
      

?> Drupal 8          

drush sql-query "DELETE FROM key_value WHERE collection=’system.schema’ AND name=’module_name’;"
         

Когда это сделано, необходимо очистить кеш сайта (drush cr) Кроме того, убедитесь, что папка CMI очищена от отключенных модулей. Там же, могут быть некоторые оставшиеся YML файлы, и/или какой-либо конфиг системы. (Все это не лучшие способы, однако в случае с Drupal 8, принимая во внимание новизну, дела идут не совсем так, как планировалось).

-
Вы переместили модуль внутри вашей инсталяции Drupal

-
Возможные решения:

Очистить кеш сайта чтоб зарегистрировать новое положение модуля Вернуть модуль на прежнее место

Существует ошибка в установленном на вашем сайте модуле

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

Если это Ваш вариант – нужно попытаться найти код вызывающий проблему (как правило, это код, который вызывается функциями module_load_include(), drupal_get_path(), drupal_get_filename() или их аналоги.

Источник.

Перевод и адаптация  bumble  StudioVIZA

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.*




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  FAQ 3 Спасибо

Источник: http://www.drupal.ru/node/130346

Релиз Drupal 8.2.0

Newsletter:  Новости Друпал

Drupal 8.2.0, второй выпуск обновлений Drupal 8, теперь доступен. С Drupal 8, мы внесли значительные изменения в нашем процессе высвобождения, приняв семантическое управление версиями и запланированные выпуски функций. Это позволяет нам сделать значительные улучшения в Drupal 8 своевременно, обеспечивая при этом обратную совместимость.

Что нового в версии 8.2.x?
Эта новая версия включает в себя дополнительные экспериментальные модули для размещения блоков на страницах, чтобы изменить конфигурацию, относящуюся к блокам, не покидая страницу, чтобы создать модерации содержания рабочих процессов, а также использовать диапазоны дат. Несколько меньше авторинга опыт, сайтостроительства, и улучшения сайта включены также. (Экспериментальные модули снабжены ядром Drupal для целей тестирования, но еще не полностью поддерживается.)

Легче поставить и настроить блоки на страницах
Новый экспериментальный модуль Place Block позволяет размещать блоки на любой странице, без необходимости перехода к форме введения бэкенд. После выбора региона для размещения, конфигурации блока можно регулировать в модальное диалоговое окно, позволяющее полный контроль над всеми деталями.
Существует также гораздо более простой способ для изменения конфигурации блока, с экспериментальным модулем настройки лотка. Редактирование блока открывает лоток в боковую панель с названием блока и других параметров. Для блока имя сайта, например, вы можете изменить название сайта непосредственно в боковой панели. Для блоков меню, вы можете настроить меню там.

Содержание умеренности теперь включены
Drupal всегда поддерживала опубликованных и неопубликованных содержание, но более гранулированный носитель рабочий процесс не был доступен в ядре Drupal. Новый экспериментальный модуль Content Moderation, основанный на вклад Workbench Moderation, позволяет определить содержание состояний рабочего процесса, такие как проект, архивируются и публикации, а также какие роли имеют возможность перемещать контент между состояниями.

Поддержка диапазонов дат
Модуль Datetime входит только ядро поддерживает хранение единичных точек во времени. Экспериментальный модуль Datetime Range обеспечивает новый тип поля, который также позволяет конечную даты. Это важно для оказания помощи дополнительных модулей, как модуль Calendar для работы с Drupal 8 ядра.

Создание сайта, содержание авторинга, и административные улучшения
Drupal 8.2.0 также улучшает стабильную функциональность для администрирования, сайтостроения и авторинга. Drupal позволяет теперь изменения по умолчанию для новых типов контента, для обеспечения лучшей подотчетности, чтобы создать “сеть безопасности” для восстановления от случайных изменений, а также интегрировать с будущими особенностями рабочего процесса. Контент редакторы будут пользоваться более плавный опыт, как и встроенные в диалоговые окна CKEditor в настоящее время стиль, чтобы соответствовать Drupal-родные диалоги, а также создание любой объект всегда будет отображать сообщение, связывающую новому предприятию.

Другие дополнительные усовершенствования включают в себя:

Текст пользовательского интерфейса был улучшен на многочисленных административных страницах. Перенаправление на веб-узле контактных форм теперь настраивается. Режим комментарий View теперь можно выбрать в виде дисплея форматера. Относительные URL преобразуются в абсолютные в генерируемых RSS-каналы (обеспечение того, чтобы изображения и ссылки работают везде, где используются каналы). Теперь администраторы могут выбрать, чтобы удалить объекты контента в качестве модуля для того, чтобы удалить модуль. Кэш внутренних страниц был улучшен для 404 ответов.

Возможности платформы для веб-сервисов
Drupal 8.2 релиз продолжает расширять поддержку Друпала для веб-сервисов, которые приносят пользу развязаны сайтов и приложений, с исправлением ошибок, упрощенной конфигурации, улучшенные ответы, а также новые возможности. Теперь можно читать (GET) конфигурации объекты, такие как словари и типов контента как REST ресурсов, разрешающий существенное ограничение функциональности для отдыха в 8.1.x и более ранних версий. Войти, выход из системы и регистрации пользователей также теперь возможно с покоем. Механизм аутентификации, используемый дисплей Views ОСТАЛЬНЫЕ Экспорт теперь настраивается, и параметр cors.config службы была добавлена для включения и настройки кросс-происхождения совместного использования ресурсов (CORS). ОСТАЛЬНЫЕ конфигурации ресурсов в настоящее время также значительно проще.

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

Оригинал статьи
Перевод и адаптация Van’Denis.

Ключевые слова:  Друпал новая версия 2 Спасибо

Источник: http://www.drupal.ru/node/130305

Платежные системы для Drupal 8

Сделал немного платежек для Друпал 8:
Payment Offsite API – API для быстрой интеграции офсайт платежных методов с модулем Payment
В среднем интеграцию с применением этого модуля можно провести за 2-3 часа так как он убирает необходимость делать многие рутинные операции. Документация – https://www.drupal.org/node/2800529

Идея этого модуля родилась после обсуждения [META] Add offsite payment methods support.

Основные функции:

Предоставляет комуникационные URL-ы (Success/Fail/IPN) на сосновании пользовательских страниц платежной системы Предоставляет платежную форму с возможностью просто добавлять и убирать параметры verbose режим для разработчиков (Печать результатов валидации и информации приходящей от платежной системы в watchdog) Автосабмит платежной формы Поддержка нескольких конфигураций для каждого платежного метода Simple класс для интеграции типовых платежных систем (Покрывает ~80% платежных систем) Режим эмуляции IPN вызова если Платежная система уведомляет сайт только при успешном процесинге оплаты Мапинг статусов через конфигурацию Полная совместимость с модулем Payment

Спасибо всем помогавшим с релизом.

Платежные методы на основе Payment Offsite API

https://www.drupal.org/project/interkassa_payment – интеграция с interkassa (версия 7.x не планируется) https://www.drupal.org/project/liqpay_payment – интеграция с liqpay (платежка от Приват банка) (версия 7.x не планируется) https://www.drupal.org/project/robokassa_payment – интеграция с https://www.robokassa.ru версия 7.х стабильна, 8.x dev Тип материала:  Предлагаю решение Версия Drupal:  Drupal 8.* Ключевые слова:  платёжная система платежные модули




email





facebook





linkedin





twitter





google+





pinterest
5 Спасибо

Источник: http://www.drupal.ru/node/130253

Модуль Image Insert Codes

Аналог модуля Image Insert Codes для Drupal 7

batbug написал:

Что он делает: производит блок, в котором отображаются коды для быстрой вставки текущего изображения на другие сайты, блоги, форумы и.т.д.

При установке модуля появляется блок “Image Insert Code”

На странице настроек модуля (admin/config/user-interface/image-insert-codes) можно выбрать:

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

Для вставки в шаблон ноды, есть переменная $codes

Модуль написал чисто из интереса, интересует, на сколько правильный код и вообще подход.

UPD:
По рекомендации goodboy

Переменную $codes заменил на $image_insert_codes В image_insert_codes.admin.inc использовал system_settings_form($form); для сохранения формы

По рекомендации adubovskoy разместил на github’е

image_insert_codes-7.x-.zip3.49 КБ Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Ключевые слова:  модуль image




email





facebook





linkedin





twitter





google+





pinterest
2 Спасибо

Источник: http://www.drupal.ru/node/130209

И снова про версию для слабовидящих

Всем привет!

Кто разрабатывал сайты для государственных, муниципальных, образовательных учреждений знает, что у сайта должна быть обязательно “версия для слабовидящих”. Хочу предложить своё решение этого вопроса.

Думая над логикой модуля, чтобы всё не усложнять я пришел к следующему решению: проще всего сделать “версию для слабовидящих” отдельной темой оформления и переключать темы на лету. Необходимо установить и подготовить тему оформления, которая будет “для слабовидящих”. В admin/appearance/settings выбрать эту тему.

Модуль после включения создаёт 2 уже готовых блока: “версия для слабовидящих” и “обычная версия”. Первый нужно разместить на обычной теме оформления, а второй соответственно на “версии для слабовидящих”. Вот собственно и всё, с помощью этих двух блоков мы переключаем тему оформления. Так же в новой версии реализованы требования, которые правительство рассылало по муниципальным образованиям: изменения размеров шрифта, кернинг, фон и настройки изображений.

Если вы не хотите использовать эти блоки, то для переключения темы можно использовать любые объекты, главное назначить им id “vi-block” и “vi-normal-block” соответственно. Так же с помощью CSS можно изменить и изображения на кнопках в блоках.

У модуля один большой недостаток: для переключения темы “на лету” должно быть отключено кэширование. Кто может предложить решение как заставить темы меняться при включенном кэше – прошу в комментарии.

Сам модуль25.88 КБ Тема оформления для ленивых57.24 КБ Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Ключевые слова:  версия для слабовидящих




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Программирование 1 Спасибо

Источник: http://www.drupal.ru/node/130032

Видео: 20 фактов о мощи Drupal

О Drupal ходит много споров. А споры ходят вокруг любых великих творений. Взять хотя бы противостояние Mac OS, Windows и Linux.
Все эти системы хороши, но каждая для своих целей.

ГК i20 совместно с НП “ДрупалСиб” решили подготовить ответ для сомневающихся в могуществе Drupal и сняли фильм, в котором подробно объяснили, чем, почему и для кого Drupal подходит.

Фильм о Drupal представил Александр Воинов, президент НП “ДрупалСиб” в своем докладе на DrupalCamp Краснодар 2016. Видео нашло отклик в душах участников российского Drupal-сообщества и набрало множество лайков и репостов в первый же час своего присутствия в сети!

И это неудивительно, потому что видео отвечает на такие знакомые сообществу вопросы:
- Почему Drupal?
- А почему не другая CMS?
- Почему не чистый PHP?
- Для моего проекта точно подойдет?

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

Видео в студию:

Версия Drupal:  Drupal 7.* Ключевые слова:  DrupalCamp интернет-рынок drupal market DrupalCamp Krasnodar




email





facebook





linkedin





twitter





google+





pinterest
11 Спасибо

Источник: http://www.drupal.ru/node/129990

Обновление Drupal.ru от 28.08.2016


В обновление вошло:

Переход на php7 Обновление до Drupal 7.50

Идет подготовка к уменьшению входного порога для разработки Drupal.ru.

Если вы обнаружили проблемы после обновления, отпишите в этот пост

Версия Drupal:  Drupal 7.*




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Сайт и проект Drupal.ru 5 Спасибо

Источник: http://www.drupal.ru/node/129858

Ура, открыта регистрация на DrupalCafe #18!

Долгожданное DrupalCafe #18 состоится 23-го июля с 12:00 до 16:00 по адресу: Новосибирск, Красина, 54, офис 602.

В этот раз мы приготовили для вас целых 6 докладов, половина из которых затрагивает самую животрепещущую тему мира Drupal на сегодняшний день – Drupal 8! Поделиться опытом работы с ним к нам приедут гости из Омска!

В общем, Кафе обещает быть очень интересным, мы сами уже ждем с нетерпением!

Если вас тоже мучает жажда новых знаний, регистрируйтесь по ссылке: https://goo.gl/xollyL

В программе:

1) Кузьменко Антон – WebForm vs EntityForm. Кто кого?

2) Жамбалова Намжилма – Реализация “гибких” списков

3) Крайнюк Михаил – Возводим динамическую таблицу. No Views, no problem

*Традиционное Drupal-чаепитие*

4) Лебедев Антон, Абраменко Иван – Contrib to Drupal 8 modules

5) Исай Руслан – Идеология Entity от Drupal 6 к Drupal 8

6) Абраменко Иван – Migrate Drupal 6 to Drupal 8

Подробности по мероприятию можно узнать

- по телефону: +7 (923) 148-55-34;

- по почте: hello@drupalsib.ru

Источник Инвент

Тип материала:  Предлагаю решение




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  DrupalSib 2 Спасибо

Источник: http://www.drupal.ru/node/129302

Множественные уязвимости в contib модулях Drupal 7.x

Команда безопасности выпустила уведомление DRUPAL-PSA-2016-001.

Это предупреждение о том, что завтра в 16:00 по UTC времени (19:00 по Московсокму времени) будет уведомление о уязвимостях вызова PHP кода в contrib модулях.

Судя по тому, что модули, на которые намекают, установлены на 1,000 до 10,000 сайтах, модули не очень популярные.

Рекомендуем завтра по получению уведомления проверить свои сайты и если необходимо – обновится.

Версия Drupal:  Drupal 7.*




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Безопасность 4 Спасибо

Источник: http://www.drupal.ru/node/129288

Создание своей темы в backdrop cms

​​​​Темы в backdrop создаются почти точно так же как и в drupal 7, за исключением некоторых приятных моментов.

Разработчики backdrop создали модуль layout, который генерирует шаблоны страниц и размножать шаблоны page.tpl.php в папке templates темы для кастомизации не обязательно.

Вот страница макетов

Как видите макеты предоставлены на любой вкус. Выбирайте любой и в путь.

Стоп!

А где же тема?

Создаём тему

Назовём её light

Создаём директорию light

В директории light создаём файл light.info следующего содержания

name = Light
description = The started theme for Backdrop CMS.
version = BACKDROP_VERSION
type = theme
backdrop = 1.x
stylesheets[all][] = css/style.css
scripts[] = js/script.js

project = backdrop
version = 1
timestamp = 100000000

Почти как в drupal 7 ))

Ой, вы не увидели регионы как это было  в семерке.

Здесь это в принципе и не нужно.

Выше было упоминание за layout. Это его заслуга.

Далее как обычно в семерке вы создаете папки css, js, images, templates

В папке css располагаете файлы css

В папке js файлы js

В папке templates шаблоны.

Вам могут пригодиться шаблоны node.tpl.php и comment.tpl.php. Можно скопировать их из ядра backdrop.

Если нужно различное html отображение для тизера и полной ноды, то в node.tpl.php можно прописать проверку

<?php if($teaser): ?>

разметка тизера ноды

<?php endif; ?>

 <?php if(!$teaser): ?>

разметка полной ноды

<?php endif; ?>

Добавление кастомных блоков в регионы в backdrop реализованы немного иначе. Страницы отображения блоков здесь нет. Они отображаются в настройках layout

Вы расставляете блоки в макете как вам нужно, добавляете нужную html разметку в макете через добавление custom block и останется только прописать стили css.

Благодаря плагину в браузере firefox firebug

писать стили будет удобно.

Вы можете пойти другим путём и выбрать одну из тем, предоставляемых backdrop и изменять её

Но со своей темой будет всё же проще.

Всё это поможет реализовать вам свой уникальный дизайн ваших веб-страничек, созданных с помощью программного обеспечения Backdrop CMS

Оригинал заметки http://mihail.space/post/sozdanie-temy-v-backdrop-cms

UPD:
Шаблон нужного layout можно найти по пути
/core/layouts/
К примеру, в данный момент я использую шаблон Moscone

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

Для того, чтобы перенести блок html в нужное мне место я скопировал шаблон в свою тему, который можно найти по адресу

/core/layouts/moscone

Таким образом файл шаблона layout–moscone.tpl.php оказался в папке templates моей темы.
Это точно такой же файл как page.tpl.php в Drupal 7, поэтому те, кто перешел на backdrop cms с семёрки не испытают никаких неудобств в правке шаблона

backdrop_1.jpg202.16 КБ Версия Drupal:  Backdrop 1.4.x




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Дизайн и вёрстка 4 Спасибо

Источник: http://www.drupal.ru/node/129259

Вышел Drupal 7.50 (следующий после 7.44) и Drupal 8.1.3

7 июля прошло обновление Drupal 7 на 7.50
а 15 Июня были обновления Drupal 7.44 и Drupal 8.1.3

Обновления Drupal 7.44 и Drupal 8.1.3 были обновлениями по безопасности – смотрите https://www.drupal.org/SA-CORE-2016-002

Теперь немного подробнее про Drupal 7.50
Самое заметное – это прыжок с 7.44 на 7.50.
Говорят, это сделано, чтоб показать важность и обьем изменений сделаных в релизе.

Коротко о новом:
- administer fields права доступа, для управления полями. Теперь не нужно быть администратором для управления полями.
- зашита от clickjacking. По сути защита от того, чтоб ваш сайт не мог работать в iframe на другом домене.
- поддержка emojis. Теперь можно вставлять и сохранять emojis.
- PHP 7 совместимость. Но я бы хотел предупредить что большая часть contrib модулей и тем для Drupal 7 или будут работать с ошибками или порождать WSOD. Если решитесь пробовать, не забудьте про бекапы. Они пригодятся.
- Улучшения производительности в случае если Drupal пробует найти файл которого больше нет в системе.
- изменения в robots.txt для разрешения поисковикам индексировать css и картинки.

Детальнее по релизу читайте в CHANGELOG

Недавно я писал про новых разработчиков: Fabian Franz (Fabianx) и Stefan Ruijsenaars (stefan.r)

Как видно, выбор был сделан верным и ребята стараются.
Fabian Franz (Fabianx) проявил интерес к недавним изменениям в BackdropCMS а именно ускорения работы тестов ядра.

В issue 2759197 идет портирование моего патча 1366 – который позволил в 2 раза ускорить тесты ядра BackdropCMS.

К сожалению в релиз 7.50 изменения не вошли но ожидается что они будут в 7.60.

Версия Drupal:  Drupal 7.*




email





facebook





linkedin





twitter





google+





pinterest
4 Спасибо

Источник: http://www.drupal.ru/node/129258

Новые со-разработчики ядра Drupal 7 – Fabianx и stefan.r

Сегодня, 23 Июня, Дрис обьявил о том, что 2 разработчика: Fabian Franz (Fabianx) и Stefan Ruijsenaars (stefan.r) были назначены ответственными за поддержку Drupal 7.

Ссылка на оригинал: https://groups.drupal.org/node/512271

Вольный перевод:

Ранее в этом году, я объявил, что ищу дополнительных разработчиков Drupal 7 для того, чтобы помочь неутомимому David Rothstein .

Большое спасибо всем, кто откликнулся на призыв: были старательные и квалифицированные заявки!

Я выбрал Fabian Franz (Fabianx) и Stefan Ruijsenaars (stefan.r) , которых David тоже предлагал.

Недавно я попросил их потвердить, своё согласие стать co-maintainers Drupal 7 , и я рад Вам сообщить, что они оба восторженно согласились!
Фабиан будет сопровождать Framework Manager Drupal 7, а Стефан будет менеджером версии Drupal 7, а так же Дэвид будет продолжать играть свою роль в курировании Framework Manager.

Фабиан у нас – из Германии, он старший инженер производства и технический руководитель на Tag1 Consulting.
Он всегда готов к вызовам, и является частью сообщества Drupal уже более 6 лет. Он уже был ответственнен за подсистему темизации, и он сделал инновационную работу с точки зрения масштабируемости и высокой производительности для Drupal (BigPipe!). Он вообще увлечён Open Source, с момента рождения GNU, которая, так случилось, была основана в день его рождения.

Стефан родом из Нидерландов, он фрилансер, и в настоящее время работает с бельгийскими правительственными клиентами. Он является частью сообщества Drupal с момента своего первого Drupalcon в Szeged в 2008 году, а недавно стал членом команды безопасности Drupal.

И Фабиан и Стефан имеют богатый опыт разработки многочисленных дополнительных модулей, и, что важно – ядра Drupal, особенно важна их роль для решения последних критических ошибок, перед публикацией Drupal 8.

Пожалуйста, поприветствуем Fabian Franz (Fabianx) и Stefan Ruijsenaars (stefan.r) в рядах основных коммиттеров команды Drupal 7! (И если вам случится быть в Drupal Developer Days Милан, вы можете пожать руку Стефана лично! )

Dries Buytaert

PS: спасибо   andypost и  Director-cemetery за подготовку материала к публикации.






email





facebook





linkedin





twitter





google+





pinterest
2 Спасибо

Источник: http://www.drupal.ru/node/129112

Очередная уязвимость Друпал

В ядре Друпала обнаружили очередную уязвимость – https://www.drupal.org/SA-CORE-2016-002 – любопытно, что она есть как в семерке, так и в восьмерке (я-то думал, что восьмерку переписали полностью), обновляйте в общем:)






email





facebook





linkedin





twitter





google+





pinterest
2 Спасибо

Источник: http://www.drupal.ru/node/129036

Видеоподкасты Drupalim и гости

Всем привет! Мы с ребятами записываем в прямых эфирах мысли вслух. И эти мысли порой бывают интересные. Многие из вас уже видели наши выпуски здесь https://www.youtube.com/user/DrupalBY/videos или здесь http://podcasts.dru.io/.

И сегодня я пришёл не просто поприветствовать вас и похвалиться каналом. В следующий четверг в 17:30 (или около того) мы планируем следующий эфир. Это очень важно для нас выходить регулярно. Но даже не это главная новость. Новость в том, что мы приглашаем каждый раз Друпалера (желательно со стажем и с большой буквы). И 16 июня с нами будет GOR, Gor Martsen.

Гор обещал рассказать про его работу над ядром и новыми фичами. А так же пообещал мне ответить на многие вопросы, которые накопились к нему от друпал-комьюнити и от меня лично. И именно по этому я сегодня и здесь.

Если у вас есть вопросы к Егору, то задавайте их здесь в каментах или сообщите их мне лично в скайп(ptchom). Если вы хотите побеседовать с нами в прямом эфире, то велкам в личку скайпа (ptchom). Если у вас есть замечания, предложения и умные мысли, а я уверен, что есть, то всё недовольство и довольство принимается здесь, в личке, в каментах к видику и просто в любом друпал-чате.

Спасибо!

1.jpg523.69 КБ Ключевые слова:  подкасты




email





facebook





linkedin





twitter





google+





pinterest
7 Спасибо

Источник: http://www.drupal.ru/node/128962

Интеграция Drupal с amoCRM. Часть 2

Друзья, всем привет!

Сегодня расскажем о втором этапе нашего сотрудничества с amoCRM.

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

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

Наша цель – подружить маркетинг и продажи и помочь выстроить полноценную воронку от первого клика клиента до сделки. Каждый предприниматель должен знать стоимость лидов, затраты на привлечение нового клиента и самые эффективные источники клиентов.

Кратко пройдемся по функциональности модуля Widget, который состоит из 5 подмодулей:

1. Страница (pages) для статического отображения контента. Позволяет создавать виджеты на базе Drupal.
2. Trello. Интеграция amoCRM и трелло через Drupal. Позволяет создавать и отслеживать изменения на досках и в карточках.
3. Slack. Можно создать канал для сделки, где будут обсуждаться все актуальные вопросы по заключению контракта. Тут также можно присваивать сообщениям статусы, которые настраиваются в Drupal.
4. С 2GIS целых 2 вида интеграций! 1. Делает поиск в базе 2GIS по телефону или e-mail и подгружает информацию по клиенту в карточку. 2. Формирует список компаний по ключевым словами в Drupal и создает контакты и задачи в amoCRM для найденных компаний.
Для использования этих модулей необходимо приобрести ключ API справочных данных 2ГИС.
5. Mail. Позволяет отправлять письмо прямо из карточки контакта, сделки, компании. Планируется добавить возможность подставлять шаблоны типовых писем.

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

К тому же уже давно в открытом доступе ряд других модулей:

amoCRM amoCRM Form amoCRM API amoCRM Widget amoCRM Contact

—-
Спасибо за внимание и до новых встреч! Напоследок вопрос: а какие инструменты автоматизации у себя в компании используете вы? Отписываетесь в комментариях, будет интересно обсудить
Связаться с нами можно по почте hello@drupaljedi.com или через сайт.

Первая часть про интеграцию Drupal и amoCRM.

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Ключевые слова:  amoCRM CRM виджеты Модули и темы:  amoCRM amoCRM API amoCRM Form




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Разработка модулей 4 Спасибо

Источник: http://www.drupal.ru/node/128146

ubercart.ru требуется участие

Разработчики и компании что занимаются созданием магазинов на основе ubercart.ru


Требуется ваше участие и взаимная организация по запуску сайта ubercart.ru

Ваши обсуждения и предложения жду тут: https://github.com/DrupalRu/ubercart.ru/issues

Чат для общения и самоорганизации тут: http://gitter.im/DrupalRu/ubercart.ru

Начальное обсуждение можно начать в этой ноде.

Из того, что я вижу что надо будет сделать на сайте:

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




email





facebook





linkedin





twitter





google+





pinterest
1 Спасибо

Источник: http://www.drupal.ru/node/127404

Drupal 8. Entity, мы с тобой одной крови

– Все объекты Drupal 8 – Entity.
– Но ведь материалы, пользователи, таксономия, комментарии – они же уже были Entity еще в 7-ке.
– Все – значит все.

Как так?

Поля, блоки, меню, стили изображений, роли, вьюхи, фиды, языки, форматы… Стоп! Как это всё можно одной гребёнкой, ведь это совсем разные вещи. А дело в том, что Entity теперь тоже не так прост. Т.е. не так конкретен. Т.е. настолько абстрактен (а потому и вездесущ), что теперь еще сложнее сказать, что это. Но Барт Финстра (xano), который вроде как в этом понимает, говорит следующее:
Entites are self-contained units of complex data
Сущности – автономные (независимые) составляющие данных
Сущности – сути вещей

Ближе к телу

Entity делится на две категории: Контент и Конфигурацию (19 стр.). А описание возможностей идет через интерфейсы, которых море. Вот, например, как определяется нода (отсюда):

А вот общая структура, где эту ноду еще попробуй найди (нащелкал в PhpStorm Diagrams)

Главные выводы:

теперь не во всякий Entity можно пихать поля; обычно контент хранится в базе, а конфиги в файлах; если делаешь контент, то оберегай его от конфигов, их реально больше; без кода грустно. У вас есть Entity? Дайте два

Примеров реализации собственных Entity валом. Даже в  Examples есть content_entity_example и config_entity_example. По аналогии сделаем еще один, который будет такой же бесполезный, но короче. Встречайте ego.


<?php

namespace Drupal\ego\Entity;

use Drupal\Core\Entity\ContentEntityBase;
use Drupal\Core\Entity\EntityTypeInterface;
use Drupal\Core\Field\BaseFieldDefinition;

/**
 * Defines the EgoContent entity.
 *
 * @ContentEntityType(
 * id = "ego_content",
 * label = @Translation("Ego Content entity"),
 * base_table = "ego",
 * entity_keys = {
 * "id" = "id",
 * "label" = "name",
 * "uuid" = "uuid"
 * },
 * )
 */
class EgoContent extends ContentEntityBase {

  public static function baseFieldDefinitions(EntityTypeInterface $entity_type) {

    $fields['id'] = BaseFieldDefinition::create('integer')
      ->setLabel(t('ID'))
      ->setDescription(t('Ego ID'));
    $fields['uuid'] = BaseFieldDefinition::create('uuid')
      ->setLabel(t('UUID'))
      ->setDescription(t('Ego UUID'));
    $fields['name'] = BaseFieldDefinition::create('string')
      ->setLabel(t('Name'))
      ->setDescription(t('Ego Name'))
      ->setSettings(array(
        'max_length' => 100,
      ));

    return $fields;
  }
}?> CRUD макдак

Распиаренный CRUD проверим с помощью не менее распиаренной системы тестирования /admin/config/development/testing
<?php

<?php
namespace Drupal\ego\Tests\Entity;

use Drupal\ego\Entity\EgoContent;
use Drupal\examples\Tests\ExamplesTestBase;

/**
 * Tests of the Ego Content
 *
 * @group ego
 */
class EgoContentTest extends ExamplesTestBase{
  public static $modules = array('ego', 'block');

  public function testEgoContent() {

    $storage = \Drupal::entityTypeManager()->getStorage('ego_content');

    // C - create
    $ego = EgoContent::create();
    $this->assertNull($ego->id());
    $this->assertTrue($ego->isNew());
    $ego->save();
    $this->assertNotNull($ego->id());
    $this->assertFalse($ego->isNew());
    $ego2 = $storage->create(array('name'=>"GOD"));
    $this->assertEqual($ego2->name->value, "GOD");
    $ego2->save();

    // R - read
    $id = $ego->id();
    $ego3 = $storage->load($id);
    $ego4 = EgoContent::load($id);
    $this->assertEqual($ego->uuid->value, $ego3->uuid->value);
    $this->assertEqual($ego->uuid->value, $ego4->uuid->value);

    // U - update
    $ego->name = "Lalala";
    $this->assertEqual($ego->name->value, "Lalala");
    $ego->save();

    // D - delete
    $id = $ego->id();
    $id2 = $ego2->id();
    $ids = array($id, $id2);
    $ego->delete();
    $storage->delete(array($ego2));
    $result = $storage->loadMultiple($ids);
    $this->assertTrue(empty($result));

  }
}?>

Хотя, 30 с. на выполнение многовато, но в зеленый красит исправно.

Да, всё примитивно, но это не обучалка по созданию крутых Entity, а развлекательная статья. И дай бог, чтобы ты её и так доскролил. А что поинтересней можно глянуть здесь:

Configuration Entities in Drupal 8 (upchuk); Drupal 8: Программное создание сущностей (Niklan); Entites in Drupal 8 (10-11 стр. показана прикрутка Formatter, Widget, UI Form & View); Entity API 8.0 (fago); Creating a Content Entity Type in Drupal 8 with DRUPAL CONSOLE (Kwok Wai); Drupal.org (Links, Content, Config); В модулях друпала пройтись по папкам Entity. Поля

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

<?php
// Drupal 7
$node->body[$langcode][0]['value'];

// Drupal 8
$node->body->value;
$node->tags[2]->target_id;
$ru_node = $node->getTranslation('ru');
$ru_node->language() == 'ru';
$ru_node->title->value = "Прывет!";
$node->field_link->url;
$node->field->getPropertyDefinitions();
$node->hasField('super_field');
$entity = $node->field_name->getEntity();
$node->body->getType();?>

Клёво! Что? В 7-ке есть Entity Metadata Wrapper, который тоже так умеет? Ладно, но вот сейчас будет точно бомба.

EntityFieldQuery (7) vs (8) EntityQuery

Задача: среди опубликованных материалов product и movies выбрать те, у которых в body есть слово discount, и отсортировать по убыванию.

Drupal 7:

<?php
$query = new EntityFieldQuery();
$query 
  ->entityCondition('entity_type', 'node')
  ->entityCondition('bundle', array('product', 'movies')) 
  ->propertyCondition('status', 1)
  ->fieldCondition('body', 'value', 'discount', 'CONTAINS')
  ->propertyOrderBy('created', 'DESC'); 

$result = $query->execute(); 
if (!empty($result['node'])) { 
  $nodes = node_load_multiple(array_keys($result['node']));
}
?>

Drupal 8:

<?php
$storage = \Drupal::entityTypeManager()->getStorage('node');
$query = $storage->getQuery();
$query
  ->Condition('type', array('product', 'movies'))
  ->Condition('status', 1)
  ->Condition('body', 'value', 'discount', 'CONTAINS')
  ->OrderBy('created', 'DESC');

$result = $query->execute();
$nodes = $storage->loadMultiple($result);
?>

Один Condition работает за троих (field, property, entity Condition)?! В чем секрет его успеха? Просто у него хороший менеджер. А работает он только за одного (угадай кого).
Еще пример conditions:

<?php
$ids = \Drupal::entityQuery('node')
          ->condition('title', 'About', 'STARTS_WITH')
          ->condition('created', 637200000, '>')
          ->execute();
?>

Пример AND и OR группировки условий:

<?php
$query = \Drupal::entityQuery('node')
  ->condition('status', 1)
  ->condition('changed', REQUEST_TIME, '<');

$group = $query->orConditionGroup()
  ->condition('title', 'cat', 'CONTAINS')
  ->condition('field_tags.entity.name', 'cats');

$nids = $query->condition($group)->execute();?>

Пример агрегации:

<?php
$query = Drupal::entityQueryAggregate('node');
$result = $query
  ->groupBy('type')
  ->aggregate('nid', 'COUNT')
  ->execute();?>

Пример выборки из блоков:

<?php
$ids = \Drupal::entityQuery('block')
  ->condition('plugin', 'aggregator_feed_block')
  ->condition('settings.feed', array_keys($entities))
  ->execute();
?> Эй, где мои field_tables?!

Теперь филды еще и лежат не сами по себе, а исключительно с типом entity для которого созданы. Поэтому поля, созданные в одних entity уже не получится использовать в других (но между bundle-ами одного entity пока можно). По этому поводу краткий перевод статьи Франческо Плацело (plach). Только перевод этой статьи изначально и предполагался, но потом меня понесло

***********************************

Ну да, теперь поля прикреплены типо к entity. Благодаря этому не будет лишней суеты, когда в запросе есть условие на несколько полей. А то, что теперь их нельзя использовать для разных entity, как по мне, даже хорошо. Вечно накалывался, когда пользовался этим.
Более того, Entity сейчас вообще хранятся как попало. Что-то в базе, что-то в файлах, что-то опять в базе, но сериализованно в blob. И это сделано специально для того, чтобы все пользовались Entity Query API. Эта классная штука, учитывающая кучу нюансов, в том числе кэширование и, главное, реализацию хранилища. Например, если это SQL, то entity reference связи превратятся в JOIN-ы. Короче, только отсутствие у хранилища реализации Entity Query API спасет вас от жесткого баттхерта, если вы сделаете запрос напрямую. И то, при этом нужно ограничиться только получением id, а остальное уже через специальные методы загрузки.

Ладно, в общем-то я хотел рассказать о схеме хранения.

Везде расставлены слухачи событий изменения, добавления или удаления полей к entity. Так что, если при этом не задеваются никакие данные, процесс обновления сработает быстро и четко (иначе уж сами разруливайте).
Вот 4 основных модели организации таблиц:

1. Простой entity:
| entity_id | uuid | bundle_name | label | … |

2. С поддержкой мультиязычности (Translatable):

| entity_id | uuid | bundle_name | langcode |
| entity_id | bundle_name | langcode | default_langcode | label | … |

3. С поддержкой редакций (Revisionable):

| entity_id | revision_id | uuid | bundle_name | label | … |
| entity_id | revision_id | label | revision_timestamp | revision_uid | revision_log | … |

4. С поддержкой мультиязычности и редакций:

| entity_id | revision_id | uuid | bundle_name | langcode |
| entity_id | revision_id | bundle_name | langcode | default_langcode | label | … |
| entity_id | revision_id | langcode | revision_timestamp | revision_uid | revision_log |
| entity_id | revision_id | langcode | default_langcode | label | … |

К чему я все это вам втюхиваю? А к тому, что теперь можно легко расширять таблицы. Вот пример из жизни:
Нужно выводить всех пользователей, которые хоть что-нибудь опубликовали, при этом указывать количество публикаций и заголовок последней для каждого из них. Ну, типо трекера активности.

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

Типичное решение – денормализация данных. Т.е. добавим к таблице User еще два поля, для хранения количества записей и заголовка последней из них.

<?php
function active_users_entity_base_field_info(EntityTypeInterface $entity_type) {
  $fields = [];
  if ($entity_type->id() == 'user') {
    $fields['last_created_node'] = BaseFieldDefinition::create('entity_reference')
      ->setLabel('Last created node')
      ->setRevisionable(TRUE)
      ->setSetting('target_type', 'node')
      ->setSetting('handler', 'default');
    $fields['node_count'] = BaseFieldDefinition::create('integer')
      ->setLabel('Number of created nodes')
      ->setRevisionable(TRUE)
      ->setDefaultValue(0);
  }
  return $fields;
}
?>

Поддержка редакций указана из-за того, что она есть у User, а значит и все её поля должны это делать. А вот если её не будет, то и флаг редакции поля просто проигнорируется.

Модуль уже можно подключать. Но созданные поля сами себя не заполнят, поэтому добавим специально обученный сервис:

<?php
public function onNodeCreated(NodeInterface $node) {
  $user = $node->getOwner();
  $user->last_created_node = $node;
  $user->node_count = $this->getNodeCount($user);
  $user->save();
}

protected function getNodeCount(UserInterface $user) {
  $result = $this->nodeStorage->getAggregateQuery()
    ->aggregate('nid', 'COUNT')
    ->condition('uid', $user->id())
    ->execute();

  return $result[0]['nid_count'];
}

public function onNodeDeleted(NodeInterface $node) {
  $user = $node->getOwner();
  // ох уж этот итальянец, все предусмотрел!
  if ($user->last_created_node->target_id == $node->id()) {
    $user->last_created_node = $this->getLastCreatedNode($user);
  }
  $user->node_count = $this->getNodeCount($user);
  $user->save();
}

protected function getLastCreatedNode(UserInterface $user) {
  $result = $this->nodeStorage->getQuery()
    ->condition('uid', $user->id())
    ->sort('created', 'DESC')
    ->range(0, 1)
    ->execute();

  return reset($result);
}
?>

Отличненько, теперь еще подкинем метод получения id активных пользователей.

<?php
public function getActiveUsers() {
  $ids = $this->userStorage->getQuery()
    ->condition('status', 1)
    ->condition('node_count', 0, '>')
    ->condition('last_created_node.entity.status', 1)
    ->sort('login', 'DESC')
    ->execute();

  return User::loadMultiple($ids);
}?>

Заметили, как Query API разобрался с зависимостями между таблицами User и Node и даже не вспотел?

Осталось только воспользоваться всем этим. У меня в друпал-кругах уже определенная репутация, поэтому пришлось делать через контроллер:

<?php
public function view() {
  $rows = [];
  foreach ($this->manager->getActiveUsers() as $user) {
    $rows[]['data'] = [
      String::checkPlain($user->label()),
      intval($user->node_count->value),
      String::checkPlain($user->last_created_node->entity->label()),
    ];
  }

  return [
    '#theme' => 'table',
    '#header' => [$this->t('User'), $this->t('Node count'), $this->t('Last created node')],
    '#rows' => $rows,
  ];
}
?> Какой смысл в друпале без общих филдов, я ухожу

Постой (я с тобой)! Если использование общего поля для разных entity является принципиальным, то можно это устроить с помощью трюка с псевдо-полями:

<?php
use Drupal\node\Entity\NodeType;
use \Drupal\Core\Entity\EntityInterface;
use \Drupal\Core\Entity\Display\EntityViewDisplayInterface;

/**
 * Implements hook_entity_extra_field_info().
 */
function my_module_entity_extra_field_info() {
  $extra = array();

  foreach (NodeType::loadMultiple() as $bundle) {
    $extra['node'][$bundle->Id()]['display']['my_own_pseudo_field'] = array(
      'label' => t('My own field'),
      'description' => t('This is my own pseudo-field'),
      'weight' => 100,
      'visible' => TRUE,
    );
  }

  return $extra;
}

/**
 * Implements hook_ENTITY_TYPE_view().
 */
function my_module_node_view(array &$build, EntityInterface $entity, EntityViewDisplayInterface $display, $view_mode, $langcode) {
  if ($display->getComponent('my_own_pseudo_field')) {
    $build['my_own_pseudo_field'] = [
      '#type' => 'markup',
      '#markup' => 'This is my custom content',
    ];
  }
}?> drupal8_entity_poster.jpg169.23 КБ drupal8_schema_node.png76 КБ drupal8_entity_schema.png156.88 КБ active-users-list-small.png36.4 КБ Версия Drupal:  Drupal 8.* Ключевые слова:  Entity




email





facebook





linkedin





twitter





google+





pinterest
8 Спасибо

Источник: http://www.drupal.ru/node/127363

Импорт данных в словарь таксономии из xls файла. Модуль для Drupal 7.

Иногда возникает потребность в импорте большого объема данных на сайт. Как раз для этих целей был создан модуль по импорту терминов таксономии из xls файла для Drupal 7.

Источник – http://lib365.ru/drupal-7/16

Перейдем к запуску и настройке модуля.

Скачиваем архив и распаковываем в /sites/all/modules. Библиотеку phpexcel (в корне модуля) перемещаем в sites/all/libraries. Включаем модуль через админку сайта и настраиваем права доступа. Переходим на страницу импорта данных /admin/config/services/tix.

Выбираем словарь таксономии и прикрепляем файл – он должен быть в формате .xls (Excel 2003). Структура файла должна быть следующая:

Первая строка (id, tag, count, desc) – это название наших столбцов, ниже – данные. Можете посмотреть пример файла в корне модуля (file-import-example.xls).

Если все правильно сделаем, должно получиться следующее:

Заметим, что если поле в термине таксономии обязательно, то это автоматически отображается на данной форме. Также, мы можем не указывать поле для импорта выбрав опцию “- Нет -”.
Если поставить галочку напротив “Очистить словарь”, то все термины данного словаря будут удалены, а потом выполнится импорт, который учитывает имеющиеся термины.
Проще говоря, если у нас уже есть термин, наличие которого определяется по имени, то мы выполняем его обновление. Если термина с таким именем не существует – добавляем его.

Выполняем импорт:

После импорта нас редиректит на страницу списка терминов для того словаря, по которому он выполнялся:

Вот, собственно и все. Предложения и критика приветствуются. Надеюсь Вам поможет данный модуль.

tix.zip875.1 КБ Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Ключевые слова:  import Catalog taxonomy xls




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Программирование 5 Спасибо

Источник: http://www.drupal.ru/node/127316

Уведомление о новых постах через Telegram Channel на Drupal 7

Подписка по почте и rss – это неплохие вещи, но моему извращенному вкусу захотелось, чтобы извещение о новых постах приходили в групповой чат телеграмма.
Для этого был написан модуль, который использует telegram bot api для отправки новых уведомлений в наш чат. Модуль получился довольно простой. Буду рад адекватным предложениям по допилу

Ссылка на источник – http://lib365.ru/drupal-7/3

1. Создаем Telegram Bot

Прежде всего нам требуется создать Telegram Bot. Можно почитать как это делается на официальном сайте или посмотреть статью на русском языке от Blizzy. Вкратце опишу процесс регистрации нового бота:

Вводим в поиске Telegram @BotFather нажимаем кнопку “Start” Выполняем команду /newbot и задаем имя бота Вводим и отправляем наш “username” (обязательно в конце должно присутствовать слово “bot”) Если все выполнено правильно, Telegram вернет “token to access”. Запомните его, он нам пригодится.

2. Создаем Telegram Chat

Переходим в desctop версию Telegram и создаем новый channel:

Заполняем данные:

Переходим в настройки чата и добавляем нашего созданного бота в админы:

На этом подготовительные процедуры закончены. Переходим непосредственно к модулю.

3. Telegram Chat модуль для Drupal 7
Модуль состоит из таких файлов:

telegram_item.info – описание
telegram_item.install – очистка таблицы от переменных модуля
telegram_item.module – основная логика работы
telegram_item_config.inc – страница администрирования
telegram_item.forms.inc – дополнительные элементы формы
C telegram_item.info, telegram_item.install, telegram_item_config.inc в принципе все понятно и это банальные вещи. (Если все-же возникли вопросы – пишите).

Разберем telegram_item.module:

<?php/**
 * Implements hook_module_implements_alter().
 * Перемещаем hook_insert нашего модуля в самый низ (после модуля pathauto)
 * Это нужно, чтобы получить alias для url ноды через модуль pathauto
 */
function telegram_item_module_implements_alter(&$implementations, $hook) {
  $module = basename(__FILE__, '.module');
  if(!empty($implementations[$module])){
    $group = $implementations[$module];
    unset($implementations[$module]);
    $implementations[$module] = $group;
  }
}

/**
 * Implements hook_form_FORM_ID_alter().
 * Присоединяем наши элементы формы к форме ноды
 */
function telegram_item_form_node_form_alter(&$form, &$form_state) {
  if (empty($form['#node']->type)) {
    return;
  }
  // проверяем, имеет ли пользователь право на публикацию в Telegram
  $user_access = user_access('telegram send message');

  if ($user_access) {
    // дополняем форму добавления/редактирования ноды
    form_load_include($form_state, 'forms.inc', 'telegram_item');
    __telegram_item_process_node_form($form);
  }
}

/**
 * Implements hook_node_insert().
 */
function telegram_item_node_insert($node) {
  __telegram_item_process_node($node);
}

/**
 * Implements hook_node_update().
 */
function telegram_item_node_update($node) {
  __telegram_item_process_node($node);
}

/**
 * Функция отправки сообщения в Telegram channel
 */
function __telegram_item_process_node($node) {
  $apikey = variable_get('telegram_item_apikey');
  $channel = variable_get('telegram_item_channel_name');
  $user_access = user_access('telegram send message');
  
  // проверяем, стоит ли отметка публикации ноды в Telegram
  $post_node = isset($node->telegram_item_post_this_node) ? $node->telegram_item_post_this_node : FALSE;

  if ($apikey && $channel && $user_access && $post_node) {
    global $base_url;
    // добавляем заголовок
    $message = $node->title . "\r\n";

    // добавляем url ноды
    $message .= $base_url . '/' . drupal_get_path_alias('node/' . $node->nid);

    $message = urlencode($message);
    __telegram_item_send_message($message, $apikey, $channel);
  }
}

function __telegram_item_send_message($message, $apikey, $channel) {
  // составляем запрос по всем правилам Telegram api
  $query = "https://api.telegram.org/bot" . $apikey .
    "/sendMessage?disable_web_page_preview=true&chat_id=" . $channel .
    "&text=" . $message;

  // выполняем наш запрос через curl
  $curl = curl_init();
  curl_setopt($curl, CURLOPT_URL, $query);
  curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);
  curl_setopt($curl, CURLOPT_HEADER, 0);
  curl_exec($curl);
  curl_close($curl);
}?>

Как видите, все довольно банально. Самый смак в функции “__telegram_item_send_message($message, $apikey, $channel)”.
Рассмотрим файл telegram_item.forms.inc, который дополняет нашу форму добавления/редактирования ноды:

<?php

/**
 * Добавляем чекбокс, который будет указывать стоит ли отсылать сообщение
 */
function __telegram_item_process_node_form(&$form) {
  // добавляем новый fieldset и задаем ему вес
  $form['telegram_item'] = array(
    '#type'   => 'fieldset',
    '#title'  => t('Telegram item'),
    '#group'  => 'additional_settings',
    '#weight' => -11,
  );

  $form['telegram_item']['telegram_item_post_this_node'] = array(
    '#type'          => 'checkbox',
    '#title'         => t('Send to Telegram'),
    '#description'   => t('After you submit this node it will be send to Telegram.'),
  );

  $apikey = variable_get('telegram_item_apikey');
  $channel = variable_get('telegram_item_channel_name');

  // отключаем элемент управления, если мы не настроили telegram в админке
  if (empty($apikey) && empty($channel)) {
    $form['telegram_item']['telegram_item_post_this_node']['#disabled']    = TRUE;
    $form['telegram_item']['telegram_item_post_this_node']['#value']       = 0;
    $form['telegram_item']['telegram_item_post_this_node']['#description'] =
      t("You can't Telegram nodes until apikey or channel is empty.");
  }
}
?>

4. Telegram Chat настройка и тестирование модуля
Устанавливаем наш модуль, включаем его в админке и переходим на страницу редактирования прав доступа /admin/people/permissions. Тут выставляем права на публикацию новости в Telegram и администрированию модуля:

Далее, переходим в страницу конфигурирования модуля /admin/config/services/telegram-item, вводим Bot apikey, Channel name, и сохраняемся. Я подвязал уведомление на свою группу.

Переходим в добавление какого-либо материала и публикуем новость, предварительно отметив галочку “Send to Telegram”:

Смотрим результат в Telegram:

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

telegram_item.zip3.76 КБ Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Ключевые слова:  telegram_bot_api telegram




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Программирование 5 Спасибо

Источник: http://www.drupal.ru/node/127308

Что нового в Backdrop 1.3

15 января 2016 года был анонсирован 4 релиз Backdrop CMS – 1.3.0.
Этот релиз так же отмечает 1 годовщину от первого официального релиза Backdrop CMS.

Новое в UI&UX

Этот релиз полон изменений завязанных на UI&UX – более 32 новых возможностей.

Некоторые из возможностей:

Новые упрощенные пользовательские блоки


В интерфейсе управления отображением страницы можно добавить пользовательский блок через “Добавить блок” -> “Добавить пользовательский блок”.
Backdrop CMS теперь поддерживает блоки, существующие только для определенного Layout или же могут быть использованы для разных Layout.
Информация о данном типе блока хранится в JSON файле. Что позволяет переносить блоки при деплое как файлы, без необходимости вносить изменения в базу.

Упрощенное создание типа материала и словаря


Была большая проблема при создании нового типа материала. Необходимо было пройтись по ряду административных страниц, чтоб завершить процесс настройки
В 1.3.0 все эти задачи находятся в настройках типа материала и включает в себя настройки прав доступа и патерна автоматической генерации адреса.
Аналогичное изменение коснулось настроек таксономии и пользователей.

Иконка уведомления


В предыдущих версиях Backdrop CMS, если сайт нуждался в обновлении или были критические проблемы, уведомление о необходимости обновится или проблемах занимало значительную часть экрана в административной части сайта. Это несло 2 проблемы: сообщение не появлялось на обычных страницах и было неудобно пользоваться административной частью. Для решения этих проблем была добавлена иконка в административный toolbar вверху экрана.

Улучшено Управление пользователями

1.3.0 релиз содержит в себе большое количество улучшений управления пользователями. Теперь можно настроить использовать имейл для авторизации на сайте в дополнение к логину или вместо. Валидация формы авторизации стала более информативной.
Пункт меню, ранее называвшийся People был переименован в User accounts. Настройку генерации пути для пользовательского профайла можно сделать сразу же в настройках пользователей. И что б избежать загруженности страницы настроек, имейлы регистрации, авторизация, пароли находятся каждый на своей странице.

Новые Основные закладки, дружественные для мобильного отображения

В теме Sven основные закладки теперь полностью адаптивные к мобильным экранам. Очень приятная реализация.

И много других новых возможностей: Настройки комментариев упрощены в форме типа материала. Короткие и длинные текстовые поля могут использовать виджеты отображения друг друга. Поля с большим значением количества элементов можно настроить на лимит более чем 10. Административный toolbar был обновлен новыми названиями, позволяющие делать более эффективный поиск. Настройки VIEWS теперь адаптивные и отображают список представлений в алфавитном порядке. Терминология вокруг “Изменить” и “настроить” была обновлена для отображения сути. Блок для полей

В Backdrop 1.3.0 уникальные поля материала или пользователя могут быть размещены в отдельный блок. Соответсвенно блоки доступны на node/% или user/% страницах и каждое поле отображается в своем блоке.

Новый блоки позволяют разместить поля в разных местах для каждого типа материала, разместить поля несколько раз и выбрать свой способ вывода для каждого поля.

Транслитерация в ядре


Для того, чтоб разрешить проблемы, где позволительны только ASCII символы (например название таблиц в базе), Backdrop очень часто применяет machine name элемент. До версии 1.3.0 необходимо было ставить дополнительный модуль для преобразования в ASCII символы, теперь это часть ядра.

Регулярные задачи (cron) и кеширование страниц

Backdrop 1.3.0 включает в себя очень мощную новую возможность – фоновая обработка задач. В предыдущих версиях в конце запроса к странице – cron мог начать выполнять регулярные задачи и тяжелые задачи могли замедлить загрузку страницы. Как пример индексация или очистка кеша. Задержки на 5, 20 и более секунд очень частые. Теперь же Backdrop CMS отдает страницу стразу, не задерживая выдачу до завершения крон задач.

Кроме дополнения в обработку фоновых задач, для кеша страниц так же была добавлена задача “фоновое обновление”. Эта функция очень похожа на поведение Varnish 4, когда запрос к странице кеш которой уже истек, получал старый кеш, пока формировался новый.

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

Возвращение черного (и других цветов)

Одним из заметных изменений в Backdrop 1.3.0 является инсталляция и тема по умолчанию, которая теперь в черных цветах вместо привычного синего. Это небольшое изменение нацелено на изменение бренда и отделение от Drupal.

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

Если вы выберите цветовую схему “Blue Lagoon” – вы получите привычный вам Bartik в голубых цветах.

Данный текст является вольным переводом оригинального текста написаного quicksketch

Версия Drupal:  Drupal 7.* Ключевые слова:  backdrop




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Обзоры и сравнения CMS 2 Спасибо

Источник: http://www.drupal.ru/node/127253

Drupal 7 VS Drupal 8 производительность. Бонус: render_boost модуль

Для начала начну с того, что после вот этого поста:
http://alexrayu.com/blog/drupal-739-vs-drupal-8-rc1-performance

Я был очень удивлен комментариям, процитирую:

Wim Leers написал:

You conveniently fail to mention two things in the blog post:

1. You compare Drupal 8’s out-of-the-box performance with a tweaked Drupal 7: you enabled the page cache.
2. Drupal 7’s page cache is inferior: a) no instantaneous updates; b) any node or comment posted causes the entire page cache to be cleared (!); c) many user actions that cause the page to change do not invalidate the page cache, so stale content continues to be sent.

In other words, Drupal 7’s page cache:
- shows stale content, hence the site appears broken to the site owner
- is cleared in its entirety and thus far less effective

Hence this is an apples-to-oranges comparison.

A Drupal 8 site with the Page Cache enabled is functionally equivalent to a Drupal 7 site with Page Cache disabled. Make that comparison instead, and the chart will look vastly different.

Wim Leers написал:

Claiming every tutorial recommends this does not make this comparison correct. Only bad articles say “Enable page cache.”, good articles say “Enable page cache, but know that it comes with disadvantages X, Y and Z.” — i.e. they provide the necessary nuance.

If you simply refuse to compare things correctly or even call out the necessary nuances, fine, then there is nothing else I can say.

Если коротко, то вы не то и не так сравниваете. Очень много слов что сравнивать работу кеша Drupal 7 и кеша Drupal 8 не верно, так как они предоставляют разные данные.

Окей. Давайте сделаем “правильно”:
- установил Drupal 7.
- набил в него контента через devel generate
- мигрировал это все дело на drupal 8
- параметры хостинга: CPU E5-1650 v3 @ 3.50GHz, php_memory_limit = 512M, HW SSD RAID 5, Innodb database. xcache opcode. php-5.6

В итоге получилось 2 такие вот страницы:
http://drupal7.drupal-site.net/node/199
http://drupal8.drupal-site.net/node/199

Если вы посмотрите исходник HTML в самом конце вы увидите данные которые я буду приводить ниже.
Эти данные генерируются на уровне php, специально разработанным модулем php.

Тест 1. Cтраница материала 199 под авторизированым пользователем.
Drupal 7 сайт с отключеным кешированием. , авторизация под админом
Drupal 8 c включенным кешированием, авторизация под обычным пользователем

Drupal 7

        queries total:                  222
                select:                 221
                insert:                 0
                update:                 1
                other:                  0
        memory peak:                    5.25 Mb

        execution time :                130.570 ms
        queries time :                  7.706 ms
        utime:                          120.981 ms
        stime:                          6.000 ms
        oublock:                                0
        inblock:                                0
        profiler_time:                  18.943 ms
        profiler_time_before call:      14.068 ms
        profiler_time_after call:       4.875 ms

Drupal8

Summary:
        queries total:                  125
                select:                 125
                insert:                 0
                update:                 0
                other:                  0
        memory peak:                    16.75 Mb

        execution time :                152.216 ms
        queries time :                  1.403 ms
        utime:                          141.978 ms
        stime:                          7.999 ms
        oublock:                                0
        inblock:                                0
        profiler_time:                  18.522 ms
        profiler_time_before call:      14.900 ms
        profiler_time_after call:       3.621 ms

Итог: Drupal 8 150ms и Drupal 7 130ms
Напоминаю у Drupal 7 отключен кеш для “честного сравнения”.

Теперь все тоже, но под анонимным пользователем.

Тест 2. эта страница под анонимным пользователем.
Drupal 7 сайт с отключеным кешированием.
Drupal 8 c включенным кешированием

Drupal 7

        queries total:                  181
                select:                 181
                insert:                 0
                update:                 0
                other:                  0
        memory peak:                    4.50 Mb

        execution time :                110.098 ms
        queries time :                  5.157 ms
        utime:                          99.985 ms
        stime:                          7.998 ms
        oublock:                                0
        inblock:                                0
        profiler_time:                  17.804 ms
        profiler_time_before call:      12.630 ms
        profiler_time_after call:       5.174 ms

Drupal 8

        queries total:                  3
                select:                 3
                insert:                 0
                update:                 0
                other:                  0
        memory peak:                    2.75 Mb

        execution time :                12.615 ms
        queries time :                  0.034 ms
        utime:                          9.999 ms
        stime:                          2.000 ms
        oublock:                                0
        inblock:                                0
        profiler_time:                  0.506 ms
        profiler_time_before call:      0.417 ms
        profiler_time_after call:       0.089 ms

Но при этом контент появился не сразу… и после разбирательств я нашел запрос на
http://drupal8.drupal-site.net/history/199/read

        queries total:                  23
                select:                 22
                insert:                 0
                update:                 1
                other:                  0
        memory peak:                    7.00 Mb

        execution time :                33.361 ms
        queries time :                  0.212 ms
        utime:                          24.996 ms
        stime:                          8.999 ms
        oublock:                                0
        inblock:                                0
        profiler_time:                  2.847 ms
        profiler_time_before call:      2.277 ms
        profiler_time_after call:       0.571 ms

Итог: Drupal 8 12+33 = 45ms и Drupal 7 110ms
Напоминаю у Drupal 7 отключен кеш для “честного сравнения”.

А теперь попробуем небольшой модуль render_boost
По сути это кеш рендеринга. А значит данные актуальные при отображении.

Доступно для теста тут: http://rb.drupal7.drupal-site.net/node/199

Тест 1. Авторизированный.

        queries total:                  183
                select:                 182
                insert:                 0
                update:                 1
                other:                  0
        memory peak:                    5.00 Mb

        execution time :                61.199 ms
        queries time :                  8.722 ms
        utime:                          53.992 ms
        stime:                          1.999 ms
        oublock:                                0
        inblock:                                0
        profiler_time:                  7.444 ms
        profiler_time_before call:      4.981 ms
        profiler_time_after call:       2.463 ms

Тест 2. Анонимный

        queries total:                  141
                select:                 140
                insert:                 1
                update:                 0
                other:                  0
        memory peak:                    4.50 Mb

        execution time :                52.414 ms
        queries time :                  5.385 ms
        utime:                          47.993 ms
        stime:                          2.000 ms
        oublock:                                0
        inblock:                                0
        profiler_time:                  6.931 ms
        profiler_time_before call:      4.675 ms
        profiler_time_after call:       2.256 ms

Итого сделаем табличку результата:

Инсталляция                  тест 1 (авторизированый)     тест 2 (аноним)
Drupal 7 no cache               130ms                   110ms
Drupal8 cache enabled           150ms                   45ms
Drupal 7 + render boost         60ms                    52ms

Комментарии к цифрам теста: Я делал по несколько запросов, чтоб дать возможность разогреться opcode cache, drupal cache и render_boost кешу и выбирал лучшую цифру из нескольких запросов. Суть теста показать возможности системы кеширования Drupal 7, Drupal 8 и Drupal 7 + render_boost в приблизительных цифрах

Версия Drupal:  Drupal 8.* Drupal 7.*




email





facebook





linkedin





twitter





google+





pinterest
6 Спасибо

Источник: http://www.drupal.ru/node/127229

Drupal 8, Cache & Rock N’ Roll

Вообще, мне бы самому хотелось послушать про кэширование в 8-ке. Но что-то не особо говорят. Вот и решил подсобрать инфы, чтобы подогреть интерес. Сразу скажу, что если не пишешь собственный модуль, то всё это не так и нужно. Но не зря же я втыкал в Word (вместо видосов с котами), так что все читайте, уж будьте бобры

Ну и чо там?

Из Symfony в Drupal 8 привита всеобщая кэшируемость. Теперь для любого объекта, который участвует в рендеринге, можно задать свои параметры кэширования.

Выглядит так:

‘#cache’ => [
    ‘keys’ => [‘entity_view’, ‘node’, 5, ‘teaser’],
    ‘contexts’ => [‘languages’, ‘timezone’],
    ‘tags’ => ["node:5", ‘user:3′],
    ‘max-age’ => Cache::PERMANENT,
  ],

Всего 4 параметра (указывать все необязательно):

keys – массив значений, из которых будет сформировано название для кэша (ID). Типичный набора:
'keys' => array( 'entity_view',  $this->entityTypeId,  $entity->id(),  $view_mode)

contexts –зависимость от эм.. контекста, например языка и временной зоны. Для тех, кто сечет в HTTP заголовках, в качестве его аналогии приводят Vary. Еще примеры возможных значений: cookies, route, session, url, user и т.д. Можно задавать более конкретную привязку, например user.permissions – зависимость только от прав пользователя, или url.query_args:foo – зависимость от параметра foo в адресной строке запроса.При их обработке происходит оптимизация. Например:
[user, user.permissions] => [user], т.к. зависимость от user уже включает в себя user.permissions.

tags – зависимость от конкретных объектов, например от 5-ой ноды, или пользователя с id = 3. Интересно, что можно задавать значения типа config:block_list (зависимость от конфигурации блоков), или config:filter.format.basic_html. А еще node_list.
В значениях тега не должно быть пробелов, т.к. пробел используются в качестве разделителя при передаче через header (странно, конечно, что выбран пробел, ну да не о том речь). Этот самый заголовок (X-Drupal-Cache-Tags) интересен для настройки супербыстрой раздачи через систему обратного проксирования (Varnish, CDN).

max-age – время хранения кэша в секундах (0 – не хранить, Cache::PERMANENT (-1) – без ограничения)

Не надо бла-бла, давай пример

Задача: разработать блок, который будет выводить значение параметра xxx переданного через адресную строку.

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


<?php

/**
 * @file
 * Contains \Drupal\cacheable_block\Plugin\Block\CacheableBlock.
 */

namespace Drupal\cacheable_block\Plugin\Block;

use Drupal;
use Drupal\Core\Block\BlockBase;
use Drupal\Core\Annotation\Translation;
use Drupal\Core\Routing;

/**
 * Provides a 'Cacheable Block' block.
 *
 * @Block(
 *   id = "cacheable_block",
 *   admin_label = @Translation("Cacheable block"),
 * )
 */
class CacheableBlock extends BlockBase {

  /**
   * {@inheritdoc}
   */
  public function build() {

    $key = 'xxx';
    $message = "";
    $value = Drupal::request()->query->get($key);

    if($value) {
      $time = date("Y-m-d H:i:s");
      $vars = array('@value' => $value, '@time' => $time);
      $message = $this->t('@value (@time)', $vars);
    }

    return array(
      '#markup' => $message,
      '#cache' => [
        'contexts' => ["url.query_args:$key"],
      ],
    );
  }
}
?>

Пример работы:

my.site?xxx=Kate                   -> Kate  (2016-02-07 11:11:11)
my.site?xxx=Ann                    -> Ann  (2016-02-07 22:22:22)
my.site/node/666?xxx=Ann           -> Ann  (2016-02-07 22:22:22)
my.site?xxx=Kate                   -> Kate  (2016-02-07 11:11:11)

Т.е. если xxx повторяется – значение берется из кэша, независимо от времени и страницы, и наоборот, стоит xxx измениться, и блок выдает другое значение (которое тоже кэширует).

Правда если зайти под другим пользователем, то будет другой кэш, хоть никакой зависимости от пользователей и не указано. И так и не понял, как задать
'cache' => DRUPAL_CACHE_GLOBAL

Но, можно делать свой кэш с нужным значением и ключами:

<?php
$value = Drupal::request()->query->get($key);
$message = Drupal::cache()->get("cacheable_block-$key-$value")->data;
if($value && !$message) {
  $time = date("Y-m-d H:i:s");
  $vars = array('@value' => $value, '@time' => $time);
  $message = $this->t('@value (@time)', $vars);
}
Drupal::cache()->set("cacheable_block-$key-$value", $message);
?>

Помни! Если кто-то вобьёт мильярд разных вариантов xxx – ничем хорошим это не закончится. Прямая зависимость кэша от столь легко меняющейся (и бесконечновариантной) зависимости – крайне не рекомендуется.

Еще пример

В блоге Acquia Dev есть пример, в котором рассматривается конвертация изображения в asci-символы. Вот краткая выжимка:

Как тебе такое решение?

<?php
$build = array(
  '#theme' => 'ascii_art',   
  '#attributes' => array('class' => 'ascii-art'),   
  '#caption' => 'My favorite animal',   
  'content' => array(
    '#markup' => generate_ascii_art('llama.png')
  ), 
);
?>

Здесь клёвая картинка ламы будет преобразована в ASCII символы. И, будь уверен, преобразование просто прекрасно! Но сейчас разговор не об искусстве ASCII. Динамическая генерация данных на основе изображения, разве это не медленно, спросишь ты. Ясен день! В конце-то концов, как следует преобразовать пушистую ламу в набор символов не так-то и просто. Нет, без шуток, можно придумать кучу случаев затратного рендеринга (требующего сложных вычислений и кучи запросов к бд). Так что кэширование результатов здорово бы помогло. И вот как это можно устроить:

<?php
$build = array(
  '#theme' => 'ascii_art',
  '#attributes' => array('class' => 'ascii-art'),
  '#caption' => 'My favorite animal',
  '#cache' => array(
    'keys' => array('ascii-art', 'llama'),
  ),
  '#pre_render' => array('ascii_art_pre_render'),
  '#ascii_art_image' => 'llama.png',
);

function ascii_art_pre_render($build) {   
  $build['content'] = generate_ascii_art($build['#ascii_art_image']);   
  return $build; 
}
?> Что за магические значения?

Завязывать кэш на конкретные значения (5-ую ноду, 3-го пользователя) – это, конечно, не солидно. А главное, вряд ли нужные значения известны. Поэтому в реальности, конечно, всё описывается программно.

Например, нужно связать кэш со списком нод из какой-то выборки

<?php
$nids = [];
foreach ($result as $row) {
    $nids[] = $row->nid;
}
$cache_tags  = Cache::buildTags('node', $nids));
'#cache' => array(
    'keys' => $cache_tags,
),
?> Яма, яма, яма, ямллл…

Кстати, простые настройки можно указывать и через YML

renderer.config:
    auto_placeholder_conditions:
      max-age: 0
      contexts: [’session’, ‘user’]
      tags: [] Настройка через API: $metadata = new CacheableMetadata();
$metadata->setCacheContexts([‘qux’])
      ->setCacheTags([‘foo:bar’])
      ->setCacheMaxAge(600); Хочу свой рендеринг с кешем и зависимостями

Вот, пожалуйста:


<?php
$renderer = \Drupal::service('renderer');

$config = \Drupal::config('system.site');
$current_user = \Drupal::currentUser();

$build = [
  '#prefix' => '<aside>',
  '#markup' => t('Hi, %name, welcome back to @site!', [
    '%name' => $current_user->getUsername(),
    '@site' => $config->get('name'),
  ]),
  '#suffix' => '</aside>',
  '#cache' => [
    'contexts' => [
      // The "current user" is used above, which depends on the request,
      // so we tell Drupal to vary by the 'user' cache context.
      'user',
    ],
  ],
];

// Merges the cache contexts, cache tags and max-age of the config object
// and user entity that the render array depend on.
$renderer->addCacheableDependency($build, $config);
$renderer->addCacheableDependency($build, \Drupal\user\Entity\User::load($current_user->id()));
?>
Какие есть еще API?

Теги и контексты – обычные массивы, и ничто не мешает их склеить обычным сложением
$tags = $account->getCacheTags() + $comment->getCacheTags()
Но престижней использовать специально обученные метод, ведь это и инкапсуляция и избавления от повторок
Cache::mergeTags($main_tags, $add_tags);
Все это верно и для contexts, и для max-age.
Если в запросе нет подходящего параметра, чтобы подставить в keys, можно использовать его hash (sha256), через метод keyFromQuery.
Еще есть validateTags, invalidateTags и getBins (bins – контейнеры, в которых хранятся кэши, обычно по названию модуля, к которому принадлежат их значения)

Entity и Config – готовы, а ты?

У всех entity или configuration уже настроены параметры кэширования. Получить их можно так:

\Drupal::entityManager()->getDefinition('node')->getListCacheTags();
Или через конкретные объекты:
$node->getEntityType()->getListCacheTags()
(вместо $node, может быть $user, $view…)

Аналогично для contexts и max-age
$this->entityType->getListCacheContexts()

Что там есть в Examples/cache_example

Хоть там todo больше, чем кода, но можно глянуть как вручную сохранять/получать/удалять кэш:

<?php
cacheBackend->set('название_кэша', 'содержимое_кэша', параметры_кэширования);
$cache = cacheBackend->get('название_кэша'); // и потом $cache->data
cacheBackend->delete('название_кэша');
?>

Где cacheBackend – это объект реализующий интерфейс CacheBackendInterface.
Там же, в качестве примера, подсчитывают количество файлов в ядре, угадаешь сколько? А вот и нет, всего лишь 5928.

Так кому, что и почему надо знать?

При описании «революционных изменений» Drupal 8, часто упоминают «кэширование по умолчанию». Но это не просто кэширование. Два модуля, Internal Page Cache и Dynamic Page Cache затащили это дело на новый уровень. Вот как описывает историю их создания ведущий разработчик Вим Лирс (вкратце):

Как-то Дрис начал парить мне голову вопросами о ESI. Я сказал, что то, что у нас называется “поддержкой ESI” – бред, но есть реальный шанс сделать хорошо. Дриса это так проняло, что он даже выложил пост А мне пришлось изрядно напрячь башку, чтобы реализовать то, что посулил в запале.

Сначала наша команда довела до ума кэш тэги, благодаря чему Page Cache (ныне Internal Page Cache) стал работать так хорошо, что мы включили его в сборку и включили по умолчанию. А затем добили и контексты кэша. Это далось не просто, пробовали и так и сяк. В резульате на пару с Фабьеном запили через пузырёк. Потом еще 7 месяцев просыхали фиксили, но это того стоило. И теперь Dynamic Page Cache (бывший Smart Cache) тоже в сборке, и тоже по умолчанию.

Конечно, еще есть над чем работать, напрягает и время перед запуском и всякая другая лабуда, но у нас еще есть идеи на этот счет. Кстати, как вам BigPipe?

И еще раз

То, что эти модули включены по умолчанию, означает, что каким бы ты ни был лохом, кэширование на сайте Drupal 8 будет огонь! Только не выключай их. Хотя, если для анонимных пользователей нужны разные результаты (например, с учетом их сессии), то Internal Page Cache придется отключить (либо мутить через AJAX), но это уже другая история.

А в этой истории речь о том, что теперь больше не нужны никакие танцы с Authcache, где нужно учитывать весь код сайта. Более того, опять пошли разговоры, что владелец сайта (админ, маускликер, сайт-билдер) может забыть, что значить фраза «очистить кэш». Поскольку теперь разработчики модулей могут и должны сами настроить зависимости кэша. Контриб-модули даже обязаны предоставить тесты на годность в режиме кэширования.

Но если Dynamic Page Cache мешает запалу разработки, можно временно его отключить, для этого в папке sites/название_сайта/ создается settings.local.php с кодом:

$settings['cache']['bins']['render'] = 'cache.backend.null';

Когда это будет в 7-ке?

Никогда. В Drupal 7 не появится мгновенного обновления кэша (в Drupal 8 кэш обновляется сразу по факту устаревания, не дожидаясь запроса, ога). Не появится Dynamic Cache Page. И не будет BigPipe. Как-то так.

А где же та фраза?

«There are only two hard things in Computer Science: cache invalidation and naming things. — Phil Karlton»

Склад ссылок, которых здесь еще не было (хотя быть должны)

https://www.drupal.org/developing/api/8/cache
https://www.drupal.org/developing/api/8/render/pipeline
https://www.drupal.org/developing/api/8/render/arrays/cacheability/auto-placeholdering
http://wimleers.com/talk/making-drupal-fly-fastest-drupal-ever-here
http://wimleers.com/blog/drupal-8-page-caching-enabled-by-default
https://drupalwatchdog.com/volume-4/issue-1/automagic-speed-cache
http://tech.dichtlog.nl/php/2015/08/03/lazy-builder-callback.html
http://www.sitepoint.com/exploring-cache-api-drupal-8/
https://github.com/upchuk/cache_demo_d8
http://slides.com/mikkeschiren-1/d8-cache#/1
http://chimera.labs.oreilly.com/books/1230000000845/ch01.html#_queues_and_workers

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 8.* Ключевые слова:  drupal 8 cache




email





facebook





linkedin





twitter





google+





pinterest
9 Спасибо

Источник: http://www.drupal.ru/node/127211

Обновление Drupal.ru от 06.02.2016


В обновление вошло:

Поиск! Блок доступен на внутренних страницах. Реализован через sphinxsearch. #25 Устранен баг с плавающим блоком #64 Устранен баг с настройками темы #72 Пользовательская сортировка тем на форуме #86 Отображение в форуме даты последнего ответа #94 Устранена проблема с добавлением материалов в форум #102 Устранен баг с мобильной версткой (горизонтальный скролл) в материалах #166 Добавлены метатеги для каждой страницы #178 Более чистое отображение комментариев для анонимного посетителя #192 Добавлен раздел “Бизнес” для каталога Drupal компаний #214 Добавлен раздел “Мероприятия” для отображения ближайших событий #215 Серьезно переделана титульная страница #217, #338 Добавлен Кодекс поведения #118 Добавлены Пользовательское соглашение, Модерация и ответственность и обновлены Правила сайта drupal.ru,Лицензионное соглашение и авторские права #248 Изменена работа с ссылками для комментариев. Для мобильных работает “swipe left, swipe right”. #253 Поправлены проблемы с валидацией комментариев и материалов #266, #267, #275, #295 Устранен баг с картинками в комментариях #274 Добавлены “спасибо” для материалов и комментариев. #293 Добавлена возможность “позвать модератора”#314 Прикрепленные изображения к комментариям теперь ссылаются на полный вид картинки #332 Пейджер сделан более компактный и не рассползается на мобильных экранах #335 Трекер на мобильном теперь занимает всю ширину экрана #407

Герои обновления:

bober

Frantsuzzz

orion76

bumble

kirill-dan

tonystar

gor






email





facebook





linkedin





twitter





google+





pinterest
10 Спасибо

Источник: http://www.drupal.ru/node/127174

Drupal 7 Commerce + ImportKit + 1C УТ часть 2

Итак, это продолжение предыдущей (Часть 1) статьи про выгрузку ImportKit.
Когда я делал выгрузку товара первый раз у меня уже было 400 вновь созданных позиций номенклатуры, в итоге, когда я разобрался с модулем, я понял что ВСЕ надо переделывать. Теперь я решил поделиться своим опытом. Надеюсь что будет полезно.
Итак поехали! В прошлой статье я сказал что необходимо использовать характеристики в свойствах номенклатуры. Но это не всегда верно! В каком случае нам использовать характеристики номенклатуры а в каком нет? Все очень просто!
1. Если нам необходимо чтобы несколько товаров добавлялось к одному дисплею, то используем характеристики.
2. Если нам необходимо чтобы к дисплею добавлялся только один товар, то характеристики НЕ используем.
Ссылка для тех кто не знает что такое характеристики и как с ними работать Видео
Давайте еще раз в картинках.

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

Обратите внимание: я использую “Вкус” как характеристику номенклатуры.
На этом все. Спасибо за внимание! Рад и с удовольствием отвечаю на любые комментарии.
P.S. Вопрос для всех, но в первую очередь для тех кого интересует данный модуль и кто его плотно использует:
Надо ли добавить возможность импорта дополнительных полей в карточку товара?

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Ключевые слова:  1С XML Импорт




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Решение проблем 2 Спасибо

Источник: http://www.drupal.ru/node/127126

1С УТ + Drupal 7 Commerce (Ubercard)

Часть 1 Часть 2. Хочу поделиться своим скромным опытом в интеграции 1с Управление торговлей 11.1 с Drupal 7 Commerce. А именно передо мной стояла задача осуществить выгрузку товара из базы 1с в интернет магазин, а обратно принять готовые заказы. Обратил внимание на разработки этой команды из Краснодара, пробовал ставить этот модуль. Но первый вариант отпал сразу ввиду его платности, а проект только начинает существование и денег соответственно нет, второй вариант отвалился в виду того что не смог разобраться с модулем.
В итоге наткнулся на данный модуль, называется ImportKit, полностью отвечающий моим требованиям, а это в первую очередь ИМПОРТ/ЭКСПОРТ товаров-заказов с гибкими и простыми настройками. Второе – это возможность в дальнейшем ПОЛНОСТЬЮ автоматизировать рутинный процесс. И третье, последнее в списке, но не последнее по значимости – это бесплатность данного решения.
Расскажу о своих настройках данного модуля.
На сайте я добавил Тип товара со стандартными настройками и Дисплей товара с полями ссылающимися на словари таксономии:

Брэнд, Модель, Тип товара, Объем, вес, порции Каталог


Так-же на 1С создал “Вид номенклатуры с характеристиками” и добавил следующие свойства:

Брэнд, Модель, Тип товара, Объем, вес, порции


Характеристикой для данного вида является “Вкус”
После надо настроить стандартную выгрузку на сайт в 1С, благо в сети информации по этому вопросу море. Если все настроили правильно, то из 1С мы получаем два файла в формате *.xml -> import и offers
Теперь можно перейти к настройке самого модуля.
После установки и включения модуля мы получаем новую ссылочку в админ-панели Importkit (1C).
В настройках самого модуля мы видим следующее:

Переходим к самому интересному

Данная настройка говорит что в Словарь “Категория” будут добавлены группы из справочника Номенклатура

Здесь настройки не принципиальны.

Как видно из скрина, из файла import.xml переносим GUID (цифро-буквенный идентификатор) в соответствующее поле. Как вы догадались эта настройка говорит что характеристики номенклатуры надо записать в словари таксономии.

Здесь все по стандартному
Ну и наконец цена.

Данный GUID берем из файла offers.xml где в <ИД> для вида цены который вы выгружаете.
В настройке The rate of the retail price устанавливаем 100 или 1, я думаю разберетесь.
В общем то и все настройки. Если меняете настройки, то лучше удалять товары перед обновлением.
Надеюсь, что хоть кому-то помог. Прошу строго не судить, это мой первый опыт написания таких инструкций. Спасибо за внимание!
P.S. модуль лучше качать здесь https://bitbucket.org/mirocow/importkit

Тип материала:  Предлагаю решение Версия Drupal:  Drupal 7.* Ключевые слова:  1С XML Импорт ImportKit




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Решение проблем 4 Спасибо

Источник: http://www.drupal.ru/node/127075

Drupal: 15 лет и до сих пор набирает обороты

15 Января 2000 года Дрис Байтаерт выпустил первую версию Drupal – 1.0.0.

Сегодня, спустя 15 лет, а по меркам интернета – это вечность, Drupal все еще продолжает набирать обороты.
В ноябре прошлого года, буквально пару месяцев назад, свет увидела версия Drupal 8.0.0!

Пост Дриса на эту тему можно прочитать тут.

Предлагаю в комментариях к этому посту рассказать свою историю: как вы пришли к Drupal, чем занимались и как это изменило вашу жизнь!






email





facebook





linkedin





twitter





google+





pinterest
1 Спасибо

Источник: http://www.drupal.ru/node/126928

Спринт по переводам Drupal8!

Добрый день,

ситуация с переводами сейчас так себе:

Давайте это исправим!

Есть достаточно подробная инструкция (хотя писалась для D7, но вполне актуальна):
https://localize.drupal.org/node/2664
Есть глоссарий переводчиков: https://localize.drupal.org/node/2624 (на https://goo.gl/ZAWn8S временная дока для новых терминов).

Предлагаю устроить серию спринтов по переводам:
- 12 декабря 2015, с 12 до 18 часов (Московское время). [завершен]
- 19 декабря 2015 в рамках спринта DrupalCamp Siberia [завершен]
- 26 декабря 2015, с 12 до 18 часов (Московское время). [завершен]
- 9 января 2016, с 12 до 18 часов (Московское время).
- 23 января 2016, с 12 до 18 часов (Московское время).
График плавающий, если вам внове заниматься локализацией и у вас есть час-полтора на помощь с переводом, в этом диапазоне часов у вас будет возможность оперативно получить ответ на конкретный вопрос по переводам. Т.е. приглашаются к участию все кто может выделить немного времени в эти дни.

Координацию будем вести тут http://dru.io/post/4852 и в gitter-чатике.

UPD: gitter-чат по переводам создан, присоединиться можно по ссылке https://gitter.im/dru-io/L10n

Где переводить: https://localize.drupal.org/translate/languages/ru/translate?project=drupal&status=5&release=455746&sid=0
Как переводить: в gitter-чате просто разграничим кто с какой страницы начинает, с шагом в 10-20 страниц. Т.е. можно в чате или тут в комментах говорить “Начал переводить с 20й страницы”. И все – другие будут в курсе что туда можно не писать чтобы не делать двойной работы.
Обсуждения спорных переводов: https://localize.drupal.org/node/64030
===
Забыли упомянуть про перевод форм множественного числа (plural form), типа такого:
https://localize.drupal.org/translate/languages/ru/translate?sid=1870103
В русском языке формула такая:

“Plural-Forms: nplurals=3; plural=((((n%10)==1)
&&((n%100)!=11))?(0):(((((n%10)>=2)
&&((n%10)<=4))
&&(((n%100)<10)||((n%100)>=20)))?(1):2));\n”
То есть, в отличии от английского – 3 формы: грубо говоря для 1, 2-4, >=5 значений
Проверка:
1 кружка
2 кружки
5 кружек

Поэтому в переводах и 3 поля для мн.ч.






email





facebook





linkedin





twitter





google+





pinterest
0 Спасибо

Источник: http://www.drupal.ru/node/126770

Дайджест интересных материалов из мира Drupal #16


Вышел очередной выпуск “Дайджест интересных материалов из мира Drupal #16″ от Олега Кот и Кати Маршалкиной.
Рекомендую подписаться на рассылку.

Из интересного на мой взгляд:

@tlito записал свои заметки о восьмёрке для новичков, не знакомых ни с программированием, ни даже с друпалом (1, 2). @xxandeadxx написал модуль, позволяющий выполнить всю очередь в фоне без вылета по таймауту — Background Queue. Питерское сообщество опубликовало презентации и видео четырёх докладов по Drupal 8.

Более подробнее читайте в выпуске на хабре.

Ключевые слова:  дайджест




email





facebook





linkedin





twitter





google+





pinterest
0 Спасибо

Источник: http://www.drupal.ru/node/126724

Обновление Drupal.ru от 25.12.2015


Новый функционал:

кросспостинг с главной в твиттер http://twitter.com/drupalru У автора материала есть возможность пометить комментарий как “решение”. Данный комментарий будет отображаться в самом верху и подсвечиваться фоном. Работы по этой функциональности будут продолжаться в #259 при употреблении ника в сообщении виде @USERNAME – пользователю уйдет сообщение появилась валидация создаваемых материалов и комментариев. Теперь будет сложно создавать нубопосты и матерится. модуль “Темная материя”. Правила работы модуля смотреть тут в профиле пользователя – статистика темной материи и количества материалов и комментариев оставленных пользователем доступны новые bbcode [module=module_name]Module name[/module]
[theme=theme_name]Theme name[/theme]
[user=user_name]Username[/user]
[api=api]API Drupal.org[/api]
[man=function]Function name[/man]
[ruapi name=function v=8]API ru Drupal 8[/ruapi]
[ru_api=function]Drupal 6[/ru_api]

В обновление вошло:

кросспостинг с главной в твиттер http://twitter.com/drupalru #109 более компактное отображение цитат в комментариях #52 #63 интерактивный install.drupalru.sh #62 #104 внешний вид комментариев #70 #89 #144 #160 время жизни сессии (очень часто логинится приходилось) #73 при добавлении комментария, высота поля ввода маленькая #74 цитирование выделенного текста #80 подсветка и стили кода #87 добавлены whatsapp, viber, telegram в контакты #90 ссылка на провиль в меню “Мой аккаунт” #99 конфликты темы и модулей с php 5.6 #110 уведомление о употреблении ника в коменте или ноде #195 #124 агрегация CSS и JS #148 обновлен favicon #167 редирект на www в конфиге веб-сервера #169 отображение профилей по полю профиля #197 Модуль “Темная материя”. Правила работы модуля смотреть тут. #210 пути alttracker и tracker сделаны синонимом #88 установка пометки “решение” на комментарий #101 новые bbcode #112 валидация создания нового материала #177

Герои обновления:

orion76

bumble

mbaev

gor

Director cemetery






email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Сайт и проект Drupal.ru 0 Спасибо

Источник: http://www.drupal.ru/node/126700

Обновление Drupal.ru от 25.01.2015


Новый функционал:

кросспостинг с главной в твиттер http://twitter.com/drupalru У автора материала есть возможность пометить комментарий как “решение”. Данный комментарий будет отображаться в самом верху и подсвечиваться фоном. Работы по этой функциональности будут продолжаться в #259 при употреблении ника в сообщении виде @USERNAME – пользователю уйдет сообщение появилась валидация создаваемых материалов и комментариев. Теперь будет сложно создавать нубопосты и матерится. модуль “Темная материя”. Правила работы модуля смотреть тут в профиле пользователя – статистика темной материи и количества материалов и комментариев оставленных пользователем доступны новые bbcode [module=module_name]Module name[/module]
[theme=theme_name]Theme name[/theme]
[user=user_name]Username[/user]
[api=api]API Drupal.org[/api]
[man=function]Function name[/man]
[ruapi name=function v=8]API ru Drupal 8[/ruapi]
[ru_api=function]Drupal 6[/ru_api]

В обновление вошло:

кросспостинг с главной в твиттер http://twitter.com/drupalru #109 более компактное отображение цитат в комментариях #52 #63 интерактивный install.drupalru.sh #62 #104 внешний вид комментариев #70 #89 #144 #160 время жизни сессии (очень часто логинится приходилось) #73 при добавлении комментария, высота поля ввода маленькая #74 цитирование выделенного текста #80 подсветка и стили кода #87 добавлены whatsapp, viber, telegram в контакты #90 ссылка на провиль в меню “Мой аккаунт” #99 конфликты темы и модулей с php 5.6 #110 уведомление о употреблении ника в коменте или ноде #195 #124 агрегация CSS и JS #148 обновлен favicon #167 редирект на www в конфиге веб-сервера #169 отображение профилей по полю профиля #197 Модуль “Темная материя”. Правила работы модуля смотреть тут. #210 пути alttracker и tracker сделаны синонимом #88 установка пометки “решение” на комментарий #101 новые bbcode #112 валидация создания нового материала #177

Герои обновления:

orion76

bumble

mbaev

gor

Director cemetery






email





facebook





linkedin





twitter





google+





pinterest
Форум:  Сайт и проект Drupal.ru

Источник: http://www.drupal.ru/node/126700

New 8th Year Party Москва. чт, 24 декабря 2015


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

Специальный гость: Боярский.
Подробности на сайте drupalcafe.ru

Тип материала:  Предлагаю решение Ключевые слова:  drupalcafe




email





facebook





linkedin





twitter





google+





pinterest
Форумы:  DrupalMsk 0 Спасибо

Источник: http://www.drupal.ru/node/126674

Вопрос – ответы по изменениям на Drupal.ru


Назрело время ответить на вопросы.
Просьба задавать конкретные вопросы.
Флуд буду жестко модерировать.
Грамотно поставленый вопрос будет в приоритете к ответу.

Отвечать буду по наличию свободного времени.

Конструктив и желание помочь проекту – приветствуются!






email





facebook





linkedin





twitter





google+





pinterest
Форумы:  Сайт и проект Drupal.ru 0 Спасибо

Источник: http://www.drupal.ru/node/126625

Круглый стол “Сообщества” DrupalCamp Siberia 2015

Первый доклад от моего лица – касается развития Drupal.ru. К сожалению не с начала.
Остальное тоже интересно .
Приятного просмотра!

View on YouTube

Ключевые слова:  DrupalCamp




email





facebook





linkedin





twitter





google+





pinterest
0 Спасибо

Источник: http://www.drupal.ru/node/126623