Опять четверг, опять кафе.
В четверг, 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
На сайте 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
Итак, настала пора планировать следующее мероприятие.
Ориентировочно пройдет оно в том же помещении, что и первая встреча – антикафе Бабочки.
По датам предварительно ориентируюсь – 16, 17, 23 или 24 мая (дату еще корректирую в зависимости в том числе и от ваших замечаний).
По времени с 19 до 23.
Темы для обсуждения выложу чуть позже, если предложите что-то интересное – велкам!
Источник: http://www.drupal.ru/node/80987
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.
Я расскажу как я это делал через переопределение шаблона.
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
Привет.
Продолжаю свои заметки про работу с поисковиком Solr. В прошлых постах я писал о том, как добавлять в индекс дополнительные поля, как управлять процессом индексации определенного поля и как научить solr искать в этих полях. Сегодня расскажу о том, как можно договориться с solr’ом о том, что индексировать, а что нет. Оговорюсь, что нижеприведенный способ работает адекватно только начиная с версии apachesolr-1.x-beta19, раньше этого не было. Итак, рассказываю.
На самом деле рассказывать то особо и нечего, всё потрясающе просто. Представим, что по определенным признакам мы не хотим индексировать ноду, для этого у apachesolr есть status callback. В моем случае у типа материалов “публикация” есть чекбокс “Индексируемая”, по умолчанию отмеченный, но если галочку снимут, то публикация не будет ни индексироваться, ни, само собой, выводиться в результатах поиска. Сделано это следующим образом:
<?php
// Для начала мы должны сообщить модулю apachesolr о использовании кастомного коллбэка. Делается это с помощью
// реализации хука <strong>hook_apachesolr_entity_info_alter()</strong>, описанного в файле apachesolr.api.php.
// Таких коллбэков может быть несколько.
function inti_apachesolr_entity_info_alter(&$entity_info) {
// Способ, как видите, работает не только для нод, а для любых сущностей.
$entity_info['node']['status callback'][] = 'inti_index_node_status_callback';
}
// Эта функция должна возвращать TRUE, если публикация индексируемая, иначе FALSE.
// Коллбэк по умолчанию проверяет, опубликована ли нода. Учитывая, что коллбэков может быть
// несколько, как я написал выше, здесь мне это проверять нет нужды.
function inti_index_node_status_callback($entity_id, $entity_type) {
$node = node_load($entity_id, NULL, TRUE);
$status = TRUE;
if (($node->type == 'publication') && !empty($node->field_do_search)) {
$status = ($node->field_do_search['und'][0]['value']) ? TRUE : FALSE;
}
return $status;
}
?>
Вот и всё. Важное примечание: как я понял, после изменения функции, реализующей hook_apachesolr_entity_info_alter(), нужно очистить кэш.
В следующий раз будет пост (тоже небольшой) о том, как научить Apache Solr искать с использованием wildcard(*). Как ни странно, но по умолчанию, поддержки поиска по частям слов нет.
Ссылки:
Часть 1. О добавлении полей в индекс и фасетах.
Часть 2. О подмене коллбэка для индексации определенного полям и о том, как искать по дополнительным полям.
Часть 4. Установка Solr 3.x и поиск с использованием *
Источник: http://www.drupal.ru/node/80497
Всем привет. В предыдущем посте я рассказал, как можно “повлиять” на процесс индексации, добавляя дополнительные поля в индекс, и создавать свои фасеты (фильтры) с помощью Facet API. Сегодня я хочу рассказать об альтернативном способе индексирования полей и возможности поиска по дополнительным полям. Дело в том, что 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
В четверг, 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
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
Всем привет.
Так сложилось, что передо мной встала задача создать библиографическую систему для хранения научных публикаций в большом количестве. Ну и как в любой нормальной библиографической системе, мне нужен поиск. На момент начала работы я уже был знаком с модулями 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
Приглашаем всех желающих принять участие в 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
Добрый день,
Для друпала 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
Уроки Друпал для начинающих в Москве – вступайте в группу 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
Уроки Друпал для начинающих в Москве.
Каждый участник сделает собственный сайт, научится работать с CMS Drupal, освоит основы создания корпоративных порталов.
Важное условие: уверенный пользователь ПК.
Участники школы Друпал поймут специфику создания сайтов на Drupal, каждый будет работать над своим собственным проектом, и на выходе получит работающий полноценный сайт.
Компания Siteograf.com проводит занятия по обучению Drupal с февраля 2011 года. За это время мы провели свыше 15 образовательных программ в Киеве и Москве для начинающих веб-разработчиков.
Свыше 5 лет Siteograf занимается разработкой сайтов на CMS Drupal для клиентов.
Программа
18 марта, воскресенье
Блок 1.
12.00-15.00
• Установка друпала
• Модули и темы.
• Меню и блоки.
• Методика изучения.
• Создание разделов и страниц подразделов, вставка картинок, оформление контента.
• Установить и включить модули menu block, colorbox, global redirect, XML sitemap, page title.
• Скачать и установить тему дизайна, которая наиболеее подходит под вид деятельности.
Блок 2.
15.00-17.00
• Типы материалов. Создание своих типов материалов.
• Таксономия.
• Создание полей в типе материала.
• Модуль Views. Вывод полей используя views.
• Работа с блоками.
• Использование CSS для изменения внешнего вида сайта и его элементов.
Домашнее задание: селекторы CSS, потренироваться в изменении основных свойств и значений.
31 марта, суббота
Блок 3.
12.00-15.00
• Работа с пользователями.
• Права доступа.
• Модули для работы с пользователями.
• Особенности регистрации и вывод полей из профиля пользователей.
• Взаимодействие пользователей.
• Интеграциия с социальными сетями.
• Умение добавить поля в регистрационную форму пользователей, создание и использование своих шаблонов.
Блок 4.
15.00 – 17.00
• Модуль Panels.
• Редактирование шаблона вывода.
• Модули для seo.
Лектор: Виктор Богуцкий, Siteograf.com
Место проведения: Шоколадная фабрика, ул.Рабочая, 38
м.Римская либо м.Площадь Ильича
Стоимость участия во всем курсе Школы составляет 2599 рублей.
Для регистрации:
Отправь письмо на daredjana@gmail.com, напиши свои имя-фамилию, контактный мобильный телефона. В теме письма укажи «Школа Drupal в Москве 18 и 25 марта». .
Хочешь получить скидку в 100 рублей?
Напиши на своей страничке вконтакте и фейсбуке «Иду учиться делать сайты Школа Drupal http://vk.com/drupal_moscow» (сообщите об этом нам, отправив ссылку на свой профиль на daredjana@gmail.com)
По всем вопросам звонить (925) 380 08 36 Даша.
Подробности программы и отзывы смотрите на siteograf.com и в нашей группе вконтакте “Обучение Drupal” http://vk.com/drupal_education
Источник: http://www.drupal.ru/node/77701
Енто быстрый и грязный порт vk_openapi под семерку.
https://github.com/orangeudav/vk_openapi7
Источник: http://www.drupal.ru/node/77262
Модуль состоит из трех суб-модулей:
Яндекс.Карты 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
Доброй ночи, друзья. Меня зовут, Анатолий. г. Вологда, компания Синапс.
Мы занимаемся созданием сайтов и другими интересными вещами.
Сайты делаем исключительно на друпале, и чаще всего это сайты корпоративных клиентов с соответствующей спецификой.
У нас есть ряд разработок, которыми хочется поделится с сообществом.
Зачем делиться:
- для себя: чтобы структурировать код и сделать таки review
- чтобы быстрее отлавливать баги
- чтобы подсказали как лучше
- чтобы друпал стал более распространен и появлялись новые решения на этой системе
Делиться будем следующими модулями:
- Модуль интеграции друпала со сторонними сервисами (в первую очередь с яндексом)
- Модуль для отображения объекта на яндекс картах
- Модуль view_yamap для интеграции предыдущего модуля с вьювсом
Итак. Первый модуль – synapse. (Остальные чуть позже)
Это модуль сделан для наших внутренних нужд. Он нужен для того, чтобы клиенты не дергали проджектменеджеров лишними вопросами, а проджектменеджеры соответственно не дергали лишними вопросами программистов.
Поскольку делася для себя, то он так и называется “synapse”. Но по счастливой случайности такое название прекрасно совпадает с функционалом модуля, поэтому переименовывать его не будем. Википедия нам подсказывает:
Си́напс — место контакта между двумя нейронами или между нейроном и получающей сигнал эффекторной клеткой. Служит для передачи нервного импульса между двумя клетками.
Посколку внизу длинная простыня скриншетов, чтобы не томить сразу ссылки:
- модуль synapse.zip
- проект в песочнице друпал.орг
Что делает модуль:
1. Изменяет страницу добавления материала
2. Дружит сайт с гул/яндекс вебмастером
3. Добавляет на сайт яндекс-метрику
4. Отображает яндекс-карту на странице с контактами
5. Размещает информацию о компании в формате hCard
6. Позволяет быстро добавить вконтактогруппу и магазин на еквиде
7. Менять автоматически год создания сайта в подвале
По пунктам
0. Меняет значения по умолчанию
Меняет значения по умолчанию на странице добавления типа материала (admin/structure/types/add):
Чистим поле “название поля заголовка”, чтобы программисты не забывали поставить человечное “название альбома”, вместо бездушного “Title”
В настройках публикации вместо галочки “на главную” ставим галочку “создавать редакции”
Убираем галочку “показывать автора и дату”, т.к. в корпоративных сайтах это нужно только у “новостей”
Снимаем галочку в “настройках меню” т.к. у корпоративных сайтов это нужно только у “страниц”
1. Страница добавления материала
Страница добавления материала для клиента не должна содержать “лишних” полей. Каждое лишнее поле – звонок менеджеру, поэтому:
Перемещаем меню из вертикальных табов в свернутый филдсет
Включаем галочку “добавить в меню”, чтобы все “страницы” гарантировано попадали в меню
Есть возможность выставить родительский пункт меню по умолчанию. Полезно при использовании на сайте горизонтального меню, т.к. (смотрим предыдущий пункт) все “страницы” у нас по умолчанию попадают сразу в меню, и оно может стать шире, чем предусмотрено дизайном.
Прячем лишние для пользователя поля: вес меню, родительский пункт меню, информация о редакции
Прячем поля “выбор формата ввода” для “body”.
Всё это естественно регулируется на странице настроек
2. гугл/яндекс вебмастер
Менеджер проекта (или клиент) может сам быстро добавить сайт в гугл/яндекс вебмастер, без обращения к программису
3. Яндекс-метрика
Менеджер проекта (или клиент) может добавить на сайт яндекс-метрику не обращаясь к программисту. При желании можно отобразить информер (картинка с кол-вом посетителей) – блок, который можно перетащить например в подвал. Для гугланалитика есть отдельный модуль http://drupal.org/project/google_analytics
4.Контакты с яндекс-картой
Менеджер проекта (или клиент) может отобразить на странице контактов яндекс-карту с отметкой о местоположении организации не обращаясь к программисту.
5. hCard
hCard – это микроформат, который позволяет рассказать роботам о своей орагнизации. Его поддерживает яндекс, и обещает использовать эту информацию в яндекс-справочнике. Блок с этой информацией удобно разместить в подвале. Если заполнены координаты в настройках карты, то они также попадают в микроформат. Соотвественно если заполнено название организации, то оно отображается при клике на метку карты.
Сначала результат
Потом настройки
6. “еквид” и “vk_group”
Вкладочка “прочее” позволяет быстро добавить на сайт магазин “еквид” и “блок с группой вконтакте”
7. Модуль делает блок “копирайты”.
Модуль делает блок “копирайты” Данные для блока берет из названия орагинзции в hCard и поля “Year From” вкладки “прочее”. Результат полчаем в следующем в формате:
©2012 — %Название%
или
2011 — 2012 © %Название% (Если наступит следующий год).
© – ссылка на страницу логина (user) чтобы не уродовать сайт формой логина, и не заставлять пользователя вбивать “специальный” адрес в командную строку
Прикрепленный файл
Размер
Так выглядит добавление страницы для пользователя
27.12 кб
Настройки полей для node_add
19.36 кб
Добавление в вебмастер – настройки
19.17 кб
Яндекс метрика – настройки
20.92 кб
Яндекс карта – настройки
100.7 кб
hcard – результат
6.64 кб
hcard – настройки
64.01 кб
Другие настройки
18.44 кб
synapse.zip – модуль
10.95 кб
Источник: http://www.drupal.ru/node/76726
Скачать модуль для Drupal 6: yandex_weather-6.x-1.1.zip
Скачать модуль для Drupal 7: yandex_weather-7.x-1.1.zip
На прошлой неделе на сайте drupal.ru я увидел активное обсуждение топиков «Яндекс сервисы в одном проекте» и «Встреча по поддержке и продвижению Яндекс-сервисов в Drupal». В представленном списке существующих модулей для интеграции с сервисами Яндекса я не обнаружил модуля про погоду. Я доработал свой модуль, исправил ошибки, дописал дополнительный функционал и решил выложить на сайт для обсуждения сообществом.
Вот так выглядит блок с информером погоды от Яндекса в дефолтной теме.
В настройках блока можно:
указать город по умолчанию;
разрешить/запретить отображать форму выбора города в блоке;
выбирать размер информера.
Текстовые сообщения модуля написаны на английском языке и переведены на русский язык.
Если данный модуль вызовет интерес, то можно переписать его и для Drupal 7. Буду благодарен за любые конструктивные комментарии.
UPD 21.02.2012: Обновил модуль. На прошлой неделе Яндекс обновил свой сервис погоды, поэтому поломалась часть функциональности моего модуля. Сейчас исправил. А также сделал версию модуля под Drupal 7.
Скачать модуль для Drupal 6: yandex_weather-6.x-1.1.zip
Скачать модуль для Drupal 7: yandex_weather-7.x-1.1.zip
Прикрепленный файл
Размер
yandex_weather-6.x-1.1.zip
9.33 кб
yandex_weather-7.x-1.1.zip
9.48 кб
Источник: http://www.drupal.ru/node/76316
День добрый.
Портировал Inner poll для Drupal 7, для моего любимого 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
Продолжение комментария http://www.drupal.ru/node/74274?page=1#comment-435564
Компания Яндекс заинтересована в продвижении и повышении уровня интеграции своих сервисов с Drupal.
Предлагается провести встречу по вопросам разработки, встреча ориентирована преимущественно на разработчиков.
Яндекс интересует:
Время встречи – 24 января, вторник, 19 часов. Будет забронирована переговорная комната.
Встреча будет проходить в офисе Яндекса
Количество участников (сколько будет людей очно на встрече, сколько будет удаленно). Товарищи, желающие присутствовать удалённо – отпишитесь, пожалуйста, в комментариях.
Так же я считаю, что будет нелишним подготовить вопросы и предложения по использованию API
Очники:
http://www.drupal.ru/username/rxb
(?) http://www.drupal.ru/username/valeratal
(?) http://www.drupal.ru/username/marygold
http://www.drupal.ru/username/stalker-g2
+1 человек с Артёмом
http://www.drupal.ru/username/irbis
http://www.drupal.ru/username/axel
Те, кто будет приходить лично приходят на главный вход в офис Яндекса и говорят, что они на встречу с Друпал сообщестом. Гостей будет встречать Вадим Францев, руководитель группы маркетинга бизнес-решений, с 19-00 до 19-10 на главном ресепшене. Опаздавшие либо к секретарям обращаются и их проводят, либо звонят по телефону +7 495 739-70-00, добавочный 4234.
Переговорка “7.Холмов”
Илья Азаров
http://www.drupal.ru/username/byuro-piyavok
Заочники:
http://www.drupal.ru/username/gagaga
http://www.drupal.ru/username/fortis
http://www.drupal.ru/user/orb
http://www.drupal.ru/username/s-f
http://www.drupal.ru/username/andypost-drupalorg
http://www.drupal.ru/username/validoll
http://www.drupal.ru/username/konstantinkomelin-drupalorg
http://www.drupal.ru/username/restyler
http://www.drupal.ru/username/dd-85
http://www.drupal.ru/username/gde
http://www.drupal.ru/username/enemy
http://www.drupal.ru/username/scotty
http://www.drupal.ru/username/yexel
http://www.drupal.ru/username/cyber
http://www.drupal.ru/username/marygold
http://www.drupal.ru/username/seaji
http://www.drupal.ru/username/higor1968
http://www.drupal.ru/username/plazik
http://www.drupal.ru/username/aleks-84
http://www.drupal.ru/username/lomalkin
http://www.drupal.ru/username/insime
http://www.drupal.ru/username/eagle
http://www.drupal.ru/username/direqtor
http://www.drupal.ru/username/forest-run
http://www.drupal.ru/username/arcadaisb
http://www.drupal.ru/username/glu2006
http://www.drupal.ru/username/splash
Те, кто участвуют удаленно: в 19-10 по МСК должны зайти по адресу http://yandex.adobeconnect.com/drupal/ – здесь будет трансляция, а также чат (вопросы/ответы).
Хотят запись:
http://www.drupal.ru/username/enemy
http://www.drupal.ru/username/softovick
http://www.drupal.ru/username/mak-vardugin
http://www.drupal.ru/username/andruxa
http://www.drupal.ru/username/orion76
http://www.drupal.ru/username/saltan
http://www.drupal.ru/username/6run0
Будут вноситься коррективы
Источник: http://www.drupal.ru/node/74730
Предлагаю обсудить возможность объединить все Яндекс сервисы в одном проекте. На текущий момент на д.о. есть несколько различных модулей для интеграции с яндекс сервисами.
Поиск по сайту дал следующие результаты:
Яндекс.маркет — 6.x.
Яндекс.маркет — 6.x и 7.x(dev).
Яндекс.маркет — в песочнице.
Яндекс.видео — 7.x(dev) new!
Яндекс.метрика — 6.x и 7.x.
Яндекс.метрика — в песочнице.
Яндекс.вакансии — обсуждается.
Яндекс.новости — 6.x(dev) и 7.x(dev).
Яндекс.карты — 6.x(dev).
Яндекс.деньги — 5.x платёжный шлюз для уберкарт.
Яндекс.сервер — в песочнице.
Яндекс.поделиться — в песочнице.
Яндекс.спеллер — в песочнице.
Яндекс.почта — обсуждается.
Яндекс.карты — почти готов.
Яндекс.карты — во вложении.
Site verification — 6.x и 7.x.
Яндекс.маркет — во вложении.
Быстрый заказ — обсуждается.
Яндекс.погода — во вложении.
Если что то забыл, поправьте.
Вот мои причины, для чтобы собрать все сервисы в один проект:
На данный момент большинство из этих модулей находятся «в стадии разработки», а многие попросту брошены без особых шансов получить стабильный релиз для D6 и D7. Я думаю ситуация измениться, если у проекта будет несколько разработчиков.
Это поможет устранить дублирования проектов. Например, в приведённом списке представлено сразу 4 модуля для интеграции с Яндекс.маркет. Думаю, лучше всё таки будет объединить усилия.
Помощь новым разработчикам. Несколько модулей находятся в песочницах из-за того, что некому сделать review кода. На д.о. яндекс мало кому интересен…
Для многих яндекс сервисов интеграция с Друпалом полностью отсутствует. В том числе для самого главного, на мой взгляд сервиса — Яндекс.xml.
Для одного общего проекта, легче найти спонсоров.
Attached poll “Нужно ли объединять все яндекс.модули в один проект?”.
Register or login to poll
Results:
Да: 43 голоса
Нет: 27 голосов
Источник: http://www.drupal.ru/node/74274
История из разряда “Новая жизнь старых вещей”. Точнее – новая “шуба” для привычного элемента форм radios. Для тех случаев, когда элемент 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 (­) by non-breaking space
// (this symbol produces row break in Firefox and Opera)
$values['­'] = ' ';
$form['rs_example_3']['radios_select_3'] = array(
'#type' => 'radios',
'#title' => t('Select symbol:'),
'#default_value' => '©',
'#options' => $values,
'#radios_select' => TRUE, // enables Radios Select for this radios element
'#rs_attributes' => array(
'label' => array(
'width' => 2, // sets label width (in "units" units)
'height' => 2, // sets label height (in "units" units)
'line_height' => 2,
'padding_x' => '3px', // horizontal padding (we use px instead of units)
'padding_y' => '3px', // vertical padding (we use px instead of units)
'units' => 'em',
),
),
'#description' => t('Symbol to use in form.'),
);
?>
Можно “подкрасить” оформление элемента (выбирается также светлая или тёмная стрелка):
<?php
$values = array_merge(range('A', 'Z'), range('a', 'z'));
$form['rs_example_4']['radios_select_4_1'] = array(
'#type' => 'radios',
'#title' => t('Select character:'),
'#default_value' => 2,
'#options' => $values,
'#radios_select' => TRUE, // enables Radios Select for this radios element
'#rs_attributes' => array(
'element' => array(
'frame_color' => '#d4d0c8', // this sets frame color
'dark_arrow' => TRUE, // this sets dark arrow for this element
),
'label' => array(
'width' => 2,
'height' => 2,
'padding_x' => '3px',
'padding_y' => '3px',
'units' => 'em',
),
),
'#description' => t('Character to use in form.'),
);
?>
Или убрать фон выбранного элемента и объединить с селектором (так называемый hollow-режим):
<?php
$values = array_merge(range('A', 'Z'), range('a', 'z'));
$form['rs_example_4']['radios_select_4_2'] = array(
'#type' => 'radios',
'#title' => t('Select character:'),
'#default_value' => 2,
'#options' => $values,
'#radios_select' => TRUE, // enables Radios Select for this radios element
'#rs_attributes' => array(
'element' => array(
'hollow' => TRUE, // this sets hollow mode
),
'label' => array(
'width' => 2,
'height' => 2,
'padding_x' => '3px',
'padding_y' => '3px',
'units' => 'em',
),
),
'#description' => t('Character to use in form.'),
);
?>
А можно и вставить картинки в селектор, причём выровнять по желанию – либо по верху (по умолчанию), либо по низу (как в этом примере):
<?php
$module_path = url(drupal_get_path('module', 'radios_select'));
$images_path = $module_path . '/examples/images/';
$values = array(
'<img src="' . $images_path . 'image1.png" /><br />Some image 1',
'<img src="' . $images_path . 'image2.png" /><br />Some image 2',
'<img src="' . $images_path . 'image3.png" /><br />Some image 3',
'<img src="' . $images_path . 'image1.png" /><br />Some image 4',
'<img src="' . $images_path . 'image2.png" /><br />Some image 5',
'<img src="' . $images_path . 'image3.png" /><br />Some image 6',
);
$form['rs_example_5']['radios_select_5_1'] = array(
'#type' => 'radios',
'#title' => t('Select image:'),
'#default_value' => 0,
'#options' => $values,
'#radios_select' => TRUE, // enables Radios Select for this radios element
'#rs_attributes' => array(
'label' => array(
'valign' => 'bottom', // this sets vertical alignment of labels to bottom
'font_size' => 12,
'line_height' => 14,
'padding_x' => 4,
'padding_y' => 4,
),
),
'#description' => t('Select horizontal or vertical image.'),
);
?>
Другой вариант с картинками – выравнивание “в ряд” с текстом метки (можно также задать произвольный vertical-align для изображения, как обычно в CSS, здесь, в примере – просто смещение от базовой линии):
<?php
$module_path = url(drupal_get_path('module', 'radios_select'));
$images_path = $module_path . '/examples/images/';
$values = array(
'<img src="' . $images_path . 'ru.png" /> Russian Federation',
'<img src="' . $images_path . 'us.png" /> USA',
'<img src="' . $images_path . 'ca.png" /> Canada',
'<img src="' . $images_path . 'fr.png" /> France',
'<img src="' . $images_path . 'de.png" /> Germany',
'<img src="' . $images_path . 'it.png" /> Italy',
'<img src="' . $images_path . 'gb.png" /> United Kingdom',
'<img src="' . $images_path . 'gr.png" /> Greece',
'<img src="' . $images_path . 'tr.png" /> Turkey',
'<img src="' . $images_path . 'ua.png" /> Ukraine',
'<img src="' . $images_path . 'no.png" /> Norway',
);
$form['rs_example_5']['radios_select_5_2'] = array(
'#type' => 'radios',
'#title' => t('Select country:'),
'#default_value' => 0,
'#options' => $values,
'#radios_select' => TRUE, // enables Radios Select for this radios element
'#rs_attributes' => array(
'label' => array(
'img_valign' => '-4px', // sets vertical alignment of images
'nowrap' => 'TRUE', // disables word wrapping for text in labels
),
),
'#description' => t('Country from where you are.'),
);
?>
А можно упорядочить метки в колонки (любое количество колонок):
<?php
$module_path = url(drupal_get_path('module', 'radios_select'));
$images_path = $module_path . '/examples/images/';
$values = array(
'<img src="' . $images_path . 'ru.png" /> Russian Federation',
'<img src="' . $images_path . 'us.png" /> USA',
'<img src="' . $images_path . 'ca.png" /> Canada',
'<img src="' . $images_path . 'fr.png" /> France',
'<img src="' . $images_path . 'de.png" /> Germany',
'<img src="' . $images_path . 'it.png" /> Italy',
'<img src="' . $images_path . 'gb.png" /> United Kingdom',
'<img src="' . $images_path . 'gr.png" /> Greece',
'<img src="' . $images_path . 'tr.png" /> Turkey',
'<img src="' . $images_path . 'ua.png" /> Ukraine',
'<img src="' . $images_path . 'no.png" /> Norway',
);
$form['rs_example_6']['radios_select_6'] = array(
'#type' => 'radios',
'#title' => t('Select country:'),
'#default_value' => 0,
'#options' => $values,
'#radios_select' => TRUE, // enables Radios Select for this radios element
'#rs_attributes' => array(
'element' => array(
'columns' => 4, // this sets ordering by 4 columns
),
'label' => array(
'img_valign' => -4, // px by default, so we can skip units
'nowrap' => 'TRUE',
),
),
'#description' => t('Country from where you are.'),
);
?>
Наконец, труъ-программисты могут полностью изменить вид Radios Select с помощью CSS (стили аттачатся “на лету”, при создании элемента):
<?php
$module_path = url(drupal_get_path('module', 'radios_select'));
$images_path = $module_path . '/examples/images/';
$values = array(
'<img src="' . $images_path . 'ru.png" /> Russian Federation',
'<img src="' . $images_path . 'us.png" /> USA',
'<img src="' . $images_path . 'ca.png" /> Canada',
'<img src="' . $images_path . 'fr.png" /> France',
'<img src="' . $images_path . 'de.png" /> Germany',
'<img src="' . $images_path . 'it.png" /> Italy',
'<img src="' . $images_path . 'gb.png" /> United Kingdom',
'<img src="' . $images_path . 'gr.png" /> Greece',
'<img src="' . $images_path . 'tr.png" /> Turkey',
'<img src="' . $images_path . 'ua.png" /> Ukraine',
'<img src="' . $images_path . 'no.png" /> Norway',
);
$form['rs_example_7']['radios_select_7'] = array(
'#type' => 'radios',
'#title' => t('Select country:'),
'#default_value' => 0,
'#options' => $values,
'#radios_select' => TRUE, // enables Radios Select for this radios element
'#rs_attributes' => array(
'element' => array(
'columns' => 4,
'css' => array(
'div.type-radios-current {background: #222 url("'. $images_path . 'custom_bg.png") bottom right no-repeat; border-color: #222 !important;}',
'div.type-radios-current .inner {background: #a8a8a8;}',
'div.type-radios-current label {background: #ffc136 url("'. $images_path . 'custom_label_active.png") center center repeat-x !important; border: 1px solid #c35e22 !important; color: black;}',
'div.rs_opened {background: #222 url("'. $images_path . 'custom_bg_active.png") bottom right no-repeat;}',
'div.rs_opened .inner {background: none;}',
'div.type-radios-select {background: #d0d0d0 url("'. $images_path . 'custom_select_bg.png") top center repeat-x !important; border-color: #222 !important;}',
'div.type-radios-select label.selected {background: #ffc136 url("'. $images_path . 'custom_label_active.png") center center repeat-x !important; border: 1px solid #c35e22 !important; color: black;}',
'div.type-radios-select label {background: #3a3a3a url("'. $images_path . 'custom_label.png") center center repeat-x !important; border: 1px solid #222 !important; color: white;}',
'div.type-radios-select label:hover {background: #ffc136 url("'. $images_path . 'custom_label_active.png") center center repeat-x !important;}',
),
),
'label' => array(
'img_valign' => -4,
'nowrap' => 'TRUE',
),
),
'#description' => t('Country from where you are.'),
);
?>
Все эти примеры (рабочие и с исходным кодом) доступны из help’а модуля Radios Select (см. приложенный архив) по адресу: admin/help/radios_select
Internet Explorer.
В IE, как обычно, всё “не как у людей”. Начнём с того, что все “красивые” закругления в нём отсутствуют. Попытки прицепить JS-библиотеки типа PIE, curved-corner и пр. положительного результата не дали – эти надстройки ломают разметку inline-элементов.
Вторая проблема – IE единственный из браузеров, который не захотел “понимать” клики по меткам. Пришлось специально для него сделать эмуляцию клика по радиокнопке при клике на метке.
Ещё одна особенность конкретно IE6 – курсор почему-то не устанавливается в “hand” (pointer) при hover’е над метками, даже если явно указывать для него правило в CSS.
В общем, базовый функционал в IE всё же обеспечен (по крайней мере версии IE6, IE7, IE8 с Radios Select работают нормально). Но выглядит в нем всё чуть менее красиво.
Поведение при noscript.
При выключенном JS происходит следующее:
1. Скрывается контейнер выбранного (текущего) элемента – тот, который со стрелкой справа.
2. Делается видимым контейнер селектора (который содержит все элементы).
3. Становятся видимыми сами радиокнопки (слева от каждого элемента), таким образом пользователь может выбрать нужный пункт традиционным для radios образом – щёлкнув на элементе.
4. Таким образом, форматирование/оформление Radios Select в основном сохраняется, добавляются только input’ы.
Примечание: IE и здесь ведёт себя несколько отлично от других браузеров. При выключенном JS он не “признаёт” клики на вложенных в метку картинках (IMG) как клики на метке. Только если пользователь кликнул на текст метки или непосредственно на круглый элемент-радиокнопку.
Примечание: при выключенном JS input’ам присваивается свойство float: left (с тем, чтобы сохранить разметку и равные ширины при использовании колонок. Как следствие радиокнопка “уходит” с базовой линии контейнера и автоматически начинает позиционироваться от верха. Это в общем-то никак не сказывается на разных способах вывода элемента – за исключением, когда используется выравнивание по нижнему краю (как в примере с картинками выше). В этом случае кнопки будут расположены на разной высоте:
Желающие могут скачать и установить модуль. Модуль очень нуждается в тестировании под разными браузерами. Пока протестировано в GoogleChrome, Safari, Opera 11, Firefox 8, IE 6,7,8.
Если будете использовать/тестировать элемент под другими браузерами – просьба отписываться здесь о результатах (с указанием версии браузера).
Как бы и всё.
Скачать модуль Radios Select
Источник: http://www.drupal.ru/node/74267
Перевод интервью Dries Buytaert сайту thinkdigit.com:
В. Привет Дрис! Недавно прочитал, как вы упомянули в блоге, что “люди постоянно спрашивают, где найти хороших 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
Перевел большое интервью с Дрисом Байтаертом, опубликованное в конце декабря на портале 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
Всем доброго времени суток.
Хочу поделиться радостной новостью – сегодня я наконец выпустил в массы официальный релиз темы с моего блога – Drupalace Theme. Она представляет из себя блоговый шаблон с разнообразными настройками. Тема в течение пяти месяцев проходила тестирование на моём блоге и завоевала множественные симпатии со стороны посетителей. А так как я человек абсолютно не жадный, то я решил выложить тему в общественное пользование. Тема написана для седьмой версии Друпала.
Основные преимущества:
10 регионов под блоки. Есть даже регион для добавление рекламы под материалом (node bottom)
Изменяемая разметка темы
Возможность добавления материала в социальные сети (работает через сервис addthis)
Навигация по материалам (ссылки на предыдущий и следующий материал)
Логин во всплывающем окошке
Настраиваемый текст для блока поиска
Симпатичный дизайн
Хорошая читабельность текста
Тема проверялась во всех браузерах, кроме IE6 и ниже.
Детальная прорисовка многих мелочей.
Тема, ушедшая в релиз – это улучшенная тема с моего блога. Добавлены настройки, поддержка IE7+, дополнительные иконки.
Почитать подробнее и посмотреть скриншоты вы можете здесь.
Скачать тему можно с официальной страницы Drupalace Theme.
Всех с прошедшими и будующими праздниками!
Источник: http://www.drupal.ru/node/74022
Одно из немногих оставшихся мест в 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
Иногда нужно быстро сделать контактную форму или форму заказа и поместить ее как блок на какой-нибудь странице, но нет времени на разработку модуля (или не хватает знаний). Предлагаю модуль simpleForm2. он позволяет создать практически любую форму и любое количество таких форм на сайте. Для построения формы нужно хотя бы поверхностное знание HTML.
Вот страница проекта на drupal.org: simpleForm2
Сразу скачать можно отсюда.
Источник: http://www.drupal.ru/node/73738
На сегодня здесь созданно 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
При создании сайтов досок-объявлений, сайтов поиска работы, каких-либо сервисов, довольно часто встречается необходимость создать возможность динамического заполнения полей формы данными, которые уже были ранее введены, оставив возможность ручного пользовательского ввода.
Данная статья является примером реализации подобного функционала.
Статью можно прочитать на сайте южного Drupal-сообщества
Статья является переводом, первоисточник – Import form values from one form to another via AJAX и является полностью рабочим примером.
Источник: http://www.drupal.ru/node/73094
Изначальная идея #states заключается в том, что бы была возможность создания динамических форм без написания JavaScript как такого. #states разрешает без единой строчки кода JavaScript, только с помощью php и Form API Друпала изменять состояние одного елемента (видимость-visible/invisible, активность – enabled/disabled, необходимость – required/optional, состояние чекбоксов – checked/unchecked, expanded/collapsed сворачивать/разворачивать филдсеты) на основании состояния второго (или даже на основании нескольких елементов) после какого-то действия пользователя.
Полную версию статьи читать здесь
Источник: http://www.drupal.ru/node/72990
Наконец-то портировал модуль календаря по материалам на Drupal 7 (не без финансовой помощи, правда, вот этого человека ( 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
Спешите прийти на последнее 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://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.
На сегодня среди для 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
В пятницу 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
26 ноября, суббота, 12:00
Клуб Джерри Рубина. Ленинский пр-т, 62/1
План семинара: основы разметки веб-страницы; эффективные инструменты разработчика; верстка страницы, стандарты, новшества, применение в теммизации Drupal, разбор темы, основные вопросы в создании и редактировании темы.
В конце занятия каждый участник сможет оставить денежные пожертвования сколько считает нужным. В зависимости от того, насколько ему понравилось занятие, лектор и помещение Клуба.
Регистрация по адресу daredjana@gmail.com: ФИО, номер телефона, указать тему лекции и число.
Источник: http://www.drupal.ru/node/71776
Opendeals друпал сборка для электронной коммерции
http://drupal.org/project/opendeals
Состав модулей типовой commerce, views, rules, features. Cборка не самая легкая, но тем не менее шевелится. Удобно реализована панель для управления нодами-представлениями продуктов. Добалено несколько правил для управления магазином и демо-контент.
Источник: http://www.drupal.ru/node/71542
Решил поделиться тем что узнал, пока в кратком виде как можно быстро обновлять редакции сайтов
Допустим мы имеем сайт ( придумаем ему синоним @SITE) в двух и более редакциях, например:
1) Сайт в интернете видят все люди – @site.live
2) Сайт на локальной машине – @site.dev
обновляем файлы сайтов вместе с модулями (откуда куда):
drush rsync –progress @site.dev @site.live
обновляем базы данных (при дополнительных параметрах, можно исключать/включать таблицы) (откуда куда)
drush sql-sync –no-cache @site.dev @site.live
обновляем только файловый контент сайтов (откуда куда)
drush rsync @site.dev:%files @site.live:%files
(по дефолту site/mysite.ru/files/ или sites/default/sites – кто любит плодить друпалы)
Хотим посмотреть список включенных модулей удаленного сайта
drush @site.live pml –status=enabled
Хотим включить модули удаленного сайта: admin_menu authcache
drush @site.live en admin_menu authcache -y
Через drush мы экономим много времени на эти операции, иначе эти операции можно выполнять вручную: ставить галочки, копировать файлы….
Теперь опишу как мы обозначаем синонимы, оригинал примера тут http://drupalcontrib.org/api/drupal/contributions–drush–examples–exam…
1. Создаем файл site.aliases.drushrc.php в любом из каталогов ~/.drush, /etc/drush, там где установлен drush, либо прописываем дополнительный путь для каталога синонимов
2. Приведу пример своего файла в котором описан сайт с двумя версиями live – живой сайт на хостинге, dev – сайт на локальной машине
<?php
$aliases['dev'] = array(
'root' => '/var/www/drupal7/',
'uri' => 'www.mysite.local',
);
$aliases['live'] = array(
'root' => '/home/user/projects/mysite',
'uri' => 'site.ru',
'remote-host' => 'mysite.ru',
'remote-user' => 'user-hosting',
'ssh-options' => '-p2222',
'path-aliases' => array(
'%drush' => '/home/user/bin/drush/',
'%drush-script' => '/home/user/bin/drush/drush',
#'%root' => '/home/user/projects/site/sites/',
'%dump-dir' => '/home/user/projects/site/dump/',
'%dump' => '/home/user/projects/site/dump/sro.sql',
#'%files' => 'sites/site.com/files',
),
);
?>
ps Особеннно радует работа с мультисайтиногом, т.е. даже когда у вас сайты в sites/ на одной установке drupal
Синхронизируем сайты drupal через drush
от lullabot Более подробно на английском
работает ли под вендой – незнаю, т.к. не использую её
Единственное не получилось у меня обновить сайт с одно удаленного сервера на другой удаленный сервер (локальный удаленный – удаленный локальный = работает)
Источник: http://www.drupal.ru/node/71139
Всем привет.
Последние полтора месяца в основном занимался разработкой нового проекта – Plugin Detector.
скриншот:
Идея проекта – помочь разработчику (менеджеру, заказчику) определиться с выбором плагина для сайта. Вторая задача – показать новые и интересные плагины jQuery, которых возможно многие еще не видели и не знают о их существовании. На сайте есть как новые креативные плагины, так и заезжаные «ветераны» плагиностроения, типа 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
Итак, новости! Во-первых, наш генеральный спонсор – компания Microsoft!
0. Конференция состоится 3 декабря.
1. Формат – 1 поток.
2. Конференция пройдет там же, где и в прошлый раз – метро ВДНХ, павильон Электрификация http://www.expo-elektra.ru/kak-nas-najti.html . Будет интернет! Все недочеты организации прошлой конференции учтем.
3. Конференция будет бесплатной!
Дорогие гости из других городов, можете покупать билеты. Дата не поменяется, событие состоится!
Открыта регистрация на сайте http://drupalconf.ru/user/register Если вы участвовали в прошлой конференции, вам необходимо зайти на сайт и обновить информацию в профиле.
Открыто голосвание и прием докладов! зарегистрированные пользователи могут добавить доклад, перейдя по ссылке http://drupalconf.ru/node/add/session
Голосовать за доклады зарегистрированные пользователи могут по адресу http://drupalconf.ru/sessions
Начало регистрации: 9:30
Окончание конференции: 19:00
Источник: http://www.drupal.ru/node/70326
Предлагается для тестирования и использования новый модуль оплаты для Drupal Commerce через шлюз Робокасса
Итак, тестируйте и пишите отзывы по Commerce Robokassa
ЗЫЖ модуль разработан в сотрудничестве с http://www.internet-marketing.by/
Источник: http://www.drupal.ru/node/70117
Необходимо разработать модуль Яндекс.Карты для Drupal 7? Прошу сообщить стоимость и сроки.
Примерное ТЗ:
ТЗ модуля Я.Карты для Drupal 7:
- возможность выбора Народной карты Яндекса
- при добавлении ноды пользователь ставит на карте маркер
- при просмотре ноды отображается сама нода и карта с маркером пользователя
- если это возможно, то сделать выбор – что показывать на маркере (Заголовок ноды и, например, поля из ноды)
- (можно и без этого пункта) находясь на странице термина, вывести маркеры всех нод принадлежащих этому термину на карту
Исполнителям: Данный модуль планируется выложить на drupal.ru.
Заказчикам (таким же как я): Думаю модуль Я.Карты для Drupal 7 нужен не одному мне, поэтому желающие скинуться приветствуются.
Источник: http://www.drupal.ru/node/69824
День добрый.
Грядёт 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
15 октября 2011 в городе Краснодаре будет проводиться BarCamp, силами Южного сообщества будет организована секция Drupal, в рамках которой будет несколько докладов и бурное их обсуждение.
Темы и докладчики:
Почему Drupal? Или немного из своего опыта. Докладчик: Виктор Степаньков
Инструменты для SEO и интернет-маркетинга в Drupal. – Докладчик: Пётр Селфин
Продаем бесплатное – ищем ценность OpenSource решений на примере CMS Drupal. Докладчик: Александр Дубовской
Красивые формы в Drupal 7. Докладчик: Богдан Романенко
Мероприятие состоялось, считаю довольно успешно.
Видео и тексты презентаций будут выложены на http://drupalyug.ru.
Источник: http://www.drupal.ru/node/69365
Во вторник 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
Не знаю было ли такое решение или нет, по крайней мере я не нашел.
Раскуривал эту тему очень давно. Решений на форуме приведено уйма, но не все по моему удачные (требуют лесть в код или создавать отдельные шаблоны). В общем есть “правильное” решение которое думаю и предлагал девелопер.
После установки Колорбокса лезем в его настройки и включаем опцию “Enable Colorbox inline” (а Enable Colorbox load поможет вам с разными формами)
После чего создаем ноду\блок и в его теле пишем такой код
<a class="colorbox-inline" href="?width=500&height=500&inline=true#myid">link</a>
<div style="display: none;"><div id="myid"><?php print render (node_view(node_load(19)), FALSE, TRUE);?></div></div>
Где, width=500 – высота окна, height=500 – ширина окна, link – отображаемая ссылка на окно, myid – название вашего дива, 19 – ID ноды содержимое которой хотим вывести в окно.
Сохраняем в формате PHP code и радуемся)))
Источник: http://www.drupal.ru/node/68873
Всех программистов поздравляю с профессиональным праздником! Успехов в работе и не бросайте Друпал Без вас тут будет тяжело
Источник: http://www.drupal.ru/node/68471
Приглашаем всех самарских (и не только самарских!) друпалеров встретиться на следующей неделе и обсудить дела насущные.
На первом собрании предлагается:
- познакомиться
- пообщаться
- обсудить возможность организации мероприятия как у взрослых: с проектором и докладами
Место проведения:
Beer club в Paint House, http://dosug.samara24.ru/restaurants/company/21476
Время проведения:
суббота, 17 сентября, 17:00
Карта:
мой телефон (Антон)
+7 917 602 37 90
Attached poll “Место проведения”.
Register or login to poll
Results:
Beer club (Paint House): 7 голосов
У Швейка: 3 голоса
Frau Muller: 5 голосов
Источник: http://www.drupal.ru/node/68264
На одном очень популярном ресурсе посвященном различным ЦМС, в комментах о друпале нашел следующую запись о минусах системы:”Грубое русское сообщество”.
Это ведь мы с вами. И правда грубим и хамим новичкам. И я в том числе( Давайте будем добрей и терпеливее.
п.с. такое вот сегодня лирическое настроение
Источник: http://www.drupal.ru/node/67917
Вчера вечером тихо и незаметно вышел Drupal 7.8.
Качать, как обычно, на 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
*** Модуль нуждается в тестировании ***
Написал фактичеки “вслепую”, нет возможности протестировать в реальных условиях
Установка
В настройках своего аккаунта вебмани:
УРЛ результата: ВАШДОМЕН/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
Во вторник 30.08.2011 в 19:00 пройдет уже вторая встреча Drupal кафе Москва
Место проведения – ул. Покровка 38/1 Читалкафе (вход с Лялиного переулка) карта
По длительности планируем опять 2-3 часа, по примеру первой встречи.
Основной темой будет обсуждение результатов ДрупалКон’11 Лондон.
Если останется время, то посветим остальным актуальным вопросам.
Как всегда приветствуются доклады. Выступающие могут воспользоваться проектором и микрофоном.
Из изменений по поводу самого кафе:
На этот раз увеличиться ассортимент напитков, включая чай и кофе.
Так же в меню будет присутствовать еда, которой так не хватало на первой встрече.
По поводу WiFi вопрос пока остается не решенным, но в ближайшее время думаю разрешиться.
Attached poll “Приду на встречу”.
Register or login to poll
Results:
Да: 3 голоса
Нет: 4 голоса
Хочу, но не смогу: 2 голоса
Источник: http://www.drupal.ru/node/67534
Здравствуйте, уважаемые! Нужна Ваша помощь!
Тему обучения Drupal кто только не начинал… Мы решили заняться этим всерьёз и надолго. При поддержке сильнейших сего ресурса (Александра Графова, Андрея Постникова), не без поддержки со стороны чудо-хостинга it-патруля (безвоздмездной!), мы (небольшая инициативная команда) накидали прототип, который в последствии будет частью портала drupal.ru. Адрес этого ресурса по понятным причинам мы сейчас не разглашаем. Торжественное открытие этого раздела состоится в тот момент, когда не останется ни одного известного нам бага.
Все замечательно и быстро продвигается, есть прототип, есть контент, есть море идей и энтузиазма, однако, нас мало и наши силы не то чтобы на исходе, но мы остро нуждаемся в “новой крови” для нашего детища.
Вот список специалистов, которые нам остро необходимы:
Люди, умеющие писать толковые интересные технические тексты (aka копирайтер);
Люди, умеющие программировать на Drupal 7 (установка, настройка модулей. Дописывание и кастомизация модулей – приветствуется!);
Люди, умеющие профессионально тестировать интернет-проекты (обязательное требование – внимание к мелочам, ибо, дьявол в деталях!).
Территориальная принадлежность специалиста – не имеет значения. Крайне желательно наличие Skype (текстовой версии достаточно).
Господа и дамы! Присоединяйтесь к нам и станьте у истоков большого начинания!
В отместку за Ваши усилия, мы обещаем почет, уважуху и мегареспект со стороны русскоязычного сообщества начинающих друпал-разработчиков (собственно, для кого этот ресурс и делается ).
Присылайте Ваши заявки на почту 4drupal.ru@gmail.com , мы обязательно Вам ответим!
Источник: http://www.drupal.ru/node/67169
Во вторник 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
Компания основателя друпал Дриса Байтаерта “АКВИА” сменила фирменный стиль, у нее новый логотип, открылся новый сайт!
Компания разделила все сервисы на 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
Статья на 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
Есть предложение встретиться друпалерам Москвы и их окрестностей.
Дата: конец августа-начало сентября.
Вариант 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
Давно хочу прикрепить свою ленту сообщений из новой социальной сети 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
Вышел 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
Немного теории
Индекс (англ. 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 документ на странице просмотра содержимого. Реализуется это довольно просто…
Полная статья »
Источник: http://www.drupal.ru/node/65269
Небольшая подсказка новичкам куда глядеть, в случае, если под единственным комментарием к ноде вы внезапно обнаружили пейджер и вот уже 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 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
Работая с несколькими Drupal сайтами на одном хостинге, удобно использовать встроенный в Drupal механизм мультисайтинга. О преимуществах работы Drupal в режиме мультисайтинга разговор отдельный. Но обновление версии ядра Drupal в этом случае имеет определенную специфику. Нельзя обновить все сайты за один раз, т.к. у каждого сайта будут свои особенности, которые придется решать по-отдельности. Ниже изложен порядок действий, который привел к желаемому результату. Но сначала оговорка. Работоспособной процедура обновления сайта Drupal с версии 6 до версии 7 стала только после выхода релиза 7.4. Не надо пытаться делать обновление с прежними версиями.
0. Составить полный список модулей, которые используются сайтом. Выяснить на drupal.org наличие версий этих модулей под Drupal7. Возможно, функционал некоторых модулей перекочевал в ядро Drupal, как например, произошло с модулем CCK. Некоторые модули прекратили свое развитие на версии 6 и их функционал выполняют другие модули под новыми названиями для версии 7. На этом этапе нужно принять взвешенное решение о необходимости обновления. Нужно иметь ввиду, что хорошие шансы на простое обновление только у тех сайтов, которые создавались по принципу “не написав ни строчки кода”. Ибо Drupal6 и Drupal7 – это не две версии одной и той же СМС, а две разные СМС, т.к. у них разные API. В Drupal7 нет многих функция API Drupal6, а те, что сохранились по названию имеют другой набор входных параметров. Чаще всего, список параметров, передаваемых через запятую в Drupal6, заменен в Drupal7 массивом параметров [каждый из которых тоже зачастую является массивом]. Кроме модулей нужно позаботиться о новой версии темы оформления. Если все необходимые модули и тема оформления для новой версии есть, либо от непортированных под семерку можно отказаться, переходим к следующим пунктам.
1. Если действующая версия инсталляции Друпал не самая последняя (на сегодня это 6.22), то нужно сначала обновиться до последней версии (не забывая про резервные копии).
2. Рядом с каталогом установки Друпал шестой версии создаем другой каталог для версии 7. Например, шестая версия размещалась на хостинге в каталоге “/home/my_login/drupal”, здесь “/home/my_login/” – домашний каталог на хостинге; “drupal” – каталог инсталляции Друпал6. Тогда создаем каталог “/home/my_login/drupal7”.
3. Копируем последнюю версию Drupal7 со страницы http://drupal.org/project/drupal
4. Устанавливаем как обычно Drupal7 в новый каталог. Для этого можно временно создать поддомен одного из рабочих доменов, либо использовать какой-то свой тестовый домен. В любом случае, нужно на хостинге подключить этот домен/поддомен, указав для него в качестве домашнего каталога вновь созданный. В данном примере это – “/home/my_login/drupal7”. На этом шаге нам нужно убедиться в том, что данный хостинг поддерживает работу с Drupal7. Например PDO (расширение PHP), как показала приктика, присутствует не на всех хостингах. А без PDO Drupal7 не работает.
5. Устанавливаем и тестируем в Drupal7 все модули, которые необходимы для нашего сайта.
6. Делаем архив каталога “/home/my_login/drupal/sites/нашсайт.ru”.
7. Делаем копию БД нашего сайта и сохраняем к себе на ПК (с пометкой “рабочая 6” или другой понятной нам). Можно использовать phpMyAdmin хостера, но лучше воспользоваться скриптом – http://sypex.net/ru/ или аналогичным. Это быстрее, проще и удобнее.
8. Регистрируемся на сайте в Drupal6 под именем пользователя с ID=1 (который создается при установке).
9. Переводим сайт в режим техобслуживания (на странице admin/settings/site-maintenance)
10. Переходим на страницу admin/build/themes и назначаем тему по умолчанию – Garland.
11. На странице admin/build/modules отключаем все модули, которые не входят в раздел “Ядро – обязательное”. Возможно, отключение придется делать в несколько этапов из-за зависимостей между модулями. Весьма кстати было бы на этом этапе читать далее
Источник: http://www.drupal.ru/node/64863
Одним из весомых преимуществ Drupal 7 над его предшественниками есть его гибкость к настройкам и системам. Разработчики не обошли стороной и запросы к БД. В этом релизе они стали объектно-ориентированными и не привязанными к конкретной базе дынных, поскольку теперь сам Drupal генерирует синтаксис запроса. Задачею программиста остается лишь указать условия выборки. Эту статью я посвящаю анализу Database API, где приведу примеры как именно изменилось “общение” с БД.
Полная статья »
Источник: http://www.drupal.ru/node/64860
В этой статье я расскажу и распишу как оперировать основными хуками из раздела Field API.
Field API – один из разделов Drupal 7 API, которые позволяют нам:
создавать настраиваемые поля для данных,
хранить данные в этих полях,
взаимодействовать с любым видом контента.
Проще говоря Field API – средства для полей контента.
Полная статья »
Источник: http://www.drupal.ru/node/64326
На днях перевел свой модуль cctags с шестой версии на седьмую.
Сctags – это альтернатива широко известного модуля tagedelic. Т.е. модуль формирует блок и/или страницу облака тэгов таксономии с атрибутом (классом) зависящим от частоты употребления данного термина в опубликованных нодах.
В чем преимущество данного модуля перед tagedelic.
Tagedelic – формирует ровно столько блоков (и страниц) сколько определено словарей в вашей системе причем не позволяет смешивать словари, т.е. один словарь – одно облако.
В модуле Cctags мы имеем:
Гибкие настройки и расширенные возможности по темизации вывода облака (отдельные файлы шаблонов для тэгов, названия словаря, страницы облака).
Возможность (через настройки включать несколько словарей (а для словарей с древовидной структурой – кроме этого включать/выключать нужный уровень)) вывода тэгов.
Автоматическая генерация нужного количества блоков и/или страниц.
Помимо этого вы можете сформировать практически одинаковые по содержанию блоки и разместить их в разных регионах для разных страниц сайта.
Концепция модуля Cctags основана на понятии элемента cctags.
Элемент cctags – это совокупность настроек для отображения одного блока и/или страницы терминов.
Вы можете добавить необходимое количество элементов и настроить каждый из них отдельно, причем разные элементы могут содержать один и тот же словарь или словари в любой комбинации.
Отличия модуля от версии для Друпал 6.
Убран не характерный и малоиспользуемый для данного модуля функционал:
1. Построение блока и страницы облака пользователей.
2. Построение блока материалов по связанным терминам.
3. Очистка словарей от не используемых терминов.
Проведена работа по совместимости кода модуля с версией PHP >= 5.3
Сам модуль можно пока взять тут (см. прикрепленный файл), чуть позже дев версия появится на д.о.
Источник: http://www.drupal.ru/node/64157
Привет, Коллеги!
Наконец-то мы решились на проведение учебного курса для Drupal!
Главная идея курса: человек приходит с самыми базовыми знаниями о сайтах, уходит с реализованным проектом.
Да, первый курс из серии рассчитан на новичков. Всем известно, что на Drupal сложнее всего сделать простые вещи Курс поможет новичкам преодолеть входной порог в удивительный и безграничный мир Drupal.
Я вижу, здесь много просьб помочь сделать сайт. Курс, который мы предлагаем – хороший ответ на эти просьбы. Инвестировав немного средств и времени можно научиться достаточно быстро и качественно делать функциональные сайты на Drupal под свои задачи …и наконец-то слезть с крючка веб-студий, которые выставляют счёт не меньше 1000 рублей за каждую новую кнопочку на сайте.
Площадка для проведения курса – широко известный Учебный Центр ЭКОС: http://ekos-spb.ru/
Да, он должен быть знаком тем, кто занимается 1С. Это 4-й по количеству слушателей из 241 сертифицированного УЦ: http://1c.ru/rus/partners/training/cso/cso-list.jsp
Страничка курса: http://ekos-spb.ru/kursy-1s/kurs.php?id=21
Начало ближайших занятий: 18 июля 2011 года.
Формат: 4 дня по 8 часов в рабочее время.
Цена: 9000 рублей.
Бывают вечерние и выходные группы. Если больше подходит другое время обучения, да, можно будет подобрать соответствующую группу: (812) 610 05 05, Зоя. Или пишите semp@ekos.spb.ru, Семён.
Спасибо и удачи в освоении этой прекрасной технологии!
Источник: http://www.drupal.ru/node/64094
Всем доброго времени суток. Пришло время предоставить отчет о конференции DrupalConf, которая прошла 23 апреля 2011 года в Москве.
Цифры:
Зарегистрированных участников конференции (заполнивших анкеты перед конференцией) – 224 участника.
География участников: Россия, Беларусь, Украина, Германия.
Инфы много, далее под катом.
Профессиональный состав:
Уровень владения Drupal:
Потребность в проф.консультациях:
Мы можем смело сказать что конференция получилась международной. За пару недель перед конференцией стало понятно, что количество участников придется как-то ограничивать – количество заявок к организатором намного превысило возможности зала. Как показала конференция – это был оправданный шаг, зал был заполнен полностью, но давки/неудобств не было, всем были обеспечены сидячие места.
На заметку гостям будущих конференций – заблаговременно регистрируйтесь на сайте конференции.
Результаты
На наш взгляд первая в России большая конференция по Drupal удалась. Это было бы невозможно, без активного сообщества. Наверное, основной вывод из всей конференции – сообщество в России есть, мы собрали более 240 участников, 30% участников работают с Drupal профессионально – по характеру вопросов к докладчикам было видно, что это представители студий и коллективов разработчиков, которые видят значительный рост в сфере Drupal-разработок, эта сфера притягивает все большие бюджеты, Drupal как CMS интересует все большее количество заказчиков. Что гарантирует – регулярные встречи Drupal-разработчиков неизбежны.
Организаторы
Артем Паньков
Андрей Постников
Маша Таран
HelpTeam
Сергей Бабушев
Дубовской Александр
Спонсоры
Информационные системы для бизнеса – Генеральный спонсор
Fast Lane Ventures
Radon
InternetDevels
Информационная поддержка
РАЭК
itmozg.ru
Интернет в цифрах
RMA
CMS Magazine
Системный администратор
Drupal.ru
Рейтинг Рунета
Докладчики:
Хотим выразить благодарность всем докладчикам конференции. Вы можете просмотреть видео докладов.
1. Вступительный доклад от Постникова Андрея (andypost): Drupal 7 и Drupal 8.
2. Доклад Вячеслава Касихина (Irbis), Ubercart — немного примеров из жизни.
3. Доклад Дубовского Александра (adubovskoy), Drupal для ленивых – как мы делаем больше за меньшее время.
4. Доклад от Алексея Костина (kostin), Drupal & SEO
5. Доклад Анны Федорук, Как построить разработку на Drupal
6. Доклад Антона Житарева (NaZg), Системы Электронного Документооборота на Drupal
7. Доклад Тараса Савчука и Романа Архарова (Romka), Forbs.ru
8. Доклад Клеры Виленской (Klera), Концепция единого модуля интеграции с соцсетями
9. Доклад Влада Савицкого (vladsavitsky), Сайт на Drupal за 15 минут
10. Доклад Александра Швеца (neochief), Разработка Drupal дистрибутивов
По предварительному расписанию у нас было 10 докладов, однако осталось время на экспромт-доклад (без предварительной подготовки), который вызвался рассказать Кинзябулатов Рамиль, посвященный интеграции Ubercart и 1C, ознакомиться с докладом вы можете на данной странице http://video.yandex.ru/users/vaspi/view/44/user-tag/drupalconf/
Отзывы
Вы можете ознакомиться с неформальными отзывами о конференции, которые разместили участники на своих сайтах и блогах:
http://www.drupal.ru/node/61188
http://graker.ru/news/2011/04/24/drupalconf_2011
http://prodrupal.ru/ru/node/89
http://shvetsgroup.com/ru/blog/drupalconf-moscow
http://www.ys1.ru/blog/otchet-o-drupalconf-moscow-2011
Следующий шаг
Данная конференция возымела большой резонанс в среде Drupal-разработчиков. Начали появляться региональные встречи, такие как Встреча DrupalSib в Новосибирске, встреча Южного Друпал сообщества в Краснодаре.
Есть потребность в организации регулярных небольших встреч в Москве – Drupal-кафе. В данный момент вы можете помочь с организацией Drupal-кафе, присоединяйтесь к обсуждению и ждем вас на встречах.
Слухи и домыслы
Хотим сказать, что нас воодушевило, какой отклик вызвала конференция DrupalConf. Есть решения о повторении конференции осенью/зимой 2011 или весной 2012. Каждый из вас может оказать значительную помощь и ускорить повторение DrupalConf в Москве. Как это можно сделать:
Вы можете просто опубликовать ссылку на этот отчет у себя на сайте или в блоге. Прежде всего конференция – это люди и потребность в обмене опытом. Мы можем совместными усилиями поддерживать резонанс о конференции.
Уже сейчас готовить доклад. Поверьте, написание качественного доклада занимает значительное время. В следующей конференции возможно разделение на потоки или на дни, необходимо больше хороших и интересных докладов.
Спасибо всем: читателям, слушателям, докладчикам, спонсорам. Будем рады встретиться на следующем DrupalConf!
Источник: http://www.drupal.ru/node/63916
Начала делать скринкасты по Drupal 7. Пока 2 и без голосовой озвучки, техника создания скринкастов еще далека от совершенства. Но это поправимо
Пока есть два скринкаста:
Локализация интерфейса Drupal 7
Media Gallery в Drupal 7
Планируются новые скринкасты. Выгружаю на YouTube и у себя в блоге.
Принимается критика, пожелания и прочие уместные комментарии.
Источник: http://www.drupal.ru/node/63785
Советую всем кто хотел бы заняться организацией интернет магазина. http://vimeo.com/24901121
Источник: http://www.drupal.ru/node/63623
При создании интеренет-магазина с помощью модуля Drupal Commerce может возникнуть потребность в конфигурировании формата представления стоимости товара.
По умолчанию стоимость товара отображается в формате:
1,234.25 UAH (на примере украинской гривны)
Для русскоязычного пользователя такой формат представления не совсем удобен. В текущей версии beta 3 функционал для изменения формата представления цены товара через пользовательский интерфейс отсутствует.
Задать правильное отображение стоимости товара можно с помощью небольшого модуля, который включает в себя вызов всего одного хука:
<?php
function mymodule_commerce_currency_info_alter(&$currencies, $langcode) {
$currencies['UAH']['symbol'] = 'грн.'; //задаем символ валюты, который нужно отображать
$currencies['UAH']['code_placement'] = 'hidden'; //прячем буквенный код валюты, который отображается по умолчанию вместо символа валюты
$currencies['UAH']['symbol_placement'] = 'after'; //указываем отображение символа валюты после стоимости
$currencies['UAH']['thousands_separator'] = ''; //убираем разделитель сотен, по умолчанию это символ ","
}
?>
Хук должен выполнятся после того, как отработают хуки модуля commerce currency, для этого задаем соответствующий вес нашему модулю в таблице system
Настройку формата отображения стоимости товара с помощью UI обещают включить в одно из следующих обновлений модуля, но пока этого функционала нет, можно пользоваться таким временным решением.
Источник: http://www.drupal.ru/node/63235
Статья здесь – http://drupal.in.ua/content/fotogalereya-dlya-drupal-7-ajax
Тестовый сайт – http://gallery.drupal.in.ua
Реализует функционал фотогалереи с просмотром фото при наведение «мыши» на миниатюру и листанием миниатюр с использованием технологии ajax.
Особенности:
Модуль создает свой тип материала для галереи;
Создает свой тип стиля изображения ( Image style ) для миниатюр;
Не требует дополнительных модулей (contributed modules);
Просмотр фото, при наведение указателя «мыши» и при клике на миниатюру;
Плавное появление изображения при просмотре;
Ссылка на полное изображение с возможностью открытия в окне (window.open)
Работает при отключенном js;
Дополнительные настройки (admin/config/content/drig) не обязательны;
Проверена совместимость с браузерами IE6/…, FireFox, Opera, Chrome, Safari.
27/05/2011: версия 2 – устранены визуальные искажения при медленной загрузке картинок.
28/05/2011:
Во время процесса загрузке image навигация отключается
“Бегунок” загрузки помещен на image
При навигация превью появляются плавно после полной подгрузки (ajax)
31/05/2011
Добавлена проверка корректности навигационной ссылки, при ручном вводе;
Добавлена обработке ajax status error
01/06/2011
Добавлена возможность использование в любом материале с полем типа image. ( настройка на странице admin/config/content/drig )
Прикрепленный файл
Размер
drig.zip
22.43 кб
Источник: http://www.drupal.ru/node/62902
Вышли обновления безопасности Drupal. Drupal 7.1 и 6.21 закрывают уязвимость SA-CORE-2011-001, Drupal 7.2 и 6.22 также закрывают другие ошибки, не относящиеся к безопасности. Чтобы закрыть уязвимость SA-CORE-2011-001 достаточно проапдейтиться на 7.1/6.21.
Новость на drupal.org: http://drupal.org/drupal-7.2
Список изменений после Drupal 7.0: http://drupal.org/node/1168946
http://ftp.drupal.org/files/projects/drupal-7.2.tar.gz
http://ftp.drupal.org/files/projects/drupal-6.22.tar.gz
Источник: http://www.drupal.ru/drupal-7.2
Работая над вялотекущим проектом под Drupal 7, понадобилось мне показывать масштабируемые превьюхи. Поиск дал несколько результатов, но под D7 был выбран, более менее приемлемый модуль Cloud zoom, основанный на одноименном jQuery плагине jQuery Cloud zoom.
Но к сожалению автор модуля , использовал возможности jQuery плагина лишь на 10%, а точнее через данный модуль практически невозможно настроить плагин, а там, тем не менее достаточно много такого, с чем можно «поиграться»(приведу спецификацию параметров без перевода, кому надо надеюсь сами переведут).
Parameter
Description (from V1.0.0)
Default Value
zoomWidth
The width of the zoom window in pixels. If ‘auto’ is specified, the width will be the same as the small image.
‘auto’
zoomHeight
The height of the zoom window in pixels. If ‘auto’ is specified, the height will be the same as the small image.
‘auto’
position
Specifies the position of the zoom window relative to the small image. Allowable values are ‘left’, ‘right’, ‘top’, ‘bottom’, ‘inside’ or you can specifiy the id of an html element to place the zoom window in e.g. position: ‘element1′
‘right’
adjustX
Allows you to fine tune the x-position of the zoom window in pixels.
0
adjustY
Allows you to fine tune the y-position of the zoom window in pixels.
0
tint
Specifies a tint colour which will cover the small image. Colours should be specified in hex format, e.g. ‘#aa00aa’. Does not work with softFocus.
false
tintOpacity
Opacity of the tint, where 0 is fully transparent, and 1 is fully opaque.
0.5
lensOpacity
Opacity of the lens mouse pointer, where 0 is fully transparent, and 1 is fully opaque. In tint and soft-focus modes, it will always be transparent.
0.5
softFocus
Applies a subtle blur effect to the small image. Set to true or false. Does not work with tint.
false
smoothMove
Amount of smoothness/drift of the zoom image as it moves. The higher the number, the smoother/more drifty the movement will be. 1 = no smoothing.
3
showTitle
Shows the title tag of the image. True or false.
true
titleOpacity
Specifies the opacity of the title if displayed, where 0 is fully transparent, and 1 is fully opaque.
0.5
Решил таки исправить данную ситуацию и написал модуль интегрирующий тот же самый jQuery плагин, но позволяющий гибко настроить все используемые параметры.
Примеры работы модуля можно посмотреть на моей тестовой площадке.
Сам модуль можно взять здесь (см. прикрепленные файлы) …
Модуль в пре-дев версии, только для тестирования … если кого заинтересует, то будет время доведу до ума и выложу на д.о.
Устанавливается стандартно, т.е. распаковываете архив в папку sites/all/modules
забираете с сайта jQuery Cloud zoom скрипты и распаковываете их в папку sites/all/libraries/cloud-zoom
Включаете модуль.
Настраиваете тип материала (поле типа Изображение (Image) на закладке “Отображение” устанавливает формат – cczoom и далее уже настраиваете параметры вывода)
Скриншоты настройки поля:
Источник: http://www.drupal.ru/node/62581
Доброго времени суток, уважаемые! Хочу поделиться проблемой решением проблемы:
Стала задача – вывести в блок список самых активных блоггеров. Вывести имя пользователя и количество нод типа Blog post, оставленных им. Сортировка по убыванию по количеству постов. И имя каждого пользователя в добавок ко всему должно было выводиться ссылкой на его блог.
В итоге получилось следующее:
Как получилось? Под катом.
Итак, по порядку. Что я имел для достижения цели:
Drupal 7.x
Views 3.0-beta3
Рецепт получения блока:
Делаем новую вьюшку и делаем дисплей Block.
Мы будем выводить поля. По сему ставим Show:Fields
Фильтр: по типу содержимого Blog entry. Ставим Content: Type (= Blog entry)
Какие мы выводим поля:
- User: Name (ставим галку на Exclude from display, так как нам нужно просто взять из базы данных значение, но фактически не показывать его в данном поле. Почему – опишу ниже.)
- User: Uid (ставим галку на Exclude from display по той же причине)
- Content:Nid. При добавлении поля Views спросит о группировке, укажите Count. Таким образом мы получаем количество постов в блоге от определённого пользователя. После указания группировки Count, поле Content:Nid будет содержать только количество записей блога на каждого пользователя.
Вот тут и начинается самое интересное: нужно вывести имя блоггера, рядом показать счётчик постов, и это поле сделать ссылкой на блог пользователя. Я долго ломал голову как это реализовать, но Dealancer подсказал отличное решение: переписать поле. Действительно: у нас есть имя пользователя, его uid и количество его постов. Почему бы не вывести это в таком порядке, в каком нам это необходимо?
Есть замечательная опция у большинства полей: REWRITE RESULTS. Это свойство поля заменять свой текст по определённым правилам, которые описаны в разделе Replacement patterns, если раскрыть свойство REWRITE RESULTS.
В свойствах поля Content:Nid раскроем REWRITE RESULTS:
Поставим галочки на
[x] Rewrite the output of this field
[x] Output this field as a link
Что даст нам возможность изменять содержание поля и ссылку поля.
После расстановки галочек появятся дополнительные опции Text и Link path. Эти поля определяют текст поля и его ссылку соответственно. Они-то нам и нужны.
Нам необходимо вывести в следующем порядке: Автор (кол_во_постов постов), если сказать по-человечески: Admin (25 постов)
Мы помним, что количество постов у нас хранит поле Content:Nid. По этому дадим имя нашему полю:
[name] ([nid] постов)
Чтобы попасть на страницу блога пользователя, нужно перейти по адресу example.com/blog/user_id
А значит ссылка у нас будет вида blog/[uid]
Сохраняем, и вуаля! Осталось только сделать сортировку по убыванию количества постов. То есть чем больше постов, тем выше в списке будет показываться блоггер.
Для этого поставим сортировку по убыванию значения поля Content:nid. Напоминаю, Content:nid хранит количество постов.
COUNT(Content: Nid) (desc)
В конечном итоге вьюшка преобретает следующий вид
Надеюсь мой опыт будет кому нибудь полезен
Спасибо пользователю Dealancer за неоценимую помощь!
Источник: http://www.drupal.ru/node/62109
Есть тип материала ‘diary’. Нужно разрешить доступ к нему только автору ноды.
Создаем простой модуль ‘diaryaccess’, в котором выполняем хук hook_node_access.
<?php
/**
* Implements hook_node_access().
*
*/
function diaryaccess_node_access($node, $op, $account) {
// If $node is a string, the node has not yet been created. We don't care
// about that case.
if (is_string($node)) {
return NODE_ACCESS_IGNORE;
}
if ($node->type == 'diary' and $node->uid != $account->uid) {
return NODE_ACCESS_DENY;
}
return NODE_ACCESS_IGNORE;
}?>
Источник: http://www.drupal.ru/node/61958
Поставил drupal commerce, потыкал несколько дней, понял – весч! Все круто, все легко и гибко настраивается, легко имортируется из csv и xml при помощи модуля feeds. Вообщем то что надо! за одним НО, как мать его создать каталог?
Пробовал ставить разные модули, искать решение на d.org – ничего толового не нашел, побился головой об стену, и полез во …. views
Приступаем:
1) идем на страницу admin/structure/taxonomy и созадем словарь catalog
– на странице admin/structure/taxonomy/catalog/fields добавляем поле c изображением, например, imagecatalog
– добавляем термины, загружая и зображения и создавая иерархию словаря
2) идем на страницу admin/structure/views и включаем представление Taxonomy term
3) идем на страницу admin/structure/views/add и создаем новое представление
выбираем показатель – термины таксономии, и тип – наш словарь catalog
задаем заголовок страницы
путь ставим taxonomy/term/%
отображение ставим grid (сетка)
элементов для отображения ставим 12 – так как по умолчанию в grid 4 столбца, соответственно указываем значение кратное 4
нажимаем “продолжить и редактировать”
4) начинаем редактировать представление:
4a) в блок “Fields” добавляем поле изображение “imagecatalog”, настраиваем его по своему вкусу
расскрываем правую колонку ‘Advanced’
4б) добавляем Contextual filters
указываем значение – Таксономия: вложение
и добавляем ставим галлку – чтобы при не существующем термине показывалась 404 ошибка (этого можно не делать)
Сохраняем фильтр
таким образом мы перекрыли отображение страницы термина. Теперь по адресу taxonomy/term/id_термина будут отображаться его дочерние термины с их изображениями в виде сетки.
Но если у термина не будет дочерних терминов – ничего отображаться не будет. Такая ситуация нас не устраивает, поэтому делаем следующее:
5) Добавляем no results behavior
ставим галку возле views area
нажимаем далее и указываем какое представление может будет выводиться если у термина нет дочерних терминов, а именно taxonomy_term Dispaly: default
не забываем отметить inherit cotextual filters – это означает что аргумент (id термина) будет передаваться представлению, которое будет вызываться.
сохраняем поле, сохраняем представление.
Как это работает?
если у термина есть дочерние термины – грузится вид catalog
если нет – грузится вид taxonomy term
если использовать с модулем taxonimy menu – получается каталог как на сайте ситилинка
Как сделать пункт меню?
вариант 1: делаем все термины таксономии дочерними какого-то одного, и указываем в меню ссылку на этот термин
вариант 2: берем модуль taxonomy menu, и выводим в блоке ссылки на категории
Ожидаемые проблемы:
1) На странице термина не отображаются его дочерние термины
Причина: представление taxonomy term перекрывает по весу наше представление
Выход: отключить отображение page у представления taxonomy term
2) Помимо словаря catalog есть другие словари, для них должно быть свое отображение
Выход: ждем, иди сами портируем модуль taxonomy redirect
- задаем разные пути для разных словарей
- клонируем представление taxonomy term, меняем в нем путь на заданный в taxonomy redirect
- меняем представление catalog – указываем новые пути, и меняем no results behavior на новое представление
Прикрепленный файл
Размер
1.png
10.72 кб
2.png
14.02 кб
3.png
14.1 кб
4.png
8.96 кб
5.png
8.25 кб
6.png
13.07 кб
7.png
6.52 кб
8.png
6.65 кб
Источник: http://www.drupal.ru/node/60911
Оглавление
Устанавливаем клиент и сервер
sudo apt-get install munin munin-node
переходим в каталог доступных плагинов munin
cd /usr/share/munin/plugins
скачиваем плагины для nginx
sudo wget -O nginx_request http://exchange.munin-monitoring.org/plugins/nginx_request/version/2/download
sudo wget -O nginx_status http://exchange.munin-monitoring.org/plugins/nginx_status/version/3/download
sudo wget -O nginx_memory http://exchange.munin-monitoring.org/plugins/nginx_memory/version/1/download
скачиваем другие плагины
sudo wget -O multimemory http://exchange.munin-monitoring.org/plugins/multimemory/version/3/download
sudo wget -O sshd_log http://exchange.munin-monitoring.org/plugins/sshd_log/version/1/download
sudo wget -O php5-fpm_status http://exchange.munin-monitoring.org/plugins/php5-fpm_status/version/1/download
sudo wget -O mysql_connections http://exchange.munin-monitoring.org/plugins/mysql_connections/version/1/download
sudo wget -O mysql_qcache http://exchange.munin-monitoring.org/plugins/mysql_qcache/version/1/download
sudo wget -O mysql_qcache_mem http://exchange.munin-monitoring.org/plugins/mysql_qcache_mem/version/1/download
делаем плагины исполняемыми
sudo chmod +x nginx_request
sudo chmod +x nginx_status
sudo chmod +x nginx_memory
sudo chmod +x multimemory
sudo chmod +x sshd_log
sudo chmod +x php5-fpm_status
sudo chmod +x mysql_connections
sudo chmod +x mysql_qcache
sudo chmod +x mysql_qcache_mem
выходим из директории
cd ~
включаем плагины
sudo ln -s /usr/share/munin/plugins/nginx_request /etc/munin/plugins/nginx_request
sudo ln -s /usr/share/munin/plugins/nginx_status /etc/munin/plugins/nginx_status
sudo ln -s /usr/share/munin/plugins/nginx_memory /etc/munin/plugins/nginx_memory
sudo ln -s /usr/share/munin/plugins/multimemory /etc/munin/plugins/multimemory
sudo ln -s /usr/share/munin/plugins/sshd_log /etc/munin/plugins/sshd_log
sudo ln -s /usr/share/munin/plugins/php5-fpm_status /etc/munin/plugins/php5-fpm_status
sudo ln -s /usr/share/munin/plugins/mysql_connections /etc/munin/plugins/mysql_connections
sudo ln -s /usr/share/munin/plugins/mysql_qcache /etc/munin/plugins/mysql_qcache
sudo ln -s /usr/share/munin/plugins/mysql_qcache_mem /etc/munin/plugins/mysql_qcache_mem
Некоторые плагины имеет не unix формат, чтобы он заработал в Ubuntu открываем его
sudo vim /usr/share/munin/plugins/sshd_log
и пишем команду для vim редактора (не в документ пишем а именно команду)
:set ff=unix
Редактируем дефолтовый конфиг Nginx
sudo vim /etc/nginx/sites-available/default
Добавляем новые location для localhost
location /nginx_status {
stub_status on;
access_log off;
allow 127.0.0.1;
deny all;
}
location /fpm-status {
access_log off;
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME /fpm-status;
include fastcgi_params;
allow 127.0.0.1;
deny all;
}
Перезагружаем nginx
sudo /etc/init.d/nginx stop && sudo /etc/init.d/nginx start
Далее, необходимо указать плагинам, куда ходить за статистикой и тому подобное
sudo vim /etc/munin/plugin-conf.d/munin-node
Добавляем следующее
[nginx*]
env.url http://localhost/nginx_status
env.ua nginx-status-verifier/0.1
[multimemory]
env.os linux
env.names nginx php5-fpm mysqld
[users]
env.category users
[sshd_log]
user root
group root
env.logfile /var/log/auth.log
env.category users
Для работы статистики php5-fpm редактируем его конфиг
sudo vim /etc/php5/fpm/main.conf
Добавляем
pm.status_path = /fpm-status
Перезагружаем клиент Munin:
sudo /etc/init.d/munin-node restart
или
sudo service munin-node restart
Перезагружаем php5-frm
sudo /etc/init.d/php5-fpm restart
Добавляем хост
sudo vim /etc/nginx/sites-available/munin.example.ru
Вставляем примерно следующее
server {
listen 80;
server_name munin.example.ru;
access_log /var/log/nginx/munin.example.ru.access.log;
auth_basic "Restricted";
auth_basic_user_file /etc/munin/.htpasswd;
location / {
root /var/cache/munin/www;
index index.html;
}
}
Включаем
sudo ln -s /etc/nginx/sites-available/munin.example.ru /etc/nginx/sites-enabled/munin.example.ru
Создаем файлик, где будут располагаться пользователи, для которых будет открыт доступ к графикам производительности (http://www.codeobsessed.com/encryption.php нужен пароль crypt(3)):
sudo vim /etc/munin/.htpasswd
Перезагружаем nginx
sudo /etc/init.d/nginx stop && sudo /etc/init.d/nginx start
Теперь можно смотреть графики по адресу munin.example.ru
Прикрепленный файл
Размер
www_raven.zip
7.75 кб
templates_raven.zip
28.68 кб
Источник: http://www.drupal.ru/node/60544
Оглавление
Содержать свой почтовый сервер, со всеми прибомбасами, такими как антивирусник, антиспам и так далее, оказалось слишком дорого в плане ресурсов, это будет плохо вписываться в имеющиеся 384М оперативки, даже при 512 я буду смотреть в сторону увеличения воркеров для fpm, увеличения памяти для скриптов (сейчас 1 воркер на 128М, что катострафически мало), также буду смотреть в сторону организации ускорителя и кеша… В общем только на конфигурации 1Gb оперативной памяти следует задуматься о развёртовании полноценного почтового сервера.
Я использую яндекс, т.к. в панели управления доменами у моего регистратора есть автоматическая привязка. Но можно пробовать завязывать на gmail или mail.ru
Меняем имя сервера (по умолчанию оно server), впринципе это нужно для полноценного почтового сервера, но пускай будет настроено правильно.
sudo vim /etc/hostname
Пишем название, например
sergei
Меняем хост
sudo vim /etc/hosts
Заменяем нули на реальный IP
0.0.0.0 sergei.example-d6.ru sergei
Перезагружаем ОС
sudo reboot
Смотрим на имя и хост
hostname
hostname -f
Если после перезагрузки имя не сменилось, то надо идти в панель управления VDS если нет доступа к ней, то просить хостера сменить имя.
Установим нужные пакеты, которые настроены будут позже
sudo apt-get install postfix libsasl2-2 sasl2-bin
Отредактируем конфиг:
sudo vim /etc/postfix/main.cf
Исправляем:
mynetworks = 127.0.0.0/8, 192.168.0.0/16
Добавляем в этот же конфиг
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/saslpass
smtp_sasl_security_options =
relay = smtp.yandex.ru
relayhost = smtp.yandex.ru
Добавим файл /etc/postfix/saslpass:
sudo vim /etc/postfix/saslpass
smtp.yandex.ru admin@example-d6.ru:password
Закрепим изменения:
sudo postmap /etc/postfix/saslpass
Подправим php.ini:
sudo vim /etc/php5/fpm/php.ini
Находим строку sendmail_path и заменяем:
sendmail_path = sendmail -t -i -f admin@example-d6.ru
Перезагружаем fpm
sudo /etc/init.d/php5-fpm restart
Теперь должно всё работать, я проверял на контактной форме случайного сайта, т.е. не c example-d6.ru, а например example-d7.ru, чтобы убедиться что письма отсылаются с любого домена, а не только указанного в конфиге.
Источник: http://www.drupal.ru/node/60543
Оглавление
Нужно настроить cron для всех сайтов, в том числе и для технических. Периоды выбираются индивидуально для каждого сайта, но на технический я ставлю 1 раз в сутки, не смотря на то что в админке drupal’a ставлю проверять обновления раз в неделю…
Открываем для редактирования задачи cron’a
sudo crontab -e
Должно быть примерно так, третья строка (www.example-d6.ru) запускается каждую минуту чтобы убедиться сразу что работает, после чего надо выставить нормальное время, чтобы не завалить сервер если сайтов в мультисайтинге десяток, а то и не один…
45 2 * * * /usr/bin/wget -O - -q -t 1 http://technical.example-d6.ru/cron.php
15 3 * * * /usr/bin/wget -O - -q -t 1 http://technical.example-d7.ru/cron.php
* * * * * /usr/bin/wget -O - -q -t 1 http://www.example-d6.ru/cron.php
35 3 * * /usr/bin/wget -O - -q -t 1 http://www.example-d7.ru/cron.php
Источник: http://www.drupal.ru/node/60542
Оглавление
Ставим MySqlDumper (www.mysqldumper.net), его я использую для переноса баз данных, т.к. один сайт имеет запредельный размер, порядка 500М в несжатом виде, также ставлю на хостинг, там делаю экспорт, здесь импорт.
sudo mkdir /var/www/mysqldumper
sudo ln -s /var/www/mysqldumper ~admin/mysqldumper
sudo chown -R admin:admin /var/www/mysqldumper
Заливаем сюда скрипты, я например через FileZilla это делаю, а не через putty
Сразу поставим права, т.к. этого потребует скрипт установки.
chmod 777 /var/www/mysqldumper/config.php
Добавляем хост
sudo vim /etc/nginx/sites-available/mysqldumper.example.ru
Вставляем примерно следующее
server {
listen 80;
server_name msd.example.ru;
rewrite ^ http://mysqldumper.example.ru$request_uri? permanent; #301 redirect
}
server {
listen 80;
server_name mysqldumper.example.ru;
access_log /var/log/nginx/mysqldumper.example.ru.access.log;
location / {
root /var/www/mysqldumper;
index index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/mysqldumper$fastcgi_script_name;
include fastcgi_params;
}
}
Включаем
sudo ln -s /etc/nginx/sites-available/mysqldumper.example.ru /etc/nginx/sites-enabled/mysqldumper.example.ru
И перезагружаем nginx
sudo /etc/init.d/nginx stop && sudo /etc/init.d/nginx start
Открыв в браузере mysqldumper.example.ru увидим install, проходим её. Нажимаем на “Create directory protection” например MD5. Для nginx нужен crypt(3) можно составить например здесь http://www.codeobsessed.com/encryption.php
Открываем файл с паролями и заменяем пароль на полученный через crypt(3)
vim /var/www/mysqldumper/.htpasswd
Но это не работает для nginx сервера, поэтому добавляем в конфиг
sudo vim /etc/nginx/sites-available/mysqldumper.example.ru
следующее
auth_basic "Restricted";
auth_basic_user_file /var/www/mysqldumper/.htpasswd;
т.е. получится примерно так
server {
listen 80;
server_name mysqldumper.example.ru;
access_log /var/log/nginx/mysqldumper.example.ru.access.log;
auth_basic "Restricted";
auth_basic_user_file /var/www/mysqldumper/.htpasswd;
...
И снова перезагружаем nginx
sudo /etc/init.d/nginx stop && sudo /etc/init.d/nginx start
Источник: http://www.drupal.ru/node/60538
Оглавление
Устанавливаем нужные пакеты
sudo apt-get install phpmyadmin php5-mcrypt
В окошке не выбираем ничего просто жмём enter
Добавляем хост
sudo vim /etc/nginx/sites-available/phpmyadmin.example.ru
Вставляем примерно следующее
server {
listen 80;
server_name pma.example.ru;
rewrite ^ http://phpmyadmin.example.ru$request_uri? permanent; #301 redirect
}
server {
listen 80;
server_name phpmyadmin.example.ru;
access_log /var/log/nginx/phpmyadmin.example.ru.access.log;
location / {
root /usr/share/phpmyadmin;
index index.php;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /usr/share/phpmyadmin$fastcgi_script_name;
include fastcgi_params;
}
}
Включаем
sudo ln -s /etc/nginx/sites-available/phpmyadmin.example.ru /etc/nginx/sites-enabled/phpmyadmin.example.ru
Забегая вперёд, после входа PhpMyAdmin будет жаловаться на установленный Suhosin, правим конфиг как рекомендовано в доках на PhpMyAdmin
sudo vim /etc/php5/conf.d/suhosin.ini
Должны быть следующие значения:
suhosin.sql.bailout_on_error = off
suhosin.post.max_array_index_length = 256
suhosin.post.max_totalname_length = 8192
suhosin.post.max_vars = 2048
suhosin.request.max_array_index_length = 256
suhosin.request.max_totalname_length = 8192
suhosin.request.max_vars = 2048
так же логи не должны включать в себя sql
Далее отключаем предупреждение о возможных проблемах с suhosin
sudo vim /usr/share/phpmyadmin/libraries/config.default.php
В файле написано что мы не должны его менять, так что меняем только это значение, чтобы надпись не раздражала, так как мы выставили рекомендуемые параметры.
$cfg['SuhosinDisableWarning'] = true;
Перезагружаем php fpm и nginx
sudo /etc/init.d/php5-fpm restart && sudo /etc/init.d/nginx stop && sudo /etc/init.d/nginx start
Теперь по адресу phpmyadmin.example.ru должна быть форма входа в PhpMyAdmin
Источник: http://www.drupal.ru/node/60537
Оглавление
Устанавливаем нужные пакеты
sudo apt-get install mysql-server mysql-client php5-mysql
Правим конфиг чтобы уменьшить потребление памяти
sudo vim /etc/mysql/my.cnf
Находим раздел про InnoDB, и добавляем
skip-innodb
Перезапускаем mysql
sudo /etc/init.d/mysql restart
если не получится, то попробовать надо так
sudo service mysql restart
Потребление памяти уменьшилось, благодаря тому, что запущено теперь меньше процессов mysql
Перезапускаем php fpm т.к. мы поставили php5-mysql, который пока не работает
sudo /etc/init.d/php5-fpm restart
Источник: http://www.drupal.ru/node/60536
Оглавление
Устанавливаем сам memcache
sudo apt-get install php5-memcache
Перезагружаем php5-frm
sudo /etc/init.d/php5-fpm restart
Источник: http://www.drupal.ru/node/60535
Оглавление
Скачиваем во временную папку последнию версию и устанавливаем
cd /tmp/
sudo wget http://bart.eaccelerator.net/source/0.9.6.1/eaccelerator-0.9.6.1.tar.bz2
sudo tar xvjf eaccelerator-0.9.6.1.tar.bz2
cd eaccelerator-0.9.6.1
sudo phpize
sudo ./configure --enable-eaccelerator=shared
sudo make
sudo make install
cd ~
теперь редактируем и добавляем следующие строки, начиная после тега [PHP]:
sudo vim /etc/php5/fpm/php.ini
; eAccelerator configuration
; Note that eAccelerator may also be installed as a PHP extension or as a zend_extension
; If you are using a thread safe build of PHP you must use
; zend_extension_ts instead of zend_extension
;extension = "/usr/lib/php5/20090626/eaccelerator.so"
zend_extension = "/usr/lib/php5/20090626/eaccelerator.so"
eaccelerator.shm_size = "16"
eaccelerator.cache_dir = "/var/cache/eaccelerator"
eaccelerator.enable = "1"
eaccelerator.optimizer = "1"
eaccelerator.check_mtime = "1"
eaccelerator.debug = "0"
eaccelerator.filter = ""
eaccelerator.shm_max = "0"
eaccelerator.shm_ttl = "0"
eaccelerator.shm_prune_period = "0"
eaccelerator.shm_only = "0"
eaccelerator.compress = "1"
eaccelerator.compress_level = "9"
eaccelerator.allowed_admin_path = "/var/www/eaccelerator"
Создаём директории с нужными права
sudo mkdir -p /var/cache/eaccelerator
sudo chmod 0777 /var/cache/eaccelerator
Перезагружаем php5-frm
sudo /etc/init.d/php5-fpm restart
Источник: http://www.drupal.ru/node/60534
Оглавление
Нам понадобятся 2 библиотеки, закачаем последние версии и установим их
cd /tmp
wget http://us.archive.ubuntu.com/ubuntu/pool/main/k/krb5/libkrb53_1.6.dfsg.4~beta1-5ubuntu2_i386.deb
wget http://us.archive.ubuntu.com/ubuntu/pool/main/i/icu/libicu38_3.8-6ubuntu0.2_i386.deb
sudo dpkg -i *.deb
cd ~
Обновим список репозиториев, для установки последней стабильной версии PHP
sudo vim /etc/apt/sources.list
Добавляем
deb http://php53.dotdeb.org stable all
Обновляемся и устанавливаем PHP с нужными пакетами.
sudo apt-get update
sudo apt-get install php5-cli php5-common php5-suhosin
sudo apt-get install php5-fpm php5-cgi
sudo apt-get install php-apc php5-curl php5-dev
Редактируем конфиг для fpm, т.к. через него у нас будет запускаться FastCGI
sudo vim /etc/php5/fpm/php.ini
Вставляем следующий параметр
cgi.fix_pathinfo = 0
Правим конфиг для пакета php-apc
sudo vim /etc/php5/conf.d/apc.ini
Добавляем строку
apc.shm_size = 48
Чтобы не было падений php-fpm открываем этот конфиг
sudo vim /etc/php5/fpm/pool.d/www.conf
На самом деле динамические воркеры, это хорошо. Если мы даём каждому юзеру свой воркер это накладно при 2000 сайтов. Но у нас только VDS с 384М, а не сервак с 16 гигами, будет несколько юзеров, но с общими воркерами, для начала поставим 1, а когда будет всё настроено можно будет увеличивать если будут свободные ресурсы (На вторую конфигурацию с гигом памяти смело можно ставить 3, или вообще не трогать и оставить динамические). Так же хорошо для крона сделать отдельный воркер, это связано с тем что на моих сайтах долго выполняется cron, время каждого запуска расчитано, поэтому хватит и одного отдельного потока, для его бесперебойной работы, чтобы он не конкурировал с пользователями сайтов. Но всё это держим только в уме, а пока ставим 1 поток на всех.
pm = static
pm.max_children = 1
Перезагружаем nginx и php5-frm.
sudo /etc/init.d/nginx stop && sudo /etc/init.d/nginx start
sudo /etc/init.d/php5-fpm stop
sudo /etc/init.d/php5-fpm start
Создаём проверочный файл
sudo vim /var/www/index.php
И пишем такую строчку
<?php phpinfo(); ?>
Проверяем, должно всё работать.
Источник: http://www.drupal.ru/node/60533
Оглавление
Смотрим установлен ли апач
dpkg -l | grep apache
Если установлен, то удаляем примерно так (будет зависеть от установленных пакетов):
sudo apt-get --purge remove apache2 apache2.2-bin apache2.2-common apache2-mpm-prefork apache2-utils apache2-doc
Устанавливаем nginx
sudo apt-get install nginx
Запускаем
sudo /etc/init.d/nginx start
Далее в браузере вводим IP своего VDS и видим надпись
Welcome to nginx!
* Если появилась ошибка 403, то на этом этапе не страшно, в одной из версий неправильный конфиг дефолтовый, что исправиться при установке PHP
Меняем дефолтовый конфиг
sudo vim /etc/nginx/sites-available/default
Заменяем содержимое файла на следующее
server {
listen 80;
server_name localhost;
access_log /var/log/nginx/localhost.access.log;
## Default location
location / {
root /var/www;
index index.php;
}
## Images and static content is treated different
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml)$ {
access_log off;
expires 30d;
root /var/www;
}
## Parse all .php file in the /var/www directory
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www$fastcgi_script_name;
include fastcgi_params;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_intercept_errors on;
fastcgi_ignore_client_abort off;
fastcgi_connect_timeout 60;
fastcgi_send_timeout 180;
fastcgi_read_timeout 180;
fastcgi_buffer_size 128k;
fastcgi_buffers 4 256k;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}
## Disable viewing .htaccess & .htpassword
location ~ /\.ht {
deny all;
}
}
Чтобы можно было добавлять много server_name в разных конфигах нужно добавить директиву server_names_hash_bucket_size в конфиге nginx в http блок
sudo vim /etc/nginx/nginx.conf
server_names_hash_bucket_size 512;
Источник: http://www.drupal.ru/node/60532
Оглавление
Устанавливаем локаль
sudo /usr/sbin/locale-gen en_US.UTF-8 && sudo /usr/sbin/update-locale LANG=en_US.UTF-8
Обновляемся
sudo apt-get update
Ставим менеджер для обновлений
sudo apt-get install update-manager-core
sudo do-release-upgrade
Ставим для обзора процессов и их потребления памяти ими, ставим htop
sudo apt-get install htop
используем очень просто
htop
Ставим утилиты разработки
sudo apt-get install build-essential
Если стоит 10.04 а не 10.10 то обновление делается так
Открываем файл менеджера обновлений для правки
sudo vim /etc/update-manager/release-upgrades
Заменяем
Prompt=lts
на
Prompt=normal
Обновляемся
sudo do-release-upgrade
Теперь должна быть версия 10.10
Источник: http://www.drupal.ru/node/60531
Оглавление
Хостер установил уже Ubuntu Server 10.10 и даже поставил ssh и Apache 2.
Заходим через SSH как root, сразу меняем пароль на нормальный
passwd
Добавляем группу избранных, назовём её raccess
/usr/sbin/groupadd raccess
Открываем файл, для того чтобы нашу группу сделать “избранной”
/usr/sbin/visudo
Добавляем в конец файла, далее если не оговаривается, то всегда вставляется именно в конец.
## Allows people in group raccess to run all commands
%raccess ALL=(ALL) ALL
Добавляем нового пользователя, пускай будет admin, но в теории хорошо как и группу называть по другому, это усложняет взлом подбором.
/usr/sbin/adduser admin
Добавляем его к ранее созданной группе
/usr/sbin/usermod -a -G raccess admin
Добавляем папку для ключей SSH
mkdir ~/.ssh
Генерируем ключи
ssh-keygen -t rsa
Делаем для нашего будущего аккаунта, где вместо нулей подставляем реальный IP адрес
scp ~/.ssh/id_rsa.pub admin@0.0.0.0:
mkdir ~admin/.ssh
mv ~admin/id_rsa.pub ~admin/.ssh/authorized_keys
Назначаем права нашему пользователю
chown -R admin:admin ~admin/.ssh
chmod 700 ~admin/.ssh
chmod 600 ~admin/.ssh/authorized_keys
Настраиваем SSH
vim /etc/ssh/sshd_config
Проверяем значения и меняем или добавляем строки если нет…
Port 10022 # Меняем на что нибудь между 1025 и 65536, это так же усложнит жизнь взломщикам.
Protocol 2
PermitRootLogin no # отключаем запись для root пользователя
UseDNS no
AllowUsers admin # если пользователей несколько через пробел называем всех
В интернете предлагают сделать следующее, я пока не разобрался как потом залогиниться
PasswordAuthentication no
Создаём правила маршрутизации в файлике, чтобы после перезагрузки сервера настройки восстанавливались.
vim /etc/iptables.up.rules
Вставляем следующее, и меняем порт для SSH, который недавно ставили 10022, остальные не трогаем, в комментариях видно для чего они понадобятся.
*filter
# Allows all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT ! -i lo -d 127.0.0.0/8 -j REJECT
# Accepts all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# Allows all outbound traffic
# You can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT
# Allows HTTP and HTTPS connections from anywhere (the normal ports for websites)
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
# Allows mysql
-A INPUT -p tcp --dport 3306 -j ACCEPT
# Allows fcgi
-A INPUT -p tcp --dport 9000 -j ACCEPT
-A INPUT -p tcp --dport 8521 -j ACCEPT
# Allows SSH connections
#
# THE -dport NUMBER IS THE SAME ONE YOU SET UP IN THE SSHD_CONFIG FILE
#
-A INPUT -p tcp -m state --state NEW --dport 10022 -j ACCEPT
# Allows mail
-A INPUT -p tcp -m state --state NEW -m tcp --dport 25 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 110 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 143 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 993 -j ACCEPT
-A INPUT -p tcp -m state --state NEW -m tcp --dport 995 -j ACCEPT
# Allows ldap
-A INPUT -p tcp -m state --state NEW -m tcp --dport 389 -j ACCEPT
# Allows memcache
-A INPUT -p tcp -m state --state NEW -m tcp --dport 11211 -j ACCEPT
# Allows munin
-A INPUT -p tcp -m state --state NEW -m tcp --dport 4949 -j ACCEPT
# Allow ping
-A INPUT -p icmp -m icmp --icmp-type 8 -j ACCEPT
# log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7
# Reject all other inbound - default deny unless explicitly allowed policy
-A INPUT -j REJECT
-A FORWARD -j REJECT
COMMIT
Чистим память
/sbin/iptables -F
Применяем наши правила
/sbin/iptables-restore < /etc/iptables.up.rules
Проверяем внимательно особенно наш порт SSH
/sbin/iptables -L
Для восстановления после перезагрузки создаём файл
vim /etc/network/if-pre-up.d/iptables
Вставляем следующее
#!/bin/sh
/sbin/iptables-restore < /etc/iptables.up.rules
Разрешаем запускать этот файл
chmod +x /etc/network/if-pre-up.d/iptables
Перезагружаем ssh
/etc/init.d/ssh reload
Закрываем Putty, открываем заново поменяв порт. Заходим под admin
Теперь нельзя залогиниться как root…
Источник: http://www.drupal.ru/node/60530
Многим знаком модуль gotwo. Он делает редирект внешних ссылок. Неудобство модуля в том что он использует нестандартный тег GO. Решил его поправить. Чтобы не было необходимости использовать нестандартные теги. Так-же в оригинальном модуле создавался новый элемент. Я же решил вносить изменения для редиректа в стандартный тег A если установлен класс GO.
Собственно сами изменения. Прошу указать на ошибки, если что не так.
Меняем только функцию _gotwo_link в файле gotwo.module
Было
<?php
function _gotwo_link($text, $filter) {
$html_dom = filter_dom_load($text);
$goNodesToRemove = array();
foreach ($html_dom->getElementsByTagName('go') as $goNode) {
// Clone <go> link to <a> link and keep all attributes intact.
$linkNode = $goNode->ownerDocument->createElement('a');
if ($goNode->attributes->length) {
foreach ($goNode->attributes as $attribute) {
$linkNode->setAttribute($attribute->nodeName, $attribute->nodeValue);
}
}
// Clone all <go> child nodes inside the new <a> tag.
while ($goNode->hasChildNodes()) {
$childNodes = $goNode->childNodes;
$linkNode->appendChild($childNodes->item(0));
}
// Verify if the url exists in the {gotwo} table. If the url is missing,
// add the url with link title to the {gotwo} table.
$href = $goNode->getAttribute('href');
$title = $goNode->getAttribute('title');
if (!empty($href)) {
$linkNode->setAttribute('href', _gotwo_get_url($href, empty($title) ? NULL : $title));
}
// Insert the new $linkNode before the previous $goNode.
$goNode->parentNode->insertBefore($linkNode, $goNode);
// Save $goNode to remove array. We cannot remove the child here or the DOM
// index will be cluttered and every second <go> link is not replacement.
$goNodesToRemove[] = $goNode;
}
?>
Стало
<?php
function _gotwo_link($text, $filter) {
$html_dom = filter_dom_load($text);
$goNodesToRemove = array();
foreach ($html_dom->getElementsByTagName('a') as $goNode) {
// Clone <go> link to <a> link and keep all attributes intact.
if($goNode->getAttribute('class') == 'go') {
$href = $goNode->getAttribute('href');
$title = $goNode->getAttribute('title');
if (!empty($href)) {
$goNode->setAttribute('href', _gotwo_get_url($href, empty($title) ? NULL : $title));
}
}
}
// Now we are able to remove the child's without loosing the index.
$text = filter_dom_serialize($html_dom);
return trim($text);
}
?>
Источник: http://www.drupal.ru/node/60488
Сделал модуль для экспорта ленты сайта в Яндекс.новости.
Для views, с гибкими настройками маппинга полей. Под семерку.
Просьба потестить и рассказать про результаты проверки Яндексом ваших лент.
Баги – в issue tracker модуля, но можно и сюда.
http://drupal.org/project/ynews
Источник: http://www.drupal.ru/node/60373
Как сделать возможность записи видео для сайта с Веб камеры
Пример модуля в работе
Задача:
Сделать для сайта, христианской направленности, возможность записи видео с Веб камеры для сохранения видео на сервере и автоматического создания страницы. Эта цель была поставлена для того, что дать возможность людям лишенных слуха (рукоговорящим), возможность рассказать о своей проблеме или о себе их родным языком – языком жестов. Часто на сайтах есть возможность использовать разные языки, но как быть, если твой родной язык – язык жестов, конечно можно сказать, что глухие (рукоговорящие) могут читать. Да это так, но не все глухие грамотные и они очень стесняются писать из за того, что они часто неправильно ставят или вовсе не ставят окончания. Поэтому и поставили цель, организовать видео для них. Ну, хватит объяснений, приступим к делу.
Как делали:
Во-первых, для разработки были предложены разные CMS (системы управления сайтом) и из всех возможных была выбрана CMS Drupal версии 7.
- она бесплатна
- подходит по требованиям
- и мы давно с ней работаем -)
И модуль Kaltura он как раз то, что нам нужно.
Теперь опишу процесс создания: Установили Drupal и необходимые стандартные модули, после этого включили все модули, из пакета Kaltura, но здесь мы встретились с определенной проблемой, а точнее, мы включили модули и ничего не произошло, оказывается
*! Модули нужно включать последовательно!
То есть, когда мы заливаем модуль в папку “modules/” на нашем сервере, в разделе “Модули” (”Modules”), мы увидим группу модулей, принадлежащих разделу Kaltura и
первым надо включить – Kaltura Module – это сам модуль,
сохраняем
затем – kaltura as CCK field позволяет создавать поле при создании материала(требует ССК),
сохраняем
и последний – Kaltura Media Views позволяет создавать просматриваемые видео, последние добавленные, лучшие.
Только после этих манипуляций мы увидели в разделе “Конфигурация” (”Configuration”), настройки этого модуля.
Внутренняя настройка модуля Kaltura:
Заходим в “Server Integration Settings”
* KALTURA TO DRUPAL NOTIFICATION SETTINGS – здесь настраиваем Адрес нашего сайта.
* Далее нам нужно зарегистрироваться идем на сайт www.Kaltura.org и регистрируемся, получаем наш Partner ID и пароль.
* Теперь в разделе Partner Info вводим наши данные ID, email и пароль. После этого должно произойти подключение. На этом с основными настройками разобрались.
Создаем тип материала для Видео Контента
Для удобства пользования, мы решили создать новый тип материала, в который и поместим поле для добавления видео, с помощью нашего установленного модуля. Конечно, можно было использовать уже имеющиеся типы материалов, добавив туда поле для загрузки видео файлов, но мы решили, что удобнее создать новый тип материала. И так приступим.
Для создания нового типа материалов нужно перейти в раздел “Структура” (”Structure”) -> “Типы материалов” (”Node Types”).
И мы увидим имеющиеся типы материалов, нажимаем на кнопку “Добавить тип” (”Add type”):
* В поле название вводим название данного типа, мы назвали “Видео контент” и в принципе можно сохранять.
* В разделе поля добавляем новое поле, которое называется “Kaltura Video Field” и в принципе все. Сохраняем.
Теперь мы имеем тип материала с возможностью добавить видео. Единственное, что нам нужно сделать это изменить права для того чтобы даже не зарегистрированный пользователь мог создать материал “Видео Контент” и вывести ссылку на создание этого материала, как это сделать я думаю вы поймете сами, если же нет – пишите.
Материал взят с сайта http://wde.kz
Источник: http://www.drupal.ru/node/59826
Источник: http://www.drupal.ru/node/58769
Smush.it использует методы оптимизации изображения специфические для каждого формата, чтобы удалить ненужные байты из файлов изображений, а это значит что мы получаем оптимизацию изображений, не меняя их внешний вид или качество.
В интерфейсе нам доступны флешовый мультизагрузчик или загрузка по URL
После того как Smush.it обработает изображения, на экране появится отчет
Все оптимизированые изображения потом можно сохранить в ZIP файле.Как видно из отчета, оптимизация для нашего примера составила 15.84%, что является потрясающим результатом, поскольку все изображения перед этим уже были оптимизированы другой программой.
Источник
Источник: http://www.drupal.ru/node/58560
Сегодня, точнее вчера, состоялся очередной Drupal Day в Краснодаре, основная тема – восьмое марта и заказчик из Омска.
Были два человека – я и Богдан. Женщин в нашем коллективе нет, поэтому праздник никто не испортил.
В программе мероприятиея были пиво и закуска, обсуждение важных вопросов таких как завышенные требования работодателей, XSS-уязвимости и то как порутать любой сервер.
Источник: http://www.drupal.ru/node/58552
XHprof – это иерархический профайлер для PHP c HTML интерфейсом. Ядро написано на языке С (на уровне отчетов и интерфейса код уже весь на PHP), а для скачки доступно в виде экстеншина для PHP. Этот профайлер умеет собирать данные о использовании памяти, ресурсов процессора, количестве и последовательности вызовов функций, а так же inclusive time (время, потраченное на функцию и на все функции, вызванные из нее) и exclusive time(время, потраченное на функцию без учета времени на вложенные функции).
Дополнительно, XHprof поддерживает сравнение двух запусков (иерархический DIFF отчет) и умеет объединять несколько запусков для усреднения данных.
Читать полностью…
Источник: http://www.drupal.ru/node/58543
Сколько бы времени ни прошло, всегда находятся пользователи, которые пользуются старыми (или очень старыми) браузерами. Поддерживать весь этот антиквариат не имеет смысла, но уведомить пользователя надо. Для этой цели был создан модуль, который показывает информационное сообщение в шапке страницы и предлагает скачать свежий браузер.
Особенности и отличия от множества аналогичных модулей:
– Возможность изменить текст сообщения и ссылку на информационное видео
– Возможность изменить ссылки на сайты браузеров
– Поддерживает 5 основных браузеров: Opera, Safari, IE, Chrome, Firefox
– Возможность указать версии браузеров, начиная с которых браузеры не считаются устаревшими
– Не назойливое уведомление. После закрытия его “крестиком” больше не отобразится (cookie на период сессии)
– Автоматически обновляемая информация о браузерах. Очень точное определение версии.
– Поддерживает переводы
P.S. Дизайн взят отсюда и немного переработан. Надеюсь автор не обидится.
P.P.S. Буду рад помощи в выкладывании модуля (этого и еще нескольких) на drupal.org, что-то я никак не разберусь как это сделать.
Прикрепленный файл
Размер
oldbrowser-7.x-1.1-dev.zip
114.96 кб
Источник: http://www.drupal.ru/node/58413
Заготовка в формате *.psd для создания дизайна под Drupal на базе 12-колоночной разметки по стандарту 960 Grid System. Надеюсь она окажется вам полезной. Файл к сожалению прикрепить не удалось, скачать его можно здесь
Источник: http://www.drupal.ru/node/58347
Перед тем как переходить на 7-ую версию друпала, ответьте на вопросы (самому себе):
Зачем вам это нужно? (если всё хорошо работает)
Настолько важен вам переход или стоит подождать? (к чему спешка..)
Возможно лучше пока остаться на 6-ой версии друпала? (Меньше проблем, всё более стабильно работает)
Обычно большинство разработчиков переходят на следующую версию через 6-12 месяцев (статистика приблизительная, по моим личным наблюдениям..). Например с 4-ой на 5-ую версию, составило примерно, от трёх до девяти месяцев, хотя кто-то, только через пару лет обновился
На данный момент, для 7-ой версии друпала имеется чуть более 1000 модулей. С одной стороны это много, с другой, ещё огромное количество модулей не адаптировано под 7-ую версию, а некоторые и не будут переделаны… (по разным причинам).
Перед тем как переходить на 7-ую версию, проверьте, чтобы были все нужные вам модули сделаны для 7-ой версии.
Скачайте все нужные вам модули и установите их локально вместе с 7-ой версией друпала! Проверьте на чистой установке, нормально они работают вместе или есть проблемы. Если есть возможность, сделайте чистую установку на своём хостинге (например, на поддомене), чтобы быть уверенным, что 7-ая версия друпала работает нормально на вашем хостинге и корректно работают модули.
Если есть проблемы, ищите решение (возможно надо поставить патч, для какого-нибудь модуля) или подождите с переходом.
Возможно это займёт час-два времени, но вы будете точно знать, что эти модули вместе работают на семёрке.
Список модулей перенесённых в ядро друпал 7.x – http://drupal.org/node/895314
Кстати, можно отследить по функциональности модулей, что нового в 7-ой версии…
Если вы используте свои модули, то здесь – http://drupal.org/update/modules (eng) можете прочитать как их обновить.
Так же можете прочитать, как обновить свой дизайн сайта – http://drupal.org/update/theme (eng)
Перед переходом на 7.x версию друпала, обновите до последней версии Друпала 6.x ваш сайт. Если вы используете версию 5.x, то обновите её сначала до 6-ой версии!
Обновление.
1) Создайте резервную копию базы данных и всех папок и файлов. Сохраните в таком месте, чтобы не удалить случайно Резервную копию базы данных делайте сторонней программой, а не модулем работающим в друпале! Используйте, например – http://sypex.net/ru/
2) Войдите на сайт под пользователем ID 1 (это первый пользователь который был создан, при создании сайта).
3) Перейдите в раздел – admin/settings/site-maintenance и переведите сайт в режим технического обслуживания.
4) Перейдите в раздел – admin/build/themes и включите по умолчанию дизайн сайта – Garland.
5) Перейдите в раздел – admin/build/modules и отключите все модули которые не входят в ядро друпала (обязательные и дополнительные).
Если есть модули, которые вы не будете использовать в 7-ой версии друпала, то можете их удалить на странице – admin/build/modules/uninstall (тем самым очистив базу данных от лишних таблиц). Чем больше удалите, тем лучше )
6) Удалите все файлы и папки, за исключением папки ’sites’ и входящих в неё файлов и папок. Другие файлы, которые вы создали в других местах, тоже сохраните на месте.
Если вы делали изменения в файлах .htaccess или robots.txt, то вам придётся повтороно внести изменения уже в новых файлах.
7) Если вы удалили какие-либо модули из базы данных на странице – admin/build/modules/uninstall то можете удалить файлы этих модулей из папки – sites/all/modules или в зависимости от того, где они у вас находятся…
Остальные модули оставьте на месте, даже если они несовместимы с Drupal 7.x.
Загрузите текущую версию друпал 7.x на ваш сервер.
9) Сделайте если нужно изменения в файлах .htaccess и robots.txt
10) Удалите файл – default.settings.php он находится в папке – sites/default/default.settings.php
11) Сделайте файл settings.php доступным для записи, чтобы в процессе обновления можно было внести изменения, под версию 7.x
Если для режима технического обслуживания вы прописывали строку – $conf['maintenance_theme'] = ‘ваш_дизайн’; – то удалите строку.
12) Запустите update.php он находится по адресу http://вашсайт.ru/update.php
Если вы не можете получить доступ к update.php, то выполните следующие действия:
– Откройте в текстовом редакторе файл settings.php
– Найдите строку – $update_free_access = FALSE;
– Замените её на – $update_free_access = TRUE;
– После того как обновление будет сделано, замените обратно TRUE на FALSE
13) Сделайте резервную копию вашей базы данных, после окончания процесса обновления.
14) Замените и обновите модули, которые не входят в ядро друпала (с запуском update.php до включения модулей и после включения).
15) Убедитесь, что в строке $update_free_access файла settings.php прописано FALSE. Можете прописать строку – $conf['maintenance_theme'] = ‘ваш_дизайн’; с вашим дизайном, для режима технического обслуживания.
16) Зайдите на страницу – admin/reports/status и убедитесь, что нет ошибок.
17) Включите по умолчанию свой дизайн сайта. (конвертированный под 7.x).
18) Сделайте резервную копию базы данных.
19) Зайдите на страницу – admin/config/development/maintenance и включите сайт в рабочий режим.
20) Проверьте настройки, правильный вывод блоков и тому подобное…
Если вы столкнулись с ошибками или проблемами во время обновления, то:
– Обратите внимание на любые сообщения об ошибках.
– Восстановите сайт в предыдущее состояние с помощью резервной копии базы данных, созданной до начала процесса обновления сайта. Не пытайтесь делать дальнейшее обновление сайта, если возникли проблемы при обновлении!
Более подробную информацию по обновлению сайта, можно найти на странице – http://drupal.org/upgrade (eng)
Если в вас живёт дух экспериментатора и новатора, если вы отличный специалист и любите исправлять ошибки, если ваш темперамент и характер не даёт вам спокойно спать или просто “не дала” жена, то можете смело обновляться до 7-ой версии друпала
В остальных случаях, подождите до лета…
P.S. Если будете обновляться, отпишитесь, как получилось..
Attached poll “Вы будете обновляться до 7-ой версии?”.
Register or login to poll
Results:
Хочу обновляться, но нет нужных модулей: 4 голоса
Хочу обновляться, но боюсь косяков: 3 голоса
Не хочу обновляться, геморроя с этим много: 3 голоса
Уже обновился: 2 голоса
А нафига вообще это нужно?: 2 голоса
Буду обновляться ближе к лету: 2 голоса
Буду обновляться примерно в конце года: 1 голос
Буду обновляться в ближайшее время: 4 голоса
Источник: http://www.drupal.ru/node/58265
Что такое CDN?
Кому и почему нужно использовать CDN?
Инфраструктура CDN & Drupal
Пример расширенной настройки CDN в друпале
Распараллеливания загрузки
читать
Источник: http://www.drupal.ru/node/58264
Привет всем! С переходом на Drupal 7 мне очень непонравилось то, что вертикальные закладки “vertical tabs” в наглую включили в ядро друпала и что самое ужасное – нигде в пользовательском интерфейсе это невозможно отключить. В то время как под D6 это был отдельный модуль, который можно было установить и включить по желанию.
После чего мною был сделан модуль, который при обработке форм везде где встречаются вертикальные закладки заменяет их на обычные поля “fieldset” как это было в Drupal 6 по-умолчанию.
http://drupal.org/sandbox/Dripman/1077122 – ссылка на сам модуль на drupal.org (качаем через GIT)
Или отсюда disable_vertical_tabs.zip
Прикрепленный файл
Размер
disable_vertical_tabs.zip
915 байтов
Источник: http://www.drupal.ru/node/58246
Скрипт cron.php используется в Друпале для для работы поиска(индексация контента), отправки писем подписчикам, сбора rss-фидов и т.д. – модули сами могут давать задания для выполнения по расписанию.
На drupal.org присутствует немалое количество модулей, которые позволяют тем или иным образом взаимодействовать со скриптом крона. Наиболее популярными среди них являются: SuperCron и Poormanscron. Первый имеет неплохой набор настроек для автоматизации и планирования крон-задач и является очень перспективным, а второй из всех настроек может похвастаться только интервалом запуска скрипта cron.php. На мой взгяд наиболее правильным и удобным является модуль Elysia cron – этот модуль, благодаря своей исключительной гибкости и юзабельности серьезно уделывает конкурентов.
Полная статья »
Источник: http://www.drupal.ru/node/58184
Во первых, что такое Apache Solr?
Apache Solr – это расширяемая поисковая платформа с открытым исходным кодом для от проекта Apache Lucene.
Почему Apache Solr?
Основными критериями выбора этой платформы для нас стало то, что Apache Solr оптимизирован для работы с большой нагрузкой и что репликация уже в составе ядра платформы, а это дает большие возможности для масштабирования.
На одном с проектов мы столкнулись с вопросом «А что будет если наш основной Solr сервер вдруг перестанет отвечать? Вся система поиска на сайте умирает?».
Полная статья »
Источник: http://www.drupal.ru/node/57760
Дамы и господа, леди и джентльмены! Товарищи!
От лица ресурса drupal-bloggers.com предлагаю провести опрос на самый интересный блог о Друпал 2010. Проголосуйте за блог, который вам запомнился в 2010 году, блог, который вы с интересом продолжаете читать и в 2011 году.
К голосованию предлагаю самые активные и полезные блоги по агрегатору Drupal-bloggers.com:
EllECTRONC – http://drupalblog.ru/
Drupalka – http://www.drupalka.ru/
XandeadX – http://xandeadx.ru/
Graker – http://graker.ru/
Drupal Developer – http://drupaldeveloper.ru/blog
Sidashin.ru – http://sidashin.ru/
ShvetsGroup – http://shvetsgroup.com/ru/blog
Drupalace – http://drupalace.ru/
Shift-Web – http://www.shift-web.ru/
Sherskova.Ru – http://sherskova.ru/
Мой блог – http://dovbysh.com/ru/blogs/kodo понятно вне конкурса.
Думаю будет логично иметь возможность проголосовать за несколько блогов одному пользователю.
Предлагаю обратить внимание не только на количество материалов в блоге, но так же на их полезность и форму подачи материалов (дизайн блога и оформление статей).
К сожалению действительно полезных и активных блогов о Друпал не много. Ряд интересных блогов перестали обновляться в течении 2010 года. Но в целом активность и уровень распространения материалов о Друпал через блоги и личные сайты только растет, что не может не радовать.
Загадывать наперед достаточно сложно, но есть желание конкурс «Друпал-блоггер года» сделать постоянным.
Чтобы конкурс был интереснее как блоггерам , так и друпаллерам победителю конкурса предлагается небольшой приз – японский чай фукамущи сенча «Пожелание богатства»
Чай предоставлен Магазином японского чая. Пересылка чая победителю естественно осуществляется за счет магазина авиапочтой.
Опрос проводится до 1 марта (неделю). Не проходи мимо! Поделись своим мнением!
Победит интереснейший!
Attached poll “Какой на ваш взгляд наиболее интересный блог о Друпал в 2010 году?”.
Register or login to poll
Results:
EllECTRONC: 12 голосов
Drupalka: 3 голоса
XandeadX: 53 голоса
Graker: 30 голосов
Drupal Developer: 4 голоса
Sidashin.ru: 3 голоса
ShvetsGroup: 29 голосов
Drupalace: 32 голоса
Shift-Web: 11 голосов
Sherskova.Ru: 2 голоса
Источник: http://www.drupal.ru/node/57737
В прошлом году в составе команды энтузиастов собрались и сделали вот этот перевод. Было весело, получилось неплохо.
Сейчас есть желание сделать еще переводов важных статей про Друпал. Более актуальных – про семерку. Соответственно, вопрос: кто хочет поучаствовать?
Перевести можно, например, вот эту серьезную документацию: http://drupal.org/developing/api/database. Также будет здорово, если желающие увидеть перевод тех или иных статей про Друпал (желательно, 7) накидают в этот топик ссылок.
Всх, кто хочет принять участие, прошу отмечаться. Участникам предыдущего перевода, а также тем, кто специально просил, немного погодя вышлю персональные приглашения.
Пока отозвались:
Softovick
heap.ster
q2_faith
Ch
iHappy
Shift-Web
G.A. Vinogradov
LeopART
ingumsky@drupal.org
ZanaDLucTyc
P.Selfin@drupal.org
Clarion
kyky
Dock@drupal.org
mak-vardugin
Предложено к переводу:
http://drupal.org/node/360052 – Standards, security and best practices
http://drupal.org/developing/api/database – Drupal 7 Database API
http://drupal.org/theme-guide/6-7 – Theming Guide
Источник: http://drupal.ru/node/57373
В прошлом году в составе команды энтузиастов собрались и сделали вот этот перевод. Было весело, получилось неплохо.
Сейчас есть желание сделать еще переводов важных статей про Друпал. Более актуальных – про семерку. Соответственно, вопрос: кто хочет поучаствовать?
Перевести можно, например, вот эту серьезную документацию: http://drupal.org/developing/api/database. Также будет здорово, если желающие увидеть перевод тех или иных статей про Друпал (желательно, 7) накидают в этот топик ссылок.
Всх, кто хочет принять участие, прошу отмечаться. Участникам предыдущего перевода, а также тем, кто специально просил, немного погодя вышлю персональные приглашения.
Пока отозвались:
Softovick
heap.ster
q2_faith
Ch
iHappy
Shift-Web
G.A. Vinogradov
LeopART
ingumsky@drupal.org
ZanaDLucTyc
P.Selfin@drupal.org
Clarion
kyky
Dock@drupal.org
mak-vardugin
NovoKain
likin
alexart79
Предложено к переводу:
http://drupal.org/node/360052 – Standards, security and best practices
http://drupal.org/developing/api/database – Drupal 7 Database API
http://drupal.org/theme-guide/6-7 – Theming Guide
Источник: http://www.drupal.ru/node/57373
Вот и вышел долгожданный релиз Drupal 7. В целом продукт мне понравился, и для того, что бы получше изучить новое АПИ я решил постепенно перевести написанные мной модули под новую платформу. Первой ласточкой стал один из элементов модуля ccfilter – collapse text. Но, что бы было поинтересней, я не просто перевел его под D7, но и несколько расширил функциональность.
Новый модуль ccfcollpase позволяет встраивать при помощи специальных тэгов (аля BBCode) в материалы сворачиваемый/разворачиваемый текст.
По сравнению с версией для D6, данный фильтр позволяет вставлять вложенные элементы, кроме того предусмотрен блок врапера, который позволяет разворачивать/сворачивать все элементы находящиеся внутри данного врапера. Также можно установить с помощью дополнительных атрибутов индивидуально для каждого слайдера некоторые параметры поведения, как то скорость сворачивания/разворачивания и метод сворачивания/разворачивания (пока доступны три метода slide, fade, slidefade).
В дальнейшем данный фильтр будет использован как один из составляющих элементов ccfilter под D7.
Примечание: далее в тексте примеров , что бы не срабатывал фильтр я заменил английскую букву c на русскую с.
Общий синтаксис:
/**
* Структура обработки фильтра:
* в треугольные скобки помещены не обязательные синтаксические конструкции
* одинарные кавычки в параметрах обязательны, порядок параметров произвольный
*
*******************************************************************************
* <[сollapse-wrapper <hide|show> <title-show='Expand All' title-hide='Collapse all'>]>
* [сollapse <attributes>]
* <материал внутри слайдера>
* <[сollapse <attributes>]>
* <материал внутри вложенного слайдера>
* <[/сollapse]>
* <продолжение материала внутри слайдера>
* [/сollapse]
* <[/сollapse-wrapper]>
*******************************************************************************
* опциональные атрибуты задают режим работы слайдера
* если аттрибуты не установлены, то беруться предустановленные параметы в настройках фильтра
* attributes =
* <hide|collapsed|show|expanded> - определяют как будет выглядить слайдер
* при загрузки страницы hide или collapsed - свернутый слайдер,
* show или expanded - развернутый слайдер
* <title-show='Expand'> - определяет префикс заголовка для разворачивания слайдера
* <title-hide='Collapse'> - определяет префикс заголовка для сворачивания слайдера
* <title=''> определяет постфикс заголовка слайдера
* например для комбинации title-show='Показать' title-hide='Скрыть' title='материал'
* для развернутого слайдера будет сформирован заголовок - Показать материал
* и при сворачивании он будет меняться на - Скрыть материал
* <speed-show='slow|fast'> <speed-hide='slow|fast'> - скорость разворачивания и
* соответственно сворачивания слайдера, кроме значений slow и fast можно указать
* число миллисекунд
* <method-show='Slide|Fade|SlideFade'> - метод анимации при разворачивании
* <method-hide='Slide|Fade|SlideFade'> - метод анимации при сворачивании
*
* [сollapse-wrapper <show|hide> <title-show='Expand All' title-hide='Collapse all'>]
* ......-
* [/сollapse-wrapper]
* определяет контейнер для нескольких слайдеров, и добавляет ссылку c возможностью
* развернуть или свернуть все слайдеры внутри контейнера
* атрибут show hide - определяет начальное значение обработчика враппера
*/
Если атрибуты не проставлены (а все они необязательны), то их значения берутся из предопределенных значений определенных в настройке фильтра.
В атрибутах имеющих значение – обязательны одинарные кавычки.
Порядок и наличие атрибутов произвольный, если какой либо из атрибутов не определен, то его значение берется из предопределенного в настройках фильтра .
Значения по умолчанию:
title-show=t(’show’)
title-hide=t(’hide’)
title=”
speed-show=’fast’
speed-hide=’fast’
method-show=’slide’
method-hide=’slide’
Допускаются вложенные сполеры (т.е. внутри сполера вы можете расположить еще дополнительные сполеры), уровень вложенности технически не ограничен и определяется здравым смыслом и ограничениями дизайна (верстки) сайта.
Полный заголовок формируется как конкатенация префикса (title-show|title-hide) и заголовка (title)
Некорректность (нарушение структуры – парности тэгов) не отслеживается и может привести к непредсказуемым результатам (вплоть до краха верстки), поэтому кажется сомнительный включать данный фильтр в общедоступный формат ввода.
Так как данный сайт (имеется ввиду мой домашний сайт) все еще на D6, для экспериментов и тестирования я создал новый сайтик www.printarts.ru, примеры работы фильтра можно посмотреть на страничке http://www.printarts.ru/article/proverka-raboty-ccfcollapse-filtra
Жду отзывов и багрепортов тестирования данного модуля.
Оригинал материала на сайте www.hotel-prog.ru
Прикрепленный файл
Размер
ccfcollapse.zip
5.7 кб
Источник: http://drupal.ru/node/56981
Вот и вышел долгожданный релиз Drupal 7. В целом продукт мне понравился, и для того, что бы получше изучить новое АПИ я решил постепенно перевести написанные мной модули под новую платформу. Первой ласточкой стал один из элементов модуля ccfilter – collapse text. Но, что бы было поинтересней, я не просто перевел его под D7, но и несколько расширил функциональность.
Новый модуль ccfcollpase позволяет встраивать при помощи специальных тэгов (аля BBCode) в материалы сворачиваемый/разворачиваемый текст.
По сравнению с версией для D6, данный фильтр позволяет вставлять вложенные элементы, кроме того предусмотрен блок врапера, который позволяет разворачивать/сворачивать все элементы находящиеся внутри данного врапера. Также можно установить с помощью дополнительных атрибутов индивидуально для каждого сполера некоторые параметры поведения, как то скорость сворачивания/разворачивания и метод сворачивания/разворачивания (пока доступны три метода slide, fade, slidefade).
В дальнейшем данный фильтр будет использован как один из составляющих элементов ccfilter под D7.
Примечание: далее в тексте примеров , что бы не срабатывал фильтр я заменил английскую букву c на русскую с.
Общий синтаксис:
/**
* Стркутра обрабоки фильтра
* в треугольные скобки помещены не обязательные значения (сами они не нужны)
* одинарные кавчки в параметрах обязательны, порядок параметров произволный
*
*******************************************************************************
* <[сollapse-wrapper <hide|show> <title_show='Expand All' title_hide='Collapse all'>]>
* [сollapse <attributes>]
* <материал внутри сполера>
* <[сollapse <attributes>]>
* <материал внутри вложенного сполера>
* <[/collapse]>
* <продолжение материала внутри сполера>
* [/сollapse]
* <[/сollapse-wrapper]>
*******************************************************************************
* опциональные атрибуты задают режим работы сполера
* если аттрибуты не установлены, то беруться предустановленные параметы в настройках фильтра
* attributes =
* <hide|collapsed|show|expanded> - определяют как будет выглядит сполер
* при загрузки страницы hide или collapsed - свернутый сполер,
* show или expanded - развернутый свернутый сполер
* <title-show='Expand'> - определяет префикс заголовка для показа сполера
* <title-hide='Collapse'> - определяет префикс заголовка для скрытия сполера
* <title=''> определяет постфикс заголовка сполера
* например для комбинации title-hide='Скрыть' title-show='Показать' title='материал'
* для развернутого сполера будет сформирован заголовок - Скрыть материал
* и при сворачивании он будет меняться на - Показать материал
* <speed-show='slow|fast'> <speed_hide='slow|fast'> - скорость разворачивания и
* соответственно сворачивания сполера, кроме значений slow и fast можно указать
* число миллисекунд
* <method-show='Slide|Fade|SlideFade'> - метод анимации при разворачивании
* <method-hide='Slide|Fade|SlideFade'> - метод анимации при сворачивании
* <hode='NumNode'> - содержимое сполера берется из ноды номер NumNode
* содержимое создается во время создания текущей ноды и обновляется только в
* случае сброса кэша
* <ajax-hode='NumNode'> - содержимое сполера берется из ноды номер NumNode
* содержимое подгружается через ajax при первом разворачивании сполера (если сполер свернут)
* или при первой загрузке строницы (если сполер развернут)
* если атрибут title не определен и есть один из атрибутов node или ajax_node,
* то в качестве title будет использован заголовок ноды.
* Нода в сполер загружается без комментариев и заголовка.
* Вывод ноды определен через шаблон 'ccfcollapse-inline-node.tpl.php'
* в шаблоне поставляемом с модулем также
* скрыты массивы field_tags и links
*
* [сollapse-wrapper <show|hide> <title-show='Expand All' title-hide='Collapse all'>]
* ......-
* [/сollapse-wrapper]
* определяет контейнер для нескольких сполеров, и добавляет ссылку c возможностью
* развернуть или свернуть все сполеры внутри контейнера
*/
Если атрибуты не проставлены (а все они необязательны), то их значения берутся из предопределенных значений определенных в настройке фильтра.
В атрибутах имеющих значение – обязательны одинарные кавычки.
Порядок и наличие атрибутов произвольный, если какой либо из атрибутов не определен, то его значение берется из предопределенного в настройках фильтра .
Значения по умолчанию:
title-show=t(’show’)
title-hide=t(’hide’)
title=”
speed-show=’fast’
speed-hide=’fast’
method-show=’slide’
method-hide=’slide’
Допускаются вложенные сполеры (т.е. внутри сполера вы можете расположить еще дополнительные сполеры), уровень вложенности технически не ограничен и определяется здравым смыслом и ограничениями дизайна (верстки) сайта.
Полный заголовок формируется как конкатенация префикса (title-show|title-hide) и заголовка (title)
Некорректность (нарушение структуры – парности тэгов) не отслеживается и может привести к непредсказуемым результатам (вплоть до краха верстки), поэтому кажется сомнительный включать данный фильтр в общедоступный формат ввода.
Так как данный сайт (имеется ввиду мой домашний сайт) все еще на D6, для экспериментов и тестирования я создал новый сайтик www.printarts.ru, примеры работы фильтра можно посмотреть на страничке http://www.printarts.ru/article/proverka-raboty-ccfcollapse-filtra
Жду отзывов и багрепортов тестирования данного модуля.
Оригинал материала на сайте www.hotel-prog.ru
**************************************************************************
Обновил модуль.
**************************************************************************
Добавлен следующий функционал:
1. Два (взаимоисключающих) атрибута node=’N’ и ajax-node=’N’ (если указаны оба то работает node).
Данный атрибут позволяет подгрузить в сполер ноду с номером N (при этом содержимое между тэгами [сollapse][/collapse] не имеет значения, так как будет заменено на содержимое ноды.
Различие этих атрибутов следует из названия, первый (node) формирует материал сполера из ноды во время создания, второй на “лету” посредством подгрузки node через ajax.
У обоих методов есть свои достоинства и недостатки.
Особенности атрибута node:
- Если изменена включаемая нода, то в сполере она не измениться до момента сброса кэша или пересохранения самого материала включающего сполер с данной нодой.
+ Включенный статично материал доступен для индексации поисковиками
+ Более быстрая загрузка сполера
+ При отключенном в браузере js материал виден как статический текст
Особенности атрибута ajax-node:
+ Нода в сполер загружается единожды при первом разворачивании сполера
+ Материал в сполере всегда актуален (т.е. если изменилась включаемая нода, то материал в сполере тоже будет загружаться измененный)
-+ Поисковики и индексаторы не будут видеть материал скрытый в сполере (даже в том случае если установлен атрибут show)
- При отключенном в браузере js материал не будет виден
Особенности применения данных атрибутов:
Будет плохой идеей «зациклить» материал т.е. при помощи атрибута node (ajax-node) включит в текущий материал создаваемую ноду непосредственно либо опосредованно, через цепочку нод (например вы редактируете ноду № 5 и включаете в сполер ноду №3 а в ноде №3 в сполер включена нода № 5), т.е. избегайте рекурсии, скорее всего это приведет к падению сервера с 502 ошибкой, и может быть исправлено только убиением(редактированием) данной ноды непосредственно в базе (для экспериментаторов править надо таблицу {field_data_body} после чего сбросить кеш).
В параметры конфигурации добавлен параметр определяющий можно ли включать в сполер не опубликованные ноды (в принципе я подумал что будет хорошей идеей создать не опубликованные ноды как шаблоны для дальнейшего включения в сполеры),
если данный флажок не установлен и нода включенная в сполер снята с публикации, то в сполер вместо содержания ноды будет выведена информация об отсутствии ноды (если это статический метод загрузки, то только после очистки кэша)
Вывод ноды определяется шаблоном ccfcollapse-inline-node.tpl.php (который вы можете переопределить в своей теме), в шаблоне по умолчанию (который включен в данный модуль) отключен вывод тэгов ноды и линки (т.е. практически выводиться голый “body” ноды).
Комментарии включаемой ноды не попадают в сполер.
В качестве включаемой ноды можно включать ноду в свою очередь содержащую свои сполеры (в том числе и с атрибутам node/ajax-node)
Правда в случае с включением ноды содержащей ajax-node сполер на моей теме возникают какие-то проблемы с css но попробую разобраться (может это тема глючит).
Да и еще раз избегайте рекурсии прямой или косвенной.
Если у вас включен модуль path (pathauto) то в качестве параметра node/ajax-node
можно использовать и синоим (например “article/test_node”).
Если при использовании атрибутов node или ajax-node не использован атрибут title, то в качестве title будет использован заголовок включаемой ноды.
Данный заголовок всегда формируется статично, т.е. если вы изменили заголовок включаемой ноды, то надо или сбросить кэш, либо пересохранить сам материал.
2. Переменные в атрибутах теперь могут быть заключены не только в одинарные но и в двойные кавычки (но обязательно парные), это позволяет например создавать атрибуты типа “O’Вerly” или ‘ООО “Моя компания”‘.
Пример использования новых возможностей можно посмотреть по адресу
http://www.printarts.ru/article/collapse-test-load-node
Прикрепленный файл
Размер
Новая версия – ccfcollapse.zip
8.01 кб
Источник: http://www.drupal.ru/node/56981
С чего все началось? С темы которая всех на этом форме мягко говоря удивила: “Прикрепить файлы к статье Joomla“. Несмотря на название, само содержимое топика (опуская слово Joomla) было вполне адекватным! А именно поставлена следующая задача.
Задача: Прикрепить к статье файл.
Основные требования:
1. Файл должен загружаться с компьютера автора, в процессе ввода текста. *Хороший пример – этот форум. Тут можно прикрепить файл непосредственно при вводе сообщения.
2. Файл должен быть защищён от скачивания НЕ зарегистрированными пользователями. *не просто скрыта ссылка, а именно защита от скачивания и хотлинков.
Дополнительные (не обязательные, но крайне жалетельные) требования:
1. Если пользователь не загистрирован, то ссылка на файл не исчезает, он просто не может его скачать
2. Если не зарегистрированный пользователь пытается скачать файл – система его уведомляет о необходимости регистрации
3. Счётчик скачивания файла где-нибудь недалеко от ссылки “скачать”
4. Статика в админке, “кто, когда и что” скачал (это было бы вообе шикарно!)
Подопытным для всего этого как не странно стала не Joomla, а Drupal 7.
Сама задача для друпала не хитрая “Прикрепить к статье (материалу) файл” нам позволяет замечательная фишка семерки “Field API” т.е. по сути первый пункт основных требований выполнили. Идем дальше:
Цитата:
Файл должен быть защищён от скачивания НЕ зарегистрированными пользователями. *не просто скрыта ссылка, а именно защита от скачивания и хотлинков.
Это для меня был самый интересный вопрос, поэтому на нем я и заострю внимание.
Для начала нам надо настроить “файловую систему” первым делом надо создать приватную папку, где будут хранится все наши приватные файлы. Я сделал это следующим образом:
cd /путь/к/папке/с/установленным/друпалом/sites/default
chmod 755 .
mkdir files-private
chmod 555 .
Для тех кто не в теме, расшифровываю. Сначала папке /sites/default задал права на запись, создал в ней папку, затем вернул права на “только доступ”. поскольку папку /sites/default/files по умолчанию отдана апачу, я решил не создавать приватную папку в ней, чтоб еще не писать правила для запрета апача гулять туда (хотя подозреваю что оповестить его о запрете все равно придется).
После этой процедуры вернемся в админку друпала, а именно идем по адресу admin/config/media/file-system и в настройках “Приватный путь файловой системы” вписываем только что созданную нами папку sites/default/files-private после чего сохраняем настройки.
Далее идем по направлению Структура » Типы содержимого » наш тестовый тип » Управлять полями создаем поле типа “файл” (для изображений аналогично) и в настройках указываем Хранилище Личные файлы сохраняем и смотрим что получилось.
Я минут 5 втыкал что за фигня получилась, вроде как файлы приватные загружаются в одну структуру, отдаются из другой, но отдаются всем подряд. После чего я начал гуглить… и первым делом нагуглил следующее:
Цитата:
Setting the download method to “Private” doesn’t have any effect by itself…
what the private download setting does do, is fire off an extra event, hook_download()
Тут кстати автор опЯчататься. На самом деле хук называется hook_file_download
А вообщем это все можно перевести как “Сама по себе приватная файловая система ничего не делает т.е. по сути это api и которая дает один (может и больше, не интересовался) хук с помощью которого мы можем управлять скачиванием этих файлов. После чего я набросал модуль из двух хуков, один создает новое право для ролей hook_permission, а второй тот самый hook_file_download в котором указано что если у пользователя нет права на просмотр приватных файлов слать его лесом! Получившийся модуль искать в прикрепленных файлах.
После активации модуля идем на страницу прав пользователей admin/people/permissions и выдаем новое правило “View private files” кому положено качать приватные файлы т.е. зарегистрированным пользователям. На этом собственно второй пункт выполнен, все анонимы идут лесом.
Теперь идем по дополнительным пунктам:
Цитата:
1. Если пользователь не загистрирован, то ссылка на файл не исчезает, он просто не может его скачать
Уже сделано.
Цитата:
2. Если не зарегистрированный пользователь пытается скачать файл – система его уведомляет о необходимости регистрации
В нашем модуле надо просто $uri прировать не к -1 а к странице регистрации.
3 и 4 пункты решает модуль Download Count вот только портировать под 7-ку еще надо его. А вот это Download Tools для семерки, но сам его не тестил.
Ну в общем-то тема раскрыта, комментируем.
Источник: http://drupal.ru/node/56888
С чего все началось? С темы которая всех на этом форме мягко говоря удивила: “Прикрепить файлы к статье Joomla“. Несмотря на название, само содержимое топика (опуская слово Joomla) было вполне адекватным! А именно поставлена следующая задача.
Задача: Прикрепить к статье файл.
Основные требования:
1. Файл должен загружаться с компьютера автора, в процессе ввода текста. *Хороший пример – этот форум. Тут можно прикрепить файл непосредственно при вводе сообщения.
2. Файл должен быть защищён от скачивания НЕ зарегистрированными пользователями. *не просто скрыта ссылка, а именно защита от скачивания и хотлинков.
Дополнительные (не обязательные, но крайне жалетельные) требования:
1. Если пользователь не загистрирован, то ссылка на файл не исчезает, он просто не может его скачать
2. Если не зарегистрированный пользователь пытается скачать файл – система его уведомляет о необходимости регистрации
3. Счётчик скачивания файла где-нибудь недалеко от ссылки “скачать”
4. Статика в админке, “кто, когда и что” скачал (это было бы вообе шикарно!)
Подопытным для всего этого как не странно стала не Joomla, а Drupal 7.
Сама задача для друпала не хитрая “Прикрепить к статье (материалу) файл” нам позволяет замечательная фишка семерки “Field API” т.е. по сути первый пункт основных требований выполнили. Идем дальше:
Цитата:
Файл должен быть защищён от скачивания НЕ зарегистрированными пользователями. *не просто скрыта ссылка, а именно защита от скачивания и хотлинков.
Это для меня был самый интересный вопрос, поэтому на нем я и заострю внимание.
Для начала нам надо настроить “файловую систему” первым делом надо создать приватную папку, где будут хранится все наши приватные файлы. Я сделал это следующим образом:
cd /путь/к/папке/с/установленным/друпалом/sites/default
chmod 755 .
mkdir files-private
chmod 555 .
Для тех кто не в теме, расшифровываю. Сначала папке /sites/default задал права на запись, создал в ней папку, затем вернул права на “только доступ”. поскольку папку /sites/default/files по умолчанию отдана апачу, я решил не создавать приватную папку в ней, чтоб еще не писать правила для запрета апача гулять туда (хотя подозреваю что оповестить его о запрете все равно придется).
После этой процедуры вернемся в админку друпала, а именно идем по адресу admin/config/media/file-system и в настройках “Приватный путь файловой системы” вписываем только что созданную нами папку sites/default/files-private после чего сохраняем настройки.
Далее идем по направлению Структура » Типы содержимого » наш тестовый тип » Управлять полями создаем поле типа “файл” (для изображений аналогично) и в настройках указываем Хранилище Личные файлы сохраняем и смотрим что получилось.
Я минут 5 втыкал что за фигня получилась, вроде как файлы приватные загружаются в одну структуру, отдаются из другой, но отдаются всем подряд. После чего я начал гуглить… и первым делом нагуглил следующее:
Цитата:
Setting the download method to “Private” doesn’t have any effect by itself…
what the private download setting does do, is fire off an extra event, hook_download()
Тут кстати автор опЯчататься. На самом деле хук называется hook_file_download
А вообщем это все можно перевести как “Сама по себе приватная файловая система ничего не делает т.е. по сути это api и которая дает один (может и больше, не интересовался) хук с помощью которого мы можем управлять скачиванием этих файлов. После чего я набросал модуль из двух хуков, один создает новое право для ролей hook_permission, а второй тот самый hook_file_download в котором указано что если у пользователя нет права на просмотр приватных файлов слать его лесом! Получившийся модуль искать в прикрепленных файлах.
После активации модуля идем на страницу прав пользователей admin/people/permissions и выдаем новое правило “View private files” кому положено качать приватные файлы т.е. зарегистрированным пользователям. На этом собственно второй пункт выполнен, все анонимы идут лесом.
Теперь идем по дополнительным пунктам:
Цитата:
1. Если пользователь не загистрирован, то ссылка на файл не исчезает, он просто не может его скачать
Уже сделано.
Цитата:
2. Если не зарегистрированный пользователь пытается скачать файл – система его уведомляет о необходимости регистрации
В нашем модуле надо просто $uri прировать не к -1 а к странице регистрации.
3 и 4 пункты решает модуль Download Count вот только портировать под 7-ку еще надо его. А вот это Download Tools для семерки, но сам его не тестил.
Ну в общем-то тема раскрыта, комментируем.
Источник: http://www.drupal.ru/node/56888
Есть такой замечательный модуль Guestbook. Позволяет делать гостевую книгу для сайта и персональные гостевые для пользователей.
Подготовил версию для 7.x. В основу взял 6.x-2.0.
Удалена поддержка Panels.
Скачать можно здесь.
Источник: http://drupal.ru/node/56852
Есть такой замечательный модуль Guestbook. Позволяет делать гостевую книгу для сайта и персональные гостевые для пользователей.
Подготовил версию для 7.x. В основу взял 6.x-2.0.
Удалена поддержка Panels.
Скачать можно здесь.
Источник: http://www.drupal.ru/node/56852
Привет, сообщество!
К выпуску готовится номер журнала «Друпалогия», в связи с этим, предложение авторам статей или переводов, связанных с Друпал: вы можете отправить свои материалы нам и ваша статья будет размещена. Вам почёт уважение от читателей, нам ещё больше оптимизма и альтруизма для хороших дел.
Ни у кого не возникло желание написать хорошую статью для журнала?
Темы статей могут быть любыми, но связанными с Drupal 6, 7, информационными технологиями, программированием, системным окружением.
Требования простые:
Объём статьи не менее двух печатных листов формата А4 (Arial, Garuda, 11pt);
Обязательно проверяйте орфографию, пунктуацию и вообще грамотность текста. ;
Код должен быть подсвечен, из кода должны быть убраны все ссылки на описание тегов, функций. Не касается ссылок по теме статьи;
В коде не должен присутствовать русский язык, за исключением комментариев к коду;
Перед кодом должна быть указана используемая версия PHP;
Не надо вставлять кучу ссылок на Drupal.org на одну страницу;
Анонс статьи должен присутствовать;
Изображения, схемы, снэпшоты поощряются. Изображения не должны быть масштабированы;
Если в вашей статье должны быть ссылки, не стесняйтесь их вставлять (редиректы запрещены!);
Запрещена публикация статей без ведома их авторов. Не касается переводов, но ссылка на оригинальную статью должна присутствовать!
Структура документа:
Автор: (Фамилия (Ник) Имя);
Оригинальная статья: (если это перевод);
Версия Drupal;
Анонс;
Статья.
Количество статей не ограничено. Можно определиться по тематике:
Про Drupal;
Drupal 7
Обзоры модулей;
Локализация
Обучение (советы, уроки);
Не Drupal (публикации на темы, не касающиеся Drupal, но имеющие отношение к IT, Web, кодингу и т.п.);
В настоящее время присланы статьи:
Ubercart Payment API
Views API
Drupal, SVN, Drush
Темизация шаблонов
Пакет Zabbix
Заметки по правильной настройке Drupal
Огромная благодарность вам!
Многие готовили доклады на прошлогодний «ДрупалКэмп», который к всеобщему сожалению не состоялся, поэтому предлагаю опубликовать ваши доклады в виде статей в журнале «Друпалогия», который в настоящее время испытывает реальные проблемы с материалами.
Для тех, кто не в танке: Пилотный выпуск (скачать)
————————————————————————————————————————————————————
Любые вопросы можно задать здесь или написать письмо на drupalogy.magazine@gmail.com
P.S. Проект «Друпалогия» участвует в рейтинге рунета, поддержите его: http://www.ratingruneta.ru/awards_vote/?site_id=68110
Источник: http://drupal.ru/node/56612
Привет, сообщество!
К выпуску готовится номер журнала «Друпалогия», в связи с этим, предложение авторам статей или переводов, связанных с Друпал: вы можете отправить свои материалы нам и ваша статья будет размещена. Вам почёт уважение от читателей, нам ещё больше оптимизма и альтруизма для хороших дел.
Ни у кого не возникло желание написать хорошую статью для журнала?
Темы статей могут быть любыми, но связанными с Drupal 6, 7, информационными технологиями, программированием, системным окружением.
Требования простые:
Объём статьи не менее двух печатных листов формата А4 (Arial, Garuda, 11pt);
Обязательно проверяйте орфографию, пунктуацию и вообще грамотность текста. ;
Код должен быть подсвечен, из кода должны быть убраны все ссылки на описание тегов, функций. Не касается ссылок по теме статьи;
В коде не должен присутствовать русский язык, за исключением комментариев к коду;
Перед кодом должна быть указана используемая версия PHP;
Не надо вставлять кучу ссылок на Drupal.org на одну страницу;
Анонс статьи должен присутствовать;
Изображения, схемы, снэпшоты поощряются. Изображения не должны быть масштабированы;
Если в вашей статье должны быть ссылки, не стесняйтесь их вставлять (редиректы запрещены!);
Запрещена публикация статей без ведома их авторов. Не касается переводов, но ссылка на оригинальную статью должна присутствовать!
Структура документа:
Автор: (Фамилия (Ник) Имя);
Оригинальная статья: (если это перевод);
Версия Drupal;
Анонс;
Статья.
Количество статей не ограничено. Можно определиться по тематике:
Про Drupal;
Drupal 7
Обзоры модулей;
Локализация
Обучение (советы, уроки);
Не Drupal (публикации на темы, не касающиеся Drupal, но имеющие отношение к IT, Web, кодингу и т.п.);
В настоящее время присланы статьи:
Ubercart Payment API
Views API
Drupal, SVN, Drush
Темизация шаблонов
Пакет Zabbix
Заметки по правильной настройке Drupal
Огромная благодарность вам!
Многие готовили доклады на прошлогодний «ДрупалКэмп», который к всеобщему сожалению не состоялся, поэтому предлагаю опубликовать ваши доклады в виде статей в журнале «Друпалогия», который в настоящее время испытывает реальные проблемы с материалами.
Для тех, кто не в танке: Пилотный выпуск (скачать)
————————————————————————————————————————————————————
Любые вопросы можно задать здесь или написать письмо на drupalogy.magazine@gmail.com
P.S. Проект «Друпалогия» участвует в рейтинге рунета, поддержите его: http://www.ratingruneta.ru/awards_vote/?site_id=68110
Источник: http://www.drupal.ru/node/56612
Есть замечательный модуль OpenADS. Нужен для интеграции банерообменной системы OpenX c Drupal.
Подготовил версию для 7.x. В основу взял 6.x-1.0.
Тестировалась с OpenX 2.8.7, возможны глюки с другими версиями.
Скачать можно здесь
Источник: http://drupal.ru/node/56235
Есть замечательный модуль OpenADS. Нужен для интеграции банерообменной системы OpenX c Drupal.
Подготовил версию для 7.x. В основу взял 6.x-1.0.
Тестировалась с OpenX 2.8.7, возможны глюки с другими версиями.
Скачать можно здесь
Источник: http://www.drupal.ru/node/56235
Здравствуйте!
С недавнего времени начал понемногу пользоваться твиттером. Там есть такое интересное понятие – хэш-тег, его использование позволяет пользователям отсматривать твиты определенной тематики, например твиты про ваш город или твиты про веб-дизайн.
Среди прочих хэш-тегов есть хэш-тег #drupal – которым пользуется сообщество drupal разработчиков со всего мира. Но есть особенность, дело в том что данным хэш-тегом пользуется преимущественно англоязычное сообщество, и просматривая твиты чувствуешь себя немного неуютно, хочется чтобы было по-русски.
Поэтому я начал в своих твитах про Drupal использовать хэш-тег #drupal_ru, и видимо пока только я один им пользуюсь.
В связи с этим призываю русскоязычное сообщество drupal-разработчиков поддержать новый хэш-тег. Я уверен, что группировка именно русскоязычных твитов о drupal будет способствовать и продвижению системы, и сплоченности русскоязычного сообщества, и обеспечит бОльшую отдачу от твитов.
Кроме того, если еще нет такого, то предлагаю создать модуль, позволяющий вести трансляцию твитов по хэш-тегу на сайте. Как например сделано тут www.uwdc.ru “Tweets #uwdc”.
Источник: http://www.drupal.ru/node/56173
Привет, друзья!
Я немного обновил проект Drupalogy: выставка сайтов, сделанных на Drupal. Изменения незначительные, но присутствуют.
UPD:
Изменена страница профайла пользователя
Добавлены уведомления о новых личных сообщениях
Добавлены ссылки «добавить в закладки», «поделиться в Facebook», «поделиться в вКонтакте». Страница с закладками есть в профайле.
Изменены:
дизайн
тема
логотип
переработан список категорий: их стало больше (часть переименована, часть удалена, часть добавлена)
Добавлены:
вывод последних комментариев (в футере)
рандомный показ сайтов с наивысшим рейтингом (в футере)
вывод всех комментариев пользователя (в профайле)
вывод списка разработчиков (выводятся все пользователи, добавившие хоть один сайт)
добавлено меню пользователя
добавлено диалоговое окно авторизации или регистрации
включены приватные сообщения
Изменена страница профайла пользователя
Добавлены уведомления о новых личных сообщениях
Добавлены ссылки «добавить в закладки», «поделиться в Facebook», «поделиться в вКонтакте». Страница с закладками есть в профайле.
Осталось:
темизировать страницы с данными пользователя (в процессе)
исправить мелкие недочёты
Сайт иногда может быть выключен:
просьба отнестись с пониманием: сайт делается в реальном времени, по причине того, что пользователи продолжают добавлять свои сайты в галерею.
Адрес проекта: drupalogy.ru или друпалогия.рф
Если у вас есть предложения, озвучивайте.
Хабрапользователи могут поддержать: http://habrahabr.ru/blogs/drupal/112319/
Источник: http://drupal.ru/node/55985
Привет, друзья!
Я немного обновил проект Drupalogy: выставка сайтов, сделанных на Drupal. Изменения незначительные, но присутствуют.
UPD:
Изменена страница профайла пользователя
Добавлены уведомления о новых личных сообщениях
Добавлены ссылки «добавить в закладки», «поделиться в Facebook», «поделиться в вКонтакте». Страница с закладками есть в профайле.
Изменены:
дизайн
тема
логотип
переработан список категорий: их стало больше (часть переименована, часть удалена, часть добавлена)
Добавлены:
вывод последних комментариев (в футере)
рандомный показ сайтов с наивысшим рейтингом (в футере)
вывод всех комментариев пользователя (в профайле)
вывод списка разработчиков (выводятся все пользователи, добавившие хоть один сайт)
добавлено меню пользователя
добавлено диалоговое окно авторизации или регистрации
включены приватные сообщения
Изменена страница профайла пользователя
Добавлены уведомления о новых личных сообщениях
Добавлены ссылки «добавить в закладки», «поделиться в Facebook», «поделиться в вКонтакте». Страница с закладками есть в профайле.
Осталось:
темизировать страницы с данными пользователя (в процессе)
исправить мелкие недочёты
Сайт иногда может быть выключен:
просьба отнестись с пониманием: сайт делается в реальном времени, по причине того, что пользователи продолжают добавлять свои сайты в галерею.
Адрес проекта: drupalogy.ru или друпалогия.рф
Если у вас есть предложения, озвучивайте.
Хабрапользователи могут поддержать: http://habrahabr.ru/blogs/drupal/112319/
Источник: http://www.drupal.ru/node/55985
Много вопросов задается куда делось /all.
Погуглив нашел модуль taxonomy_filter
Его младший брат http://drupal.org/project/tf_views, который добавляет только эту функцию без описанного ниже.
Taxonomy Filter Core – добавляется возможность /all и xxx+yyy, а так же есть 3 блока для вывода инфы и действий с ними: current criteria, refine criteria, search results.
current criteria показывает количество просто какой термин выбран и количество нод с ним (показывает по нулям, хоть ноды есть)
(на скрине блок 1, при нажатии удаляет с выдачи термин)
Блок search results выводит список терминов, которые которые сейчас присутстуют в выдаче (remove обрабатывается правильно)
(На скрине блок 2, “Место расположение” – имя словаря))
refine criteria – охерезная штука, в search results позволяет добавлять сущестующие еще не выбранные варианты таксономии в уже готовую выдачу или удалить из нее.. (На скрине снизу, динамическая)
Баги: выдача есть только по /all, ак же в списке блоков нет какого то блока, на который в настройках модуля матюхается)
Получается модуль будет обязательным для сайтов на d7.
Источник: http://drupal.ru/node/55878
Много вопросов задается куда делось /all.
Погуглив нашел модуль taxonomy_filter
Его младший брат http://drupal.org/project/tf_views, который добавляет только эту функцию без описанного ниже.
Taxonomy Filter Core – добавляется возможность /all и xxx+yyy, а так же есть 3 блока для вывода инфы и действий с ними: current criteria, refine criteria, search results.
current criteria показывает количество просто какой термин выбран и количество нод с ним (показывает по нулям, хоть ноды есть)
(на скрине блок 1, при нажатии удаляет с выдачи термин)
Блок search results выводит список терминов, которые которые сейчас присутстуют в выдаче (remove обрабатывается правильно)
(На скрине блок 2, “Место расположение” – имя словаря))
refine criteria – охерезная штука, в search results позволяет добавлять сущестующие еще не выбранные варианты таксономии в уже готовую выдачу или удалить из нее.. (На скрине снизу, динамическая)
Баги: выдача есть только по /all, ак же в списке блоков нет какого то блока, на который в настройках модуля матюхается)
Получается модуль будет обязательным для сайтов на d7.
Источник: http://www.drupal.ru/node/55878
По мотивам обсуждения http://drupal.ru/node/53748 сделал модуль расчета доставки средствами EMS Russia.
Модуль использует родные поля доставки, предоставленные уберкартом.
Т.е. человек при оформлении заказа выбирает область, и вписывает город. город при необходимости (если не найден в базе ems) чистится от “г,пос,…”, и проверяется еще раз. Если фейл – считаем как до региона. Есть поддержка международных отправлений.
Адрес проекта: http://drupal.org/project/uc_ems
Скрины:
“Нет связи с EMS”:
Страница сеттингов:
Как видите, есть настройки типа добавочной стоимости.
В итоге был так же создан багрепорт в Уберкарт (устарели регионы России, модуль это пока решает динамической подменой вводимых пользователем данных):
http://drupal.org/node/1027060
Если кто-то хочет материально отблагодарить разработчика, т.е. меня, я не против
В комментарии к переводу просьба писать “ems от [ник на drupal.ru]“, если хотите быть упомянуты на странице модуля drupal.org – сообщайте с каким урлом/именем.
Yandex.money
transfer-pay@yandex.ru
или номер счета: 4100190415303
Webmoney
Z352678179207
R114412215620
E406623242647
Источник: http://drupal.ru/node/55610
По мотивам обсуждения http://drupal.ru/node/53748 сделал модуль расчета доставки средствами EMS Russia.
Модуль использует родные поля доставки, предоставленные уберкартом.
Т.е. человек при оформлении заказа выбирает область, и вписывает город. город при необходимости (если не найден в базе ems) чистится от “г,пос,…”, и проверяется еще раз. Если фейл – считаем как до региона. Есть поддержка международных отправлений.
Адрес проекта: http://drupal.org/project/uc_ems
Скрины:
“Нет связи с EMS”:
Страница сеттингов:
Как видите, есть настройки типа добавочной стоимости.
В итоге был так же создан багрепорт в Уберкарт (устарели регионы России, модуль это пока решает динамической подменой вводимых пользователем данных):
http://drupal.org/node/1027060
Если кто-то хочет материально отблагодарить разработчика, т.е. меня, я не против
В комментарии к переводу просьба писать “ems от [ник на drupal.ru]“, если хотите быть упомянуты на странице модуля drupal.org – сообщайте с каким урлом/именем.
Yandex.money
transfer-pay@yandex.ru
или номер счета: 4100190415303
Webmoney
Z352678179207
R114412215620
E406623242647
Источник: http://www.drupal.ru/node/55610
В 7-й версии появилась возможность автоматизировать процесс установки, создав конфигурационный файл install.site.php, где site – название вашего сайта. Этот файл нужно поместить туда же, где расположен стандартный install.php (в корне сайта). В файл install.site.php добавить следующий скрипт:
<?php
include_once 'install.php';
$settings = array(
'parameters' => array(
'profile' => 'default',
'locale' => 'en',
),
'forms' => array(
'install_settings_form' => array(
'driver' => 'mysql', //тип базы данных
'database' => 'my_db_name', //имя базы данных
'username' => 'my_db_username', //имя пользователя базы данных
'password' => 'my_db_password' //пароль к базе данных
),
'install_configure_form' => array(
'site_name' => 'My site', //название для вашего сайта
'site_mail' => 'admin@mymail.com', //email сайта
'account' => array(
'name' => 'admin', //имя суперпользователя сайта
'mail' => 'admin@mymail.com', //email суперпользователя (обычно совпадает с email сайта)
'pass' => array(
'pass1' => 'password_for_site', //пароль суперпользователя
'pass2' => 'password_for_site', //подтверждение пароля суперпользователя
),
),
'update_status_module' => array(1 => TRUE), //включить иодуль Update Manager
'clean_url' => TRUE, //включить чистые ссылки
),
),
);
install_drupal($settings);
?>
После того, как вы ввели нужные данные в конфигурационный файл, можно запустить его из командной строки. И не забудьте удалить файл/заблокировать доступ к файлу после установки.
Источник: http://drupal.ru/node/55562
Поздравления всем друпалерам рунета с Новым Годом и с релизом Drupal 7! Этот релиз пользователи Drupal ждали весь прошлый год, в новой версии много новшеств, как для разрабочтиков, так и для пользователей.
7 января 2011 по всему миру пройдут Drupal party, места сбора отмечаются на сайте drupal7releaseparty.org. Вот список городов России, где на текущий момент заявлены Release Party:
Абакан
Астрахань
Чебоксары
Краснодар
Липецк
Москва
Рязань
Сургут
Воронеж
Ярославль
Подтверждайте своё участие в вечеринках по ссылкам, предлагайте свои варианты, не забывайте указывать их на drupal7releaseparty.org.
Источник: http://www.drupal.ru/node/55108
Поздравления всем друпалерам рунета с Новым Годом и с релизом Drupal 7! Этот релиз пользователи Drupal ждали весь прошлый год, в новой версии много новшеств, как для разрабочтиков, так и для пользователей.
7 января 2011 по всему миру пройдут Drupal party, места сбора отмечаются на сайте drupal7releaseparty.org. Вот список городов России, где на текущий момент заявлены Release Party:
Абакан
Астрахань
Чебоксары
Краснодар
Липецк
Москва
Рязань
Сургут
Воронеж
Ярославль
Подтверждайте своё участие в вечеринках по ссылкам, предлагайте свои варианты, не забывайте указывать их на drupal7releaseparty.org.
Источник: http://drupal.ru/node/55108
Вышел Drupal 7
Скачать со страницы http://drupal.org/project/drupal
Комментарии к релизу (много исправлений по сравнению с RC4)
Пресс-релиз на русском языке
Прикрепленный файл
Размер
d7.png
49.25 кб
Источник: http://www.drupal.ru/node/55100
Вышел Drupal 7
Скачать со страницы http://drupal.org/project/drupal
Комментарии к релизу (много исправлений по сравнению с RC4)
Пресс-релиз на русском языке
Прикрепленный файл
Размер
d7.png
49.25 кб
Источник: http://drupal.ru/node/55100
Большое спасибо всем, кто помог с переводом – успели оперативно всё привести в порядок!!!
Все переведено!
Подробности http://groups.drupal.org/node/113499
Английский вариант http://d7.redesign.devdrupal.org/drupal-7.0/ (drupal/drupal)
пресс-релиз http://ietherpad.com/GRSTAShVWk
анонс http://ietherpad.com/3OXbHtwSCl
транскрипт видео http://ietherpad.com/H58kSp0oLd
Результат будет выглядеть приблизительно так:
Источник: http://www.drupal.ru/node/55066
Большое спасибо всем, кто помог с переводом – успели оперативно всё привести в порядок!!!
Все переведено!
Подробности http://groups.drupal.org/node/113499
Официальная страница http://drupal.org/drupal-7.0/ru
пресс-релиз http://ietherpad.com/GRSTAShVWk
анонс http://ietherpad.com/3OXbHtwSCl
транскрипт видео http://ietherpad.com/H58kSp0oLd
Результат будет выглядеть приблизительно так:
Источник: http://drupal.ru/node/55066
[народ не собрался]
Источник: http://www.drupal.ru/node/54885
[народ не собрался]
Источник: http://drupal.ru/node/54885
Сабж.
Линк http://www.drupal7releaseparty.org/russian-federation/release-party-rbogdan
Обещают быть:
rbogdan@drupal.org – Будет
gpK – Сошёл с дистанции
RxB – будет
P.Selfin@drupal.org – Будет
sin@drupal.org – Будет
it-open.ru – may be
http://wmkuban.ru – заскочит
UPD:
7 января.
18:00 – 19:00
Бар “Министерство”
Адрес: Красная – Пашковская.
Источник: http://www.drupal.ru/node/54702
Сабж.
Линк http://www.drupal7releaseparty.org/russian-federation/release-party-rbogdan
Обещают быть:
rbogdan@drupal.org – Будет
gpK – Сошёл с дистанции
RxB – будет
P.Selfin@drupal.org – Будет
sin@drupal.org – Будет
it-open.ru – may be
http://wmkuban.ru – заскочит
UPD:
7 января.
18:00 – 19:00
Бар “Министерство”
Адрес: Красная – Пашковская.
Источник: http://drupal.ru/node/54702
Сторонников Drupal радуют под новый год близким выходом релиза версии 7, а пока-что стал доступен релиз-кандидат под номером 2.
Напоминаю, что две недели назад вышел релиз-кандидат под номером 1, в котором были закрыты все критичные баги. В этот раз нас радуют исправлением выявленных недостатков и улучшениями, в том числе в темизации. Полный список изменений опубликован тут
Источник: http://www.drupal.ru/node/54123
Сторонников Drupal радуют под новый год близким выходом релиза версии 7, а пока-что стал доступен релиз-кандидат под номером 2.
Напоминаю, что две недели назад вышел релиз-кандидат под номером 1, в котором были закрыты все критичные баги. В этот раз нас радуют исправлением выявленных недостатков и улучшениями, в том числе в темизации. Полный список изменений опубликован тут
Источник: http://drupal.ru/node/54123
После трех бета-версий, с кучей исправленных ошибок и улучшением пользовательского интерфейса, мы с гордостью представляем вам первый релиз-кандидат Drupal 7.0. Хотя есть еще несколько известных проблем, над которыми мы работаем, мы уверены, что наш код является достаточно стабильным для широкого тестирования сообщества. С последней бета-версии,выпущенной две недели назад, мы улучшили дизайн темы по умолчанию “Bartik”, исправили много численные ошибки и улучшили менеджер обновлений и модуль поиска, документацию сделали более понятной и точной, сделали финальную чистку архитектурных улучшений, добавленных в ходе выпуска. Устаревший модуль Profile теперь скрыт, пользовательские поля могут быть добавлены с помощью Field UI.
—
ps если анонс уже был, прошу прощения за гармонь, но не увидел в новых…
Источник: http://www.drupal.ru/node/53842
После трех бета-версий, с кучей исправленных ошибок и улучшением пользовательского интерфейса, мы с гордостью представляем вам первый релиз-кандидат Drupal 7.0. Хотя есть еще несколько известных проблем, над которыми мы работаем, мы уверены, что наш код является достаточно стабильным для широкого тестирования сообщества. С последней бета-версии,выпущенной две недели назад, мы улучшили дизайн темы по умолчанию “Bartik”, исправили много численные ошибки и улучшили менеджер обновлений и модуль поиска, документацию сделали более понятной и точной, сделали финальную чистку архитектурных улучшений, добавленных в ходе выпуска. Устаревший модуль Profile теперь скрыт, пользовательские поля могут быть добавлены с помощью Field UI.
—
ps если анонс уже был, прошу прощения за гармонь, но не увидел в новых…
Источник: http://drupal.ru/node/53842
книга для тех, кто еще не набил шишек на Drupal 7. В основном обзор тем людям, кто знакомится с новой версией.
http://www.wowebook.com/open-source/foundation-drupal-7.html
более “вкусная”, на мой взгляд, книга, как раз то, о чем идет много споров: Views или не views. Хоть выпуск и февраль 2010г., но на глаза попалась только сейчас, а шарить в views для серьезного разработчика на Drupal, думаю объяснений не нужно.
PS К ярым противникам views это не относится))
Источник: http://www.drupal.ru/node/53397
книга для тех, кто еще не набил шишек на Drupal 7. В основном обзор тем людям, кто знакомится с новой версией.
http://www.wowebook.com/open-source/foundation-drupal-7.html
более “вкусная”, на мой взгляд, книга, как раз то, о чем идет много споров: Views или не views. Хоть выпуск и февраль 2010г., но на глаза попалась только сейчас, а шарить в views для серьезного разработчика на Drupal, думаю объяснений не нужно.
PS К ярым противникам views это не относится))
Источник: http://drupal.ru/node/53397
перед написанием на форум о проблеме сделай следующее:
- вычисти кеш друпа
- вычисти кеш браузера с кукисами
- пни крон
- перестрой права доступа admin/content/node-settings/rebuild
- обнови страницу
Источник: http://www.drupal.ru/node/52325
Предлагаю вести обсуждение модуля здесь, пока не будут готовы демосайт и сайт с документацией.
Описание модуля: черновик
Источник: http://www.drupal.ru/node/51833
В инете появилось очередное чтиво от Packt, Drupal 7, выпуск сентябрь 2010
Источник: http://www.drupal.ru/node/51769