Комментарии

Сходство структуры файлов и применения шаблона MVC
( 0 Голосов )

Ниже перечислены папки и файлы из верхнего уровня структуры файлов пользовательского компонента Weblinks. Эти файлы находятся в папке components/com_weblinks. (Здесь и далее они указываются относительно именно этой папки.)

Папки и основные файлы пользовательской части компонента Weblinks

  • controllers
  • helpers
  • models
  • modesi/forms
  • views/categories/tmpl
  • views/categories/tmp
  • views/category views/category/tmpl
  • views/form
  • views/form/tmpl
  • controller.php
  • router.php
  • weblinks.php

Контроллер для экранной формы ввода данных: файл weblink. php

Вспомогательные файлы: category.php, icon.php, route.php Модели: файлы categories .php, category.php, form.php, weblink.php XML-файл для разметки формы, представленной объектом типа JForm: weblink. xml Представление пункта меню Categories: файл view. html. php Файлы компоновки пункта меню Categories; XML-файл для разметки вариантов выбора данного пункта меню

Представления пункта меню отдельной категории: файлы view. html. php и view. feed. php Файлы компоновки пункта меню отдельной категории; XML-файл для разметки вариантов выбора данного пункта меню Представление пункта меню для передачи веб-ссылки: файл view.html.php

Файлы компоновки формы для ввода данных; XML-файл для разметки вариантов выбора данного пункта меню

  • Контроллер, используемый по умолчанию для выполнения задачи отображения
  • Маршрутизатор компонента
  • Сценарий, служащий точкой входа в компонент
  • Представление
  • Контроллер
  • Вспомогательные средства/Разное Контроллер

Как видите, организационная структура папок в пользовательской части очень похожа на их организацию в административной части компонента Weblinks. Как и в административной части, здесь имеются отдельные папки для контроллеров, вспомогательных средств, моделей и представлений, но в то же время отсутствует установочная папка. В пользовательской части данного компонента требуется лишь один ряд установочных файлов, которые принято хранить в административной части. Здесь также отсутствует папка tables. Ведь класс для таблицы #weblinks достаточно определить лишь один раз, и это делается опять же в административной части.

Открыв файл weblinks.php на верхнем уровне структуры папок пользовательской части компонента Weblinks, можно обнаружить приведенный ниже исходный код, предназначенный для управления этим компонентом.

$controller = JController:rgetlnstance('Weblinks'); $controller->execute(JRequest::getCmd('task')) ; $controller->redirect();

Это, по существу, те же самые строки кода, что и в административной части данного компонента, а следовательно, реализуемый в них процесс действует таким же образом. Сначала получается контроллер, подходящий для выполнения указанной задачи, а затем выполняется сама задача. Если задача отличается от обычного отображения, то устанавливается и происходит переадресация к нужной экранной форме по соответствующему URL. А если это задача отображения, то просто отображается страница, а переадресация вообще не устанавливается.

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

  • Categories. Отображает все категории веб-ссылок в иерархическом списке.
  • Category. Отображает веб-ссылки в одной категории.
  • Form. Отображает форму предъявления веб-ссылки.

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

Два представления (Categories и Category) служат лишь для отображения информации, поэтому ими оперирует базовый контроллер из класса WeblinksController, находящегося в классе controller.php. А представление Form дает пользователю возможность вводить и редактировать отдельные веб-ссылки. Задачи, не связанные с отображением формы в этом представлении, обрабатываются контроллером из класса WeblinksControllerWeblink. Для этой формы предназначаются задачи ввода, отмены, редактирования и сохранения. Как и в административной части данного компонента, задачи ввода, отмены и редактирования обрабатываются контроллером, а для сохранения информации в базе данных в одном методе save () вызывается другой метод save () из соответствующей модели.

Структура файлов рассматриваемого здесь компонента отличается следующей примечательной особенностью: в папке models/weblink находится модель класса WeblinksModelWeblink. Но ведь класс модели формы WeblinksModelForm расширяет класс WeblinksModelWeblink из административной части, а не класс WeblinksModelWeblink из пользовательской части данного компонента. В начале определения класса WeblinksModelForm находится следующая строка кода:

require_once JPATH_COMPONENT_ADMINISTRATOR.'/models/weblink.php';

А далее следует приведенная ниже строка кода.

class WeblinksModelForm extends WeblinksModelWeblink

Для расширения класса WeblinksModelWeblink используется код из файла, относящегося к административной части, поскольку этот класс загружается из папки administrator/components/models/weblink.php. А класс WeblinksModelForm наследует метод save () из класса JModelAdmin.

Класс WeblinksModelWeblink из пользовательской части задействуется при выборе элемента веб-ссылки щелчком кнопкой мыши. Элемент веб-ссылки отличается от других элементов содержимого. Он отображает внешнюю веб-ссылку, а не ее компоновку в пределах веб-сайта. Следовательно, представление и компоновка для отдельного элемента веб-ссылки отсутствуют. Зачем же тогда нужен компонент Weblinks, если внешние URL можно отображать вообще без компонента? Дело в том, что компонент позволяет делать то, чего нельзя сделать с помощью одной лишь внешней ссылки, в том числе следующее:

  • организовать ссылки по отдельным категориям;
  • расположить ссылки по категориям;
  • ограничить уровни доступа к ссылкам;
  • подсчитывать количество посещений по ссылкам;
  • разрешить пользователям передавать ссылки;
  • публиковать ссылки и снимать их с публикации.

Ниже приведен пример URL, сформированный для элемента веб-ссылки.

<URL Be6-сайтa>/index.php/using-joomla/extensions/components/weblinkscomponent/weblinks-single-category?task=weblink.go&id=5

Обратите внимание на то, что в этом URL указаны идентификатор элемента веб-ссылок и конкретная задача weblink.go. Как пояснялось ранее, при переходе по этому URL выполняется метод до () из класса WeblinksControllerWeblink. Именно здесь и проверяется состояние "опубликовано", уровень доступа для пользователя и приращение счетчика посещений.

Для оказания помощи при выполнении подобных задач используется класс WeblinksModelWeblink из пользовательской части данного компонента. В частности, метод getltemO вызывается из модели для извлечения элемента веб-ссылки из базы данных, а метод hit () — для приращение счетчика посещений этого элемента, определяющего, сколько раз осуществлялся доступ к данному элементу. Если все эти задачи выполняются успешно, то устанавливается переадресация по внешнему URL, который отображается в цикле переадресации. Обратите внимание на то, что эта последовательность операций отличается от той, что выполнялась в административной части данного компонента. Там переадресация устанавливалась для обратной ссылки на экранную форму в компоненте Weblinks (например, на список или экранную форму редактирования веб-ссылок в компоненте Weblinks Manager).


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


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


Защитный код