Сходство структуры файлов и применения шаблона MVC |
Ниже перечислены папки и файлы из верхнего уровня структуры файлов пользовательского компонента Weblinks. Эти файлы находятся в папке components/com_weblinks. (Здесь и далее они указываются относительно именно этой папки.) Папки и основные файлы пользовательской части компонента Weblinks
Контроллер для экранной формы ввода данных: файл 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. А если это задача отображения, то просто отображается страница, а переадресация вообще не устанавливается. Как и в административной части данного компонента, в пользовательской его части у каждого представления имеется своя модель. В данном случае имеются следующие три представления.
У каждого из этих представлений имеется своя модель, класс представления, расширяющий класс 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). Понравился материал? Пригодилась информация? Плюсани в социалки!
|
Похожие новости | |