Sun-fire: Блог

Главные вкладки

[Решено ]Изменение приоритета вызова hook_form_alter()

20 мая 2011 в 16:27

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

[РЕШЕНО] Запись напрямую в БД

16 мая 2011 в 16:51

Дано:
Есть некоторое поле, например поле "Склады" с техническим названием field_product_store_relation. Поле ссылается на термин таксономии, который означает склад. К одному полю может быть привязано несколько терминов.

Нужно:
организовать обновление значения этого поля через небольшие промежутки времени.

Реализация:
Обновляю значения напрямую в б.д. с помощью db_insert и db_updatе, так как для изменения одного поля вызывать тяжелые функции node_load() и node_save() - значить вызывать лишние хуки, и тратить лишнее время. Значения обновляю в таблицах:

{field_revision_field_product_store_relation}
{field_data_field_product_store_relation}

Проблема:
Записанные в таблицы значения не появляются в объектах нод. Полностью идентичные значения, записанные в эти самые таблицы с помощью node_save() показываются нормально, а записанные напрямую с помощью db_insert и db_updatе нет.

В чем может быть проблема?

Запуск импорта Feeds по крону

12 мая 2011 в 16:12

Вопрос как реализовать запуск импорта Feeds с помощью крон?
Данные импортируются из CSV-файлов. Стандартная процедура (через вызов /import) импорта подразумевает заполнение пользователем формы, а при вызове через крон этот процесс насколько я понимаю автоматизируется.

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

Drupal Commerce: паразинтые позиции в корзине

29 апреля 2011 в 15:35

Суть трабла.

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

Есть подозрение, что происходит сбой в обработке механизма сессий.

Кто сталкивался с такой проблемой, и как ее решить?

Слетает дефолтная картинка в поле-изображении

28 апреля 2011 в 12:06

Обнаружил любопытный баг.

Суть проблемы:
Есть контент-тайп, у которого есть поле типа "Изображение". Для этого поля задается дефолтовая картинка, которая отображается, если значение поля явно не было задано.

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

Техническую причину проблемы нашел - файл дефолтового изображения записывается в БД с параметром status = 0, то есть файл обозначается как temporary, и автоматически удаляется по крону после превышения DRUPAL_MAXIMUM_TEMP_FILE_AGE.

[РЕШЕНО] Путь к дефолтовому изображению для филда

22 апреля 2011 в 13:00

Вопрос, суть следующая.

Есть филд типа "изображение", для которого задана дефолтовая картинка. Каким образом в коде модуля можно получить адрес, или fid файла дефолтового изображения для этого поля?

Форма комментариев c выводом через Views

15 апреля 2011 в 0:40

Суть трабла.

Есть вьюха, которая переопределяет вывод ноды определенного контент-тайпа. На этой же вьюхе выводится форма комментария, с помощью Customfield PHP. Используется следующий код:

Командная разработка на Drupal 7

13 апреля 2011 в 16:30

Есть вопрос.

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

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

С файловой частью все более-менее понятно. На то есть системы контроля версий.

Как быть с базой данных? Каким методом делать корректное слияние баз данных с локальных серверов разработки и БД продакшн сервера?

Нагуглилось:

- Migraine от Shearer Software (судя по описанию, ориентирован на Д5, допилен под Д6, а про совместимость с Д7 вообще ничего не нагуглилось)
- Drupal Features (краем уха слышал, никогда не работал)

Как вариант на ум приходит еще отбор таблиц для дампа в ручном режиме через PhpMyAdmin или Sypex Dumper, с последующим импортом на продакшн. Гиморно и большая вероятность накосячить.

Какие еще варианты есть?

[РЕШЕНО] Автоматический запуск крона через 15 минут в Drupal 7

11 апреля 2011 в 17:43

Суть вопроса. Нужно автоматически запускать крон каждых 15 минут. В списке возможных настроек, которые предлагает Drupal 7, минимальное значение 1 час.
Каким образом в этом случае можно настроить запуск крона через каждых 15 минут? Лезть в ядро не кошерно, поэтому ищу варианты.

З.Ы. Poormanscron под 6-ку однозначно гибче.

Лишний вызов hook_menu в процесе сабмита ноды

6 апреля 2011 в 13:17

Есть трабл.

Дано:

Есть обработчик hook_menu()

1. Некоторым способом отбирается нода, и получается ее объект через node_load()
2. Изменяются значения некоторых полей (значения термина таксономии по которому нода отбирается для выдачи в этот самый hook_menu, нода таким образом блокируется, чтобы ее она не попала в выдачу другому пользователю), после чего объект ноды отдается в drupal_get_form()
3. В массиве формы скрываются некоторые поля, после чего форма отдается на выход обработчика hook_menu()

[Решено] Трабл с ajax загрузкой файлов

30 марта 2011 в 17:50

Суть трабла в следующем.

Есть некий тип контента, в котором есть поля-изображения.

Есть кастомный модуль, в котором создается кастомная форма редактирования нод указанного контент-тайпа. Работает примерно следующим образом:

1. Получаем объект ноды.
2. Модифицируем значения некоторых полей.
3. С помощью drupal_get_form() получаем ассоциативный массив формы на основе объекта ноды.
4. Скрываем некоторые поля, которые юзер не должен видеть.
4. Отдаем форму на выход обработчика hook_menu().

С обыкновенным контентом проблем нет - все корректно сохраняется.

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

Deprecated function: Call-time pass-by-reference has been deprecated in drupal_load() (line 933 of /home/site/rk2/includes/bootstrap.inc).
Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'node_form' not found or invalid function name в drupal_retrieve_form() (рядок 771 із /home/site/rk2/includes/form.inc).
Notice: Undefined index: #node в menu_form_node_form_alter() (рядок 594 із /home/site/rk2/modules/menu/menu.module).
Notice: Trying to get property of non-object в menu_form_node_form_alter() (рядок 594 із /home/site/rk2/modules/menu/menu.module).

и т.д. варнингов идет целый вагон, и в конце:

Notice: Undefined index: field_product_image в file_ajax_upload() (рядок 265 із /home/site/rk2/modules/file/file.module).

С выгрузкой файлов с помощью ajax пока не разобрался, в какую сторону копать?

Добавление кнопки и ее обработчика к произвольной форме

23 марта 2011 в 17:27

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

[Решено] Изменение редиректа после сабмита формы.

23 марта 2011 в 12:54

Суть трабла. Для отдельного типа контента перехватываю и изменяю вывод стандартной формы редактирования контента. Нужно обеспечить редирект после сабмита формы на кастомный адрес.
В 6-ке для этого был филд формы #redirect, в 7-ке его убрали. Как можно организовать редирект?

Модуль Views RSS - неправильное формирование ссылок

13 февраля 2011 в 14:19

Сабж. Установил модуль Views RSS, задал поля для отображения в лента. Все работает кроме одного.

Если я пытаюсь вывести поле как ссылку (например Node:Title) в ленте оно выводится не как ссылка, а как текст, причем отображается и HTML-код ссылки.

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

<a href="/blog_details/%D0%90%D0%BB%D1%8C%D1%84%D0%B0-%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8F%20%D1%84%D1%83%D0%BD%D0%BA%D1%86%D0%B8%D0%BE%D0%BD%D0%B0%D0%BB%D0%B0%20%D1%81%D0%B0%D0%B9%D1%82%D0%B0">Альфа-версия функционала сайта</a>

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

Кто уже сталкивался с такой проблемой и как ее обходить?

[Решено] Таксономия в аргументах Views Drupal 7

8 февраля 2011 в 18:48

Есть вопрос по использованию в качестве аргументов Views терминов таксономии.

Как известно, в Drupal 7 термин таксономии привязывается к контенту через отдельный филд - term relation.

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

Среди возможных аргументом нашел также знакомые по 6-ке Taxonomy Term Id и т.п. Когда попробовал применить это поле в качестве аргумента результата не дало. Возможно не правильно делал.

[Решено] Глюк во Views с использованием в качестве аргумента taxonomy term id

4 февраля 2011 в 15:34

Наткнулся на новый трабл при работе с Drupal Commerce. Кратко изложу суть трабла:

Есть тип товара, с некоторым количеством полей, есть тип контента, к нодам которого атачатся товары. У товаров есть филды, и в том числе филд-релейшены таксономии.

Создал вьюху каталога товаров. Отображает товары нормально, но когда попробовал прикрутить передачу аргумента полезли баги. Если использовать в качестве аргумента Taxonomy Term ID, аргумент не работает, и результирующая вьюха дает пустой результат. Когда посмотрел текст запроса вьюхи, не нашел в нем join для параметра-таксономии. Такое впечетление что Term ID игнорируется как аргумент. Если как аргумент использовать например код товара, то все работает нормально.

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

Вьюс использую 7.x-3.x-dev (в рекомендованой alpha1 тот же косяк), коммерц alpha5.

Спасибо.

[Решено] Кастомный набор полей во views RSS

27 января 2011 в 0:21

Есть следующий вопрос. Каким образом можно задать кастомный набор полей для отображения в rss, которое формируется с помощью views?

[Решено] Как задать "маску" для изображения в imagecache?

27 января 2011 в 0:16

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

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

Вопрос: как на изображение накладывать "маску" с прозрачной круглой центральной частью, и однотонной заливкой одним цветом в остальной части?

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

RSS с помощью Views и конфликт с Devel Themer

11 января 2011 в 17:56

Совершенно случайно в процессе создания RSS - лент натолкнулся на несовместимость модулей Devel themer и Views.

В кратце объясню суть обнаруженной проблемы. Нужно было создать RSS-ленту для определенного типа контента. Для этого я воспользовался модулем Views, и создал вьюху с представлением типа Feed, которое соответствующим образом настроил. Но при вызове RSS получал не переход на соответствующую страницу, а xml-файл, который к тому же корректно не обрабатывался браузером. На друпал.орг нашел тему, но в ней в основном грешат на template.php, в котором ничего крамольного не обнаружил.

После этого проанализировал исходники xml-файла, и нашел там паразитные тэги, из-за которых браузер не хотел парсить xml . Как только отключил Devel themer, все сразу начало работать корректно, так как тэги убрались.

Вот такие бывают грабли.

[Решено] Проблема с taxonomy/term/all

25 декабря 2010 в 22:53

При попытке вызвать вывод всех терминов таксономии через taxonomy/term/all получаю "The requested page could not be found". В чем может заключаться трабл?

P.S. При этом параметрический отбор терминов работает: taxonomy/term/1+2+3 например, дает правильный результат.

[Решено] Как задать формат текста для кастомного типа контента в Drupal 7

20 декабря 2010 в 16:02

Суть трабла.

Друпал 7.

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

Как создать и настроить формат текста - нашел. (По умолчанию доступны три: Filtered HTML, Full HTML, Plain text, и все настраиваются).
Как задать формат текста для ноды при ее создании/модификации - нашел.
Как задать формат текста для типа контента - не нашел. Или хитро запрятано, или заработался Wacko и не вижу.

[Решено] Как вывести ссылку подписки Subscriptions через Views?

30 ноября 2010 в 17:52

Суть трабла.

Поставил модуль Subscriptions для организации подписки пользователя на комменты в нодах. В нодах все толком, ссылка "Подписаться" выводится нормально.

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

Куда стоит копать?

[Решено] Глюк модуля Insert в Drupal 7

24 ноября 2010 в 12:58

Суть трабла.

Периодически появляется критическая ошибка:

Fatal error: Call to undefined function file_directory_path() in Z:\home\alpha3\www\sites\default\modules\insert\insert.module on line 28

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

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

[Решено] Получить строку запроса

9 ноября 2010 в 12:45

Пишу модуль-надстройку над Global Redirect для корректного транслирования алиасов типа ?p=33. Идея - перехватываю такой алиас, транслирую его в соответствующий clean url, и отдаю по drupal_goto.

Перехват урла делаю по хуку hook_init(). Для своего модуля задал приоритет выполнения выше, чем у Global Redirect (через апдейт таблицы system в hook_install моего модуля), чтобы мой перехват срабатывал перед глобал редиректом.

Уперся в следующую проблемму: как получить строку урла такой, какой она есть? Смотрел devel'ом через $_GET, там вместо ?p=33 лежит "распарсенное" значение:

[Решено] db_set_active() - приводит к "Site off line"

6 ноября 2010 в 18:49

В процессе написания модуля возникла необходимость получать данные из базы, которая хранится на другом хосте. Нашел и прочитал http://drupal.ru/node/19457

Описал в settings.php подключение к нужной бд. Описал в модуле вызов db_set_active() к нужной базе, а после - возврат к дефолтной. Все это завязал на клик по пункту меню в админке.