Sun-fire: Блог

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

[РЕШЕНО] Search API сложная сортировка

17 июля 2013 в 17:08

Кратко опишу суть проблемы:

Дано:
1. Тип контента, у которого есть несколько полей, в которых хранится наличие товара на складах, назвем из А, В, С (целые числа)
2. Каталог на Search API, Search API SOLR, поисковый бэкенд - Apache SOLR

Нужно:
Для определенной роли организовать сортировку, по которой в каталоге будет контент будет выводится сначала со склада А, потом со склада В, потом со склада С (по убыванию), потом весь остальной (сортировка по сводному полю наличия по убыванию).

Идея реализации:

hook_search_api_query_alter(SearchApiQueryInterface $query)

В нем задаем несколько $query->sort($sort, $order); (сначала для поля наличия по складу А, потом для поля наличия по складу В и т. д.)

[Решено] Модуль Plup - не отображается превью при загрузке изображений: конфликт с изменениями в последних версиях ядра друпала

19 апреля 2013 в 1:06

Собствено, суть трабла:

После обновления ядра до 7.22 перестали отображаться thumbnail превью изображений. Фактически проблема возникла еще при обновлении на 7.19 (в этой версии ядра устранили уязвимость в механизме работы пресетов изображений), но я версии ядра 7.19-20-21 успешно "пропустил".

На д.орг на странице модуля есть ишью по поводу этой проблемы, и даже есть патчи: http://drupal.org/node/1933596
Но к сожалению, они не работают с последней версией ядра.

Может кто-то уже сталкивался с этой проблемой?

[РЕШЕНО] Facet API + XML Sitemap: как интегрировать?

29 марта 2013 в 15:02

Собственно, столкнулся с интересной задачей:

Есть:
Фасетные отборы каталога товаров, реализованные на Facet API+Search API+Apache SOLR в бекэнде.

Нужно:
Реализовать генерацию ссылок в sitemap.xml по первому уровню фасетных отборов (одновременно активен только одно значение любого фасета).

Встречал ли кто что либо похожее (готовое, или sandbox)? Хотелось бы посмотреть подход к решению задачи. Задача не простая в первую очередь с точки зрения производительности - так как планируется использовать эту приблуду на не маленьких объемах данных:

Типов контента: около 150
Общее количество фасет (полей): около 1100
Примерно 60% фасет - поля таксономии, в среднем 10-20 терминов в словаре (есть и большие, по несколько сотен терминов в словаре).

Drupal Commerce: скидка при достижении определенной суммы в корзине

13 июня 2012 в 11:33

Собственно, вопрос:

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

Для примера:

Общая сумма в корзине составляет до $500 - скидки нет
Общая сумма от $501-$1000 скидка 3%
Общая сумма свыше $1000 скидка 5%

[Решено] Feeds: импорт таксономии с сохранением иерархии

6 мая 2012 в 2:34

Суть проблемы.

При импорте значений поля нужно сохранить иерархию таксономии. Для обработки иерархии использую модуль Feeds tamper term hierarchy

Обнаружил следующий баг:

Например есть два термина:

Фурнитура (основной термин)
-Пуговица (подчиненный термин)

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

[РЕШЕНО] Настройка доступа к ноде для отдельного пользователя

11 апреля 2012 в 23:20

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

Views: вывод результатов без учета сортировки

5 апреля 2012 в 3:26

Короткое описание:
Есть некий views, который вызывается программно с помощью views_embed_view().

В качестве аргумента во вьюху передается строка вида 1+12+35+4, где число - номера нод. Настройка exposed filter предусматривает множественные значения.

Суть вопроса:
Каким образом заставить views вывести результат (поля нод) именно в той последовательности, в которой были переданы соответствующие аргументы (номера нод)? То есть в данном случае сначала для ноды с номером 1, потом для ноды с номером 12 и т. д.

Fджаксовый сабмит формы и LABjs

15 марта 2012 в 18:29

Суть вопроса.

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

Без LABjs все работает отлично, с оным - отказывается сабмитить форму, при этом выдает ошибку

[РЕШЕНО] Редактирование ноды в блоке - ошибка загрузки изображения

25 февраля 2012 в 15:23

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

module_load_include('inc', 'node', 'node.pages');
$form = node_add('photoaction');
print drupal_render($form);

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

An AJAX HTTP request terminated abnormally.

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

[РЕШЕНО] Views exposed filter - не убирать exposed форму на странице пустого результата

24 января 2012 в 0:17

Суть вопроса.

Есть вьюха с exposed filter. При определенных значениях фильтра в выводе вьюхи не будет значений, то есть результат пустой. Опция "Пустой текст (выводится при пустом представлении)" задана. Текст, установленный в опции выводится, но при этом скрывается и форма exposed filter.

Каким образом на странице пустого результата оставить отображение формы с exposed filter?

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

Создание плагина для Feeds Tamper.

19 января 2012 в 18:03

Модуль Feeds - простое и мощное решение для организации импорта данных. Даный модуль имеет возможность работать с разными стандартами данных, в частности с CSV, XML, OPML.
При организации импорта часто появляется необходимость проводить обработку данных перед их подачей на сайт. Для обработки данных в процессе импорта предназначен модуль Feeds Tamper. Этот модуль позволяет определить для каждого поля действие (или совокупность действий) по обработке данных.

Список стандартных операций довольно большой (рис. 1.):

Каждое действие технически реализуется в виде отдельного плагина, который подключается к модулю Feeds Tamper, и после подключения становится доступен в списке "The plugin to add".

Views pager - параметр show all

8 ноября 2011 в 23:22

Суть проблемы.

Каким образом, используя механизм аджаксового пейджера views задать в нем ссылку на отображение полного списка элементов? То есть реализовать функционал "show all".

Есть встроенный механизм Expose items per page, который позволяет вывести все элементы. Но там немного другой функционал - форма с выпадающим списком, в котором можно выбрать значение all.

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

[РЕШЕНО] Drupal 7: текущая языковая локаль поля

1 ноября 2011 в 16:49

Суть проблемы.

На сайте включена поддержка локализации (модуль Locale). По умолчанию установлен Украинский язык (uk). В настройках типа контента установлено: Multilingual support: Disabled. В ремарках для этой настройки указано: If disabled, new posts are saved with the default language. Следовательно, поля должны сохранятся с текущей локалью пользователя - uk.

При сохранении контента некоторые поля сохраняются так, как нужно - с локалью uk, а некоторые с признаком локали und.

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

[Решено] Cron + Queue + node_load = access denied

25 октября 2011 в 18:51

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

Поскольку количество нод большое (3-5К) используется queue api. При этом на один элемент очереди приходится один тип контента (примерно 300-500 нод на один элемент очереди).

За один запуск крон обрабатывает примерно 3/4 всех очередей, после этого редиректит на страницу запуска крона с сообщением о том, что доступ запрещен. При повторной авторизации и запуске крона нормально обрабатывает оставшиеся 1/4 очередей и нормально завершается уже без всяких проблем.

Сам по себе функционал выгрузки полностью работоспособен - проверял "ручным" запуском без использования крона - без проблем "кушает" порциями до 1.5К нод, и не давится.

В логах друпала чисто.

Опытным путем, комментируя строчки кода, обнаружил, что "узкое место" в данном случае это функция node_load(). Все аргументы, которые передаются в нее корректны.

В чем может заключаться проблема, и куда копать по отладке такого типа проблем?

Ошибка при сохранении нод

15 августа 2011 в 18:40

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

PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '7n7p7A5ELn1_RosSW_K05qvV-u0MHGJTVW6dD_YcgGQ' for key 'hash': INSERT INTO {redirect} (hash, type, uid, source, source_options, redirect, redirect_options, language, status_code, count, access) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7, :db_insert_placeholder_8, :db_insert_placeholder_9, :db_insert_placeholder_10); Array ( [:db_insert_placeholder_0] => 7n7p7A5ELn1_RosSW_K05qvV-u0MHGJTVW6dD_YcgGQ [:db_insert_placeholder_1] => redirect [:db_insert_placeholder_2] => 1 [:db_insert_placeholder_3] => catalog/bag/sumka-dlya-noutbuka-164-dicota-n22538p-motion-comfort [:db_insert_placeholder_4] => a:0:{} [:db_insert_placeholder_5] => node/9234 [:db_insert_placeholder_6] => a:0:{} [:db_insert_placeholder_7] => uk [:db_insert_placeholder_8] => 0 [:db_insert_placeholder_9] => 0 [:db_insert_placeholder_10] => 0 ) in drupal_write_record() (line 6861 of /includes/common.inc).

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

На сайте установлены:

Global Redirect
Pathauto
Redirect

Пропадают алиасы

16 июля 2011 в 13:21

Суть трабла. Задаю алиасы типа:

Приходим на: ?p=8
Редиректимся на: /catalog

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

Судя по периодичности "пропаж", это происходит после запуска крона.

Поиск с учетом текущей языковой локали пользователя

13 июля 2011 в 2:38

Каким образом можно реализовать следующий функционал: в результат поиска должны выводиться только ноды текущей языковой локали?

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

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

[РЕШЕНО] Глюк меню

8 июля 2011 в 5:14

Суть трабла.

Собрал набор модулей для сайта. Перенес с Денвера на сервер разработки. Создал несколько блоков, словарей таксономии и два меню.

Далее при попытке зайти в admin/structure/menu вылетает WSOD со следующим текстом:

(function ($) { Drupal.behaviors.menuChangeParentItems = { attach: function (context, settings) { $('fieldset#edit-menu input').each(function () { $(this).change(function () { // Update list of available parent menu items. Drupal.menu_update_parent_list(); }); }); } } /** * Function to set the options of the menu parent item dropdown. */ Drupal.menu_update_parent_list = function () { var values = []; $('input:checked', $('fieldset#edit-menu')).each(function () { // Get the names of all checked menus. values.push(Drupal.checkPlain($.trim($(this).val()))); }); var url = Drupal.settings.basePath + 'admin/structure/menu/parents'; $.ajax({ url: location.protocol + '//' + location.host + url, type: 'POST', data: {'menus[]' : values}, dataType: 'json', success: function (options) { // Save key of last selected element. var selected = $('fieldset#edit-menu #edit-menu-parent :selected').val(); // Remove all exisiting options from dropdown. $('fieldset#edit-menu #edit-menu-parent').children().remove(); // Add new options to dropdown. jQuery.each(options, function(index, value) { $('fieldset#edit-menu #edit-menu-parent').append( $('').val(index).text(value) ); }); } }); } })(jQuery);

После возврата на главную отдает следующий ворнинг:
 

Drupal 7 Views 3 - удаление повторов

16 июня 2011 в 15:39

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

В старом Views была опция Distinct, которая отвечала за функционал ликвидации дубликатов. В Views 3 вместо нее вроде как Use grouping. Включил режим Use grouping, для поля Content: Title выставил Group settings в формате Group results together, но дубликаты остались. В какую сторону копать?

Как временно убрать признак обязательного (required) поля формы?

9 июня 2011 в 13:15

Суть задачи.

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

Создание пользовательского формата представления стоимости товара в Drupal Commerce

2 июня 2011 в 15:56

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

Дополнительний фильтр в блоке More Like This модуля Apache Solr Integration

1 июня 2011 в 14:58

Суть трабла:

Есть контент-тайп "product", в котором есть поле типа taxonomy term relation, которое ссылается на словарь таксономии product_avaliability с терминами avaliable (tid=84), not avaliable(tid=85). Нужно в блоке "More like this" отображать только те ноды, у которых поле taxonomy term relation установлено в значении avalible

Пробовал задавать слеедующие запросы в поле additional query (в настройках блока):

field_product_avaliability:avaliable
field_product_avaliability:84
avaliable
84

D7 -> D7.2 Проблемы с Panels

31 мая 2011 в 17:49

После обновления до 7.2 отваливается сайт с ошибкой

Fatal error: Class 'ctools_export_ui' not found in ***/sites/all/modules/panels/panels_mini/plugins/export_ui/panels_mini_ui.class.php on line 3

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

Нарыл на drupal.org похожую тему:

Кто уже сталкивался, и как решал, помимо отключения mini-panels?

Drupal 7 Redirect - ошибка при программном сохранении нод

27 мая 2011 в 13:21

На сайте установлен модуль Redirect
Также на сайте есть самописный модуль обновления актуальности контента с ERP, который изменяет значения нод, и сохраняет их с помощью node_save().

До установки модуля Redirect все работало нормально, но после начались ошибки следующего типа:

PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '7ALrnuRf4WtsNyPXBenLsTxhZkHBaY1EHOoTufxIU58' for key 'hash': INSERT INTO {redirect} (hash, type, uid, source, source_options, redirect, redirect_options, language, status_code, count, access) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5, :db_insert_placeholder_6, :db_insert_placeholder_7, :db_insert_placeholder_8, :db_insert_placeholder_9, :db_insert_placeholder_10); Array ( [:db_insert_placeholder_0] => 7ALrnuRf4WtsNyPXBenLsTxhZkHBaY1EHOoTufxIU58 [:db_insert_placeholder_1] => redirect [:db_insert_placeholder_2] => 0 [:db_insert_placeholder_3] => catalog/coolingstand/podstavka-kuler-dlya-noutbuka-antec-15-notebook-cooler-designer-ventilyator-1sht-110mm-800-rpm-42mm-notebook-cooler-designer [:db_insert_placeholder_4] => a:0:{} [:db_insert_placeholder_5] => node/5379 [:db_insert_placeholder_6] => a:0:{} [:db_insert_placeholder_7] => uk [:db_insert_placeholder_8] => 0 [:db_insert_placeholder_9] => 0 [:db_insert_placeholder_10] => 0 ) в drupal_write_record() (рядок 6776 із .../includes/common.inc).

drupal_form_submit() - белый экран

23 мая 2011 в 16:50

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

Форма - стандартная форма редактирования контента, перехваченная по hook_form_alter()

Вызов функции выглядит следующим образом: drupal_form_submit($form_id, $form_state, $node);

Параметры:
$form_id - id формы;
$form_state - массив значений;
$node - объект ноды.

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