Модель для формы в Joomla 2.5 |
Как пояснялось при обсуждении шаблона проектирования MVC, модель, как правило, отвечает за взаимодействие с базой данных. В данном случае из модели вызывается метод Класс модели JoomproSubsModelForm объявляется в файле models/form.php. Ниже приведена первая часть исходного кода этого класса модели. <?php Как видите, этот класс расширяет класс модели из административной части, что позволяет вызывать методы, необходимые для получения элементов подписки. Обратите также внимание на применение метода JLoader: : register (), которому отдается предпочтение над командой require_once. В данном классе модели определяется единственный открытый метод update-SubscriptionMapping {). Ниже приведен исходный код этого метода. /** * Метод для ввода или обновления таблицы соответствий подписок. * Если строка уже имеется в таблице, обновляет начальную и конечную * даты подписки, в противном случае добавляет в таблицу новую строку. * @param Jobject $subscription Объект подписки. * @param JUser $user Объект пользователя. * @return boolean Истинно, если операция завершается * успешно, а иначе — ложно. Сначала в данном методе проверяется наличие действительных ненулевых целочисленных идентификаторов пользователя и подписки, а также срок ее действия, и затем рассчитывается конечная дата подписки с помощью метода getDate () из класса JFactory. Этот метод принимает в качестве своего аргумента промежуток времени относительно текущего момента времени, например "+ 10 minutes" (10 минут) или "+ 30 days" (30 дней). В данном случае в качестве аргумента ему передается промежуток времени " + хх days", где хх — срок действия подписки в днях. Далее вызывается метод Ниже приведен исходный код метода getMapRow (). protected function getMapRow($subID, $userID) { $db = $this->getDbo(); $query = $db->getQuery(true); $query->select('subscription_id, user_id, start_date, end_date'); $query->from($db- >nameQuote('#joompro_sub_mapping')); $query->where('subscription_id = ' . (int) $subID); $query->where('user_id = ' . (int) $userID); $db->setQuery($query); $data = $db->loadObject(); if ($db->getErrorNum()) { $this->setError(JText::_('COM_JOOMPROSUBS_GET_MAP_ROW_FAIL')); return false; } else { return $data; В этом методе выбирается запрос на получение строки из таблицы по идентификаторам подписки и пользователя, а в итоге возвращается стандартный объект. Напомним, что в таблице соответствий эти значения служат в качестве первичного ключа. Это означает, что для каждой комбинации идентификаторов подписки и пользователя в таблице имеется лишь одна строка. Ниже приведен исходный код метода updateMapRow (). protected function updateMapRow($subID, $userID, $startDate, $endDate) { $db = $this->getDbo(); $query = $db->getQuery(true); $query->update($db->nameQuote('#joompro_sub_mapping')); $query->set('start_date = ' . $db->quote($startDate)); $query->set('end_date = ' . $db->quote($endDate)); В данном методе формируется запрос на обновление начальной и конечной дат в строке таблицы. И в этом случае указываются столбцы с идентификаторами подписки и пользователя, чтобы получить доступ к нужной строке таблицы. Далее следует метод protected function addMapRow <$subID, $userID, $startDate, $endDate) { $db = $this->getDbo(); В этом методе сначала формируется запрос на ввод строки в таблицу и задаются столбцы для идентификаторов подписки и пользователя, а также начальной и конечной дат. Затем составляется сообщение об ошибке, если обработка запроса завершится неудачно. Обратите внимание на то, что для обращения с датами используется метод quote () из класса JDatabase. В данном примере даты указываются в формате "гг-мм-дд<пробел>чч:мм:сс" (например, "2012-08-10 22:40:45"). Их приходится заключать в кавычки, поскольку они содержат символ пробела. И пocлeдним в paccмaтpивaeмoм здecь клacce мoдeли являeтcя мeтoд protected function populateState () { $app = JFactory::getApplication(); В этом методе устанавливаются переменные для идентификаторов подписки и формы, страницы возврата, параметров и компоновки. Следует иметь в виду, что объект параметров в настоящий момент не используется. Но к нему можно будет обратиться в дальнейшем, если потребуется ввести параметры.
Понравился материал? Пригодилась информация? Плюсани в социалки!
|
Похожие новости | |