Блог пользователя - andriy.olischuk

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

13 января 2012 в 11:44

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

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

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

Роль предлагаемой к созданию Друпал ассоциации в жизни студий/команд/юрлиц

19 декабря 2011 в 12:38

На корпоративном ИТ рынке сейчас есть спрос на Друпал. При этом заказчики бывают вполне крупными или известными. По моим наблюдениям они сталкиваются с двумя проблемами при попытке работать с аутсорсерами:
1. Когда кто-то из их ИТ-менеджеров что-то знает про друпал - тут не понятно с кем из исполнителей работать, чтобы по безналу, договору, комплексно. Неясно как находить такие юрлица (или даже просто команды).
2. Когда их ИТ-менеджер не знает про Друпал, но его компании нужно решение на базе подобного инструмента. Напомню, друпал это не только сайты, но и различные прикладные системы.

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

Шаблоны - архитектура хранения

30 июня 2009 в 12:38

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

Вопрос: каким образом лучше сделать такую группировку по директориям? Т.е. как лучше заставить друпал брать шаблоны, скажем, одной группы views в одной папке внутри темы, а для других views - в другой? Ну и не только views, но и блоков, типов контента и т.п.
Пока ничего кроме include_once на ум не приходит (т.е. оставляем стандартые имена файлов, но делаем их по сути врапперами для реальных шаблонов), но как-то это кривовато мне кажется, да и тяжелее для нагрузки.

Интересует прежде всего файловый способ хранения, не content_template.

Модуль Poll кнопка More choices

29 июня 2009 в 11:44

В стандартном модуле Poll заложен такой функционал, что при нажатии на кнопку "Need more choices" производится валидация ВСЕЙ формы и если какое-то поле забыли заполнить, то введённые ранее варианты ответа теряются и их надо заполнять снова.
Что с этим делать понимание есть, но может уже кто-то справлялся с этой проблемой и есть готовый рецепт?

UPD: пошёл по пути правки функции poll_choice_js() в модуле. А если точнее, вместо вызова функции drupal_process_form (которая в том числе проводит валидацию всей формы), вызвал свою, которая такой валидации не проводит.

Динамические кнопки-фильтры для views

24 июня 2009 в 14:39

Есть представление (view) которое показывает ноды определённого типа (poll). Выводится в виде блока.
Задача: создать над блоком (или внутри, неважно) набор кнопок наподобие: "показать только опубликованные", "показать только активные". Как бы это лучше реализовать? Вручную рисовать кнопки и пробовать аргументы?

Локализация меню [решено]

19 июня 2009 в 13:05

Возникла проблема с локализацией меню, пока не пойму причину.
Суть:
Меню вручную локализовано, пока не вносим изменений - всё ок.
Локализацию ведём через po-файл, т.е. экспорт файла на локальную машину, затем полный перевод всех элементов, затем импорт назад на сайт. И вот как раз при импорте - локализация меню слетает (т.е. на дефолтном языке становится).
При этом, если сделать поиск строк в интерфейсе локализации, то видны два перевода одного и того же элемента меню - в одном переведено (то что мы залили), а другой - не переведён (он и отображается на сайте).
Куда копать?

Решение:
Оказывается баг в системе. Все подробности и патч есть [##384794]тут[/##].
Если в общих чертах, то в locale.inc возврат значения return substr($comm, 0, -2); выдаётся с пробелом, соответственно запись отличается и в результате получается "задвоение". Суть патча: возвращать с предварительным тримом: return trim(substr($comm, 0, -2));

Views slideshow с Ajax

18 июня 2009 в 15:25

Действительно ли Views Slideshow не работает с Ajax или это я где-то не догоняю?
Имеется ввиду, может ли слайдшоу не грузить все блоки HTML а потом их просто по очереди делать видимыми, а подгружать их дополнительно аяксом?
Может есть патчи/варианты? В гугле не нашлось.

jCarousel и Slideshow - не хотят дружить

15 июня 2009 в 19:05

Что-то притормозилась работа при попытке подружить сабж.
Итак: в рамках Views slideshow показываются слайды. В шаблоне слайда вставлен вызов карусели. Если активировать карусель как $('.myclass').jcarousel(), то выскакивает алерт "No width/height set for items". Если же обращаться к одному ID - $('#myelementid').jcarousel(), то для этого слайда всё срабатывает нормально (но карусели не появляется для других слайдов). При этом, если активировать карусель по ID несколько раз (по разу на каждый слайд), то выскакивает та же самая ошибка.
Кто нибудь сталкивался?

Синхронизация БД тестового сервера и production: как?

5 июня 2009 в 14:26

Хотел бы узнать, как кто решает эту проблему? Условно говоря, есть некий тестовый сервер где идёт рабочая сборка и есть боевой - туда ходят люди и постят контент.
С файлами проблем нет, всё организовано через SVN, но как быть с БД? Ведь просто "перезаливать" всю базу с тестового на боевой целиком нельзя, чтобы не поломать механизм и контент, да и заливка только некоторых таблиц тоже не решит проблему - где-то нужен альтер, где-то дополнительные инсерты или апдейты (к примеру таблицу variable просто так нельзя перезалить, нужно ещё и некоторые значения менять тогда).

Локализация: Refresh обнуляет переводы

1 июня 2009 в 11:00

Возникла проблема: на переведённом сайте, при нажатии на Refresh (Обновить) в переводе интерфейса, переводы некоторых элементов одного меню теряются. Скажем, меню переведено как "Мой аккаунт", "Блоги", "Группы", после рефреша "Мой аккаунт" остаётся, а остальное становится на английском (дефолтный язык).

Настройка "Все языки" стоит у каждого пункта меню. Меню создано вручную, через add menu.

Как можно собрать блок ТОП10 пользователей по карме/ранку?

30 мая 2009 в 16:35

Модуль user karma. Как (без написания собственного модуля) можно создать блок "ТОП10 пользователей сайта" по карме или user rank? Пробовал через views - не вижу как выставить сортировку по карме/ранку. Это я недостаточно знаю views или есть какие-то другие обходные пути или готовые решения?

Спасибо.

Локализация меню: порядок действий

28 мая 2009 в 13:32

Я совершил небольшую ошибку - сначала создал меню на основе словаря и только потом установил и настроил i18n. Словарь настроил как Localize terms. Terms are common for all languages, but their name and description may be localized. В итоге при попытке перевести пункты меню - процедура перевода проходила, но меню на перевод не реагировало (хотя в настройках стояло "Все языки" в списке языков меню).

Собственные шаблоны: не забыть про check_markup()

27 мая 2009 в 11:48

Некоторое время потратил на отлов псевдоглюка - вывод одного из полей CCK в кастомном шаблоне не реагировал на фильтры. Если подробнее, то в настройках фильтра стояли line breaks, но при этом вывод шёл без автозамены на br и p. Проблема оказалась в том, что в шаблоне (вариации node.tpl.php) я выводил поле просто как:

<?php echo $node->field_body[$i]["value"]; ?>

и совсем забыл про наложение настроек фильтрации:

<?php echo check_markup($node->field_body[$i]["value"]); ?>

Дополнение по теме. Так же необходимо проверить следующие настройки для работы фильтров: в свойствах поля CCK в радиокнопках Text processing должно стоять Filtered text (user selects input format), а так же line break нужно активировать (если ещё не активирован) в свойствах нужного вам формата в Input Formats.

SQL для выбора TОП5 в OG по количеству участников

26 мая 2009 в 17:01

Задача: создать блок, в котором вывести ТОП5 групп (OG.module) по количеству участников.
Решение: Начал я конечно со Views. То ли не хватило моих знаний, то ли ещё чего, но выставить критерием сортировки количество участников группы - ну никак не вышло. По количеству комментариев - пожалуйста, а по пользователям - не нашёл как. Стандартных модулей/блоков не нашёл так же. Тогда решил написать небольшой модуль-блок сам.

OG устроены так, что группа создаётся как обычная нода в таблице {node}, а её частные данные хранятся в таблице {og} (к примеру описание группы, язык и т.п.). При этом, пользователи к группе привязываются в третьей таблице {og_uid}. Соответственно, обычным запросом с сортировкой групп в порядке убывания числа участников - COUNT(uid) по {og_uid} - вытащить список групп сложно.
Решилось запросом следующего вида:

SELECT (SELECT COUNT(og_uid.uid) FROM og_uid WHERE og_uid.nid = og.nid) AS cnt, og.*, node.* FROM og, node  WHERE og.nid = node.nid ORDER BY cnt DESC LIMIT 0,5

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

SELECT (SELECT COUNT(og_uid.uid) FROM og_uid WHERE og_uid.nid = og.nid) AS cnt, og.*, node.* FROM og, node  WHERE og.nid = node.nid AND og.og_language = '$language->language' ORDER BY cnt DESC LIMIT 0,5