Комментарии

  • 1с онлайн
  • Проводник в мире электронных книг Структура, адреса управления
  • online1s.ru
Вспомогательный класс модуля
( 0 Голосов )

Перейдем к рассмотрению вспомогательного класса модуля. Именно здесь собирается вся информация для модуля. Ранее на сайте мы приводили исходный код метода getUsers (), выполняющего сбор этой информации во вспомогательном класса данного модуля.

Этот метод объявляется как статический. Как пояснялось ранее, это означает, что статический метод вызывается по имени его класса, а не объекта. Обращаясь к аналогии из процедурного программирования, статический метод можно сравнить с подпрограммой.

В первой строке кода этого метода создается объект $db типа JDatabase. Подобного рода объекты применяются в Joomla всякий раз, когда требуется извлечь информацию из базы данных. В следующей строке кода создается новый объект $query типа JDatabaseQuery. Следует заметить, что объект типа JDatabase используется для формирования запроса при вызове метода $db->getQuery (true). Аргумент с логическим значением true указывает объекту типа JDatabase предоставить новый, а не сделанный последним запрос, если, конечно, таковой имеется.

Более подробно запросы базы данных будут рассматриваются чуть позже в статьях нашего сайта, а до тех пор рассмотрим, каким образом запрос формируется и выполняется в данном конкретном примере. Базы данных организованы в виде последовательного ряда файлов таблиц, где в каждом поле содержится один тип данных. Эти файлы организованы по строкам и столбцам как электронные таблицы. Например, в таблице #content содержатся данные для статей, в каждой ее строке — данные для одной статьи, а каждом столбце — часть данных для всех статей (например, заглавие или категория).

Для того чтобы извлечь информацию из базы данных, воспользуемся запросом SELECT. Этот запрос возвращает данные в формате "строка-столбец". Простой запрос SELECT имеет следующий формат:

  • SELECT <список столбцов> FROM. <имя таблицы>
  • WHERE <условия отбора>
  • ORDER BY <столбцы для сортировки результатов в заданном порядке>
  • LIMIT <номер начальной строки>, <число возвращаемых строк>

При написании программы в версии Joomla 1.5 приходилось сначала составлять символьную строку, содержавшую точный текст запроса, а затем передавать запрос базе данных. В версии Joomla 1.6 появилась возможность пользоваться классом JDatabaseQuery, упрощающим формирование запросов SQL в Joomla. В этом классе учитываются также любые отличия в базах данных.

Например, в версии Joomla 2.5 поддерживаются базы данных Microsoft SQL Server и MySQL, а в ближайшей перспективе — PostgreSQL. Пользуясь классом JDatabaseQuery для формирования всех запросов, мы можем быть уверены в том, что наш код будет выполняться корректно при обращении к этим новым базам данных, поскольку в данном классе автоматически учитываются отличия в командах SQL, применяемых в каждой из них.

Методы из класса JDatabaseQuery довольно точно отражают формат команд SQL. Но, в отличие от команд SQL, где отдельные части запроса должны быть записаны в строгом порядке, в классе JDatabaseQuery можно формировать запросы базы данных в любом порядке. В приведенном ниже вызове метода $query->select () столбцы добавляются в часть SELECT формируемого запроса.

$query->select('a.id, a.name, a.username, a.registerDate');

Здесь из таблицы базы данных выбираются четыре столбца: id (идентификатор), name (имя), username (имя пользователя), а также registerDate (дата регистрации). Префикс а., предшествующий имени каждого столбца, обозначает сокращенное имя таблицы (на тот случай, если в запросе указывается несколько таблиц). Сокращенное имя таблицы определяется в методе from ().

В следующем вызове метода

query->order('а.registerDate DESC');

добавляются столбцы, которые будут использоваться в базе данных для сортировки результатов запроса. В данном случае результаты запроса сортируются по дате регистрации пользователей на веб-сайте (a.registerDate), причем в убывающем порядке, на что указывает слово DESC после имени столбца. Это слово предписывает базе данных сортировать извлекаемые из нее данные в обратном, убывающем (DESCENDING) порядке. Напомним, что среди новых пользователей веб-сайта должны быть сначала показаны те, кто активизированы последними. Даты хранятся в базе данных как числа, а следовательно, последние даты представлены большими числами, чем старые даты. Поэтому сортировка по дате регистрации осуществляется в обратном порядке для составления списка пользователей, начиная с зарегистрировавшихся позже всех и кончая зарегистрировавшимися раньше всех.

В следующем далее вызове метода

$query->from('# users AS a');

указывается таблица, используемая в запросе. В данном случае происходит обращение к таблице # users, обозначаемой в запросе как а. При установке Joomla вы можете выбрать буквы в качестве префиксов для обозначения таблиц базы данных. Эти префиксы затем указываются перед именами таблиц в базе данных. Указывая имена таблиц в запросе SQL, мы заранее не знаем, какой именно префикс будет выбран для них на отдельном веб-сайте. Именно поэтому в запросах рекомендуется всегда указывать префикс # (знак денежной единицы и два последующих знака подчеркивания). Непосредственно перед отправкой запроса в базу данных префикс # автоматически преобразуется средствами Joomla в конкретный префикс таблицы, выбранный для каждого веб-сайта на Joomla. В этой книге мы обращаемся к таблицам базы данных, используя префикс # , но префикс для конкретного веб-сайта на Joomla может быть другим. Слово AS указывает базе данных сокращенное имя а таблицы. Следовательно, для обращения к любому столбцу таблицы # users можно воспользоваться выражением

а. + <имя столбцах>

После строки кода с вызовом метода $query->from () получается объект пользователя и начинается выполнение кодового блока условного оператора if. В этом блоке реализуется возможность фильтровать текущих пользователей по их группам. Если такая возможность (под названием filter_groups) активизирована и текущий пользователь не является привилегированным, т.е. не имеет полномочия администратора (core. admin), то код в данном блоке может быть выполнен.

В этом кодовом блоке сначала получается массив групп, членами которых является текущий пользователь, для чего вызывается метод getAuthorisedGroups () из класса JUser. Если этот массив оказывается пустым, обработка завершается и просто возвращается пустой массив. В противном случае в формируемый запрос вводятся два соединения (с помощью метода left Join ()) и два оператора WHERE (с помощью метода where ()). Более подробно соединения и операторы WHERE рассматриваются в главе 11, а в данном случае соединения позволяют выяснить, каким группам принадлежит текущий пользователь, тогда как операторы WHERE — накладывают на запрос ограничение, чтобы показывать только тех пользователей, у которых хотя бы одна общая группа, кроме группы 1, которая и так является общей.

После кодового блока условного оператора i f следует приведенная ниже строка кода.

$db->setQuery($query,0,$params->get('shownumber'));

Именно здесь и передается запрос в базу данных, а также указывается номер начальной строки и максимальное число столбцов для запроса. Первым аргументом метода setQueryO в данном примере служит объект $queгу. Анализируя исходный код метода setQueryO из класса JDatabase, находящегося в файле libraries/joomla/ database/database, php, можно заметить, что первым его аргументом является символьная строка. Как упоминалось в главе 4, если в коде РНР объект используется там, где ожидается символьная строка, то вызывается специальный метод toStrin() этого объекта, преобразующий его в символьную строку. В классе JDatabaseQuery (из файла libraries/joomla/database/databasequery.php) можно обнаружить метод toString (), преобразующий объект в действительную команду SQL. А поскольку в качестве первого аргумента метода setQueryO ожидается символьная строка, то при желании можно передать ему не только объект, но и строку с точным текстом запроса. Тем не менее при формировании запросов для Joomla рекомендуется всегда пользоваться методами из класса JDatabaseQuery.

Далее следует приведенная ниже строка кода.

$result = $db->loadObjectList ();

В этой строке кода фактически выполняется сформированный запрос, а возвращаемые его результаты сохраняются в переменной $result. В частности, вызываемый метод loadObjectList () возвращает список строк и столбцов в виде массива объектов. Каждая возвращаемая строка является стандартным объектом, содержащим поле для каждого столбца, указанного в запросе. В данном примере это поля id, name, username и register date. Значения в этих полях выбираются из базы данных по заданной строке. Максимальное число строк определяется значением параметра shownumber. В зависимости от конкретной даты мы можем получить от нуля до любого числа строк, но не больше того, что ограничивается значением параметра shownumber.


Понравился материал? Пригодилась информация? Плюсани в социалки!


 
Похожие новости
Добавить комментарий


Защитный код