Модель диспетчера в CMS Joomla 2.5 |
В методе defined('_JEXEC') or die; jimport('joomla.application.component.modellist'); Как и в компоненте Weblinks, класс этой модели расширяет класс JModelList. В его конструкторе сначала создается массив достоверных полей фильтрации, а затем вызывается конструктор родительского класса. Напомним, что массив 'filter_ fields' позволяет организовать защиту от умышленного внесения запросов SQL, отфильтровывая недостоверные имена столбцов в части запроса, определяющей упорядочение данных, извлекаемых из таблицы базы данных, с помощью оператора ORDER BY. Если злоумышленник попытается внедрить какой-нибудь код SQL в заполняемую форму или формируемый URL, этот злонамеренный код будет отсеян, поскольку он не совпадает с действительными значениями в данном массиве. Далее в рассматриваемой здесь модели диспетчера определяется метод populate-State (). Ниже приведен исходный код этого метода. /** * Метод для автоматического заполнения состояния модели. * Примечание: вызов метода getStateO в этом методе приведет к рекурсии. */ Напомним, что в рассматриваемом здесь диспетчере имеются фильтры для поля поиска, состояния "опубликовано", категории и уровня доступа. В данном методе различные переменные состояния извлекаются из запроса и сохраняются в поле состояния модели. Кроме того, сохраняются параметры компонента. Затем из родительского класса вызывается метод Далее в рассматриваемой здесь модели диспетчера определяется метод getStoreld (). Ниже приведен исходный код этого метода. /* * Метод для получения идентификатора сохранения, исходя из состояния конфигурации модели. * Это необходимо потому, что данная модель используется в компоненте и различных модулях, где могут потребоваться разные наборы данных или предъявлены разные требования к упорядочению. * @param string $id Префикс идентификатора сохранения. * @return string Идентификатор сохранения. */ protected function getStoreld($id = '') { Напомним, что этот метод служит для создания однозначного ключа, предназначенного для кешируемого варианта списка элементов содержимого, объекта запроса, общего подсчета или разбиения на страницы. В данном случае однозначность списка элементов содержимого определяется из сочетания четырех доступных для использования фильтров и начала, ограничения, упорядочения и направления для упорядочения, причем четыре последних критерия вводятся в родительском методе get Store ID (), а полученный результат преобразуется в хеш-значение с помощью функции md5 () и затем сохраняется. Если далее отображается точно такой же экран, как и сохраненный в оперативной памяти, то, используя его сохраненную копию, можно сэкономить немного времени на обработку. Ведь большая часть этой обработки выполняется в классе JModelList, а следовательно, остается лишь добавить в код метод И последним в рассматриваемой здесь модели диспетчера определяется метод getListQuery (). Ниже приведен исходный код этого метода. /** * Формирует запрос SQL на загрузку данных списком. * @return JDatabaseQuery */ protected function getListQuery() { В данном методе формируется запрос на выборку строк из таблицы базы данных. С этой целью создается новый объект типа JDatabaseQuery при вызове метода Далее в рассматриваемом здесь методе выбираются все столбцы из таблицы (в данном случае — #joompro_subscriptions) с помощью синтаксической конструкции ' а. * ' языка SQL. После этого осуществляется соединение с таблицей # users, чтобы получить имя пользователя, снявшего подписку с регистрации для редактирования (т.е. заблокировавшего ее от правки другими пользователями). Соединяя таблицы #usergroups и #categories, можно отобразить названия группы пользователей и категории для подписок. Особое внимание следует обратить на использование префикса # в запросах. Ведь заранее неизвестно, префикс какой именно таблицы будет использоваться на веб-сайте. Поэтому нужный префикс подставляется в Joomla перед тем, как отправлять запрос в базу данных. Следует также заметить, что имена таблиц указываются в качестве аргумента при вызове метода $db->quoteName (). Это дает возможность использовать разные символы кавычек для экранирования имен таблиц и столбцов при обращении к разнотипным базам данных. Например, в базе данных MySQL для этой цели используются обратные кавычки ("). Более подробно этот вопрос рассматривался ранее на нашем сайте. Все соединения являются левыми (LEFT), а это означает, что строка из главной таблицы, #joompro_subscriptions, будет отображаться даже в том случае, если не найде Далее проверяются уровень доступа, состояние "опубликовано", категория и фильтры поиска. Если все эти критерии поиска заданы, то в запрос базы данных вводится оператор WHERE с целью наложить определенные ограничения на результаты запроса. Следует заметить, что для поиска по идентификационному номеру имеется специальный код, в котором проверяется, совпадают ли три первых символа, введенных в поле поиска, с символьной строкой "id: ". Если они совпадают, то осуществляется поиск на совпадение с целочисленным идентификатором. В противном случае предполагается, что введенный текст частично совпадает с искомым названием. И наконец, в запрос вводится упорядочение получаемых в итоге данных в соответствии со значениями, определяющими само упорядочение и его направление в переменных состояния.
Понравился материал? Пригодилась информация? Плюсани в социалки!
|
Похожие новости | |
|