Комментарии

Представление и форма редактирования
( 0 Голосов )

Далее в рассматриваемом здесь процессе редактирования подписок наступает стадия, на которой выполняется метод display () из класса представления JoomproSubsViewForm, объявляемого в файле views/form/view.html.php. Ниже приведена первая часть исходного кода из этого файла.

<?php /**
@ package Joomla.Site
@ subpackage com_joomprosubs
@ copyright Copyright (C) 2013. All rights preserved.
@ license GNU General Public License version 2 or later; see LICENSE.txt
*/
// прямой доступ отсутствует
defined ('_JEXEC ) or die; jimport('j oomla.application.component.view');
/* * Класс HTML-представления для компонента JoomproSubs */

class JoomprosubsViewForm extends JView{ protected $state; protected $item; protected $category;
function display($tpl = null) { $app = JFactory:igetApplication(); $params = $app->getParams(); $user = JFactory:-.getUser () ;
// получить некоторые данные из модели
$item = $this->get('Item');
$this->form = $this->get('Form');

В этом фрагменте кода объявляются поля данного класса и начальная часть метода display (). Сначала в этом методе выполняются стандартные служебные операции, а затем из модели получаются элемент и форма. Эта модель определяется в классе JoomproSubsModelForm, расширяя модель из класса JoomproSubsModelSubscription, относящегося к административной части рассматриваемого здесь компонента. В классе модели из административной части имеется метод getForm (), наследующий методы getState () и getltem(). Когда этот метод вызывается из класса в пользовательской части, метод getForm()  загружает файл subscription.xml из папки components/com_joomprosubs/models/forms, но не из папки administrator/components. Дело в том, что для указания пути к данному компоненту используется константа JPATH_ COMPONENT, которая имеет разное значение в пользовательской и административной частях веб-сайта.

Ниже приведено содержимое XML-файла models/forms/subscription.xml для разметки формы редактирования.

<?xml version "1.0" encoding="UTF-8"?> 
<form>
<fields>
<fieldset> <field name="subscription_terms"  type="checkbox" default="0" filter="bool" label="COM_JOOMPROSUBS_FORM_TERMS_LABEL" desc="COM_JOOMPROSUBS_FORM_TERMS_DESC" required="true" value="l" />
</fieldset>
</fields>
</form>

В этом файле размечается одно поле формы, которое представляет собой флажок subscription_terms, определяющий условия подписки.

Вернемся, однако, к классу представления JoomproSubsViewForm из файла views/form/view.html.php. Ниже приведена остальная часть исходного кода из метода display ().

$authorised = $user->authorise('core.edit', 'com_joomprosubs.category.' b.   $item->catid);
if ($authorised !== true) {
JError::raiseError(403, JText::_('JERROR_ALERTNOAUTHOR'));
return false; }
$this->form->bind($item);

// проверить ошибки
if (count ($errors = $this->get('Errors'))) {
JError:rraiseWarning(500, implode("\n", $errors));
return false; }
// экранировать символьные строки для вывода в формате HTML $this->pageclass_sfx = htmlspecialchars( ^>$params->get('pageclass_sfx')); $this->params = $params; $this->user = $user; $this->item = $item;
$this->_prepareDocument () ; parent::display($tpl) ; }

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

Далее вызывается метод bind() и проверяются ошибки. Затем экранируется добавляемый суффикс класса страницы, чтобы исключить внесение любого злонамеренного кода. После этого данные сохраняются в полях params, user и item, чтобы ими можно было воспользоваться в файлах компоновки. И наконец, вызывается метод _ prepareDocument () и далее метод отображения из родительского класса для обращения к файлам компоновки.

Метод _prepareDocument () также относится к рассматриваемому здесь классу. Ниже приведен его исходный код.

protected function _prepareDocument()
{
$арр = JFactory:-.getApplication () ; $menus = $app->getMenu(); $pathway = $app->getPathway() ; $title = null;

// приложение устанавливает заглавие страницы по умолчанию, и поэтому его необходимо получить из самого пункта меню
$menu = $menus->getActive(); $head = JText::__('COM_JOOMPROSUBS_FORM_SUBMIT_SUB'); if ($menu) { $this->params->def('page_heading', ^>$this->params->get('page_title', $menu->title)); } else { $this->params->def('page_heading', $head); $title = $this->params->def('page_titlef, $head); if ($app->getCfg('sitename_pagetitles', 0)) { $title = JText::sprintf('JPAGETITLE', $app->getCfg('sitename'), ^>$title) ; } $this->document->setTitle($title) ; if ($this->params->get(,menu-meta_descriptionl)) { $this->document->setDescription($this->params->get( ^>'menu-meta_description')); } if   ($this->params->get('menu-meta_keywords')) { $this->document->setMetadata('keywords', ^$this->params->get('menu-meta_keywords')); if   ($this->params->get('robots')) { $this->document->setMetadata('robots', ^$this->params->get('robots')); } } }  
//  конец класса

В этом методе устанавливаются заголовок документа на странице, заглавие страницы, описание, а также ключевые слова и роботы. Этот метод мало чем отличается от аналогичных методов из других представлений. Но в то же время данное обстоятельство явно указывает на необходимость исключить дублирование кода, если такой же метод создан и вызывается из родительского класса.


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


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


Защитный код