Рубрика "Drupal"

DrupalCafé №5 в Харькове – 24.05.2012

Опять четверг, опять кафе.

В четверг, 24 мая, в 19:00, в Харькове пройдет пятое DrupalCafe.
На этот раз мы сменили место проведения, мероприятие пройдет по адресу ул. Маломясницкая, д 9/11, Академия “Шаг”. (станция метро “Проспект Гагарина”).
Карта

Темы докладов:

1. “Знакомство с модулем Views” (Алексей Гайдабура, WDG)
- Архитектура Views.
- Основы работы с Views.
- Для чего нужны CONTEXTUAL FILTERS и RELATIONSHIPS.
- Разное, непонятное.

2. “Form API в Drupal 7. “Вкусности” и “красоты” (Дмитрий Олареско, WDG)
Данная тема познакомит Вас с особенностями Form API в Drupal 7. Расскажет о нововведениях и интересных приемах, которые могут пригодится как начинающему так и опытному программисту.

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

Третье DrupalCafe в Новосибирске

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

Предварительные темы докладов:

1.Павел Прищепа выступит с докладом о DrupalSib at Kharkov Drupal {code} sprint
2.Чингис Санданов расскажет о mongoDB
3.Вадим Валуев выступит с темой “Мой первый проект на Друпал 7.(отличие от Drupal6 по критериям:(Responsive) design with Omega, CSS3 and LessCSS, Entities and Entity API. Media module.)”
4.Михаил Крайнюк расскажет о “Batch. Использование batch для продолжительных операций. Применение его для реализации долгих hook_update()”

Предварительная обязательная регистрация
г.Новосибирск, Академгородок, ул. Инженерная 20, Технопарк, конференцзал на 3 этаже
Начало: 26 мая в 12:00
Окончание:26 мая в 16:00
Помощь в подготовке докладов Роман Чижиков: skype: roman.chizhikov

Организационные вопросы: Павел Прищепа: skype: prischepa.p, Анна Шевцова: skype: anna.newsib
info@drupalsib.ru
тел.офиса (383) 233-27-00
+7-913-395-44-05

Прикрепленный файл Размер drupalcafe3rsrt100h100.jpg 9.04 кб

Attached poll “Пойду на 3-e DrupalCafe”.
Register or login to poll
Results:
да: 1 голос
нет: 5 голосов

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

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

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

Ориентировочно пройдет оно в том же помещении, что и первая встреча – антикафе Бабочки.
По датам предварительно ориентируюсь – 16, 17, 23 или 24 мая (дату еще корректирую в зависимости в том числе и от ваших замечаний).
По времени с 19 до 23.

Темы для обсуждения выложу чуть позже, если предложите что-то интересное – велкам!

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

Acar – ajax cart for ubercart

http://u6167.moko.vps-private.net

Введение.

Модуль 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 корзины, нужно скопировать файлы шаблонов, в каталог темы оформления, вместе со всеми прилагаемыми к ним файлами картинок и стилей. И уже там, изменяя их, придавать корзине требуемый вид. Не забудьте только, очистить кэш.

Темизация.

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

Это текстовые переменные. А именно, так называемый шаблон список (Lis) и шаблон пункт (Ite). Оба этих шаблона содержат html код, на основе которого и конструируется форма корзины или форма добавления.

Шаблон список (Lis) – это шаблон своего рода ёмкости для продуктов, и необходим исключительно для формы корзины. В то время как шаблон пункт (Ite) – это шаблон отдельного продукта, и применяется как для формы добавления, так и для формы корзины.

При темизации формы корзины, что бы было понятно, в какой именно элемент корзины вставлять продукты, этот самый элемент, в шаблоне список, следует пометить классом $$Par. Однако если требуется вставлять продукты не внутрь элемента, а перед каким либо элементом, то такой элемент следует пометить классом $$Chi.

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

Оформляется подобное внедрение внутри атрибута class, следующим образом:

@fun(arg0,arg1,arg2,...)

В начале, символ ‘@’, далее идентификатор функции, после него, в скобках перечисляются аргументы. Избегайте использования пробелов, вместо них лучше использовать юникод пробел ‘\u0020′.

Например, следующий input элемент, размещённый в шаблоне пункта (Ite), при помощи функции qty, позволит отобразить или изменить количество продукта.

<input class="@qty(true)"/>

Эту функцию, как и любую другую, можно применить к любому элементу, например к div. Количество продукта будет так же отображаться, но изменить его, по понятным причинам уже не получится.

<div class="@qty(true)"></div>

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

Функционал.

Функция tot.

@img(exe) <span></span> Ite

Выводит изображение продукта.

exe – Условие использования*.

Функция tot.

@tit(exe) <a></a> Ite

Отображает название продукта как ссылку.

exe – Условие использования*.

Функция qty.

@qty(exe) <input type="text"/> Ite

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

exe – Условие использования*.

Для формы добавления, эта функции позволяет не просто изменить количество продукта, но и добавить или удалить продукт из корзины.

Функция qtc.

@qtc(exe, qtc) <input type="button"/> Ite

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

exe – Условие использования*.
qtc – Величина на которую следует менять количество продукта.

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

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

Функция pri.

@pri(exe, sig, frm) <input type="text" readonly/> Ite

Отображает стоимость одного экземпляра продукта.

exe – Условие использования*.
sig – Знак валюты*.
frm – Формат числа*.

Функция tot.

@tot(exe, sig, frm) <input type="text" readonly/> Ite

Отображает стоимость количества продукта.

exe – Условие использования*.
sig – Знак валюты*.
frm – Формат числа*.

Функция abs.

@abs(exe, sig, frm) <input type="text" readonly/> Ite Lis

Отображает общую стоимость всего содержимого корзины.

exe – Условие использования*.
sig – Знак валюты*.
frm – Формат числа*.

Функция tra.

@tra(exe, tra) <input type="button"/> Ite

Осуществляет переход при щелчке, на страницу продукта или по указанному адресу.

exe – Условие использования*.
tra – Адрес для перехода.

Функция atr.

@atr(exe, cla, sty) <span></span> Ite

Выводит атрибуты продукта.

exe – Условие использования*.
cla – Класс, определяет способ вывода атрибутов.
sty – Стиль*, применяемый к атрибутам.

Доступно два класса: Acar.Atri.Atri и Acar.Atri.Imge. Класс Acar.Atri.Atri позволяет отображать атрибуты, так же как и в стандартной форме добавления. Класс Acar.Atri.Imge выводит описание значений атрибутов в виде списка.

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

Стили для класса Acar.Atri.Atri:

Acar.Atri.Atri.Sty.Def – Используется по умолчанию.

Стиль для класса Acar.Atri.Imge:

Acar.Atri.Imge.Sty.Def – Используется по умолчанию.
Acar.Atri.Imge.Sty.Min – Красивый стиль с мелкими буквами.

Функция sty.

@sty(exe, sty) <div></div> Ite

Накладывает на элемент указанный стиль.

exe – Условие использования*.
sty – Стиль* применяемый к элементу.

Функция out.

@out(exe, exp) <span></span> Ite Lis

Выводит результат javascript выражения.

exe – Условие использования*.
exp – Выражение javascript, в виде строки.

Например, можно вывести результат выражения 2*(56*3+5):

<div class="@out(true,\'2*(56*3+5))\'"></div>

Или.

<input class="@out(true,\'2*(56*3+5))\'" type="text"/>

Разумеется, таким образом можно выполнить любой javascript код, вывести значение любой переменной. Так что, эта функция может быть весьма полезна. Не забывайте только что передаваемое выражение обязательно должно быть строкой, а уже в ней собственно javascript.

Продолжение покупок.

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

Acar.Reso.Prm.Csh.Tex

Текст, обозначающий продолжения покупок, по умолчанию “Continue shopping”.

Acar.Reso.Prm.Csh.Url

Адрес страницы, для продолжения покупок.

Для создания ссылки на страницу продолжения покупок, нужно воспользоваться функциями out и sty:

<a class="@out(true,\'Acar.Reso.Prm.Csh.Tex\') @sty(true,{href:Acar.Reso.Prm.Csh.Url})"></a>

Либо не совсем корректным, но надежным способом, “разорвав” шаблон и осуществив конкатенацию:

<a href="'+Acar.Reso.Prm.Csh.Url+'">'+Acar.Reso.Prm.Csh.Tex+'</a>

Для создания кнопки понадобятся функции out и tra:

<input class="@out(true,\'Acar.Reso.Prm.Csh.Tex\') @tra(true,Acar.Reso.Prm.Csh.Url)" type="button"/>

Переменная Acar.Reso.Prm.Csh.Url хранит ссылку, только если ранее продукт был добавлен. Поэтому рекомендуется настроить страницу для продолжения покупок, в настройках ubercart.

*Условие использования.

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

Это либо логическое значение, которое достаточно однозначно говорит, следует ли применять к элементу данную функцию. Либо строка содержащая в себе javascript выражение, из которого доступны следующие переменные булиевого типа:

vie.add – Истинно если это форма добавления.
vie.car – Истинно если это форма корзины.
inc – Подтверждает наличие продукта в корзине.
exc – Подтверждает отсутствие продукта в корзине.
atr – Подтверждает наличие у продукта атрибутов.

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

<div class="@sty(\'inc\',\'background:#faa;\') @sty(\'exc\',\'background:#05f;\')">-=DIV=-</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/>

Если вдруг возникнет необходимость просто вывести сам по себе знак валюты настроенный в ubercart, можно воспользоваться функцией out, и непосредственно переменной хранящей знак Acar.Reso.Prm.Cur.Sig:

<span class="@out(true,\'Acar.Reso.Prm.Cur.Sig\')"></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>

Источник: 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

Совместный отпуск друпалеров и три-четыре DrupalCamp`а подряд!

Приветствую уважаемое сообщество друпалеров, друпалерш, друпалистов и всех сочувствующих!

Как известно, 12 июня в России празднуется День Независимости. А что еще делать в день независимости родной страны, как не уехать из нее в круиз по Балтийскому морю, по столицам Балтики: Санкт-Петербургу, Хельсинки, Таллину, Стокгольму. Можно еще посетить норвежский Осло и знаменитые фиорды, а также Копенгаген…

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

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

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

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

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

Маршрут может выглядеть так: Петербург-Хельсинки-Стокгольм-Таллин-Петербург. Возможны вариации: поезд из Москвы до Питера, потом до Хельсинки, оттуда паром до Стокгольма, потом автобус до Осло, автобус до Копенгагена и паром до Питера. В общем, вариантов масса, есть из чего выбрать.

Резюмирую.

1. Вам предлагается взять отпуск на неделю с 11.06 по 17.06 включительно, таким образом получив непрерывный кусок свободного времени с 10.06 по 17.06 включительно (8 календарных дней)
2. В этот период совершить вышеописанный круиз по Балтийскому морю. (не обязательно на все 8 дней)

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

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

Вкратце сориентирую вас по деньгам и немного расскажу о своих впечатлениях.

В 2010 году в майские праздники я с друзьями совершил круиз на пароме по маршруту Питер-Хельсинки-Стокгольм-Таллин-Питер, длительностью 4 дня и 3 ночи. Каюту мы заказывали 4-хместную, самую дешевую, под ватерлинией (иллюминаторов нет), т.к. все свое свободное время (а это вечер и ночь) мы проводили либо в клубе на самой верхней обзорной палубе, танцуя и распивая напитки, либо в своей каюте, отсыпаясь и приводя себя в порядок перед выходом в город. В программу тура входила бесплатная пешая экскурсия по каждому городу, и можно было заказать много других: музей Карлсона в Стокгольме, Церковь в скале в Хельсинки и много-много другого. Понравилось очень, особенно девушки в Таллине. Стокгольм – город-мечта, везде велосипеды. Хельсинки – очень холодный город, достопримечательностей почти нет, а те что есть – построены русскими во времена царизма. Конечно, айтишникам будет этот город интересен из-за личности Линуса Торвальдса. Старый Таллин похож на сказку, удалось даже позвенеть в колокол на старой главной ратуше города. Поездка была весьма позитивной. В мае в Балтийском море довольно холодно и дико ветренно, поэтому, учитывая свой предыдущий опыт, я предлагаю вам поездку в июне.

Мой бюджет на прошлую поездку составил: 244 евро, (в т.ч. тур: 174 евро +70 евро – топливный сбор), или 9800 рублей (курс евро на дату бронирования +2%).

Из каждодневных расходов, нужно на еду (мой расход был заложен 20 евро в день, включая бары, рестораны и Макдональдс), транспорт (обычно универсальный проездной за ~10 евро на любой вид транспорта – метро, автобус, паром, действующий целый день), прочие расходы (сувениры, это прикидывайте сами – от 1 до 100 евро и выше).

Когда я просматривал цены на туры в этот год, 6 дней стоят 320 евро + виза 80 евро (автобусно-паромный тур). Конечно, туры очень разные, и я тут просто привел прикидочную цену для сравнения.

Для оформления документов вам потребуется (список не точный, точный скажет наш оператор. имейте в виду, что этот список ТОЛЬКО для справки):

1. Заграничный паспорт, действительный в течение 3 месяцев со дня возвращения из поездки: в паспорте обязательно должна быть подпись владельца и достаточное количество страниц для визовой наклейки на ребенка, который вписан в паспорт родителя и следует вместе с ним.
2. Полные анкетные данные (заполнить опросник). [прим.: он небольшой одна страница A4, примерно 7 стандартных вопросов]
3. Копия первой страницы заграничного паспорта.
4. Старый заграничный паспорт, если в нем есть Шенгенские визы, выданные за последние 3 года.
5. 2 цветных фотографии 3,5 х 4,5 на белом фоне в анфас без углов и овалов, сделаны не ранее 3 месяцев до подачи документов. Нельзя подавать фотографии, ранее использовавшиеся для получения визы. Не допускаются головные уборы, темные очки и ретушь; голова должна занимать 60-70 % фотографии.
6. Ксерокопия всех страниц внутреннего паспорта (даже чистых!!!) для туристов старше 14 лет.
7. Ксерокопия свидетельства о рождении для туристов младше 14 лет.
8. Справка с места работы с указанием должности, оклада/заработной платы за три последних месяца. Справка предоставляется на фирменном бланке организации, заверенном подписью руководителя/гл. бухгалтера и печатью.

Да-да, для получения Шенгенской визы все это нужно.

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

Attached poll “Нравится идея Балтийских отпускных Drupal-кемпов?”.
Register or login to poll
Results:
Да, настолько, что приму участие – если не в этом году, то в следующем – точно!: 13 голосов
Да, нормально, сойдет. Ничем не отличается от других отпусков, Друпал тут ни к месту…: 4 голоса
Не взлетит. Идея не нравится.: 2 голоса

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

Работа с 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

Обновление ОС на сервере

Уважаемые посетители Drupal.ru

Завтра, 11 Апреля 2012 г, запланировано обновление ПО с последующей перезагрузкой сервера, где находится drupal.ru.
Соответственно с 23:00 до 23:59 по Московскому времени возможны перебои в работе сайта.

Просим проявить понимание и терпение.

С Уважением,
Команда IT Patrol inc.

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

DrupalConf 2012 – приглашаем докладчиков!

Конференция DrupalConf 2012 состоится 2 июня 2012 года в Москве!

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

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

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

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

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

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

Drupal Camp Minsk уже совсем скоро, 14 апреля

В этом году ожидается около 100 участников. Соберутся разработчики из Беларуси, России и Украины. Обязательно будет десант из Германии.

На Drupal Camp Minsk 2012 ожидается некоторый уклон программы в сторону интересов профессиональных веб-разработчиков.
Но начинающие знакомство с Drupal тоже найдут много поучительного.
Конференция также может стать местом общения программистов и руководителей интернет-проектов, которым интересна возможность использования Drupal в своем бизнесе.
Вы так же можете предложить свой доклад, либо сообщить интересующую Вас тему.

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

Второе DrupalCafe в Новосибирске.

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

Предварительные темы докладов:

Иванкин Антон: Вывод изображений в CMS Drupal
Евгений Ильи: Автоматизация контроля соблюдения стандартов кодирования при разработке на Drupal с использованием системы контроля версий git
Виктор Чуханцев: Drupal7+gmap+location+views
Константин Беленький: Open Atrium
Тимофей Прохоров: Мобильные версии сайтов
Константин Осипенко : Использование поискового движка Solr в drupal 7

Предварительная обязательная регистрация
г.Новосибирск, Академгородок, ул. Инженерная 20, Технопарк, конференцзал на 3 этаже
Начало: 31 марта в 12:00
Окончание: 31 марта в 16:00
Помощь в подготовке докладов Роман Чижиков: skype: roman.chizhikov

Презентации докладов с 1-го DrupalCafe можно посмотреть здесь
Организационные вопросы: Павел Прищепа: skype: prischepa.p
info@drupalsib.ru
тел.офиса (383) 233-27-00

Прикрепленный файл Размер drupalcafe2.jpg 48.51 кб

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

Работа с 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

OG Features – добавляем гибкости в OG


OG Features – модуль позволяющий администратору сайта определять, какой функционал в группе может включаться и отключаться владельцем группы.
Например, это могут быть произвольные типы контента, вьюхи, панели. Яркий пример использования этого модуля, это сборка Drupal Commons, где через og_features сделаны такие фичи для групп как:

Blog Discussions Documents Events Group Aggregator Polling Wiki Q&A

Сам процесс создания фичи для OG Features нетривиален.
Для этого вам нужно создать свой модуль, где нужно реализовать хук hook_og_features_registry().
Например, у нас модуль называется modulename и мы хотим определить фичу my_feature, код будет следующий, код взяд из модуля, комментарии оставлены оригинальные и строкой ниже добавлены мои:

function modulename_og_features_registry() { $registry = array();   // Feature: my_feature. // Создание объекта фичи. $feature = new stdClass;   // The feature id //Указываем id фичи, оно должно быть уникальным в пределах сайта $feature->id = 'my_feature';   // The name that will show up on the feature toggle form //Название фичи, которое будет показываться в группе на странице управления фичами $feature->name = t('Blog');   // The description that will show up on the feature toggle form //Описание, показываемое на странице управления фичами $feature->description = t('Provide a simple blog for your group');   // The components of the feature that will be enabled/disabled //Компоненты которые включает фича $feature->components = array( 'views' => array( 'og_tab_blogs', ), 'node' => array( 'blog', ), 'context' => array( 'group_blogs', ), 'path' => array( 'node/%node/aggregator', ), 'pane' => array( 'og_content_tracker-panel_pane_1', ), 'og link' => array( 'og_invite', // The key of the link in the group details block ), ); // It's recommended that you key the feature with the name of the // module/feature that is supplying this, so that any custom page // callbacks provided by this module/feature become disabled within // the group //помещаем фичу в "контейнер", это позволит нам в модуле определить несколько фич, если требуется $registry[$feature->id] = $feature;   // Feature: my_second_feature //объявляем вторую фичу $feature = new stdClass; // You can continue to add as many as you'd like //в дальнейшем процесс никак не отличается от первой фичи, в конце делаем так же $registry[$feature->id] = $feature; return $registry; }

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

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

Участвуем в конкурсе «Рейтинг Рунета»

С любезного приглашения Анатолия Денисова, главного редактора CMS Magazine, мы теперь участвуем в конкурсе «Рейтинг Рунета» в категории CMS. Претендентов не особо много и всё какие-то проприетарщики, окромя ModX, за который и предлагаю голосовать — собратья по опенсорсу однако.

Хотя, если не вчитываться в содержимое, то на скриншотах drupal.ru выглядит очень даже ничего (:

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

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

С наступающим 8 марта

Да не буду строго осужден прекрасной половиной drupal сообщества, примите мои поздравления
какие есть зато от чистого сердца с наступающим 8 марта

Пусть первый Друпала модуль,
Подарит Вам нежность!
Весеннее солнце и Друпала сообщество, подарит тепло и защиту!
А мартовский ветер подарит надежду на новую версию Друпала восемь,
И счастье, и радость, и только добро Вам принесет новая версия Друпал!

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

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

С наступающим 8 марта

Да не буду строго осужден прекрасной половиной drupal сообщества, примите мои поздравления
какие есть зато от чистого сердца с наступающим 8 марта

Пусть первый Друпала модуль,
Подарит Вам нежность!
Весеннее солнце и Друпала сообщество, подарит тепло и защиту!
А мартовский ветер подарит надежду на новую версию Друпала восемь,
И счастье, и радость, и только добро Вам принесет новая версия Друпал!

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

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

Делаем добро. Друпал-кафе в Ростове

Всем привет, сначала общей информации (без нее будет непонятно о чем это я вообще).

1 марта открылся первый в Ростове коворкинг-центр. DobroCowork – http://dobrocowork.ru . Находится он в известном местным творческим людям центре CreativeSpace.pro. Мы подружились с руководством этого прекрасного места и планируем там проводить IT-мероприятия. В идеале – друпал-кафе. Сейчас, когда снег потихоньку тает и возникают первые мысли о весне и весенних мероприятиях (да, скоро же будет много кэмпов!), мы пытаемся для себя определиться с форматом.

Собственно мне нужны отзывы. От людей которым интересно друпал-кафе в Ростове или кто может приехать из соседних городов. Мне примерно нужно знать количество заинтересованных людей. Если нас будет мало – друпал-кафе не будет, а будет более общая IT тусовка (что тоже интересно). Если будет достаточно – будет собираться и трепаться о багах в коммерце, устраивать код-спринты (там есть удобные пуфы и wi-fi, а также бесплатный кофе – что может быть лучше?) и вообще предаваться свободному кодингу. Так что жду ваших комментариев – кто из Ростова, кому интересно встречаться.

p.s. Кстати там еще есть свободные места под аренду – http://dobrocowork.ru/rent , друпал фрилансерам может быть интересно. Атмосфера там отличная.

p.p.s. Кстати еще раз. Вы знаете что есть скайп-чат где общаются друпалеры с югов (Ростов, Краснодар, Таганрог и др.)? Стучитесь мне (alexander.dubovskoy), Вите или Богдану, добавляйтесь. Кроме того в Краснодаре часто проходят встречи друпалеров (http://drupalyug.ru/), друпал-шашлыки и прочий отдых, Виктор (RxB) может много об этом рассказать.

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

Школа 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

Ajax Form в Drupal7

По мотивам Как проще всего реализовать аякс с выдачей json” и Установка фокуса на элемент формы*.

В итоге, на память себе и может кому понадобится:

В hook_menu:

$items['path_to_page/%'] = array( 'type' => MENU_CALLBACK, 'page callback' => 'my_callback', 'delivery callback' => 'ajax_deliver', 'page arguments' => array(1), 'access arguments' => true, );

Непосредственно callback

function my_callback($fid) { $commands[] = ajax_command_replace('#ID_'.$fid, 'New value text'); $page = array('#type' => 'ajax', '#commands' => $commands); # если в форме у нас #type = submit ajax_deliver($page); # если у нас #type = link, то return $page; }

В форме у необходимого элемента прописываем:

'#ajax' => array( 'effect' => 'fade', # нижеперечисленное необходимо для #type = submit 'path' => 'path_to_page/'.$fid, 'event' => 'click', )

Если тип = link, необходимо ещё указать в аттрибутах класс use-ajax.

К чему все это написано:
не нашел нигде рабочего описания по работе с ajax['path'] вместо ajax['callback']
в случаях $form['element']['#type'] = ’submit’ или $form['element']['#type'] = ‘link’ – немного отличаются вывод и возврат callback.

P.S. сначала нашел решение, потом уже по delivery callback’y нашел эту статью и узнал про разницу в типах #type = submit|link.

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

Ajax Form в Drupal7

По мотивам Как проще всего реализовать аякс с выдачей json” и Установка фокуса на элемент формы*.

В итоге, на память себе и может кому понадобится:

В hook_menu:

$items['path_to_page/%'] = array( 'type' => MENU_CALLBACK, 'page callback' => 'my_callback', 'delivery callback' => 'ajax_deliver', 'page arguments' => array(1), 'access arguments' => true, );

Непосредственно callback

function my_callback($fid) { $commands[] = ajax_command_replace('#ID_'.$fid, 'New value text'); $page = array('#type' => 'ajax', '#commands' => $commands); # если в форме у нас #type = submit ajax_deliver($page); # если у нас #type = link, то return $page; }

В форме у необходимого элемента прописываем:

'#ajax' => array( 'effect' => 'fade', # нижеперечисленное необходимо для #type = submit 'path' => 'path_to_page/'.$fid, 'event' => 'click', )

Если тип = link, необходимо ещё указать в аттрибутах класс use-ajax.

К чему все это написано:
не нашел нигде рабочего описания по работе с ajax['path'] вместо ajax['callback']
в случаях $form['element']['#type'] = ’submit’ или $form['element']['#type'] = ‘link’ – немного отличаются вывод и возврат callback.

P.S. сначала нашел решение, потом уже по delivery callback’y нашел эту статью и узнал про разницу в типах #type = submit|link.

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

VK OpenAPI для Drupal 7

Енто быстрый и грязный порт vk_openapi под семерку.

https://github.com/orangeudav/vk_openapi7

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

SWEB. Скрипт импорта базы для друпала.

Суть проблемы – в /etc/my.cnf прописано init-connetc=”SET NAMES cp1251″

Для тех, кто не вкурсе – друпал делает SET NAMES UTF8

Соответственно если просто попытаться сделать mysqldump – то получим UTF8 символы интрепетерированые в cp1251. Восстановлению такая база не подлежит.

Использование ключей –default-character-set, –no-set-names , –set-charset ни к чему не приводят.
Так как сервер после инициации соединения, переключает кодировку на cp1251.

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

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

Инструкция по применению:

1) зайти по SSH – залить скрипт, прописать в него нужные данные

2) вызвать командой php script.php > dump.sql

Возможные проблемы: если у вас большая база.. то вы увидите сообщение killed!
В таком случае надо подправитьс крипт на то, чтоб делать дамп каждой таблицы отдельно – это дополнительный параметр в строке:
backup_tables(’localhost’,'username’,'password’,'dbname’,'TABLE_NAME’);
TABLE_NAME – заменить на имя таблицы.

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

Прикрепленный файл Размер sweb-dump.php_.txt 1.23 кб

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

Доклад Рамиля Кинзябулатова «Разработка интернет магазина на Drupal 7 и 1С»

Собственно ссылка на описание
По многочисленным просьбам выкладываю подробное описание моего доклада с картинками.

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

Модуль Яндекс.Карты 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

DrupalCafe №1 в Новосибирске


В Новосибирске состоится первое DrupalCafe.
Ждем всех желающих выступить с докладом и поучаствовать в обсуждении актуальных тем.
1.Тема доклада: “Семейство panels”, докладчик: Антон Галицын
2.Тема доклада: “Учетная система для Drupal”, докладчик: Павел Прищепа
3.Тема доклада: “Сравнение различных CMS таких как: Drupal, Bitrix и Netcat”, докладчик: Сорокин Андрей
4.Тема доклада: “Services”, докладчик: Роман Чижиков
5.Тема доклада: “Что могут Views”, докладчик Валуев Вадим
6.Тема доклада: “Размышления о Drupal-проектах”, докладчик Кирилл Финарти

Предварительная обязательная регистрация
г.Новосибирск, Академгородок, ул. Инженерная 20, Технопарк, конференцзал на 3 этаже
Начало: 25 февраля в 12:00
Окончание: 25 февраля в 15:00
Помощь в подготовке докладов Роман Чижиков: skype: roman.chizhikov
Организационные вопросы: Павел Прищепа: skype: prischepa.p
info@drupalsib.ru
тел.офиса (383) 233-27-00

Attached poll “Придете ли вы на первое DrupalCafe в Новосибирске?”.
Register or login to poll
Results:
да: 8 голосов
нет: 8 голосов

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

К вопросу о jQuery старших версий в Drupal 6

Исправления Drupal 6 для совместимости с jQuery 1.6.4 и более старших версий.

Работают все функции в том числе ajax, ahah, загрузка файлов, autocomplite, batch и tabledrag.

В common.includes нужно заменить функции для преобразования в формат json:

/** * Converts a PHP variable into its Javascript equivalent. * * We use HTML-safe strings, i.e. with <, > and & escaped. */ function drupal_to_js($var) { switch (gettype($var)) { case 'boolean': return $var ? 'true' : 'false'; // Lowercase necessary! case 'integer': case 'double': return $var; case 'resource': case 'string': /* Patch ++ */   // Always use Unicode escape sequences (\u0022) over JSON escape // sequences (\") to prevent browsers interpreting these as // special characters. $replace_pairs = array( // ", \ and U+0000 - U+001F must be escaped according to RFC 4627. '\\' => '\u005c', '"' => '\u0022', "\x00" => '\u0000', "\x01" => '\u0001', "\x02" => '\u0002', "\x03" => '\u0003', "\x04" => '\u0004', "\x05" => '\u0005', "\x06" => '\u0006', "\x07" => '\u0007', "\x08" => '\u0008', "\x09" => '\u0009', "\x0a" => '\u000a', "\x0b" => '\u000b', "\x0c" => '\u000c', "\x0d" => '\u000d', "\x0e" => '\u000e', "\x0f" => '\u000f', "\x10" => '\u0010', "\x11" => '\u0011', "\x12" => '\u0012', "\x13" => '\u0013', "\x14" => '\u0014', "\x15" => '\u0015', "\x16" => '\u0016', "\x17" => '\u0017', "\x18" => '\u0018', "\x19" => '\u0019', "\x1a" => '\u001a', "\x1b" => '\u001b', "\x1c" => '\u001c', "\x1d" => '\u001d', "\x1e" => '\u001e', "\x1f" => '\u001f', // Prevent browsers from interpreting these as as special. "'" => '\u0027', '<' => '\u003c', '>' => '\u003e', '&' => '\u0026', // Prevent browsers from interpreting the solidus as special and // non-compliant JSON parsers from interpreting // as a comment. '/' => '\u002f', // While these are allowed unescaped according to ECMA-262, section // 15.12.2, they cause problems in some JSON parser. "\xe2\x80\xa8" => '\u2028', // U+2028, Line Separator. "\xe2\x80\xa9" => '\u2029', // U+2029, Paragraph Separator. );   return '"'. strtr($var, $replace_pairs) .'"';   case 'array': // Arrays in JSON can't be associative. If the array is empty or if it // has sequential whole number keys starting with 0, it's not associative // so we can go ahead and convert it as an array. if (empty ($var) || array_keys($var) === range(0, sizeof($var) - 1)) { $output = array(); foreach ($var as $v) { $output[] = drupal_to_js($v); } return '[ '. implode(', ', $output) .' ]'; } // Otherwise, fall through to convert the array as an object. case 'object': $output = array(); foreach ($var as $k => $v) { $output[] = drupal_to_js(strval($k)) .': '. drupal_to_js($v); } return '{ '. implode(', ', $output) .' }'; default: return 'null'; } }   /** * Return data in JSON format. * * This function should be used for JavaScript callback functions returning * data in JSON format. It sets the header for JavaScript output. * * @param $var * (optional) If set, the variable will be converted to JSON and output. */ function drupal_json($var = NULL) { // We are returning JavaScript, so tell the browser.     drupal_set_header('Content-Type: application/json; charset=utf-8');   if (isset($var)) { echo drupal_to_js($var); } }

В атаче исправленные JS файлы из папки misc.

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

p.s.: если активно перебираете DOM, то вместо указателя на селектор $(’selector’) в скриптах можно использовать $.shell.find(’selector’), который работает в области видимости только document без учета window, что несколько быстрее.( зачем так? затем что всякие дополнительные скрипты типа гуглпоиска, метрики, других решений, которые бомбят в документ фрейемы и прочие посторонние объекты могут реально раздувать поле выборки )

Прикрепленный файл Размер drupal_javascripts.zip 31.31 кб

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

Модуль Яндекс.Погода для 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

DrupalConf 2012 – дата проведения

Всем привет!

Мы собираемся провести следующий DrupalConf 25-26 мая 2012 в Москве.

Но вот вопрос(просим расшифровать свой голос в комментариях):

Attached poll “какой формат будет для всех удобней ?”.
Register or login to poll
Results:
1 день – 2 потока – суббота (26 мая): 34 голоса
2 дня – 1 поток – пятница, суббота (25-26 мая): 35 голосов

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

Результаты встречи 22.12.2011 – ассоциация

Всем привет!

22 декабря 2011 года произошла встречи инициативной группы по созданию Российской Друпал ассоциации. От сообщества присутствовали: kostin, gagaga, axel, Даша Богуцкая, Андрей Постников и Паньков Артем.

Итак, промежуточные итоги встречи:
1. Маркетинг.
Маркетинг признал одним из важнейших направлений деятельности Ассоциации. На данном промежуточном этапе приоритетными задачами стали:
- участие Ассоциации в круглых столах, конференциях, выставках;
- увеличение числа публикаций в оффлайн журналах, статей, блогов и мнений экспертов;
- интенсивное освещения Drupal в смежных отраслях, а не на ресурсах, связанных с Drupal;
- создание промо-ролика о Drupal;
- разработку презентационных материалов;
- освещение лучших русских проектов на Drupal;
- привлечение новичков к Drupal;

2. Вопросы требующие дальнейшей проработки и обсуждения:
- сертификация специалистов и подбор персонала Ассоциацией;
- доработка сборок;
- консалтинг.

3. Организационно правовая форма Друпал Ассоциации.
Вопрос ОПФ будет прорабатываться в части целесообразности регистрации юридического лицо со сложной организационно-правовой формой(по сути, это создаст нагрузку на бухгалтерию, в том числе пересылку бумажных документов, как минимум 15 000*12 = 180 000, что в условиях неясности финансирования вызывает вопросы). Какое-то время мы еще будем консультироваться с юристами.
Вопрос, как я понимаю, больной и актуальный для многих. Мы думаем над тем, как принять взвешенное решение, которое устроит всех.

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

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

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

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

DrupalCafé №3 в Харькове – 26.01.2012


В четверг, 26 января, в 19:00, в Харькове пройдет третье по счету DrupalCafe.
Место проведения – по прежнему Выставочный центр «РАДМИР ЭКСПОХОЛЛ», по адресу ул. Академика Павлова 271 (м. Академика Павлова).

Темы докладов:
1. “Уровень абстракции баз данных и ее преимущества” (Бабченко Виталий)
“Задачи прототипов и их решения.” (Андрей Кошкин)
Краткий обзор модулей и их конфигурации описывающий создание функционального прототипа E-comerce и SocialComunity систем

2. “Принципы безопасной разработки сайтов на Drupal” (Иванченко Александр)

В процессе доклада будет рассмотрено:
-Безопасные принципы работы с БД средствами Drupal
-Принципы работы с пользователями и пользовательскими данными
-Как избежать XSS и CSRF атак
-Общие рекомендации для безопасной разработки

3. “Темизация Drupal 7″ (Литвиненко Сергей)

Архитектурные и принципиальне отличия тем для Drupal 7 от Drupal 6. Краткий обзор RDFa и работы с рендер массивами.

Участие бесплатное, в программе как обычно кофе+плюшки.
Желательно предварительная регистрация, всем желающим – отпишите в комментарии или в контакты ниже.
https://docs.google.com/spreadsheet/viewform?formkey=dERVTEhMVEdZMVdIVlk…

По всем вопросам можно обращаться:
+38(099)3525316 – Алексей Гайдабура, gaydabura@gmail.com skype: alexey.gaydabura
+38(067)2802207 – Иван Мосев, i.k.mosev@gmail.com, skype: i.k.mosev
Спонсор – WDG (http://wdg-company.com/)

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

Видео и слайды с DrupalCamp Donetsk 2011

Мы наконец-то выложили обещанное и долгожданное видео докладов с DrupalCamp! Спасибо Петру Козаченко, Владимиру Колосу и Александру Даниленко за съемку и обработку. Результат их совместной работы вы можете увидеть здесь http://www.youtube.com/user/DrupalCampDonetsk.

Мы также выложили слайды презентаций сюда http://slideshare.net/DrupalCampDN, А еще, мы прикрепили эти видео и слайды к темам докладов на нашем сайте: http://donetsk.drupal.ua/ru/program/session-schedule. Пожалуйста, оставляйте ваши отзывы!

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

С Новым Годом!

Всех со “старым” Новым Годом

Мы все такие разные, но давайте быть терпимее, добрее и лучше

А у Вас уже наступил? )))

p.s.: и всё таки Drupal рулит!

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

Новый PDF журнал о Друпале!

Друзья! Наша инициативная группа рада объявить о выходе в свет нового, открытого, русскоязычного электронного журнала – Drup’n’Roll!
На его страницах вы сможете найти много полезной информации для разработчиков и администраторов сайтов и прочих веб-приложений, созданных на базе нашей любимой CMF Drupal.

В первом номере вы найдёте статьи об особенностях построения процессов разработки вместе с модулем Features и инструментом Drush, прочитаете материалы об относительно новом течении в создании графических тем — Responsive design, сможете
ознакомиться с последними новостями из жизни Drupal-сообщества и мероприятиями по всему миру.

Для чего мы это делаем? Самая главная цель, которую мы ставим перед собой — популяризация CMF Drupal среди
разработчиков и потребителей их услуг. Будем учиться и работать вместе!

http://drupnroll.ru/

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

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

Яндекс сервисы в одном проекте

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

Поиск по сайту дал следующие результаты:

 Яндекс.маркет — 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

MVC в Drupal. Внедряем Page Controller’ы.

Хочу поделиться с комьюнити модулем controller, который можно взять здесь. В чем смысл модуля?

Модуль позволяет для каждого УРЛа, который вы определяете в hook_menu() прописать действие контроллера. Для этого есть специальный новый элемент ‘action’:

<?php
/**
 * Implements hook_menu().
 */
function controller_menu() {
  $items = array();
  $items['admin/settings/controller'] = array(
    'title' => 'Controller settings',
    'action' => 'SettingsController::indexAction',
    'access arguments' => array('access administration pages'),
  );
  return $items;

?>

Здесь объявляется новый контроллер SettingsController и действие indexAction() которое будет вызывано для УРЛа ‘admin/settings/controller’.

По умолчанию контроллеры должны лежать в специальной папке controllers/. Которую можно создать в папке своего модуля. Имя файла будет таким же как и прописано в ‘action’, однако имя класса нужно дополнять префиксом, который будет равен имени модуля после применения СamelCase нотации (с первой большой буквой). Звучит сложно, чтобы понять какие префиксы добавятся для разных модулей, несколько примеров:

foo_bar станет FooBar my станет My test_my_super станет TestMySuper и т. д.

В примере выше, в хуке меню объявлен контроллер SettingsController, имя модуля controller, значит полное имя класса будет ControllerSettingsController, а имя файла SettingsController.php. Пример как все это дело работает можно найти в самом модуле.

Надеюсь, понятно описал, если есть вопросы, спрашивайте!

P.S. У темы появилось продолжение.

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

Урок один. Создаем модуль на Drupal. Как с Drupal создать форму и вывести данные из формы на этой или другой страници. Хук hook

Пример 1. Как с Drupal создать форму и вывести данные из формы на этой или другой страници.

————————
| Создаем форму |
————————
|
———————————————————————
| Выводим данные с помощью функции variable_get() |
———————————————————————-

Для этого:
Создаем модуль.
Для этого:

- создаем папку и называем ее по названию модуля, например urokone и сохраняем его в my_site/sites/all/modules

- в этой папке создаем в notepad++ два файла в формате utf-8 without BOM. Что такое BOM и где скачать notepad++ смотрим в википедии.

Создаем два файла в этой папке и называем их
urokone.info
urokone.module

1.1. Минимальное содержимое файла urokone.info

; $Id$ name = Urokone   description = Simple form one core = 6.x

; $Id$ //если вы будите выставлаять ваш модуль на Drupal.org то он добавит автоматически свои параметры
name = urokone // название вашего модуля
description = Simple form one //описание
core = 6.x //в нашем случае мы пишем для Drupal 6.

1.2. Минимальное содержимое файла urokone.module

Минимальное содержание этого файла, для того что бы открыть страницу с модулем (с формой), это функция меню.

<?php   function urokone_menu() { $items = array();   $items['urokone'] = array( 'page callback' => 'drupal_get_form', 'page arguments' => array('urokone_formone'), );   return $items; }

$items['urokone'] = array( ); // эта сторочка означает, что форму c названием (Form_ID) urokone_formone, которую я собираюсь вставить в этот модуль можно будет найти после активации если кликнуть на локальном сервере

127.0.0.1/my_site/urokone

Теперь активируем модуль
Для этого:
- кликните в администраривной панели на Administer -> modules
ваш новые модуль будет находится в разделе others. Кликаем чекбокс напроив нашего модуля.
У меня на локальном сервере это выглаядит так:


И кликаем на кнопку Save Configuration. Когда сделаем следующие изменения в модуле надо будет очистить кеш. Administer->Performance->Clear cashed data

2. Пишим весь модуль.

———————————–
2.1 | Создаем меню |
———————————–
|
————————————————————————-
2.2. | Создаем условия доступа для различных пользователей |
————————————————————————–
|
——————–
2.3. | Создаем help |
——————–
|
—————————————————————————-

2.4. | Создаем форму |
———————–
|
———————————————————————————————-
2.5. | Выводим содержиое, которое user вбил в форму на экран (в нашем
случае в блоке)
————————————————————————————————

2.1. Создаем меню.

Для создания меню используем hook – это функции дрюпала. Например hook
function hook_menu()
для нашего модуля мы должны измеить по названию нашего модуля на

function urokone_menu() { $items = array();   $items['urokone'] = array( 'title' => 'Как подтвердить факт отправленния ненулевых данных в форму?', 'description' => 'Urokone first form', 'page callback' => 'drupal_get_form', 'page arguments' => array('urokone_formone'), 'access arguments' => array('access administration pages'), 'type' => MENU_NORMAL_ITEM, );   return $items; }

2.2. Создаем условия доступа различных пользователей.
Используем хук hook_perm()

function urokone_perm() { return array('access urokone content', 'access administration pages'); } // function urokone_perm() 2.3. Создаем help

Используем хук hook_help()

function urokone_help($path, $arg) { $output = ''; //declare your output variable switch ($path) { case "admin/help#urokone": $output = '<p>'. t("Displays information about site") .'</p>'; break; } return $output; } // function urokone_help

Здесь можно сохранить модуль. Помните (Administrator-> modules -> Save configurations) и посмотреть появление строчки “Displays information about site” , если пойти Administer – > help -> urokone

Если на этой страницы кликнуть на urokone то увидим страницу со строкой “Displays information about site”. Мы в хуке help можем заменить эту строку на подробное описание нашего модуля.

———————————————————————————————
Теперь нам осталось
————————
| Создать форму |
————————
|
———————————————————————
| Выводим данные с помощью функции variable_get() |
———————————————————————-
———————————————————————————————-

2.4. Создаем форму

Используем функцию urokone_formone()

Например я хочу сделать такую форму:

Для этого в Drupla мы пишем функцию urokone_formone().

function urokone_formone($form_state) { $form = array();   $form['one_one'] = array( '#type' => 'checkbox', '#title' => 'if ($_REQUEST["text"]) {echo "Data was send";}', '#default_value' => variable_get('one_one', false),   );   $form['one_two'] = array( '#type' => 'checkbox', '#title' => t('if ($_REQUEST("text")) {echo "Data was send";}'), '#default_value' => variable_get('one_two', false), );   $form['one_three'] = array( '#type' => 'checkbox', '#title' => t('if {$_REQUEST["text"]} {echo "Data was send";}'), '#default_value' => variable_get('one_three', false), );       return system_settings_form($form); } // end urokone_formone

Заходим на 127.0.0.1/lesson/urokone

При этом в результате работы функции return system_settings_form($form); появляютя две кнопки “Save configuration” и “Reset to default”

2.5. Выводим содержиое, которое user вбил в форму на экран (в нашем
случае в блоке. Используем хук hook_block.

function urokone_block($op='list', $delta=0) {   if ($op == "list") { $block = array(); $block[0]["info"] = t('urokone'); return $block; } else if ($op == 'view') { switch ($delta) { case 0: $block_content = ''; $block['subject'] = 'urokone';   $one_one= variable_get('one_one', false); $one_two= variable_get('one_two', false); $one_three= variable_get('one_three', false);   if ($one_one or $one_two or $one_three) { if ($one_one) $block['content'] .= 'your answer is correct '; if ($one_two) $block['content'] .= 'your answer is not correct '; if ($one_three) $block['content'] .= 'your answer is not correct'; } break;   } return $block; } } // end urokone_block

Теперь надо активировать новый блок urokone который мы создали. Идем в Administer -> blocks.
Находим наш блок urokone в списке Disabled.

Меняю регион с “none” на другоe. Я например выбрала “Left sidebar”.
И нажимаю на кнопку внизу Save blocks.

Теперь зайдем еще раз на страницу с нащей формой 127.0.0.1/lesson/urokone и кликнми на какой нибудь чекбокс. Например на вророй чекбокс с правильным ответом.
У нас слева в блоке urokone появится сообщение о том на какой чекбокс мы кликнули.

Прикрепленный файл Размер tut1_1.png 29.72 кб tut1_2.png 24.68 кб tut1_3.png 23.3 кб tut1_4.png 47.17 кб tut1_5.png 14.56 кб tut1_6.png 33.72 кб tut1_7.png 56.37 кб tut1_8.png 40.71 кб

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

Урок 2. Создаем модуль на Drupal. Как с помощью хука hook_form_form _ID_ alter изменить любую форму в нашем или чужом модуле.

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

Изменить форму можно и без использования модуля. Смотрите в комметах sas@drupal.org: Как без использования модуля изменить форму.

Код двух файлов модуля uroktwo:
uroktwo.info

;$Id$ name = Uroktwo description = Tutorial Change form with form_alter core = 6.x

uroktwo.module

<?php ;$Id$ /***************************************************** * Implements hook_menu(). *******************************************************/ function uroktwo_menu() { $items = array(); $items['uroktwo'] = array( 'title' => 'What is the correct way to create MySql database? ', 'description' => 'lesson two form', 'page callback' => 'drupal_get_form', 'page arguments' => array('forma'), 'access arguments' => array('access content'), 'type' => MENU_NORMAL_ITEM, ); return $items; } /***************************************************** * Implements hook_perm(). *******************************************************/   function uroktwo_perm() { return array('access uroktwo content', 'access administration pages'); } // function uroktwo_perm()   /***************************************************** * Implements hook_help(). *******************************************************/   function uroktwo_help($path, $arg) { $output = ''; //declare your output variable switch ($path) { case "admin/help#uroktwo": $output = '<p>'. t("Displays information about site") .'</p>'; break; } return $output; } // function uroktwo_help   /***************************************************** * Implements function forma *******************************************************/   function forma($form_state) { $form = array();   $form['one'] = array( '#type' => 'checkbox', '#title' => t('create.databas()'), '#default_value' => variable_get('one', false), );   $form['two'] = array( '#type' => 'checkbox', '#title' => t('mysql_create_db()'), '#default_value' => variable_get('two', false), );   $form['three'] = array( '#type' => 'checkbox', '#title' => t('create_mysql()'), '#default_value' => variable_get('three', false), );   $form['four'] = array( '#type' => 'checkbox', '#title' => t('create_d()'), '#default_value' => variable_get('four', false), ); $form ['submit'] = array ( '#type' => 'submit', '#value' => t('Submit'), ); return $form; } // end forma   /***************************************************** * Implements hook_block(). *******************************************************/   function uroktwo_block($op='list', $delta=0) {   if ($op == "list") { $block = array(); $block[0]["info"] = t('uroktwo'); return $block; } else if ($op == 'view') { switch ($delta) { case 0: $block_content = ''; $block['subject'] = 'uroktwo';   $one= variable_get('one', false); $two= variable_get('two', false); $three= variable_get('three', false);   if ($one or $two or $three) { if ($one) $block['content'] .= 'your answer create.database() was incorrect '; if ($two) $block['content'] .= 'your answer mysql_create_db() was correct '; if ($three) $block['content'] .= 'your answer create_mysql_db() was incorrect'; } break;   } return $block; } } // end uroktwo_block

Для написания hook_form_FORM_ID_alter нам надо знать значение FORM_ID. Если это наш собственный модуль, то можно просто посмотреть на функцию формы.

function forma ($form_state)

forma в нашем случае и будет Form_ID, а hook будет называтся название_модуль_form_forma_alter. Для нашего модуля это будет uroktwo_form_forma_alter.

Второй способ найти Form_ID это посмотреть source code. Для этого я на локальном компьюторе открываю страницу с формой. В моем случае название сайта lesson. В хуке меню мы в этой строчке определили ($items['uroktwo'] = array()), что форму можно открыть, если набрать 127.0.0.1/lesson/uroktwo.

Откройте страницу с формой. Теперь в интернет эксплоурере идите Page -> view souce. С помощью ctrl – F ищим строчку в которой есть слово form. У меня это

То есть id = “forma”

Теперь собственно хук

<?phpfunction uroktwo_form_forma_alter(&$form,
    &$form_state) {
  $form['one']["#title"] = "I do do not know";
      
   $form['five'] = array(
  '#type' => 'checkbox', 
  '#title' => t('create_data()'),
  '#default_value' => variable_get('five', false),
);
}
?>

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

Давайте это исправим. Добавим строчку weght в хук, и у нас получится

<?phpfunction uroktwo_form_forma_alter(&$form,
    &$form_state) {
  $form['one']["#title"] = "I do do not know";
      
   $form['five'] = array(
  '#type' => 'checkbox', 
  '#title' => t('create_data()'),
  '#default_value' => variable_get('five', false),
  );
$form ['submit'] ['#weight'] = 1000;
}

?>


На этом все.
P.S. Создавать новые модули надо сначала на отдельном, выделенном для этого сайте, а потом уже переносить в реальный сайт.

Прикрепленный файл Размер tut2_1.png 35.34 кб tut2_2.png 31.79 кб tut2_3.png 20.71 кб

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

Интервью 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

Всех с наступающим новым 2012 годом!

Хочу поздравить весь дружный состав д.ру с новым 2012 годом!)
Каждому желаю профессионального роста и интересных проектов. а д.ру желаю наконец то трансформироваться в очень удобный проект общения разработчиков)
Всех с наступающим 2012 годом!)
p.s. много не пейте)

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

Мои поздравления с наступающим 2012 новых годом !


Минуты радости пусть будут дольше, чем обычно,
Веселье – ярче, счастье безгранично,
Удача будет неразлучна с Вами,
Жизнь переполнена любовью и мечтами,
Живите каждый миг, наполнив смыслов и страстями,
Не расставайтесь в новый год с друзьями…

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

DrupalForum 2012. Место проведения – Украина, г. Запорожье

О событии

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

Для кого будет интересен DrupalForum?

Основная цель Drupal Forum – дать возможность специалистам приобретать и делиться полученными знаниями, а также организовать сообщество Drupal. Мероприятие будет интересно разработчикам (как начинающего, так и высокого уровня), менеджерам проектов, а также всем, кто связан с разработкой веб-проектов.

В 2012 году организаторы DrupalForum преследуют еще одну цель – популяризация Drupal. Специально разработанная программа DrupalForum 2012 предоставляет возможность всем желающим веб-мастерам и начинающим drupal разработчикам прослушать курс лекций по основам создания сайтов на CMS Drupal. Регистрируйтесь, количество мест на курс лекций для начинающих ограничено.

Программа и формат конференции

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

Конференция пройдет в течение двух дней (10-11 февраля 2012 года). В первый день планируется три потока, один из которых организован специально для начинающих друпалеров и веб-мастеров, которые только слышали о Drupal. На второй день планируется один поток докладов и BOF-ы (BOF-ы – спонтанные обсуждения, которые проходят в отдельной комнате).

Темы и докладчики

На конференцию прибудут и выступят передовые drupal разработчики Украины. Ожидаемое количество докладов – более 25-ти. На данный момент любой желающий имеет возможность подать доклад на официальном сайте конференции.

Место и время проведения

Drupal Forum традиционно пройдет в городе Запорожье. Дата проведения – 10-11 февраля. Место проведения – гостиница “FOUR POINTS by SHERATON”, расположенная по адресу бул. Шевченко 71А, Запорожье (Украина).

Условия участия и оплата

Вход на конференцию DrupalForum 2012 – свободный. Единственное условие – предварительная регистрация, которую можно пройти здесь.

Контакты

По всем вопросам и предложениям Вы можете связаться с организаторами:
Тел.: +38 (066) 123-77-54 – Евгений
mail: info@DrupalForum.com.ua

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

DWS-2012. Алло, мы ищем таланты!


В рамках проведения зимней школы по друпалу в г. Новосибирске (DWS-2012) мы ищем:

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

Те, кто вложатся в сообщество гарантированно будут иметь отдачу, в том числе и в виде дохода.

программа проведения Drupal Winter School

Те, кто решит проявить себя, пишите на почту: school@drupalsib.ru
В письме укажите, пожалуйста:

Что вы умеете делать и какие у вас есть навыки? Кем вы видите себя на Drupal Winter School? Что вас заинтересовало в данном мероприятии?

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

Управление размерами изображений пользователя в 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

DNS api.drupal.ru

Для сайта API сменился DNS, на время изменения доменных записей можно прописать IP-адрес 91.223.223.64 для api.drupal.ru. По вопросам работы сайта api.drupal.ru обращайтесь к Александру Швецу.

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

Новосибирск. Зимняя Школа Drupal 2012


Всем привет!

Сообщество DrupalSib стартует Зимнюю Школу веб-программирования на Друпал.
Кодовое название DWS-2012 (Drupal Winter School 2012)
http://www.drupalsib.ru/drupal-winter-school

Приглашаем пройти обучение.
Регистрация обязательно.
Есть скидки:
+ для тех кто раньше зарегался,
+ для тех кто пришел со своим ноутом,
+ для тех кто введет кодовое слово DRUPAL.RU
Скидки суммируются.

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

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

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

Мы работаем над привлечением проектов на сообщество и у нас есть прогресс в этом направлении.
Чем раньше мы подружимся с командами тем лучше для всех. Ждем контактов.

Мы все еще верим что удастся собрать в эНске добротную друпал-конференцию до конца 2012 года.

Ну и обязательно посмотрите наш ролик
http://www.youtube.com/watch?feature=player_embedded&v=lzNyB97hXgg
Он немного пафосный какой и должна быть реклама, но нам он очень нравится

Прикрепленный файл Размер logo_drupalsib.png 25.83 кб

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

Голосования в 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

Custom page – Создание пользовательских страниц

Описание:
Модуль создан для создания пользовательских страниц с возможностью подмены контента, как всей страницы, так и только той части, что выводится в переменной $content.

Возможности:
Создание неограниченного числа пользовательских страниц
Создание сложных путей
Создание путей с именованными параметрами вида %param, %some итд
Создание путей с именованными зарезервированными параметрами вида %node, %user, %modulename_modulename
Создание путей с неограниченным числом параметров (ограничение только на длину URI)
Создание не явных параметров вида %
Создание страниц с указанием ролей, которые могут иметь доступ к этим страницам
Создание страниц с указанием темы
Создание шаблонов страницы как в отдельном файле темы вида [cid].tpl.php, так и в template.php вида [cid]()
Поддержка модуля features для экспорта/импорта страниц
Поддержка модуля context

Подробности тут: http://css.mirocow.com/projects/custom-page/wiki/Wiki
Скачать тут: http://css.mirocow.com/projects/custom-page/repository

Level: Profi

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

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

и созданию Российской Друпал ассоциации(да, Дрис в курсе и одобрил)
план работы, миссия и возможные направления – http://cl.ly/192o2j251k1i3d060I2L
К диалогу приглашаются все, у кого есть ценные идеи, видение процесса и желание участвовать.

Формат встречи: круглый стол, 12 участников. Отписываемся, кто хочет участвовать.

Дата: четверг, 22 декабря, 19:00. Место: наш офис, м. Дмитровская, 2-ая Хуторская, д. 38а, с. 9

0. Паньков Артем
0. Анастасия Торлина
1. kostin
2. gagaga
3. axel
4. RxB
5. Даша Богуцкая
6. andriy.olischuk
7. andypost

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

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

#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

Сыграем вместе в мафию? Друпал-посиделки

Давайте в честь наступающего нового года соберемся и дружно сыграем в мафию.

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

В общем, все, кто будут в Москве 25 декабря обязательно приходите:)

В 16.45 ждем всех желающих в Циферблате на Солянке (м.Китай-город, ул. Солянка, 11/6, на углу здания стеклянная дверь – звонить в домофон. Без вывески).

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

Если не умеешь играть? все равно приходи, мы тебя быстро научим!

Условия:
1. Оплата. Согласно формату Циферблата нужно платить поминутно – в первый час 2 рубля в минуту, каждый последующий час – 1 рубль в минуту. За это получаете чай (в неограниченном количестве), сладости, вкусное варенье, можно даже поджарить в тостере хлеб либо положить себе в тарелку понравившееся печенье и бублики.

2. Принеси подарок. Средняя цена подарка не больше 50 рублей – чисто символический. Каждый принесет с собой сюрприз, мы на месте вытянем бумажки с именами гостей и подарим свой подарок тому, чье имя вытянем. Это очень важная часть любого новогоднего праздника! Отговорки типа “не знал, что подарить”, “забыл”, “не успел купить” не принимаются. Принесите то, что самому было бы приятно получить, подумайте, чем удивить человека, которого даже не знаете)
Что дарить?
- что-нибудь вкусное
- что-нибудь сделанное своими руками
- то, что хотелось бы получить самому, но никто почему-то не дарит…
- все, что угодно
- приятную безделушку

3. Оденься красиво. Чтобы у нас было праздничное настроение нужно всем нарядиться:
- парни – поменяйте ради этого события привычные джинсы и свитер на рубашку (вы даже не представляете как нравятся девушкам ребята в белых рубашках – в этом определенно что-то есть:)) и брюки – чтобы нам, барышням, хотелось на вас побольше смотреть и заглядываться;)
- девушки – откажитесь на несколько часов от брюк и джинсов, давайте наденем платье или юбку)

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

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

Подробности http://vkontakte.ru/topic-32565125_25651784

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

Модуль блока календаря по материалам для 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

Ищем тех друпаллеров, кому интересно выступать перед публикой, делиться опытом, обучать

Для проведения в Москве семинаров по Drupal

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

Так же будем рады партнерству.

В данный момент особенно нужны:
- специалист по сео-оптимизации;
- специалист по jQuery;
- специалист PHP.

Новосозданная группа вконтакте http://vkontakte.ru/club32565125
Там есть афиша ближайших мероприятий. Приходите – смотрите)
Если интересно сотрудничать, пишите daredjana@gmail.com

В письме укажите, пожалуйста, 1) что вы умеете делать, 2) в чем видите свою роль при нашей совместной работе 3) и что вас мотивирует.

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

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

кто оставил полосатенькую шапочку на конфе?

пишите в личку с указанием цвета шапочки и его производителя.
если никто не напишет – фапотьку оставлю сибе: она офигенна!

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

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

Платежный модуль для системы mainpay

Добрый день!
Во вложенных файлах модули для интеграции платежной системы Mainpay и Drupal, а также Drupal ubercart.

Принимают оплату с помощью карт, электронных кошельков (WebMoney, Яндекс.Деньги и прочие) и мобильной коммерции. Помимо этого есть SMS и терминалы.
Если возникнут вопросы или пожелания по модулю – пишите на support@mainpay.ru

Прикрепленный файл Размер mainpay_drupal.zip 10.66 кб uc_mainpay.zip 9.89 кб

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

DrupalCafe №1 в Днепропетровске – 8 декабря

В четверг, 8 декабря, в 19:00, в Днепропетровске, по адресу ул. Телевизионная 4а, в большом конференц зале, на 3-м этаже состоится дебютное DrupalCafe №1 в Днепропетровске.

По плану состоится обсуждение двух тем:

1. Управление отображением материалов с помощью Display suite. Докладчик – Илья Станкевич (AMgrade). Уровень темы –Средний.

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

2. Module Relation. Докладчик – Артем Бердышев (AMgrade). Уровень темы – Средний.

В докладе Артем подробнее расскажет:
• о возможностях и недостатках references-модулей;
• о модуле Relation и его отличии от references;
• об интеграции модуля Relation с Views;
• приведет пример использования модуля Relation

Напоминаем, DrupalCafe имеет формат локальных встреч пользователей и разработчиков CMS Drupal. Организатором встречи является компания AMgrade с поддержкой Компьютерной Академии «ШАГ». Вход свободный.

Желающие быть в курсе будущих DrupalCafe в г. Днепропетровске могут написать письмо по электронной почте на cafe@amgrade.com и сообщить имя и контактный email. Оповещение придет за несколько недель до события с подробной информацией (дата, время, место, темы).

За дополнительной информацией можно обращаться, позвонив по телефону +38 (066) 123-77-54 или написав письмо на электронную почту e.shalenniy@amgrade.com

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

Перерыв в работе сайта 16-19 ноября 2011

RAID5 это не только высокая скорость и надёжность при сбое одного диска, но и полный п… несколько дней возни при сбое двух дисков. Сервер где размещался drupal.ru и другие сайты в полуразобранном состоянии и пока он не соберётся обратно для сайта найдено новое место.

За время своей жизни drupal.ru сменил разные хостинги, от шареда на инфобоксе и балкона московской квартиры, до выделенных серверов в Masterhost и собственного сервера. Пришло время потестировать ещё одну площадку  Gor Martsen предоставил ресурсы своего хостинга it-patrol.com под размещение drupal.ru, за что Гору огромное спасибо!

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

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

15 ноября 2011: планируемый перерыв в работе сайта

Ввиду работ по замене дисков на сервере, где размещён drupal.ru, сайт будет недоступен несколько часов, сегодня 15 ноября 2011. Время начала работ пока не известно, скорее всего в первой половине дня по московскому времени.

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

Opendeals

Opendeals друпал сборка для электронной коммерции
http://drupal.org/project/opendeals

Состав модулей типовой commerce, views, rules, features. Cборка не самая легкая, но тем не менее шевелится. Удобно реализована панель для управления нодами-представлениями продуктов. Добалено несколько правил для управления магазином и демо-контент.

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

Недоступность сайта в субботу 12 ноября 2011

Несколько часов 12 ноября 2011 сайт был недоступен. После сбоя питания у хостера на нашем сервере отказал один из дисков в RAID и произошли критические ошибки на нескольких ФС, в результате mysql не перезапустился при рестарте сервера. ФС восстановлены, все сервисы возвращены к работе.

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

Обновляем мгновенно сайты через 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

[DrupalЮг][Краснодар] Посиделки 12 ноября

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

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

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

DrupalCafe №4 в Запорожье – 10 ноября

В четверг, 10 ноября, в 19:00, в Запорожье, в лекционном зале Компьютерной Академии «ШАГ», по адресу Рекордная 20, состоится DrupalCafe №4.

Темизация Drupal 7 с нуля. Докладчик – Алексей Попов. Уровень темы – начальный. Алексей продемонстрирует, как сделать тему для Drupal 7, располагая только готовой версткой и не используя Zen. Пошаговые формы в Drupal. Докладчик – Анатолий Герасимов (AMgrade). Уровень темы – начальный. Анатолий раскажет о вариантах реализации пошаговых форм в Drupal, а также покажет возможность их создания различными способами.

Напоминаем, DrupalCafe имеет формат локальных встреч пользователей и разработчиков CMS Drupal. Организатором встречи является компания AMgrade с поддержкой Компьютерной Академии «ШАГ». Вход свободный.

Желающие быть в курсе будущих Drupal Cafe в г. Запорожье могут написать письмо по электронной почте на cafe@amgrade.com и сообщить имя и контактный email. Оповещение придет за несколько недель до события с подробной информацией (дата, время, место, темы).

За дополнительной информацией можно обращаться, позвонив по телефону +38 (066) 123-77-54 или написав письмо на электронную почту e.shalenniy@amgrade.com

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

DrupalCafé №2 в Харькове – 27.10.2011


В этот четверг, 27 октября, в 19:00, в Харькове пройдет второе по счету DrupalCafe.
Место проведения – Выставочный центр «РАДМИР ЭКСПОХОЛЛ», по адресу ул. Академика Павлова 271 (м. Академика Павлова).

1.Drupal6. Musthave modules. Алексей Гайдабура (WDG).

2. Drupal7 Deploy using Apache Ant – Дмитрий Светличный (WDG). Решение проблем синхронизазии между dev и production версиями БД.

3.Unit-тестирование в Drupal. Selenium – Дмитрий Олареско

UPD:
4. Мобильная разработка под
PhoneGap: прогулка по пересеченной местности с препятствиями

* PhoneGap что это вообще такое?
* В каких условиях работает?
* Что предоставляет?
* Время собирать грабли
* …
* Profit ли?

Участие бесплатное, в программе как обычно кофе+плюшки.
Желательно предварительная регистрация, всем желающим – отпишите в комментарии или в контакты ниже.
https://docs.google.com/spreadsheet/viewform?hl=ru&formkey=dEFMMVd3SXRxe…

По всем вопросам можно обращаться:
+38(099)3525316 – Алексей Гайдабура, gaydabura@gmail.com skype: alexey.gaydabura
+38(067)2802207 – Иван Мосев, i.k.mosev@gmail.com, skype: i.k.mosev
Спонсор – WDG (http://wdg-company.com/)

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

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 Cafe Иркутск

Первая, сентябрьская встреча сообщества Drupal в Иркутске доказала, что эта CMS интересна и востребована.

Продолжаем! Ждем всех, кто знаком или только хочет познакомиться с лучшей бесплатной системой управления сайтами, в четверг, 27 октября в кофейне “Белая ворона”: http://vkontakte.ru/coffeenbook

Формат встречи:

Несколько коротких докладов (15-20 минут), интересных, в первую очередь, новичкам в Drupal. Неформальное общение Drupal-разработчиков – обмениваемся опытом, знакомимся с коллегами Распитие кофе/чая/других напитков.

В программе 2 доклада (пока):

“Насколько глубока кроличья нора?”. Продвинутое применение модуля Views (доклад, который не вошел по времени в прошлую встречу) Интернет-магазин на Drupal? Бредовая идея!

Начало в 19:00
Адрес кофейни “Белая ворона”: Карла Маркса, 37. Вход через магазин цветов “Рассвет”, находится между Л’Этуалью и Золотом Якутии. Заходите в цветы, немного проходите вперед и спускаетесь в цокольный этаж, идите на запах кофе.

Drupal Cafe Иркутск в социалках:
“В контакте”: http://vkontakte.ru/event31257801
“Facebook”: http://www.facebook.com/event.php?eid=240592689322661

Иркутяне, добавляйтесь!
Есть вопросы? Звоните: +7 914 8888621

Комментировать можно здесь и на drupal4all: http://drupal4all.ru/node/28

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

Интеграция 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

Первая конференция разработчиков во Владивостоке VLDC#1

В нашей провинции не так уж много всего этого интернета, но иногда кое-что случается. Все кто работает по Drupal во Владивостоке и Приморье приглашаются. Еще даже есть время заявить доклад. Я хотел это сам сделать, но пока здоровье немного не позволяет. Но в любом случае будет интересно пообщаться с коллегами и в кулуарах. Вход свободный. Подробности – www.vldc.ru

UPD: Конференция прошла на ура. Мои впечатления http://shaman.asiadata.ru/node/570
Доклады принимались в PDF, велась видеозапись. Так что, как будут материалы в сети, скину ссылки отдельным постом. Некоторые доклады реально увлекли.

UPD: Отдельного поста пока не получается. Доклады конференции можно найти на YouTube http://www.youtube.com/playlist?list=PL22D4523E5E229D54

Спасибо GrawlCore за труды по заливке. Плюсаните его там на Хабре.

И, кстати, начались шевеления насчет провести во Владивостоке хотя бы Drupal Cafe.

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

Тема админки 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

Корзина Ubercart в popup окне

Решил на сайте сделать корзину в сплывающем окне.
Прежде всего хочу сказать спасибо Splash за помощь по выковыриванию данных из корзины.
И за отличный модуль UC JS CART который очень был кстати.
Были использованы модули  uc ajax cart для добавления динамической корзины,  colorbox для попап окон, uc js cart для динамического подсчета товара, ну и немного допилены tpl и css.
Итак первое это uc ajax cart. В нем есть папка с тимплейтами, немного правим .tpl для реализации внешнего вида и некоторого функционала.
Сюда же добавим скрытый div с содержимым корзины и ссылку colorbox для показа этого содержимого в попап окне.
У меня это так:

<a href="?width=850&height=auto&inline=true#cartOpen" class="colorbox-inline">В корзине <?   $a = count(uc_cart_get_contents()); echo $a.' товар'.numberProduct($a, array('','а','ов'));       ?></a>   <div class="price-of-cart">на <strong><?php print $total ;?></strong></div> <div id="myCart" style="display:none;"> <div id="cartOpen"> <h2 class="cart_header">Корзина</h2> <?php print ubercart_popup(); ?>   </div> </div>

По внешнему виду так:

Там еще функция для склонения товар, товары, товаров есть:

<?php function numberProduct($number, $titles) { $cases = array (2, 0, 1, 1, 1, 2); return $titles[ ($number%100>4 && $number%100<20)? 2 : $cases[min($number%10, 5)] ]; } ?>

Далее как вы увидели в шаблоне есть вывод содержимого корзины <?php print ubercart_popup(); ?>
Это и есть функция которая выдирает содержимое корзины писать её нужно в template.php
Выглядит она так:

function ubercart_popup() { if (module_exists('uc_cart')) { $items = uc_cart_get_contents(); if (empty($items)) { return theme('uc_empty_cart'); } $output = ''; foreach (uc_cart_cart_pane_list($items) as $pane) { if ($pane['enabled']) { $output .= $pane['body']; } } return '<div id = "uc_popup">'. $output .'</div>'; } }

В общем содержимое уже выводится в попапе, только вот есть несколько моментов. Это не срабатывает яваскрипт для обновления позиций товара из модуля uc ajax cart(как решить не знаю). По этому поводу я отключил в настройках модуля фитчу “Ajaxify cart page”.
Далее установите модуль uc js cart – как раз он и позволяет динамически подсчитывать стоимость.
Вот практически и все. Остальное можно сделать средствами css.
Осталось одно, когда мы открываем корзину и добавляем или уменьшаем количество позиций, в самом блоке корзины при закрыти попап окна нихера не меняется. Скорее всего нужно дописать кусок яваскрипт кода для обновления.(займусь позже)
У меня это выглядит вот так все:

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

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

Мини-CRM своими ручками часть. 4 (Заключительная)

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

Глава 1

Как скрыть ноду от лишних глаз

Актуально при постройке структуры на основе нод, закрепление материала освещенного в части 2

Глава 2

Карточка компании

темизируем ноду

Глава 3

Типы материалов

Пробежимся по 3-ем основным материалам

Глава 4

Заключительная

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

Глава 5

Заключительная 1 (нов 2)

И все-таки, а нахера оно надо?
Отвечу: помощь манагерам или персоналу без финансовых вливаний. Повышение личного экспириенса. Могу я, значит может и друпал, только четко поставить задачу.
Можно построить ледокол из обычной лодки. Все ограничено Вашей фантазией или конкретной задачей.

часть 1
часть 2
часть 3
————–
оригинал

————–
ДАМП
SQl дамп
Дамп сайта целиком

Импортируете SQL в свою базу ( мой префикс crm2_ ) Заливаете дамп сайта на хостинг (денвер) или еще куда. Дамп целиком, с модулями и т.д. Редактируете settingd.php под свои нужды Заходите на свой сайт через www Логин – cooper Пароль – cooper

Attached poll “Делать дамп?”.
Register or login to poll
Results:
нах: 4 голоса
давай: 15 голосов
давай, я помогу идеями и реализацией: 5 голосов
давай-давай, я его подшаманю и продам, а тебе шиш: 2 голоса
не-не-не, я с 1С останусь: 0 голосов

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

[Состоялось][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

Объявляется прием заявок на доклады на DrupalCamp Donetsk 2011

Друзья, мы рады сообщить вам приятную новость! Мы начали принимать заявки на доклады на DrupalCamp Donetsk 2011, который состоится 25-27 ноября в отеле Ramada (бывш. Атлас). Подать заявку можно на сайте события до 31 октября, после чего пройдет голосование.

В программе DrupalCamp 14 докладов, BoF’ы (самоорганизующиеся обсуждения, спонтанные доклады и прочие активности), дополнительный день для код спринта, а также конкурсы и вечеринка, где будет звучать Drupal-rock!

Во время DrupalCamp вы сможете повысить свой уровень владения Drupal, завести новые профессиональные контакты, найти сотрудников или работодателя. Ожидается более 100 участников из Украины, России и из-за рубежа!

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

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

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

DrupalCafe №3 в Запорожье – 6 октября

В четверг, 6 октября, в 19:00, в Запорожье, в лекционном зале Компьютерной Академии «ШАГ», по адресу Рекордная 20, состоится DrupalCafe №3.

По плану состоится обсуждение двух тем:

Views + Context = Layout. Докладчик – Павел Шейман (AMgrade). Уровень темы – начальный. Павел расскажет о модулях Views и Context и том, как с их помощью можно контролировать вывод материалов на странице. Перенос материала (Content deployment). Докладчик – Ефим Евтушенко (AMgrade). Уровень темы – начальный. Ефим сделает обзор модулей, позволяющих переносить контент с одного drupal сайта на другой, и расскажет о возможностях этих модулей, их плюсы и минусы.

Напоминаем, DrupalCafe имеет формат локальных встреч пользователей и разработчиков CMS Drupal. Организатором встречи является компания AMgrade с поддержкой Компьютерной Академии «ШАГ». Вход свободный.

За дополнительной информацией можно обращаться, позвонив по телефону +38 (066) 123-77-54 или написав письмо на электронную почту e.shalenniy@amgrade.com

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

Drupal Cafe в Иркутске – 29 сентября!

Итак, окончательная информация:

Дата: четверг, 29 сентября, 19:00.

Место проведения Drupal Cafe в Иркутске – кофейня “Белая ворона”: http://vkontakte.ru/coffeenbook. Адрес: Карла Маркса, 37. Вход через магазин цветов “Рассвет”, находится между Л’Этуалью и Золотом Якутии. Заходите в цветы, немного проходите вперед и спускаетесь в цокольный этаж, идите на запах кофе.

В программе – 3 доклада (20-30 минут):

“Насколько глубока кроличья нора?”. Продвинутое применение модуля Views (уровень – начальный и средний). “Ускоряемся”. Быстрая разработка шаблонов Drupal при помощи “базовых” тем (уровень – начальный и средний). “Мелочи в Drupal”. “Подводные камни”, о которых лучше знать заранее. (уровень – начальный).

Будем рады видеть всех, кому интересен Drupal и вообще тема создания сайтов и веб-сервисов.

Drupal Cafe Иркутск в социалках:
“В контакте”: http://vkontakte.ru/event30298356
“Facebook”: http://www.facebook.com/event.php?eid=172728356140202

Иркутяне, добавляйтесь!

Есть вопросы? Звоните: +7 914 8888621

Комментировать можно здесь и на drupal4all: http://drupal4all.ru/node/25

Афиша мероприятия

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

Комиссия РАЭК приняла стандарты веб-разработки

В середине сентября опубликована публичная версия стандартов веб-разработки в версии 1.0. Документы подготовлены представителями Ассоциации интернет-разработчиков при поддержке Российской ассоциации электронных коммуникаций (РАЭК) и компании Microsoft.
Настоящая редакция затрагивает стандартизацию основных этапов разработки и продвижения сайта, а также представляет для ознакомления образцы основных документов, которые сопровождают рабочий процесс от момента знакомства Заказчика и Исполнителя до выставления счета на оплату.
Приведенные на сайте документы носят рекомендательный характер для исполнения следующих работ:
· разработка веб-сайта
· разработка дизайна веб-сайта
· продвижение веб-сайта в поисковых системах
Окончательное принятие стандартов прошло на заседании Комиссии РАЭК по веб-разработке, которое состоялось в рамках Общего собрания членов РАЭК 12 сентября 2011 года.
По мнению создателей, эти документы могут быть полезны как для начинающих веб-разработчиков, так и для компаний, уже существующих на рынке.

Ознакомится можно тут http://wsdoc.ru

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

Очередное Drupal Cafe в Ростове

Предлагаю провести вторую встречу Drupal Cafe в Субботу 1 октября в 15:00 (так чтобы удобно было добраться в Ростов и из Ростова гостям из других городов, если у них будет возможность приехать).
Будет это в Yo Budda (Б.Садовая, 2), что крайне удобно приезжим (очень близко к вокзалу, сами смотрите).

На повестке дня:
1. Будут новички – вот и познакомимся
2. Баркэмп Краснодар – кто едет
3. Сообщество стартаперов в Ростове – почему бы не рассказать им про друпал
4. Succes stories – посиделки в кафе не располагают к каким-либо структурным докладом, но располагают к небольшим историям из личного опыта, ради этого стоит отвлечься на пару часов и посидеть с коллегами

Телефон для связи 89287700850

Attached poll “Примерно сколько человек ждать, сообщите пожалуйста”.
Register or login to poll
Results:
Я буду: 0 голосов
В другой раз: 0 голосов

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

Размещение баннеров в теле view

Может кому пригодится http://druit.ru/blogs/views/203

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

Содержимое ноды в окне 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

Модуль интеграции инструментария для работы с изображениями GraphicsMagick

Сделал модуль  ImageAPI GraphicsMagick интегрирующий инструментарий для работы с изображениями GraphicsMagick c ImageAPI. С помощью модуля можно применять GM для обработки изображений, например в модуле ImageCache и ImageCache Actions (вместо встроенного в php GD2 и ImageMagick).

На данный момент в нем интегрированы простейшие действия (изменения размеров, кадрирование и т.д.). Также реализовал поддержку наложения водяных знаков с помощью этого модуля в модуле ImageCache Actions: http://drupal.org/node/1284668 .

Больше всего модуль будет полезен программистам, способным написать свое действие (image action) но также подойдет и обычным пользователям для снижения нагрузки на хостинг и ускорения “тяжелых” операций с изображениями (естесственно, при условии, что вы можете установить сам GraphicsMagick – не на каждом хостинге это доступно).

Видел на Д.ру уже подобную тему, но там речь шла о модуле для D7. Этот модуль – только для D6.

Сравнение с ImageMagick ImageAPI инструментарием. Этот модуль не использует GM как IM (GM частично поддерживает команды IM). В целом, я считаю достоинством то, что это отдельный ImageAPI инструментарий. Например, этот модуль знает про существование gm утилиты и ее команд, и может запускать другие команды gm, а не только convert. Кроме того, GM на одних и тех же командах может вести себя не так, как IM, потому что его исходный код отличается. Этот модуль запускает каждое действие с изображением как отдельную операцию с временным файлом. Данное поведение необходимо, чтобы полноценно использовать различные команды (GM не умеет группировать _все_ команды в одну). Это несет в себе потенциальные недостатки (небольшое снижение производительности и возможную потерю качества результирующего изображения при многократных последовательных операциях с потерей качества), но обходится с помощью своего действия (image action). Этот модуль работает в “сыром” режиме – каждое действие имеет полный доступ к командной строке (на самом деле, действие само запускает GM) что позволяет делать с изображением все что угодно, включая запуск любых сложных операций и внешних программ обработки изображений.

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

Дру-Палки! Все в Ёлки-Палки!

Всем! Всем! Всем!

Желающим! Наблюдающим! И просто Сочувствующим!

Общение, общение, общение – активное, креативное, позитивное, попивательное, пожевательное, сногшибательное!

Место встречи: традиционное (м. Китай-город, Ёлки-палки – Москва, ул. Солянка, 1/2, стр. 1).
Время: известное (ориентировочно 24.09.2011 в 18:30).
Повестка: дружить, общаться, развлекаться.

Ждем всех! Не стесняйтесь! Присоединяйтесь!

Пишите в теме, кто постарается присутствовать.

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

[Решено] Пропал/исчез/отвалился CKeditor / IMCE

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

Возможная проблема 1

Проблема: Установили модуль, но не закинули в него сам редактор.
Решение: Идем на страничку редактора, качаем и закидываем файлы и папки редактора в подпапку “ckeditor” папки модуля. В этой подпапке должен быть файл-подсказка COPY_HERE.

Возможная проблема 2

Проблема: Панелька просто не появляется. Или появляется, но не у всех пользователей.
Решение: Во первых правильно должны быть настроены разрешения ролей самого Drupal (mysite/admin/user/permissions). Во вторых CKeditor нужно вручную привязывать к новым ролям. Идем в настройки редактора (mysite/admin/settings/ckeditor), выбираем профиль, например Default и напротив него нажимаем “изменить”. В первой группе настроек “Основные настройки” выставляем галочки нужным новым ролям.

Возможная проблема 3

Проблема:

У меня такое произошло после выгрузки сайта на хостинг.
Решение: Помогло удаление модуля и переустановка+перенастройка прямо на хостинге. Корень проблемы так и не нашел.

Возможная проблема 4

Пробелма: не открывается файловый менеджер IMCE или нет кнопки “Browse” при попытке добавить картинку в сообщение.
Решение: идем в настройки редактора (mysite/admin/settings/ckeditor), выбираем профиль, нажимаем напротив него “изменить”. Далее в группе Настройки файлового браузера, в File browser type (Link dialog) выбираем IMCE.

Возможная проблема 5

Проблема: При работе с IMCE нет кнопки “загрузить” и “Создать дирректорию”.
Решения: Во-первых, чтобы создать поддиректории нужен модуль IMCE mkdir. Кнопки у меня пропали из-за конфликта с “modernizr”, который использовал при вертске.

UPD: предложенные решения помогли именно мне, в то время как не помогли другие. Таких “других” очень много. Смотрите и их, напрмиер кликнув по тегу ckeditor.

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

Drupal Cafe в Иркутске

Есть мысль провести в Иркутске встречу в формате Drupal Cafe.

Ориентировочная дата – четверг, 29 сентября, 19:00. Место и программа уточняются.

Напомню – формат Drupal Cafe предполагает несколько коротких докладов (15-20 минут), а так же дружеское общение с распитием кофе/чая/других напитков.

Иркутяне, присоединяйтесь!

Drupal Cafe Иркутск в социалках:

“В контакте”: http://vkontakte.ru/event30298356
“Facebook”: http://www.facebook.com/event.php?eid=172728356140202

Комментировать можно здесь и на drupal4all: http://drupal4all.ru/node/25

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

С праздником!

Всех программистов поздравляю с профессиональным праздником! Успехов в работе и не бросайте Друпал Без вас тут будет тяжело

Источник: 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

Тормозит трекер ? Есть решение – Views Tracker !

Сделал модуль  Views Tracker, позволяющий создавать высокопроизводительную замену родному трекеру из ядра. Модуль основан на идеях модуля Tracker 2, но по сути является абсолютно новым, написанным с нуля проектом.
Актуальность модуля можно почувствовать на своей шкуре здесь, на Drupal.ru, где трекер, похоже, кешируется, что убивает основную идею – быстрое отслеживание изменений.

Чтобы получить максимальный прирост производительности от использования модуля, нужно создать view по аналогии с tracker, встроенным в Views, но использовать поля, аргументы, фильтры и критерии сортировки из групп модуля Views Tracker везде, где это возможно:

для общего трекера используйте группу Views Tracker для трекера пользователя используйте группу Views Tracker User

Список дополнительных фич и различий между Views Tracker и Tracker2:

В отличие от Tracker 2, Views Tracker имеет индекс по типу материала. За счет этого можно создавать разные трекеры для разных групп материалов без потерь скорости. В отличие от модуля Tracker 2, Views Tracker имеет поддержку модуля Node Comments Views Tracker содержит значительно меньше кода, чем Tracker 2. Tracker 2 не поддерживается – значительные изменения происходят за кадром. Видимо, сказывается то, что модуль используется на Drupal.org Tracker 2 имеет интерфейс пользователя, а Views Tracker нужно использовать вместе с модулем Views (или написать свой интерфейс). Поддержка Views в Tracker 2 тоже есть, но почему-то отсутствует в релизе (те самые изменения “за кадром”).

Модуль только выложен, возможно имеет баги. Приглашаю желающих к тестированию.

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

Ajax Microblog – стремимся реализовать Twitter.com

Рад общественности представить новый модуль. Это Ajax microblog. Данный модуль реализует функционал Twitter и будет развиваться в этом направлении. Целью модуля или пакета модулей является организация полной копии функционала предоставляемой всеми известной системой микроблогинга Twitter.com

Ссылка на проект: http://css.mirocow.com/projects/microblog
скачать тут: http://css.mirocow.com/projects/microblog/repository

Спонсор модуля: www.ruh.kz

Прикрепленный файл Размер e6674f3201affd625334c0d00cb96301.jpg 71.2 кб

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

Нам пора задуматься(неделя вежливости на портале)

На одном очень популярном ресурсе посвященном различным ЦМС, в комментах о друпале нашел следующую запись о минусах системы:”Грубое русское сообщество”.
Это ведь мы с вами. И правда грубим и хамим новичкам. И я в том числе( Давайте будем добрей и терпеливее.
п.с. такое вот сегодня лирическое настроение

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

Как сделать e-mail рассылку дайджестов любых материалов сайта в автоматическом режиме

Только что опубликовал новость как комментарий в посте о модуле рассылок.

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

Материалы публикуются на сайте и тут же попадают в рассылку, на основе определенных правил. Эти правила задаются через views.

Как это делается – всего 3 простых шага:

Берете мой модуль подписки – он нужен для набора подписчиков. Или используете “ручную” форму подписки от сервиса Настраиваете любой фильтр через views на отдачу материалов в виде rss Скармливаете один, два или сколько вам нужно вариантов rss сервису рассылок и… вуаля: письма уходя автоматически.

Подробнее о том как скормить и настроить rss для отправки писем.

Это не просто банальное транслирование rss на e-mail. Вы получаете:

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

Предпоследний и последний пункты требует отдельного пояснения.

Благодаря режиму отправки по расписанию, вы фактически можете организовать регулярные дайдежесты материалов сайта на e-mail. Или, наоборот, отправлять каждый новый материал “моментально” (раз в час).

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

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

Появились вопросы, спрашивайте – отвечу.

P.S. Если у вас уже собрана база подписчиков легально (!), то вы можете ее импортировать.

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

Мини-CRM своими ручками часть. 3

Продолжаем разгребать Вьюсы, Флаги и панели.
В данной статье рассмотрим блок (views) Часть Б нашего интерфейса и его работу.
Под катом трафик 1,3 мб.

Здесь мы рассмотрели только одну вьюху. Дальше больше! Когда протрезвею тогда посмотрим настройки флагов, настройки Rules и много еще чего вкусного.

часть 1
часть 2
часть 4
————–
оригинал

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

Вышел 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

«Сделайте мне красиво»: User:Name в качестве аргумента Views

Я думаю, каждый друпалер использует на своих сайтах модули  Views и  Pathauto. Да, на некоторых сайтах можно без них обойтись, но, фактически, оба этих модуля давно входят в джентльменский набор при запуске нового сайта, поэтому нет нужды объяснять, для чего они используются. Некоторое время назад я столкнулся с проблемой, которая не то, чтобы была критичной, но беспокоила моё эстетическое чувство и не давала мне считать свою работу выполненной. Дело было связано с тем, что views и pathauto по-разному представляют пользователю одни и те же вещи — как-то заголовки материалов и имена пользователей.

До некоторых пор это не особенно бросается в глаза, но представим себе следующую ситуацию — у вас есть вьюс, с помощью которого вы выводите список материалов по адресу example.net/content. Если задан аргумент, вьюс выводит только материалы за авторством конкретного пользователя. Самый простой способ сделать это — указать в качестве аргумента User:Uid. В результате получается, что при запросе вида example.net/content/1 будут отображаться все материалы, созданные суперпользователем, при запросе example.net/content/150, пользователем с uid 150 и так далее. Это хороший способ, у которого есть один минус — URL example.net/content/150 «некрасив» и мало, о чём говорит стороннему наблюдателю (хотя я часто использую такие конструкции для вьюсов, «закрытых» для пользователя).

Сделать URL «более говорящим» можно достаточно легко, если использовать в качестве аргумента не User:Uid, а User:Name. В результате мы получаем красивые адреса вроде example.net/content/ingumsky, едва взглянув на которые можно понять, что содержимое страницы будет иметь отношение к тому или иному пользователю (другое дело, какое отношение они к нему имеют . В принципе, такого решения уже вполне достаточно, если бы не одно «но»…

Например, представим, что на нашем сайте есть пользователи с именами Ingumsky, John Smith, jack_brown, S.White, He is Awesome, Паша. Мы включаем на сайте модуль pathauto и с его помощью создаём для каждого пользователя красивые адреса страниц профилей: example.net/users/ingumsky, example.net/users/john-smith и так далее. и здесь обнаруживается, что в адресах страниц пользователей, на страницах блогов и так далее синонимы имён пользователей отличаются от того, что принимает views в качестве аргумента. Сравните, как выглядят аргументы во Views и синонимы Pathauto [в квадратных скобках] для каждого из перечисленных выше пользователей (обращаю внимание, что в настройках аргумента включены опции «lowercase» и «turn spaces into dashes»:

example.net/content/ingumsky — материалы пользователя Ingumsky [ingumsky]
example.net/content/john-smith — материалы пользователя John Smith [john-smith]
example.net/content/jack_brown — материалы пользователя jack_brown [jackbrown]
example.net/content/s.white — материалы пользователя S.White [swhite]
example.net/content/he-is-awesome — материалы пользователя He is Awesome [he-awesome]
example.net/content/паша — материалы пользователя Паша [pasha]

Как видно, Views принимает в качестве аргумента именно имя пользователя, которое при указанных чуть выше настройках, просто переведено в нижний регистр и избавлено от пробелов (они заменены на дефисы). Но Pathauto при создании синонима вносит больше изменений в исходный текст. В результате в тех случаях, когда в именах пользователей встречаются знаки подчёркивания, точки, кириллица или даже некоторые английские слова, которые неважны для SEO (is, are и тому подобное), аргумент отличается от того синонима, который нам предлагает Pathauto.

Как я написал в самом начале записи, это не критичная проблема, но она… м-м-м… раздражает. Хочется, чтобы всё было красиво и «единообразно». Вопрос состоял в следующем: Как добиться того, чтобы скармливаемый вьюсу аргумент всегда выглядел так же, как выглядит ник в URL, созданном Pathauto?

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

1. В качестве аргумента мы будем использовать не User: Name, а User: Uid, пусть это прозвучит и несколько странно Теперь нам надо сделать так, чтобы из аргумента, который принимает наш вьюс, мы смогли вытащить uid;
2. В качестве «Что делать, если аргумент не указан» ставим «Показывать всё»;
3. Проверять аргумент мы будем с помощью php, поэтому смело выбираем в списке валидаторов «PHP Code»;
4. В текстовом поле пишем:

<?php
// Проверяем, не число ли дано в качестве аргумента
// Если число, аргумент подходит.
// Это особенно удобно, чтобы проверять, работает ли ваш вьюс с таким валидатором
if (is_numeric($argument)) {
  return TRUE;
}
// Смотрим, не указано ли в качестве аргумента «all»
// Если указано, аргумент подходит, и мы покажем все материалы 
elseif ($argument == 'all') {
  return TRUE;
} else {
// У меня синонимы профилей пользователей выглядят как users/username
// Здесь мы подставляем наш аргумент, чтобы получить такой же синоним
// В вашем случае может потребоваться заменить 'users/' на что-то другое
  $dru_alias = 'users/'.$argument;
// С помощью функции drupal_lookup_path ищем, каков внутренний адрес,
// соответствующий синониму — в нашем случае получится 'user/uid'
  $dru_path = drupal_lookup_path('source',$dru_alias);
// Разбираем внутренний адрес, вытаскивая из него uid 
  $uid = substr($dru_path, strrpos($dru_path, '/') + 1);
// Отдаём uid в качестве аргумента и сообщаем, что всё верно.
  $handler->argument = $uid;
  return TRUE;

?>

5. Profit!

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

Возможно, гуру Друпал засмеют меня и скажут, что решение было очевидным. Что ж, возможно и так. Я до этого решения дошёл далеко не сразу да и то только по наводке комментаторов с drupal.org, благодаря которым я понял, что надо смотреть в сторону валидатора аргумента. Надеюсь, что это решение поможет кому-нибудь ещё.

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

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 Commerce по-русски

Привет, Сообщество!
Представляю вам вольный перевод статьи о Drupal Commerce, которая помогает понять общий принцип работы DC. Несмотря на то, что система ещё не популярна, не помешает быть в курсе, что придумали ребята на смену Ubercart и как это должно работать. Статья достаточно теоретическая и старая (февраль 2010), так что за техническими подробностями вам придется идти на сайты drupalcommerce.org, api.drupalcommerce.org, drupal.stackexchange.com, Commerce Guys Video и, конечно, читать исходники.
Поиграть с модулем можно, установив профиль Commerce Kickstart.
Успехов!

Содержание Заказы, Записи заказа (aka Line Items) и Корзина Заказы Информация о заказчике Commerce Shipping Записи заказа (позиции, сущности) aka Line Items Комментарии Корзина Цены Определения Компоненты Заказы, Записи заказа (aka Line Items) и Корзина

Исходная статья: http://www.drupalcommerce.org/node/129

В этом посте описаны общие концепции заказов в Drupal Commerce (DC).

Заказы

Как и товары (Products), заказы в DC — это сущности, поддерживающие поля (fields) Drupal 7. DC представляет один тип сущности заказа, но теоретически внешние модули могут создавать свои типы заказов.

Основные поля заказа:

order_id: Числовой ID заказа (первичный ключ) order_number: Дополнительный торговый ID заказа (буквы/цифры, возможно использовать шаблон). Служебные данные creator_uid: пользователь, создавший заказ customer_uid: пользователь, на чье лицо оформлен заказ created: Дата создания changed: Дата изменения revision_id: ID версии заказа

order_number выполняет такую же функцию, как sku в товаре.

Мы сохраняем концепцию статусов заказа (status), используемую в Ubercart, но несколько развиваем её. Основная идея в том, что есть состояния заказа (states), которые определяют жизненный цикл заказа (такой как Корзина » Принят » Выполняется » Выполнен). На каждом из этих основных шагов могут выполняться различные процессы, отличающиеся для каждого магазина, но внешние модули смогут полагаться на наличие некоторых основных состояний заказа. Для этих целей в хуке hook_commerce_order_state() будут определяться состояния заказа.

Информация о заказчике

Информация о заказчике, кроме e-mail (который хранится в основной таблице заказа), будет добавляться с помощью полей. DC имеет в зависимостях модуль  Address Field, который использует xNAL-стандарт хранения адресов. По умолчанию в DC создаётся поле «Платёжный адрес», а отдельный модуль доставки (Shippable Products) добавляет к товарам и заказам поля, относящиеся к доставке. Он также управляет полями, связанными с доставкой, в формах оформления заказа, на страницах просмотра заказа и др.

Commerce Shipping

Модуль  Commerce Shipping отделился от основной поставки DC. В задачу модуля входит расчет и отображение всего, что связано с доставкой.
Работа модуля описывается следующими шагами:

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

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

Записи заказа (позиции, сущности) aka Line Items

В основе заказов лежит концепция Line Items, сущностей, для которых может быть определено несколько типов. Записями заказа является всё, что влияет на его конечную сумму (т.е. товары, налоги, доставка, скидки, сборы и т.д.) У записей заказа есть line_id, торговый ID (line_item_label), ссылка на заказ order_id, тип записи, название (изменяемое для каждого заказа), количество и поле «Цена». При добавлении записи к заказу мы также записываем сумму записи в поле commerce_total (количество * цена), чтобы избежать неопределённостей при округлении. Для типов записей заказов должна быть возможность настройки отображения полей, например, чтобы скрывать поле «количество» для для записей типа «Налоги» и т.д.

Комментарии

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

Корзина

Корзина в DC хранится как заказ. Когда пользователь первый раз добавляет товар в корзину, будет создан новый заказ в состоянии cart (Корзина) с только что добавленным товаром. Объект этого заказа будет доступен при последующих передвижениях пользователя по сайту. Однако пока заказ в стадии «корзина», все записи в нём будут повторно проверяться, чтобы поддерживать актуальное состояние цен/доступности и т.д. Таким образом для записей заказа необходимо установить стадию, когда они должны сохраняться. Например, нет смысла сохранять запись скидки до того, как заказ оформлен, потому что до этого момента скидки будут пересчитываться вместе с ценами при каждой загрузке заказа.

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

Корзину пользователя среди заказов можно определить по стадии «cart» или по тому, что у таких заказов ещё не определён торговый ID.
Пока заказ не принят, для него не создаётся новых версий. Это может приводить к потере важных маркетинговых данных, поэтому мы хотим создать некий журнал взаимодействия пользователя с магазином.

Корзина выполнена как один их модулей DC — cart.

Цены

Исходная статья: http://www.drupalcommerce.org/node/124

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

Определения

Components of a Price (Компоненты цены)
Цена состоит из суммы и валюты.
Base price (базовая цена)
Это сумма и валюта, привязанная к товару, записи заказа или любой другой сущности с полем цены. Базовая цена — это цена которая отображается в форме редактирования товара.
Current price (текущая цена)
Актуальная цена, с учётом скидок, налогов и сборов. За её основу берётся базовая цена. Может быть изменена с помощью системы управления ценами.
Display price (Отображаемая цена)
Администратор магазина может настроить параметры отображения цены. Во-первых, он может настроить темизацию (симовол валюты, префикс, суффикс и т.д.); во-вторых, он может указать, какую цену выводить (базовую или изменённую).
Altering a price (Изменение цены)
Изменение цен возможно через код или с помощью правил (Rules). За вызов хуков и исполнение правил должна отвечать сущность, реализующая конкретную тип цены.
Price logging (логирование цены)
Все внесённые в цену изменения должны фиксироваться как часть цены. Это позволит другим модулям оценивать изменения, такие как включенные налоги и скидки. Также эта информация сохраняется в заказе, чтобы впоследствии можно было проследить образование цены.
Price Formatting
Числовое форматирование (например, 1.000,00 или 1,000.00) определяются на языковом уровне. Знак валюты определяется в настройках валюты.

Компоненты

Управление ценами состоит из нескольких подсистем.

The price field (Поле цены)
Это поле определяется посредством Field API и может использоваться с любыми сущностями друпала. Хотя мы акцентируем внимание на том, как цены будут привязываться к сущности «Товар» (Product), поле цены может быть привязано и к заказам, записям заказа, нодам, терминам и т.д.
The price object (Объект «Цена»)
Объект цены является основным в системе управления ценами. Этот объект требуется в заказе, чтобы предотвратить нежурналируемые изменения цен. Объект цены содержит информацию о базовой валюте, базовой цене, текущей валюте, текущей цене, и журнал изменений цены.
Также объект цены предоставляет несколько методов модификации цены и предоставляет доступ к журналу модификаций, основанному на категории изменения, названии модуля, который совершает изменение, и описания изменений.
Pricing rules
Конкретно объект цены не предоставляет интеграцию с Rules, её предоставляет сама сущность (entity) цены, обеспечивая Rules необходимым контекстом для работы с ценой.
Это требует от разработчиков модулей внимательности при определении своих правил.
Views integration (Интеграфия с Views)
Цены будут полностью интегрированы с Views. Правда могут возникнуть вопросы с сортировкой и фильтрацией, потому что текущая цена не всегда совпадает с базовой.
Display formatters
Модуль цен должен поставляться вместе с базовыми типами отображения, позволяющими отображать цену с или без основных изменений, или отображать сумму всех составляющих цены. Например, мы захотим отобразить сумму налогов для кажного продукта, или цену на продукт включая НДС и т.д. Эти типы отображения должны быть доступны для Field API и Views.

Прикрепленный файл Размер ss-2011-08-21_00.14.18.png 121.45 кб

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

Требуются активные люди для поддержания светлого начинания

Здравствуйте, уважаемые! Нужна Ваша помощь!

Тему обучения Drupal кто только не начинал… Мы решили заняться этим всерьёз и надолго. При поддержке сильнейших сего ресурса (Александра Графова, Андрея Постникова), не без поддержки со стороны чудо-хостинга it-патруля (безвоздмездной!), мы (небольшая инициативная команда) накидали прототип, который в последствии будет частью портала drupal.ru. Адрес этого ресурса по понятным причинам мы сейчас не разглашаем. Торжественное открытие этого раздела состоится в тот момент, когда не останется ни одного известного нам бага.

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

Вот список специалистов, которые нам остро необходимы:

Люди, умеющие писать толковые интересные технические тексты (aka копирайтер); Люди, умеющие программировать на Drupal 7 (установка, настройка модулей. Дописывание и кастомизация модулей – приветствуется!); Люди, умеющие профессионально тестировать интернет-проекты (обязательное требование – внимание к мелочам, ибо, дьявол в деталях!).

Территориальная принадлежность специалиста – не имеет значения. Крайне желательно наличие Skype (текстовой версии достаточно).

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

Присылайте Ваши заявки на почту 4drupal.ru@gmail.com , мы обязательно Вам ответим!

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

1-ое место в рейтинге Рунета: Sportbox.ru

Спортбокс занял 1-ое место в номинации “Развлечении и спорт” в ежегодном конкурсе “Рейтинг Рунета”.
Конкурс сайтов «Рейтинг Рунета» — это премия за лучшие интернет-проекты в своей номинации, проводимая среди профессиональных веб-разработчиков.
Ну и да, Спортбокс сделан на друпале, если кто не знает.


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

Встреча друпалеров в Москве 16.08.2011

Во вторник 16.08.2011 в 19:00 пройдет встреча формата Друпал-кафе Москва

Место проведения – ул. Покровка 38/1 (вход со двора, Лялин переулок) ЧиталКафе карта

По длительности планируется 2-3 часа, так чтобы можно было за чашкой чая обсудить в спокойной обстановке следущие темы:

- предстоящий DrupalCon London и позиционирование там отечественных команд и разработчиков
- обновление сайта Drupal.Ru
- …а также другие насущные задачи.

PS: проектор и микрофон есть, посадка до 50 человек, безалкогольный бар + легкий алкоголь по демократичным ценам

Следущая встреча запланирована на 30.08.2011 там же! На ней обсудим результаты ДрупалКон’11 Лондон

Если кто-то не сможет быть – плиз, изложите своё видение в коментах: что такое отечественное сообщество Drupal?

Attached poll “Приду на встречу”.
Register or login to poll
Results:
Да: 14 голосов
Нет: 7 голосов
Хочу, но не смогу: 13 голосов

Источник: http://www.drupal.ru/DrupalCafe/Ru/Moscow/2011/08/16

Drupal в облаке JBOSS (от REDHAT)


RedHat сделал облачный сервис с JBoss на борту,
бесплатно можно размещать свои JEE приложения.
http://www.jboss.org/openshift.html
В редакции Express можно размещать PHP проекты, например сайты на Drupal

Инструкция PDF по установке DRUPAL

UPD:rhc-snapshot вот тут полнее документация https://docs.redhat.com/docs/en-US/OpenShift_Express/1.0/htm
UPD2: вот это еще катит http://sourceforge.net/projects/adminer/ только правильно путь к базе надо указать ../../data/.ht.sqlite
UPD3: добавили mysql http://goo.gl/CwXoF

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

Drupal в облаке JBOSS (от REDHAT)


RedHat сделал облачный сервис с JBoss на борту,
бесплатно можно размещать свои JEE приложения.
http://www.jboss.org/openshift.html
В редакции Express можно размещать PHP проекты, например сайты на Drupal

Инструкция PDF по установке DRUPAL

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

DrupalCafé №2 в Запорожье – 01.09.2011


В четверг, 1 сентября, в 19:00, в Запорожье, в лекционном зале Компьютерной Академии «ШАГ», по адресу Рекордная 20, состоится DrupalCafe в г. Запорожье.

По плану состоится обсуждение двух тем:

Почему Drupal? Докладчик — Алексей Попов. Уровень темы – начальный. Алексей расскажет и продемонстрирует, как сделать сайт со следующим функционалом: статические страницы; простой каталог; форма обратной связи; новости; статьи; Кэширование в Drupal. Докладчик — Илья Станкевич (AMgrade). Уровень темы – начальный. Илья поведает, как уменьшить нагрузки на сервер с помощью кэширования

Напоминаем, DrupalCafe имеет формат локальных встреч пользователей и разработчиков CMS Drupal. Организатором встречи является компания AMgrade с поддержкой Компьютерной Академии «ШАГ». Вход свободный.

За справками можно обращаться по телефону +38 (066) 123-77-54 или электронному адресу e.shalenniy@amgrade.com

Источник: http://www.drupal.ru/DrupalCafe/Ua/Zaporozhye/2011/09/01

DrupalCafé №2 в Запорожье – 01.09.2011


В четверг, 1 сентября, в 19:00, в Запорожье, в лекционном зале Компьютерной Академии «ШАГ», по адресу Рекордная 20, состоится DrupalCafe в г. Запорожье.

По плану состоится обсуждение двух тем:

Почему Drupal? Докладчик — Алексей Попов. Уровень темы – начальный. Алексей расскажет и продемонстрирует, как сделать сайт со следующим функционалом: статические страницы; простой каталог; форма обратной связи; новости; статьи; Кэширование в Drupal. Докладчик — Илья Станкевич (AMgrade). Уровень темы – начальный. Илья поведает, как уменьшить нагрузки на сервер с помощью кэширования

Напоминаем, DrupalCafe имеет формат локальных встреч пользователей и разработчиков CMS Drupal. Организатором встречи является компания AMgrade с поддержкой Компьютерной Академии «ШАГ». Вход свободный.

За справками можно обращаться по телефону +38 (066) 123-77-54 или электронному адресу e.shalenniy@amgrade.com

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

Новый сайт компании Acquia

Компания основателя друпал Дриса Байтаерта “АКВИА” сменила фирменный стиль, у нее новый логотип, открылся новый сайт!

Компания разделила все сервисы на 4 категории

- Разработчики ( сборки и профайлы, на сайте можно скачать около десятка разных продуктов )
- Хостинг ( облачный хостинг для разработчиков и проектов, можно прямо на сайте выбрать себе тариф)
- Обслуживание ( от консультаций и тех. поддержки до дистанционного управления проектом)
- Обучение ( курсы тренинги и Acquia Library)

Можно бесплатно посмотреть Acquia Tv .
На сайте есть раздел showcase лучшие сайты на друпал.
На заставке написано что уже 2% сайтов в МИРЕ работают на ДРУПАЛ.
( ВСЕГО в мере более 300′000′000 сайтов! )

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

Прощай Гарланд

Собственно тема Remove Garland from Core.
Те кто не согласны, еще не поздно заступится.

Attached poll “Гарланд лучшая друпал тема всех времён и народов?”.
Register or login to poll
Results:
Да: 48 голосов
Нет: 33 голоса

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

Фотогалерея ImageFlow для D7


Статья на http://drupal.in.ua/content/fotogalereya-imageflow-dlya-d7

Что это ?
~~~~~~~~
Это порт для галереи изображений на основе http://finnrudolph.de/ImageFlow в Drupal 7. Галерея может формироваться для любого типа
материала с полем типа “Image” и привязкой через словарь таксономии в конкретную галерею.

Тестовый ссылка: http://gallery.drupal.in.ua/imageflow

Установка
~~~~~~~~
1) Распаковать архив в папку в sites/all/modules

2) Создать папку sites/all/libraries (если еще нет) и скопировать в нее содержимое архива из dimageflow/libraries/imageflow.zip
Это библиотека галереи (http://finnrudolph.de/ImageFlow), с несколькими закомментированными строками, для совместимости.

3) Вы можете использовать для галереи любой тип материала с:
- Полем типа “Image” (Обязательное);
- Полем типа “Term reference” (Обязательное, для названия галереи).

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

4) Зайти на страницу с настройками модуля admin/config/content/dimageflow и выполнить настройки.
- Для организации галереи у материала xxx, надо выбрать поле которое будет использоваться при показе в галереи;
- Обязательно выбрать поле словаря таксономии, термины которого будет использоваться в качестве названий галерей;
- Тип миниатюрного изображения используется для первичного показа;
- Для того, чтобы при нажатии на миниатюрное изображение Вы попали на страницу изображения, а не материала в “путь для просмотра фото” – [image_path]
- Можно задать другой путь для страницы галереи по умолчанию он – dimageflow;

25/08/11
Добавлены настройка параметров (см. http://finnrudolph.de/ImageFlow/Documentation ) на страницу admin/config/content/dimageflow
1) imagesHeight – Height of the images div container in percent
2) imageFocusM – Multiplicator for the focussed image size in percent
29/08/11 12 Версии
Добавлены настройка параметров (см. http://finnrudolph.de/ImageFlow/Documentation ) на страницу admin/config/content/dimageflow
1) imageFocusMax – Maximum number of images on each side of the focussed one, default value: 4
2) Captions – Disables / enables the captions

План развития:
~~~~~~~~
1) Сделать массовую загрузку изображений из локальной папки в галерею с заданным именем.
2) Сделать страницу для views, пока по крайне мере под D7 нет адаптированного решения на org.
3) imagesM – Multiplicator for all images in percent

ВНИМАНИЕ ВАЖНО:
Права на хостинге на папки в т.ч. libraries/imageflow – 755 , на файлы .php, в том числе libraries/imageflow/reflect2.php – 644

Прикрепленный файл Размер dimageflow_12.zip 44.88 кб

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

DrupalCamp Donetsk 2011: анонс и опрос


DrupalCamp Donetsk 2011 — это ежегодное собрание Drupal разработчиков в Донецке сфокусированное на системе управления содержимым сайта с открытым исходным кодом Drupal. Событие соберет 150 программистов, дизайнеров, владельцев сайтов со всей Украины и ближнего зарубежья.

На конференции будут проведены доклады, обучающие тренинги, импровизированные обсуждения, а также код-спринты, что будет способствовать эффективному обмену опытом, усовершенствованию системы Drupal и её компонентов, а также увеличит число участников Drupal сообщества в Донецке и СНГ.

Формат конференции BarСamp предполагает проведение докладов самими участниками в свободной форме без ограничений по опыту, возрасту и другим признакам докладчика. Заявки на проведения доклада могут подаваться в день доклада при наличии свободных слотов. Предполагается, что конференция будет бесплатная для участников, а все расходы возьмут на себя спонсоры.

Предпологаемые даты проведения DrupalCamp – 26 – 27 ноября, число участников – 120-150 чел, количество докладов – 12, все остальное – по желанию. В первом потоке будут проходить доклады, во втором – практические занятия, код-спринты, обсуждения, конкурсы.

Господа, примите, пожалуйста, участие в опросе в отношении будущего DrupalCamp в Донецке в ноябре 2011. Очень важно ваше мнение! http://bit.ly/DrupalCampDonets​k2011

P.S.
Пересечения с DrupalConf’2 нам избежать не удастся, поскольку оба ивента были запланированы на одно и то же время, места проведения и потенциальные спонсоры поставлены в известность. Зато есть выбор куда поехать

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

DrupalCafé №1 в Харькове – 08.09.2011

Друзья, давно пора собраться разработчикам Drupal в Харькове и перезнакомится, именно с этой целью мы решили организовать первое в Харькове DrupalCafe, которое состоится в четверг, 8 сентября.
Место проведения – ул. Сумская 53, 2-й этаж, Конференц-зал. “Глобал Консалтинг” (вход с ул. Данилевского).

Время проведения – 19.00 – 22.00

В программе пока планируются такие доклады:
1. Drupal – Backend Interface – как не испугать заказчика + “Must have” modules (Алексей Гайдабура)
2. Drupal Perfomance issues, tips & tricks. (Антон Иванов)
3. Фичи ннада? Или почему стоит использовать модуль Features (Евгений Фиделин)
4. Системы управления версиями (VCS). Знакомство с Git. (Дмитрий Олареско)
Есть так же идея провести open space дискуссии на интересующие темы.

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

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

Участие бесплатное, в программе кофе+плюшки.
Желательно предварительная регистрация, всем желающим – отпишите в комментарии или в контакты ниже.

http://maps.google.com.ua/maps?hl=uk&ll=50.007601,36.237609&spn=0.00282,…

По всем вопросам можно обращаться:
+380993525316 – Алексей Гайдабура, gaydabura@gmail.com skype: alexey.gaydabura
+380672802207 – Иван Мосев, i.k.mosev@gmail.com, skype: i.k.mosev

Спонсор – WDG (http://wdg-company.com/)
Информационный партнер Медиапорт (http://mediaport.ua)
При поддержке http://www.dev-time.org

UPD. Зарегистрируйтесь пожалуйста чтобы мы примерно могли оценить сколько людей придет. https://docs.google.com/spreadsheet/viewform?formkey=dHltZlRTZlk1UjdUOVR…

Доклады

фичи ннада.pdf – https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwNew…
vcs_git.pdf – https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwNew…
drupal performance.pdf – https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0BwNew…

Фотоотчет
http://shiva.net.ua/drupal-cafe-kharkov-08-09-2011.html Спасибо Олегу Пальчику

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

DrupalConf’2011 – часть вторая, ноябрь, Москва

Коллеги!

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

Ориентировочные даты 19 или 26 ноября, ориентировочный формат – 2 потока.

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

Attached poll “Предпочтительный день недели”.
Register or login to poll
Results:
Пятница: 10 голосов
Суббота: 32 голоса

Источник: http://www.drupal.ru/DrupalConf/Ru/Moscow/2011

[MSK] Как насчёт встречи друпалерской?

Есть предложение встретиться друпалерам Москвы и их окрестностей.
Дата: конец августа-начало сентября.
Вариант 1. Посидеть в традиционном месте в ёлках-палках. Кафе такое, кто не знает.
Вариант 2. Весело всей толпой сходить на картинг, lasertag или любое другое времяпрепровождение.
Вариант 3. Выбраться ближе к природе и пожарить мяса на открытом огне.
Варианты 4, 5, 6 – предлагайте.

Attached poll “Что делаем?”.
Register or login to poll
Results:
Вариант 1: 4 голоса
Вариант 2: 5 голосов
Вариант 3: 8 голосов
Свой вариант: 0 голосов
Я ассоциальная личность и не буду ни с кем встречаться!: 8 голосов

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

Модуль Промокодов для клуба

Кто помнит или не помнит – я писал когда то, что под заказ пишу модуль для Промокодов (пруфлинк).
Собственно постепенно я его дописываю и сегодня ударным темпом закрыл одну из хотелок.

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

Для проекта открыл sandbox http://drupal.org/sandbox/softovick/1190802 – если кто желает, может поучаствовать в тестировании и фидбеке. На всякий случай прикрепил к посту архив с модулем.

UPD:
+ добавлен выбор роли, которая присваивается при активации промокода
+ сделан прототип более детального списка промокодов в виде таблицы с ссылкой на профиль пользователя.

Прикрепленный файл Размер promocode.zip 49.19 кб

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

Загрузка поля cck ajax-запросом.

На главной странице есть лента новостей. Она состоит из:
1. Дата новости;
2. Анонс новости;
3. Ссылка на саму новость.

Захотелось мне реализовать ajax-загрузку основного текста новости на место ссылки.
Изучив “как создать свой модуль”, основы javascript, jquery и вспомнив основы php-программирования я все таки реализовал свою идею. Возможно для профи это 5 минутное дело, у меня ушло около 5 дней в совокупности. Работу модуля можете посмотреть на www.appri.ru.
Модуль назвал loadnews. Здесь обноленный код.
Файл loadnews.module: <?php
/*
 * Implementing hook_init
 */

function loadnews_init() {
    drupal_add_css(drupal_get_path('module', 'loadnews') . "/loadnews.css");
  drupal_add_js(drupal_get_path('module', 'loadnews') ."/loadnews.js");
}

/*
 * Implementation hook_perm
 */
function loadnews_perm() {
  return array('access onthisdate content');
}

/**
 * Implementation hook_menu()
 */
function loadnews_menu() {
  // Элемент меню с соответствующим путем
  $items['loadnews'] = array (
    // Функция, которая будет "обрабатывать" путь
    'page callback' => 'loadnews_ajax',
    // Права на доступ к пути
    'access arguments' => array('access content'),
    // Элемент не будет отображаться в меню сайта
    'type' => MENU_CALLBACK,
  );
  return $items;
}

/* Функция обработки запроса */
function loadnews_ajax() {
    /*
     * Ссылка на на новость передается методом GET в переменной 'url'
     * В БД алисы адресов хранятся без первого слеша, поэтом удаляем его
    */
    $url = substr($_GET['url'], 1);
    // По полученному алиасу ищем в таблице url_alias соответствующий системный адрес
    $sys_url = db_result(db_query("SELECT n.src FROM {url_alias} n WHERE dst = '%s'", $url));
    /* Адрес получаем в виде "node/nid". Нам нужно получить параметр nid.
     * Для этого разбиваем строку на массив из 2-х элементов, второй который наш nid
    */
    $sys_url_array = explode('/',$sys_url);
    // Сохраняем наш nid в переменную
    $nid = $sys_url_array['1'];
    // Выбираем поле основного текста новости "field_news_text_value" из таблицы "content_type_news"
    $result = db_result(db_query("SELECT n.field_news_text_value FROM {content_type_news} n WHERE n.nid = '%d'", $nid));
    // Наш ответ клиенту
    drupal_json(array('status' => 1, 'data' => $result));
}
?>

Файл loadnews.js: Drupal.behaviors.loadnews = function(context) { // Добавляем для всех ссылок в блоке новостей class =loadnews $('#block-views-news-block_news', context).find('a').addClass('loadnews') // Реагируем на клик .bind('click', function() { // Передаем с методом get адрес ссылки var href = $(this).attr('href'); // Переменная, это куда мы будем выводить ответ var target = $(this).parents(".field-content"); // Прячем ссылку $(this).hide(); // Вместо нее выводим анимацию $(target).append("<div class=loading></div>"); // Получаем данные с сервера $.get(Drupal.settings.basePath + 'loadnews', {url:href} , function(response) { // Сохраняем ответ в переменной var result = Drupal.parseJson(response); // Прячем анимацию $(target).find(".loading").hide(); // Вместо нее ставим "Свернуть" $(target).append("<span class=hidenews>Свернуть</span>"); $(target).append("<span class=shownews>Подробнее...</span>"); $(target).find(".shownews").hide(); // Создаем блок для вывода текста новости $(target).append("<div class='newstext'></div>"); // Изначально блок будет скрыт, чтобы потом красиво его развернуть $(target).find("div.newstext").hide(); // Загружаем текст из переменной в блок $(target).find("div.newstext").html(result.data); // Красиво раскрываем наш блок $(target).find("div.newstext").slideDown("fast").addClass("active"); // Реализация скрытия и раскрытия блока (нужно оптимизировать код) $(target).find(".hidenews").click(function() { $(target).find(".hidenews").hide(); $(target).find("div.newstext").slideUp("fast").removeClass("active"); $(target).find(".shownews").show(); }); $(target).find(".shownews").click(function() { $(target).find(".shownews").hide(); $(target).find("div.newstext").slideDown("fast").addClass("active"); $(target).find(".hidenews").show(); }); }); return false; }); }

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

Прикрепленный файл Размер loadnews_v6.x-1.6.zip 3.62 кб

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

Как добавить ленту сообщений Google+ на сайт, сделанный на CMS Drupal

Давно хочу прикрепить свою ленту сообщений из новой социальной сети Google plus на свой же хоумпейдж. Официального пути это сделать пока нет. Вот один из “неофициальных” вариантов:
1) создать RSS-поток ваших сообщений на сайте http://plusfeed.appspot.com/. В общем-то для этого просто надо добавить ваш ID на сайте G+ к адресу Plusfeed’а. Вот так, например – http://plusfeed.appspot.com/116910563308964275374
2) включить модуль Feed aggregator (есть в стандартном дистрибутиве Drupal) на странице ВАШСАЙТ/admin/build/modules/list.
3) добавить полученный на шаге 1 адрес фида в настройках на странице ВАШСАЙТ/admin/content/aggregator/add/feed
4) и, конечно, настроить cron (если он у вас еще не настроен) и не забыть установить права для просмотра ленты (на ВАШСАЙТ/admin/user/permissions).

И все…
По желанию можно задать адрес для этой страницы, добавить ссылку в меню сайта, сделать более внятное оформление и т.п.
Получится что-то вроде такого: http://vadimbarsukov.com/aggregator/sources/1
Не скажу, что меня все устраивает (например, не показываются фото и видео), но все же это лучше, чем ничего.

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

Hashtags в друпале

Приветствую.

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

Единственный минус в том, что он есть только под 6-ю версию, и с портом D7 совершенно не ясно… аналогов модуля не нашел.

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

Дополнение к модулю Node Gallery: галереи по умолчанию

 Default Node Gallery – дополнение к модулю  Node Gallery – создает галерею по умолчанию для каждого юзера (и для каждой пары тип_галереи – тип_изображения) при входе его на сайт.
Так же позволяет управлять доступом к галерее по умолчанию, чтобы юзер случайно ее не удалил.
В общем, это должно работать как функция “неразобранные фотки” на многих фотосайтах.
Модуль пока сыроват – возможны ошибки, о которых прошу сообщать в issue queue модуля.

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

Вышел Drupal 7.7. (Drupal 7.7 released.)

Вышел drupal 7.7., который является 7.6, но с поправленными строками в “версии”

7.5 содержит фиксы безопасности.

Короче говоря. Качать и ставить надо 7.7.

Drupal 7.5, a maintenance release which fixes security vulnerabilities is now available for download. Drupal 7.6 7.7 also fixes other issues reported through the bug tracking system.

Note: Drupal 7.7 is just Drupal 7.6 with a fixed VERSION string (7.6 was reporting itself as 7.5). No other changes.

читаем, качаем тут

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

Eclipse pdt

Долго капашилась, вроде что-то получилось, а вдруг кому-нибудь пригодиться.
Для быстрой и удобной работы с использованием хуков может пригодиться Eclipse PDT. После его установки, необходимо сделать следующее – скачать файл http://drupal.org/project/eclipse, его содержимое Drupal.xml импортировать в Preferences > PHP > Editor > Templates. Зайдите в Help menu, потом Install New Software введите
Name: XTND.US
Location: http://xtnd.us/downloads/eclipse.
У меня установилось, но почему-то в пункте Php Content Type не отобразились Drupal Module и Drupal Themes. Поэтому я ввела в ручную следующее -
# *.module
# *.install
# *.test
# *.info
# *.po
# *.theme
# *.engine
(для того, чтобы пхп их распознавал).
После данных действий, при наборе hook появляется выборка всевозможных хуков, а после выбора конкретного, его код отображается на странице. (Или же надо при наборе нажать ctrl+space)

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

Drupal SMS24X7 Module (SMS Framework Gateway)


Всем привет, презентую модуль-шлюз http://sms24×7.ru для SMS Framework.

Модуль очень простой, меньше 100 строк, использует их библиотеку, подробное описание api нашел тут.

Ссылка на модуль – https://github.com/stan-kondrat/drupal-sms24×7

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

PPS. Если хотите по тестить стандартный модуль SMS User (Provides integration between the SMS Framework and Drupal users), но есть один момент. Он отсылает четырех значный код подтверждения, на что шлюз отвечает: “Сообщение содержит указание на платный номер“, самое простое решение:

diff --git a/sms_user.module.orig b/sms_user.module index 799ec7f..403b609 100644 --- a/sms_user.module.orig +++ b/sms_user.module @@ -264,7 +264,7 @@ function sms_user_settings_sleep_form_submit($form, &$form_s }   function sms_user_send_confirmation($account, $number, $options) { - $code = rand(1000, 9999); + $code = rand(100, 999); $data[0] = array( 'number' => sms_formatter($number), 'status' => 1,

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

Performance-субботник. Чистим сайты после обновления с Drupal 5 на 6 и с 6 на 7

Немного теории

Индекс (англ. index) — объект базы данных, создаваемый с целью повышения производительности поиска данных. Таблицы в базе данных могут иметь большое количество строк, которые хранятся в произвольном порядке, и их поиск по заданному критерию путем последовательного просмотра таблицы строка за строкой может занимать много времени. Индекс формируется из значений одного или нескольких столбцов таблицы и указателей на соответствующие строки таблицы и, таким образом, позволяет искать строки, удовлетворяющие критерию поиска. Ускорение работы с использованием индексов достигается в первую очередь за счёт того, что индекс имеет структуру, оптимизированную под поиск — например, сбалансированного дерева.

Википедия Для тех кто не понял

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

И чего ты этим сказать хотел?

Ещё работая в IT-Patrol была замечена интересная статистика, а именно:
старые сайты имели большие показатели неиндексированного чтения и проблемы с производительностью. Естественно, в голове это не совсем укладывалось, так как с виду вполне себе обычный сайт, но работает медленно и даёт нехилую нагрузку по БД.
Изначально это связывалось с кривыми модулями и другими физическими ущербностями.
Потом при обновлении fermer.ru я столкнулся с тем, что отпали индексы по fid в таблице files.
Время шло, вышла семёрка, начались апдейты на неё, при апдейте hr-portal.ru было замечено отпадение индексов и даже то, что некоторые индексы давно отсутствовали, но портал более менее нормально работал на шестёрке.
Дело в том, что между версиями меняется структура БД и при накладках во время апдейта, старый индекс удаляется за ненадобностью, а новый не создаётся, например, из-за дублей, так бывает в таблице blocks.
В итоге мы получаем с виду работающий сайт, но внутри имеем вот такие грабли

Как диагностировать?

Очень просто, Устанавливаем модуль  Schema
Сразу хотелось бы предупредить что в версии модуля для Drupal 7 наблюдается баг с префиксами БД, данные которые даёт модуль по БД с префиксом некорректны.
Идём в admin/build/schema/report
Перед нами предстанет страница подобная этой

Легенда:
На желтом фоне пишутся предупреждения, в большинстве случаев они говорят о том, что авторы некоторых модулей не читали раздел про типы полей на api.drupal.org.
Филдсет Match несёт информацию о таблицах которые совпадают со схемой.
Mismatch сообщает нам о таблицах в которых проблемы со схемой.
Extra это таблицы в БД, которые не связаны схемой ни с одним модулем.

Рассмотрим подробнее Mismatch.


primary key: missing in database
Говорит о том, что потерян первичный индекс.
Ещё возможен вариант потери обычного индекса, например:

indexes content_type_uid: missing in database

И чего мне теперь делать, я же спать не буду?!

Вооружаемся текстовым редактором, просматриваем install-файлы модулей, смотрим там hook_schema() и восстанавливаем индексы соответствующими запросами:
ADD INDEX [index_name] (index_col_name,…)
или ADD PRIMARY KEY (index_col_name,…)
или ADD UNIQUE [index_name] (index_col_name,…)
или ADD FULLTEXT [index_name] (index_col_name,…)
Не забываем, что индексы бывают разных типов – составные, уникальные, простые и т.п.

ПЧП, КСС, это всё сложно для меня, может вы сможете помочь?

Я помогу вам за 1000р или эквивалент, я приведу отпавшие индексы в порядок и добавлю свои наработки.
И кстати, если вы клиент Патруля более трёх месяцев, то на вас распространяется 50% скидка, если вы пришли на IT-Patrol менее 3 месяцев назад, то стоимость составит 750р за проблемный сайт, просто напишите в техническую поддержку.

Прикрепленный файл Размер schema.png 30.24 кб missingindex.png 22.48 кб missingindex2.png 13.54 кб

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

Туманное будущее Друпала

Drupal 7 уже был тревожным сигналом – ведь для стабилизации и приближения релиза, Аквии и многим другим компаниям пришлось выделить сотрудников на зарплате, занимающихся решением багов на фул-тайм.
В этом смысле, инициативы Дриза и компании по Drupal 8 очень пугающие:
- очень сильно повышены требования к количеству багов, которые вызывает то или иное изменение
- добавлены очень жесткие критерии приема патчей. Предполагается, что контрибутор должен будет ознакомиться с тонной документации, прежде чем провести какое-нибудь изменение. И это будет действительно тонны – я не шучу. Текущая сложность Drupal – learning curve, как ее называют, покажется детским садом по сравнению с новыми требованиями.

Все это – бюрократизация, дополнительные барьеры для участия многих контрибуторов. Непонятно, как можно забюрократизировать процесс по-максимуму, и рассчитывать что сообщество – добровольцы, будут разгребать все это.
Многие потенциальные контрибуторы уже давно не участвуют в разработке ядра по причине низкой эффективности труда:
- чтобы добавить то или иное изменение, нужно убедить кучу народа
- бесконечные споры по поводу реализации того или иного изменения. В условиях равноправности мнений, из спора очень трудно прийти к компромиссу
- готовые патчи могут висеть месяцами, ожидая своей участи. Стоит только вспомнить эпические изменения, связанные с состояниями гонки (race conditions) в Drupal 6 и каких усилий стоило реализовать их.
В этом смысле, я не вижу здесь тенденций к улучшению. Более того, все будет только усугубляться. Неудивительно, что такие инноваторы, как Development Seed, покинули мир Друпала. Этот процесс будет продолжаться и дальше. Бюрократизация – тормоз и злейший враг инноваций.

Как бы я решил эту проблему ? Я бы сделал процесс разработки распределенным, убрал узкое горлышко в виде небольшой группы комиттеров ядра. Это уже давно предлагалось: существовала так называемая инициатива Small Core, в рамках которой предлагалось разделить друпал на слабо связанные подсистемы, разрабатываемые отдельно, и оставить ядро минимального размера. Эта инициатива не нашла серьезной поддержки, к сожалению.
Дриз и ко вряд ли пошли бы на такое – ведь тогда они потеряли бы контроль над продуктом. Друпал, как торговый знак, перестал бы приносить дивиденды.

Мой прогноз: Drupal 8 намертво увязнет в своих проблемах, и чтобы вытащить его, бизнесам придется еще больше рассчитывать на свои силы, и еще меньше – на сообщество. Многие переосмыслят использование Drupal в своем бизнесе. Drupal перестанет быть продуктом сообщества, и станет больше продуктом корпораций. В этом смысле, наверное, он в чем-то повторит судьбу Linux.
Мы увидим больше дистрибутивов Drupal, мы увидим LTS редакции, для потребителей, не желающих гнаться за номерами версий, как белки в колесе. Аквия, которая во всем подражает Redhat, возможно разразится своим Acquia Enterprise Drupal с 10 летней поддержкой )))

Ссылки по теме:

http://www.drupal4hu.com/node/300
http://benbuckman.net/drupal-excessive-complexity
http://randyfay.com/node/110
http://www.unleashedmind.com/en/blog/sun/the-drupal-crisis
http://www.unleashedmind.com/en/blog/sun/crisis-conclusions

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

Отображение PDF-файла

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

Полная статья »

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

Исправление ошибок в сontrib-модулях Drupal

На DrupalCamp Kyiv 2011 я рассказывал о наших разработчиках, которые публикуют свои модули на drupal.org.

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

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

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

Contrib-модулями называются модули, которые были созданы и опубликованы на drupal.org сторонними разработчиками. Любой желающий может их использовать (contribution).

Contrib-модули и вклад в развитие Drupal

Эти contrib-модули являются вкладом drupal-разработчиков по всему миру в развитие Drupal.

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

Это может быть:

Членство в Drupal Association. О том, что это дает и на что тратятся членские взносы лучше почитать на сайте Drupal Association. Написание документации. Перевод документации на родной язык. Перевод строк ядра и модулей на родной язык. Детали на сервере локализации. Участие в организации Drupal-мероприятий в своей стране. Участие в зарубежных Drupal-мероприятиях. Создание модулей для Drupal. Создание и проведение тренингов. Запись обучающих скринкастов про Drupal. Популяризация Drupal (без спама, холиваров и троллинга). Создание сайтов на базе Drupal. (Да, это тоже вклад в развитие Drupal!) Направление части прибыли от проекта на развитие Drupal. Это может быть как локальное использование, так и перечисление в виде пожертвования Drupal-разработчикам. Участие в качестве спонсоров на Drupal-мероприятиях.

Но самое доступное и простое – как мне кажется – это сделать патч и опубликовать его на drupal.org!

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

Но сначала нужно рассмотреть несколько ключевых моментов:

Можно ли использовать contrib-модули для серьёзных проектов? Стоит ли тратить время на создание и публикацию патча на drupal.org?

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

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

Замена названий скачиваемых файлов

Замена названий скачиваемых файлов:

Цель: при сохранении файла по умолчанию подставлять в название содержимое атрибута title
т.е. например, чтобы по нажатию на ссылку
<a href="proba.zip" title="Пробный архив">скачать</a>
, предлагало сохранить “Пробный архив.zip”
и так для любого интересующего расширения (doc, pdf, jpg ..)

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

Краткий алгоритм:

Пройтись по все ссылкам в интересующем месте, выбрать те, что ссылаются на файлы типа zip, rar, doc и т.п. Отлавливать клики по ним, отменяя стандартное действие, вместо которого отправлять в php-файл путь ссылки и нужное название В php-файле настроить header-ы на загрузку Привязать все это к друпалу

Первый пункт (javascript):

window.onload = function(){   //взять все ссылки, из содержимого статьи var links = document.getElementById("content").getElementsByTagName("a");   //перебрать все найденные ссылки for(var i=0;i<links.length;i++){ $href= links[i].getAttribute("href");   //если у ссылки есть путь if($href!=null && $href!=""){   var ext = $href.substr($href.lastIndexOf('.') + 1);   //перекрыть ссылки на документы и архивы if(ext.match(/zip|rar|doc|docx|pdf/)){   links[i].onclick = saveFile; } } } }   function saveFile(tag){   $path = this.getAttribute("href"); $label = this.getAttribute("title");   //если нет title, взять название файла if($label==null || $label==""){ $label=$path.match(/(?:^|\/|\\)([^\\\/]+)$/)[1]; $label = $label.substr(0,$label.lastIndexOf('.')); }       //создать временную форму для отправки методом post var submitForm = document.createElement("FORM"); document.body.appendChild(submitForm); submitForm.method = "POST"; submitForm.action= "/php/download_file.php"; createNewFormElement(submitForm, "file", $path); createNewFormElement(submitForm, "label", $label);   submitForm.submit(); submitForm.parentNode.removeChild(submitForm);   //////////////////////////////////////////////////////////     return false;//отменить переход по ссылке }   //вспомогательная функция для создания полей в форме function createNewFormElement(inputForm, elementName, elementValue){   var newElement = document.createElement("INPUT"); newElement.name = elementName; newElement.type="hidden"; inputForm.appendChild(newElement); newElement.value = elementValue; }

Здесь обрабатываются все ссылки, лежащие в контейнере с id=”content”. Чтобы не зверствовать c post-отправкой, и не подключать jquery используется простой трюк с временным добавлением формы.

Второй пункт (php):


<?php
if(isset($_POST["file"]))
{
// путь к файлу
$filename = $_SERVER['DOCUMENT_ROOT'].$_POST['file'];

//заменитель
if(isset($_POST["label"]))$label = $_POST["label"];
else $label = basename($filename);

//расширение файла
$fileextn = end(explode('.', $_POST['file']));

switch($fileextn)
{
  case "pdf": $ctype="application/pdf"; break;
  case "exe": $ctype="application/octet-stream"; break;
  case "zip": $ctype="application/zip"; break;
  case "doc": $ctype="application/msword"; break;
  case "xls": $ctype="application/vnd.ms-excel"; break;
  case "ppt": $ctype="application/vnd.ms-powerpoint"; break;
  case "gif": $ctype="image/gif"; break;
  case "png": $ctype="image/png"; break;
  case "jpeg":
  case "jpg": $ctype="image/jpg"; break;
  default: $ctype="application/force-download";
}

//Проверка, на то, можно ли отдавать запрашиваемый файл (спасибо  xxandeadxx)
//например, выдавать только с указанными расширениями
if($ctype!="application/force-download"){

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=\"$label.$fileextn\";");
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));

readfile("$filename");

exit();
}
}
?>

Третий пункт:
php-скрипт положить в \sites\all\libraries\ download_file.php
js-скрипт положить в \sites\all\themes\infopark\js\download_file.js (не забыть изменить путь к php)
В файле \sites\all\themes\тема\тема.info добавить scripts[] = js/download_file.js (для того, чтобы подгружать этот скрипт на все страницы).

Пример прилагается.

Прикрепленный файл Размер download_files.zip 5.87 кб

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

Лишний пейджер в D7

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

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

По этому идем в настройки пейджера этой самой вьюхи и в поле “Pager ID” ставим, допустим, единичку вместо нолика, или двоечку, в зависимости от количества используемых пейджеров на странице.
Там же можно прочитать описание ин инглиш:
Unless you’re experiencing problems with pagers related to this view, you should leave this at 0. If using multiple pagers on one page you may need to set this number to a higher value so as not to conflict within the ?page= array. Large values will add a lot of commas to your URLs, so avoid if possible.

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

Цены за обучение Drupal

Интересный твит пробегал в недавно от «детроидца», известного своими скринкастами… гугл переводит это: «Я думаю, что когда-нибудь люди поймут, что цены за обучение #Drupal нелепы.», полагаю, что речь идёт о прошедших курсах:

Drupal 7 Site Building
June 27, 28, 29 $1,350

Drupal 7 Theming
June 30 & July 1 $900

Entire Week of Workshops
June 27 – July 1 $2,000

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

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

Один из найденных тренингов по конкурирующей платформе выставил на начальное обучение ценник (4500 вебинар и от 6500 за очное посещение), в ближайшее время на Drupal.Ru появится раздел посвященный обучению людей премудростям Drupal, пока полагаю в виде подобного ресурса от Acquia. Но об этом позже

PS: … на пути к Друпал-центру обучения и не только

Attached poll “Сколько Вы готовы платить за повышение квалификации, работая с Drupal?”.
Register or login to poll
Results:
Я нищий..: 38 голосов
20 000 – 15 000: 11 голосов
10 000 – 5 000: 23 голоса
не более 5 000: 32 голоса

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

© 2009 Обзор CMS