Создание модуля на сайте


Для самостоятельного создания модулей, программист должен иметь хорошие навыки работы с языком PHP с применением объектно ориентированного подхода (ООП).

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

Создание нового модуля, мы будем рассматривать на примере классического модуля «Новости».

Что бы создать новый модуль, необходимо в папке modules создать папку с подходящим названием, например «news». В это папке будут лежать основные файлы нашего модуля.

Главный файл модуля, обрабатывающий запросы пользователя на сайте, должен называться controller.php. Он имеет следующую структуру:

class controller {

	public function __construct() {
		// конструктор класса, вызывается каждый раз при обращении к модулю.
 	}

	// Метод вызывается по умолчанию, если система не смогла определить действие 
	public function defAction() {
		return “text”;
 	}

 	// Пример обычного вложенного действия
	public function viewAction() {
		return "view";
 	}

}

Здесь каждый описанный метод, должен формировать ответ на запросы клиента. Приведенный пример выполняет следующее:

  1. При обращении к странице /news система вызовет обработчик defAction() и вернет текст «text».
  2. При обращении к странице /news/view система вызовет обработчик viewAction() и вернет текст «view».
  3. При обращении к странице /news/view/4532 система вызовет обработчик viewAction () и вернет текст «view». Далее используя встроенные средства системы можно обработать все передаваемые параметры.
  4. При обращении к несуществующей странице /news/asdfsdf система вызовет обработчик defAction () и вернет текст «text». Соответственно программист в этом обработчике может прописать условие на обработку не существующей страницы.

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

  1. Добавление новости, страница /news/object/add
  2. Изменение новости, страница /news/object/edit/номер_новости
  3. Удаление новости, страница /news/object/del/номер_новости
  4. Список новостей для редактирования, страница /news/object

Для этого мы создаем новый класс контроллер в отдельном файле /modules/news/.object.php. Он будет иметь следующий вид:

class objectController {

	// Вывод списка объектов
	public function defAction() {
		return “text”;
 	}

 	// Добавление новости
	public function addAction() {
		return "add";
 	}

 	// Редактирование новости
	public function editAction() {
		return "edit";
 	}

 	// Удаление новости
	public function delAction() {
		return "del";
 	}
}


Действия системы следующие. При обращении к странице /news/object система сначала пытается найти метод objectAction() в главном классе контроллере. Если метода нет, проверяется наличие файла /modules/news/.object.php. Если он существует далее идет его обработка по аналогии с главным контроллером /modules/news/controller.php.

Обратите внимание, основные отличия файлов контролеров заключаются:

Так же есть нюанс при работе со знаками «-» в адресе. В название класса и методах «-» нужно заменять на «_». Рассмотрим на примере варианты обработчиков для адреса «/news/get-last-news»: