2011 16 ноября

Использование SQL запросов для формирования выпадающих списков в XML

Использование SQL запросов для формирования выпадающих списков в XML

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

Данная статья актуальна для версий движка 1.61.7
Для !J1.5 стоит ознакомиться с статьями http://docs.joomla.org/Sql_parameter_type и http://docs.joomla.org/Parameter (в этой версии движка использовались параметры и немного другой синтаксис)
Общий список типов полей для форм можно найти здесь http://docs.joomla.org/Standard_form_field_types (англ)


Перечень параметров формирования выпадающего списка в XML

  • type (обязательно) обязательно должно быть sql.
  • name (обязательно) уникальное имя поля. Должно совпадать с именем столбца из результатов выборки в запросе, либо же возможно использование другого имени, указанного в value_field.
  • label (обязательно) (возможно использование значений из языкового файла) описание данного поля.
  • query (обязательно) SQL запрос, который формирует данные для выпадающего списка. Запрос должен обязательно возвращать два значения. Первое, value (можно переопределить в key_field) содержит значения для поля value элемента формы. Второе может быть названо как угодно (название можно переопределить атрибутом value_field) содержит отображаемый текст элементов списка.
  • default (опционально) значение по умолчанию. Соответствует полю 'value', либо переопределенному атрибуту key_field.
  • description (опционально) (возможно использование значений из языкового файла) текст отображаемый в всплывающей подсказке при наведении на выпадающий список.
  • key_field (опционально) если не задан – используется имя столбца из запроса, определенное как value. Либо же можно определить свой алиас столбца запроса для value и назначить его этому атрибуту.
  • value_field (опционально) имя столбца, которое формирует отображаемые значения выпадающего списка. Если не задан – будет использоваться столбец с тем же именем, что и name

Несколько примеров использования в XML:

1
<field name="title" type="sql" default="10" label="Select an article" query="SELECT id AS value, title FROM #__content" />

Обратите внимание, что в данном примере нам необходимо использовать конструкцию AS, чтобы определить значение поля value, поскольку таблица jos_content в качестве первичного ключа содержит столбец ID, но не VALUE. Большинство же таблиц, испольлзуемых Joomla имеют столбец первичного ключа с названием VALUE. Кроме того всегда можно использовать атрибут key_field для определения столбца

1
<field name="title" type="sql" default="10" label="Select an article" query="SELECT id, title FROM #__content" key_field="id" />

Данный пример вернет идентичный, по сравнению с предыдущим, результат.

Далее мы хотим дать нашему полю имя не title, а MyField. Для этого нам нужно использовать алиас AS в SQL запросе

1
<field name="myfield" type="sql" default="10" label="Select an article" query="SELECT id AS value, title AS myfield FROM #__content" />

Либо альтернативный вариант с переопределением атрибута value_field.

1
<field name="myfield" type="sql" default="10" label="Select an article" query="SELECT id, title FROM #__content" key_field="id" value_field="title" />

Также можно использовать стандартные конструкции t-sql. К примеру мы хотим в выпадающем списке видеть дату создания рядом с названием статьи

1
<field name="title" type="sql" default="10" label="Select an article" query="SELECT id, ( title, ' - ', created) AS title FROM #__content" />

Примечание: все выражения SQL будут работать только на той базе данных, что использует данная инсталляция движка (обычно это MySQL). Нет никакой возможности писать запросы к другим базам (пусть и в пределах одного сервера)

Примечание: Префикс таблиц в данных конструкциях указывается в виде #_, при выполнении он будет автоматически заменен на префикс таблиц базы данных, используемых движком

Комментарии

Недостаточно прав для комментирования