Комментарии

Представление категории в CMS Joomla
( 0 Голосов )

Рассмотрим далее класс представления JoomproSubsViewCategory. Этот класс объявляется в файле category/view.html.php. Ниже приведена первая часть исходного кода из этого файла.

defined('_JEXEC') or die;
jimport('joomla.application.component.view');

/** * Класс HTML-представления для компонента JoomproSubs */
class JoomproSubsViewCategory extends.JView { protected $state; protected $iterns; protected $category; protected $children; protected $pagination; function display($tpl = null) $app = JFactory::getApplication(); $params = $app- >getParams();
// получить данные из моделей $state - $this->get('State'); $items = $this->get('Items'); $category = $this->get('Category'); $pagination = $this->get('Pagination');
// проверить ошибки if (count($errors = $this->get('Errors'))) { JError::raiseError(500, implode("\n", $errors)) return false; if ($category == false) { return JError::raiseWarning(404, JText::_('JGLOBAL_CATEGORY_NOT_FOUND')); }

Этот код аналогичен коду представления категории из компонента Weblinks. В нем определяется ряд полей для использования в классе JoomproSubsViewCategory и его методе display (). Напомним, что этот метод вызывается из метода display () в классе контроллера. Сначала в этом методе из модели получаются состояние, список элементов, категория и разбиение на страницы, а затем проверяются ошибки.

Ниже приведена следующая часть исходного кода метода display ().

// проверить,   является ли уровень  доступа подходящим для  категории
$user = JFactory::getUser();
$groups  =  $user->getAuthorisedViewLevels();
(!in_array($category->access, $groups)) {
JError::raiseError(403, JText:: ('JERROR ALERTNOAUTHOR'))

// подготовить  данные // заготовить  элементы подписок для формирования URL ($i =0,  $n = count($items); $i < $n;   $i++) { $item =  &$items[$i]; $item->slug = $item->alias ? ($item->id.':'.$item->alias) : $item->id; }
// установить  параметры категории $cparams = $category->getParams(); $category->params = clone($params); $category->params->merge($cparams); $this->state = $state; $this->items = $items; $this->category =  $category; $this->params = $params; $this->pagination =  $pagination;
//  экранировать символьные строки для вывода в  формате HTML $this->pageclass_sfx = htmlspecialchars($params->get('pageclass_sfx') );

Сначала в приведенном выше фрагменте кода проверяется, разрешено ли пользователю просматривать данную категорию. Для получения массива уровней доступа к категориям вызывается метод AuthorisedViewLevels () из класса JUser, а затем в этом массиве проверяется наличие уровня доступа к данной категории для ее просмотра. Если такой уровень отсутствует, выводится сообщение с кодом ошибки 403.

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

Рассмотрим подробнее назначение метода merge () из класса JRegistry. Ведь этот метод очень важен для понимания того, каким образом иерархические параметры реализуются в Joomla. В данном примере этой цели служит следующий код:

$cpararas = $category->getParams();
$category->params = clone($params);
$category->params->merge($cparams);

В первой строке этого кода параметры, устанавливаемые на уровне категории, помещаются в переменной $cparams. Во второй строке кода вызывается функция clone () языка РНР для создания новой копии параметров на текущем уровне компонента, а затем эта копия сохраняется в поле params объекта типа JCategory. 


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


 
Похожие новости
Комментарии   
rogabob
0 #1 rogabob 03.06.2014 13:52
+за статью
Есть вопрос.
Есть материал который доступный только для зарегестри. и "новой группе" пользователей.
Если пользователь не аториз. и хочет прочитать материал с доступом "Для зарегистрирован ных" ему выдаст ошибку "Для просмотра этой информации необходимо пройти авторизацию".
Но есть дополнительный уровень доступа. при нем пользователь не видит материал но и сообщений никаких нету, просто белая страница со всеми разрешенными компонентами и меню.
Как грамотно сделать вывод сообщения? или где надо почитать? нужно делать новые JERROR_ ?? направте хоть куда ни-будь!
Цитировать
Добавить комментарий


Защитный код