Комментарии

Табличный класс
( 0 Голосов )

И наконец, рассмотрим последний файл, используемый в процессе ввода и редактирования подписок. Это файл tables/subscription.php, в котором объявляется класс JoomprosubsTableSubscription. В нем организуется специальная обработка, необходимая для сохранения строки в таблице базы данных. Ниже приведена первая часть исходного кода из этого файла.

Пример разработки административной части компонента:

defined('_JEXEC') or die;
class JoomprosubsTableSubscription extends JTable
{

/** * Конструктор класса. * @param  Jdatabase  Объект, соединяющий с базой данных.
*/
public function construct(&$db) { parent:: construct('# joompro_subscriptions', 'id', $db) ; }

В этой части исходного кода из рассматриваемого здесь файла объявляется класс, а таблице базы данных присваивается имя, передаваемое конструктору данного класса в качестве первого аргумента. Обратите внимание на использование знака амперсанда (&) перед именем аргумента. Как упоминалось ранее, это означает, что при внесении изменений в объект $db в теле конструктора данного класса измененный объект будет передан обратно вызывающей части программы.

В следующей части рассматриваемого здесь файла определяется метод store (), как показано ниже.

/**
* Перегружаемый метод сохранения данных в таблице подписок.
* @param  boolean Обозначает, следует ли обновить пустые значения.
* @return boolean Истинно при успешном завершении, а иначе — ложно.
*/

public function store($updateNulls = false) { $date = JFactory::getDate(); $user = JFactory::getUser(); if ($this->id) {
// Существующий элемент. $this->modified = $date->toSQL(); $this->modified_by = $user->get('id'); } else {
// Новая подписка. Поля created и created_by field могут быть установлены пользователем, и поэтому их нельзя трогать, если они уже установлены if (Sintval($this->created)) { $this->created = $date->toSQL(); } if (empty($this->created_by)) { $this->created_by = $user->get('id'); } }
// проверить однозначность псевдонима $table = JTable::getlnstance('subscription', 'JoomprosubsTable'); if ($table->load(array('alias*=>$this->alias,'catid'=>$this->catid)) && ($table->id != $this->id 11 $this->id==0)) { $this->setError(JText:: ('COM JOOMPROSUBS ERROR UNIQUE ALIAS')); false; }
// попытаться  сохранить  введенные пользователем данные return parent::store($updateNulls); }

Этот метод вызывается при сохранении строки в таблице базы данных. Если существующая строка редактируется, то в поле видоизмененной даты (modified) устанавливается текущая дата, а в поле видоизменений (modif iedby) — текущий пользователь. Если же создается новая строка, то в полях created и created_ by устанавливаются текущая дата и пользователь соответственно. Затем в данном методе проверяется однозначность псевдонима данной категории. Это делается с целью исключить недоразумения на тот случай, если пользователь неумышленно создаст в одной и той же категории два элемента содержимого с одинаковым псевдонимом. И если нечто подобное произойдет, то в пользовательской части веб-сайта может быть отображен лишь один элемент содержимого, поскольку оба элемента имеют одинаковый URL. Именно этому и воспрепятствует данная проверка, сообщая пользователю об ошибке.

И в конце данного метода из родительского класса вызывается метод store () для выполнения стандартной операции сохранения данных в таблице. В эту операцию входит установка поля ключа и обновление таблицы ресурсов по мере надобности.

И в последней части рассматриваемого здесь файла определяется метод check (), как показано ниже.

/**
* Перегружаемый метод проверки целостности данных.
* @return boolean Истинно при успешном завершении.
*/
public function check() {
// проверить существующее имя $db = $this->_db; $query = $db->getQuery(true); $query->select('id'); $query->from($db->quoteName('#joomprosubscriptions')); $query->where('title = ' . $db->quote($this->title) . ' AND catid = ' . (int) $this->catid); $db->setQuery($query) ; $xid = intval($db->loadResult()); if ($xid && $xid != intval($this->id)) { $this->setError(JText::_('COM_JOOMPROSUBS_ERR_TABLES_NAME')); return false; } if (empty($this->alias)) { $this->alias = $this->title; } $this->alias = JApplication:rstringURLSafe($this->alias); if (trim(str_replace('- ','',$this- >alias)) == '') { $this->alias = JFactory::getDate()->format("Y-m-d-H-i-s"); }
// проверить, не является ли конечная дата публикации более ранней, чем начальная дата публикации if (intval($this->publish_down) > 0 && $this->publish_down < $this publish_up) {
// поменять даты $temp = $this->publish_up; $this->publish_up = $this->publish_down; $this->publish_down = $temp; } return true,

И в этом методе проверяется однозначность имени подписки для данной категории, чтобы исключить дублирование значений псевдонимов. Кроме того, проверяется, не является ли конечная дата публикации подписки более ранней, чем начальная дата. Таким образом, мы определили все файлы, требующиеся для ввода и редактирования подписок в административной части рассматриваемого здесь компонента.


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


Теги:
 
Похожие новости