database

УрокИнструментарий web-разработчика. Организация работы с сайтами.

Сегодня я немного отойду от темы Друпала и расскажу про то, чем я пользуюсь при разработке сайтов; про утилиты и приёмы, которые ускоряют и облегчают работу над сайтами. Итак, по порядку.

Локальный веб сервер

Безусловно, вести разработку локально гораздо удобнее, чем удалённо. А для этого необходимо иметь на компьютере развёрнутый веб сервер. Администратор из меня не ахти какой выдающийся, поэтому я предпочитаю использовать сборки. Которых, кстати, более чем хватает для всех моих нужд. Самая первая сборка, с которой я познакомился, это Denwer. Она довольна проста в установке и имеет ряд преимуществ:

УрокПрограммное изменение запроса к базе данных во Views

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

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

УрокБезопасный SQL запрос к базе данных в секции IN при работе с динамическими данными

В Друпал 6 значения, подставляемые в sql запрос могут заменяться %f, %d, %s. Однако что делать, если надо передать в запрос массив данных, который использует секцию IN? Пример:

$result = db_query('SELECT title FROM {node} WHERE nid IN (1, 10, 25)');

Если значения nid заранее известны то проблем не возникает - просто пользуемся вариантом выше и получаем профит. Однако, если количество передаваемых значений не известно, то могут возникнуть трудности. Конечно, можно было бы сделать так:

УрокCоздание и обновление записей в базе данных через Drupal API

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

Вставка записи:

db_query('INSERT INTO {mytable} (value1, value2) VALUES  (%d, "%s")', $int, $string);

Обновление записи:

db_query('UPDATE {mytable} SET value2 = "%s" WHERE value1 = %d', $new_string, $int);

Однако хорошим тоном является использование функции из Drupal API drupal_write_record.

УрокБазовая информация о кэше и о работе с ним в Друпале

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