Статьи о Drupal

По своей работе столкнулся со следующей необходимостью: У товара добавить поле "Скидка", и если оно заполнено, то применять скидку (зачеркивание цены) у этого товара.
Решение описано здесь http://drupal.stackexchange.com/questions/24721/discount-based-on-a-fiel...
По русски и вкратце: импортируете тот код правила, что там...

Прочитал шикарнейшую статью с хорошим примером об оптимизации сайта на Друпале http://drupalace.ru/lesson/proizvoditelnost-sayta-na-drupal-analiz-serve..., и решил пополнить сообщество опытом своего случая оптимизации.

Итак, имеем сайт на Друпале, заказчик жалуется, что несколько конкретных страниц открываются очень медленно.

Use Case 1.

Включаем в Firebug закладку "Сеть", открываем первую из нужных нам страниц:

Сразу видно, что проблема на сервере - 23 секунды...

Существует старая громадная Issue на друпал.орг о том, что Rules не умеет работать с nodereference, т.е. все правила Rules не видят объекты, на которые ссылается какое-то поле - соответственно мы не можем, например, получить tid термина таксономии, на который ссылается наше cck-поле "Ссылка на термин".
Но есть возможность это обойти - это создание "Компонент" в Rules, по сути это "правило, вложенное в правило".
Суть проста - мы создаем новый компонент, в котором в качестве входного значения указываем объект, на который ссылается наше поле (например, термин таксономии). И потом...

Чтобы в drupal commerce выводить старую цену зачеркнутой, а рядом с ней новую, если есть скидка - вам нужно использовать модуль http://drupal.org/project/commerce_extra_price_formatters а так же модуль https://drupal.org/project/commerce_price_savings_formatter
Вот тут видео как его использовать http://content-management-systems.info/drupal/...

Если по каким-то причинам вы импортировали сырые значения текстов нод в поле body прямо в базе данных, и теперь вам нужно, чтобы все теги отображались не текстом, а работали как обычные теги - надо запустить VBO с таким кодом:

$entity->body['und'][0]['format...

Из-за того, что в Друпал 7 есть такой замечательный модуль как Feeds, который умеет абсолютно всё - и загружать картинки по урл, и выставлять соответсвие терминам таксономии по их названиям - что перенос с Друпал 6 а Друпал 7 материала представляет собой, по сути, просто правильное составление запросов в базу, чтобы через phpmyadmin сгенерировать csv-файл. Потом этот csv просто импортируем через Feeds на новый сайт - и дело в шляпе.
Перенос терминов с прикрепленными к ним картинками (использовался модуль taxonomy image)

...

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

(function ($) {
  Drupal.behaviors.init_image_field = {
    attach: function(...

Для того чтобы программно создать своё CCK-поле при установке своего модуля, вам нужно использовать хук install/uninstall в файле .install.
Порядок такой: сначала создаётся поле, а только потом его экземпляр. Удаляется в обратной последовательности.
Если использовать хуки enable/disable, то экземпляры поля будут создаваться при каждом включении модуля.
Вот здесь хорошо расписаны типы всех полей и типы виджетов http://ado.io/blog/drupal-7/working-programmatically-with-fields-in-drup......

Недавно для одного проекта мне пришлось выступить в роли "натягивателя" дизайна, а именно: был готов свёрстанный в html макет, а так же был готов функционал на Друпал; осталось только объединить их вместе и сделать одну тему оформления для всего этого.

Так вот, я реально не пойму, зачем это нужно. 50% работы верстальщика html теряется безрезультатно, т.к. в друпале просто не та структура тегов, которые предусмотрел верстальщик, и проще переверстать css, чем переопределять кучу шаблонов для вывода нужных верстальщику тегов.

Горазно оптимальнее выглядит вариант выдачи задания...

Размышляя о том, каким образом наладить постоянное увеличение объема знаний о друпале, я столкнулся со следующими двумя проблеммами:

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

В результате получаем замкнутый круг - новое изучать не выгодно...

  1. Прочитать readme модуля, его страницу проекта на друпал.орг
  2. Чётко сформулировать свою проблему, записать её.
  3. Бегло посмотреть выдачу гугла по поисковым запросам, связанным с проблемой. Не отвлекаться на соседние темы, не углубляться в бесполезный трёп. На просмотр гугла - максимум 10 минут.
  4. Подумать, как бы я пофиксил проблему, если бы был разработчиком модуля. Залезть в код модуля/ядра и разобраться, как и что вызывается относительно нашей проблемы. Решить проблему как-нибудь.
  5. Решить проблему правильно.
  6. Записать краткую статью о решении в...

Оказывается, в Drupal 7 уже нельзя, как раньше, просто написать
return array('node' => $node); и он бы сохранил все изменения, сделанные нами через php-код; в Drupal 7 так делать нельзя, еще не доработали эту фишку (http://drupal.org...

При использовании Rules логично было бы предположить, что после выполнения action "Create new node" в последующих action'ах мы бы смогли использовать nid созданной ноды. Оказывается, это не так.
Видимо до конца выполнения правила нода фактически еще не создана, и nid получить принципиально невозможно, даже если специально добавить action "Сохранить entity".
Не тратьте время на поиск решения, по всей видимости его просто нет. Просто включайте php-фильтр и фигачьте ноды из него.
Ссылки по теме:
...

http://upgrade.boombatower.com/tools/sql/inline

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

Страницы