Блог пользователя - 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