CSoft: Блог

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

Множество полей = Большое число таблиц БД = Долгая загрузка нод

13 марта 2014 в 5:27

Всем привет!

Имеется магазин на Drupal Commerce. Проблема в том, что у товаров очень много разных особенностей + всякие разные примочки для пометки товаров в акции и так далее. Таким образом, в сумме node product + commerce product у меня имеют 40 дополнительных полей.

Благодаря этому, у нас в БД появилось множество таблиц для каждого поля. И когда я красиво вывожу это всё используя Search API Views, то через Devel вижу примерно 2 тысячи обращений к БД только из функции field_sql_storage_field_storage_load - это она тянет из каждого поля данные, пока они не упадут в кэш. Вот смотрю страничку с товарами в 40 штук - 3.5 тысячи запросов к БД. После обновления страницы - 372 и быстрое отображение.

Commerce Bundle: наконец-то! Наборы товаров в Drupal Commerce

29 января 2014 в 0:35

Ура, товарищи! Наконец-то появился нормальный полноценный модуль от Commerce Guys для создания наборов товаров в Drupal Commerce!!!

Встречайте: commerce_bundle. Пока в статусе dev, но оно уже есть и вполне так себе работает! Правда, есть кое-какие ошибки и я на своём ломаном английском их оформил в issue Smile

Подсветка результатов поиска во Views + Search API Solr

19 сентября 2013 в 1:01

Всем привет!

Делаю во Views страницу поиска по индексу в search_api, используя для работы search_api_solr. Всё ок, но одна вещь не получается в нормальном виде - подсветка результатов.

Что у нас имеется?

Есть стандартный процессор Highlighting в search_api, который может подсветить ключевые слова в результате. Он делает всё отлично, но ищет в тексте тупо буква в букву слово, как оно в запросе. Хотя, Solr мне, благодаря разбивке слов на фрагменты, находит результат с другим окончанием. search_api такое слово не видит при выводе и не хайлайтит его Sad

Но Бог с ним, когда мы используем search_api_solr в работе. Solr ведь сам умеет подсвечивать результат. В настройках поискового сервера есть волшебные галочки:

Retrieve result data from Solr + Highlight retrieved data

Varnish + nginx + Apache

5 сентября 2013 в 5:41

Приветствую!

Решил поиграться у себя на виртуальной машине с Debian различными инструментами для оптимизации быстродействия работы сайтов. Использую связку Varnish + nginx + Apache. За основу взял статьи:

http://drupal-admin.ru/blog/оптимизация-drupal-настройка-nginx-front-end-к-apache
http://drupal-admin.ru/blog/кэширование-анонимных-запросов-в-drupal-7-установка-и-настройка-varnish

Всё понятно кроме одного момента, который хочу уточнить. В первой статье у nginx вот такой файлик с настройками хоста:

server {
   listen 80;
   server_name drupal-admin.ru www.drupal-admin.ru;
   root /home/webmaster/domains/drupal-admin.ru/html;
   index index.html index.htm;

   access_log /home/webmaster/domains/drupal-admin.ru/logs/nginx_access.log;

Commerce: динамическая цена и Views

30 марта 2013 в 18:13

Всем привет!

Возникла интересная задача для магазина на Drupal Commerce. Для разных типов товаров есть свои правила ценообразования. Например, у данного производителя цена в $, переводим её в рубли, ещё, к примеру, прибавим 100 рублей. Получилась новая цена, ок. На странице товара она видна, всё хорошо.

Теперь делаем каталог на views - тут тоже вроде ок: цену товара выбираем в рассчитанном виде. А теперь самое интересное: фильтры! Ясен-красен, что при выводе цена обрабатывается на ходу и отображается, то есть - в базе не сохраняется, как кэш. Фильтровать не выйдет - только по исходной цене. Но для этого у нас есть такая штука:

/admin/commerce/config/product-pricing/pre-calculation

Связь терминов таксономии с нодами в единой таблице

5 марта 2013 в 17:24

Всем привет!

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

Никто случайно готовых модулей такого рода не встречал? Сделать самому не проблема, только времени маловато. Сходу готовых не нашёл.

Commerce: представление связанных товаров в виде атрибутов

10 декабря 2012 в 19:32

Всем привет!

Осваиваю Commerce после Ubercart дальше Smile

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

По умолчанию при просмотре товара-дисплея мы видим список прикреплённых товаров, и если в нём что-то выбрать, то динамически через AJAX идёт подгрузка. Немного не то... Было бы отлично, чтобы вместо селекта был набор чекбоксов и с возможностью выбора нужных товаров и одна кнопка добавления в корзину.

inline_entity_form + image + AJAX = Notice: Undefined index: #title в функции file_managed_file_validate()

18 ноября 2012 в 20:36

Всем привет!

Выпала возможность наконец опробовать commerce Smile И при разработке случилась следующая ситуация.

Для создания товара commerce_product я использую inline_entity_form-виджет для поля вариантов товара в ноде. У commerce_product есть поле изображения. У типа материала ноды есть поле с анлим-списком, который добавляет новые поля, соответственно, с помощью AJAX. Когда это происходит, то выскакивает ошибка, если картинка не выбрана:

Notice: Undefined index: #title в функции file_managed_file_validate() (строка 567 в файле ...\modules\file\file.module).

[Решено] Commerce и AJAX добавление в корзину

11 мая 2012 в 16:56

Всем привет!

Решил перейти из Ubercart в Commerce и уже расстроился, что пока что нет(?) модуля для добавления товара в корзину без перегрузки страницы Sad Так ли это и есть ли новости, может кто из коммерц-парней занимается уже этим?

Спасибо!

[Решено] AHAH: в $_POST не попадает элемент-инициатор запроса

23 ноября 2011 в 16:15

Всем привет!

Вешаю на select ahah-обработчик, но когда просматриваю в этой функции массив $_POST - там есть совершенно все элементы формы, кроме селекта Sad А мне как раз на ЕГО основе нужно немного с формой поиграться и обновить её.

Как же мне достать значение селекта, почему так происходит?

[Решено] Неполная индексация, модуль sphinxsearch

10 ноября 2011 в 15:34

Очень странно ведёт себя сфинкс Sad Сижу на хостинге it-patrol, там sphinx установлен.

Ставлю модуль sphinxsearch, всё индексируется, всё в порядке. Нод у меня чуть больше 4к. При попытке поиска обнаруживаю, что очень много нод просто не находится Sad

Элементарный пример. Есть 28 нод, у которых в заголовке присутствует слово Margoroli. Из них он находит и показывает мне только 10 Sad Не понимаю, что за логика такая? Все 28 нод идентичны, с какой стати такой отбор происходит?

Смотрю у модуля вкладку Check connection. Там по индексации такая информация:

Total results found: 1609
Total results available: 1000
Last indexed node: 5301 (2011-11-09 12:58:14)

Да, последняя нода у меня имеет nid = 5301. А что значат первые 2 строки?

Поделитесь опытом, пожалуйста, почему поиск так плохо проиндексировал сайт? Sad

UPD: дело в конфигах сфинкса на хостинге. Нужно их перенастраивать более правильно...

[Решено] Учитывание uc price handler в фильтрах views

4 ноября 2011 в 16:40

Всем привет!

Возникла одна интересная задача.

Я во views создал exposed filter, который позволяет отфильтровать Ubercart-товары по цене. Например, если цена больше, чем какое-то значение. Views, само-собой, это значение цены берёт из базы, каким оно забивается изначально. Но есть один нюанс - все цены проходят через созданный мною в hook_uc_price_handler обработчик и умножаются вообще на курс доллара... В итоге, покупателю выводится после фильтрации чёрти-что и сбоку бантик.

Разбивка content_multigroup на страницы

1 ноября 2011 в 21:02

Есть cck мультигруппа (content_multigroup), включающая в себя 9 полей. Вышло так, что данных групп может быть довольно много. Например, у меня есть ноды, в которых их более 150 штук Sad Сами понимаете, какой ценой достаётся добавление новых групп в такие материалы - форма полностью перегружается, а потом пока браузер отрисует всё это - можно успеть кофе попить.

Поиск по вхождению

28 октября 2011 в 16:04

Привет, друзья!

Стандартный поиск друпала ищет только по полному совпадению слов. Если я напишу несколько символов из слова, то он его не выдаст в результате. Имеются ли модули, которые этот момент исправляют, или может какой другой модуль есть? Может, сфинкс поставить, умеет ли он такое?

[Решено] Индексация простого текста в шаблонах

25 октября 2011 в 22:11

Добрый вечер!

Я смотрю, что стандартный модуль поиска индексирует содержимое конкретно по полю содержимого, CCK и так далее. Я вот создал свой шаблон для некоторого типа ноды и там есть очень важные для поиска по сайту ключевые слова перед выводом содержимого. Но после полной индексации сайта поиск по ним не даёт результата, значит, они туда с шаблона не попадают Sad

Какие есть варианты, чтобы они там оказались?

Shadowbox formatter

30 сентября 2011 в 14:49

Добрый день, сообщество!

Есть вопрос. Не могу пока что понять, для чего у модуля shadowbox есть форматтеры shadowbox, shadowbox_gallery, shadowbox_gallery_field, shadowbox_gallery_nid? В чём их разница и зачем в той или иной ситуации применять какой-либо из них?

По коду пока понял, что выбор каждого из них влияет на переменную $gallery_id, которая участвует в составлении классов при составлении html-кода элементов. Это всё? И что нам это даёт?

Связка полей во Views

12 сентября 2011 в 18:21

Всем привет!

Не могу никак придумать красивое решение для следующей задачи.

Я вьюсу отдаю nid некоторой ноды, у которой есть набор CCK-полей. На выходе мне нужно получить другие ноды, у которых этот же набор полей по значению совпадёт с полями переданной ноды.

Как красивее это сделать? Не хочется извращаться, но интересно, может модуль какой есть для подобных целей? Испробовал сейчас некоторые - пока не нашёл ничего подходящего Sad

Сортировка элементов меню Book по дате добавления

3 августа 2011 в 21:42

Довольно часто встаёт вопрос - как отсортировать ссылки меню модуля Book не по весу и названию, как идёт стандартно, а по дате добавления материала?

Главная проблема заключается в том, что эти ссылки являются самыми обычными пунктами меню, почему у нас есть только один значимый критерий сортировки - вес.

На основе этой информации можно использовать вот какие хитрости.

Создаём свой модуль, в него добавляем вот такой простенький код:

function MODULE-NAME_nodeapi(&$node, $op, $teaser, $page) {
  switch ($op) {
    case 'insert':
    case 'update':
      if (!empty($node->book['bid'])) {
        // Добавляем в вес пункта дату создания ноды, чтобы отсортировать меню по возрастанию
        $node->book['weight'] = $node->created;
        menu_link_save($node->book);
      }
      break;
  }
}

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

Имейте ввиду, что если у вас уже есть добавленные ноды, то придётся массово как-то обновлять в базе для них пункты меню (их веса). Если нод немного, достаточно их поочерёдно пересохранить - новый вес запишется. А для новых нод наше правило уже будет действовать.

Касперский блокирует модуль ad

3 августа 2011 в 16:11

Привет, друзья!

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

Всё супер, да вот только Касперский (уверен, и другие баннерорезки), увидев в адресе "ad", убивает мою рекламу, которая является не чистой даже, а ссылками на сайты партнёров компании. От того и обидно, что я не монету зарабатываю ведь.

Что нарыл пока сам. Реклама генерируется по ссылке:

sites/all/modules/ad/serve.php?m=jquery&q=1&t=1&u=node&l=node

Можно поменять имя папки модуля на, например, advertisement. Касперскому этого хватило, не знаю, как другим программам.

Затем остаётся уже по клику адрес ad/redirect/... поменять тем же образом. Тут что остаётся - с помощью hook_menu создать свой путь и обрабатывать редирект соответствующей функцией модуля + через hook_nodeapi в таблице {ads} менять адрес на свой.

В общем, костыли. Может, есть другие решения, да получше? Я, в принципе, могу всё это сделать, но уже даже папку переименовывать - как-то неправильно Sad

Буду рад любым советам!

Ссылка по теме: Advertisement » Issues » ad module blocked by ad blockers

menu_rebuild выполняется не полностью

4 июля 2011 в 3:02

Привет, друзья!

Возникла проблема. Есть магазин на Ubercart. До недавнего времени всё работало идеально, пока не был создан очередной, примерно 40-ой класс товара. Во время этой процедуры страница начинает грузиться и в итоге выбивается, браузер пишет, что невозможно отобразить страницу. Дальше уже обновляешь её и всё нормально, класс создан.

Долго искал причину, с трудом обнаружил, пока в коде при создании класса не убрал вызов функции menu_rebuild. Потом начал копать глубже, уже внутри неё, и в _menu_navigation_links_rebuild в цикле foreach обнаружил, что из примерно 2500 пунктов меню, скрипт успевает обработать лишь около 1800. Если закомментировать menu_link_save, то всё нормально. Пробовал вызывать menu_rebuild отдельно - тоже самое, полностью обработать всё он не успевает, но страница при этом догружается до конца, не вылетает.

Копировал сайт целиком к себе на компьютер, запускал локально - проблем нет.

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

Хотелось бы разобраться с опытными людьми в этом вопросе. Спасибо!

Фильтрация во Views по значению выбранного поля

23 марта 2011 в 3:17

Всем привет Smile

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

Итак, вкратце.

Есть тип материала Организации, у которого есть группы CCK-полей для заполнения адреса (из них сейчас меня интересует поле Город, которое принимает числовое значение - tid термина таксономии).

Есть тип материала Вакансии, который имеет Node Reference поле, указывающее на ноду организации, от которой на сайт поступит вакансия.

Так как у организации может быть несколько адресов, я добавил для вакансий список, из которого можно выбрать нужный адрес. Его значение из списка будет равняться delta выбранной CCK-группы адресов.

Что нужно в итоге.

Вывожу вакансии. Нужна фильтрация по городу. Например, пользователь из Москвы, id его города берём из кук = tid термина таксономии, совпадает с значением поля-города из типа материала Организация (добавляем взаимосвязь для нашего Node Reference поля, через аргумент и php подставляю id города). Отфильтровали.

Адреса могут быть из одинаковых городов, поэтому мне нужно взять значение поля Адреса организации Вакансии и подставить его как-то в качестве фильтрующего значения delta для CCK-поля города. Это нужно для того, чтобы при добавлении вакансии и выборе Питера среди адресов, вакансия не выводилась на сайте, ведь в организации, добавившей её, есть и Московский адрес. Поэтому мне нужна эта дополнительная фильтрация по delta-значению.

Картинки для опций атрибутов Ubercart

6 сентября 2010 в 2:40

Доброго времени суток!

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

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

По теме мне знакомы 2 модуля:

1. uc_option_image - не подходит совершенно. Задумка моя тут не реализуема.

2. uc_radio_images - работает только для радиокнопок. Да и для них не получилось настроить... Но по описанию это именно то, что нужно мне. Но хотелось бы ещё для флажков...

Массовое обновление атрибутов Ubercart

17 августа 2010 в 4:55

Привет, друзья!

Добрался до атрибутов товаров в Ubercart.

Вот я создаю некоторый класс товара, для него атрибуты и опции.

Добавляю товар с данным классом, атрибуты вписались сами, как и положено.

Добавил товаров эдак тысячу.

Настал момент изменить цену некоторой опции этого атрибута. И что, я как дурак должен руками править каждый добавленный товар теперь? Sad Сначала подумал, что достаточно будет в классе товара обновить опции атрибута, но это не помогает.

Комплектация товаров в Ubercart

12 августа 2010 в 4:46

Привет, друзья!

Мне необходимо в товарах добавить такую фишку, как комплектация товаров.

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

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

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

Но... Я торопиться не буду, а покажу вам ссылку обоих вещей, о которых говорил выше:

http://www.axor.su/item/3187/

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