Плюшка CMS#26.04.2018

/* Создан для быстрой разработки приложений */
Скачать Демо

12. Секции и виджеты

18.10.2015

О том, что такое секции и виджеты, а также каким способом виджеты привязываются к страницам сайта можно почитать в руководстве пользователя. Здесь даётся информация об устройстве виджетов.

В базе данных есть две таблицы: «widget» и «section». В первой хранится информация о самих виджетах, а вторая определяет страницы, на которых должен публиковаться каждый из виджетов. Система сама заботится вопросами нужно ли публиковать вирус на той или иной странице, поэтому программист может сосредоточить внимание на логике.

Каждый виджет реализуется в отдельном скрипте, которые находятся в директории /widget. Имя файла определяется именем виджета (разумеется нужно учитывать регистр для UNIX-серверов), оно соответствует полю «name» таблицы «widget».

Типичный вид виджета таков:

class widgetBlog extends widget {
	public function __invoke() {
		...
		return true;
	}

	public function render() {
		...
	}

	//public function title($title) //если требуется по особому вывести заголовок виджета, например, вставить ссылку
}

Имя класса, реализующего виджет, должно состоять из слова «widget», после которого следует имя виджета. Класс должен быть унаследован от «widget».

В конструктор этого класса передаются два атрибута: первый (массив или строка) — это параметры (настройки) виджета; второй атрибут — это ссылка, заканчивающаяся символом «.», «/» или «*» - это та ссылка, по которой движок определил что виджет должен быть опубликован на данной странице. Это одна из ссылок, перечисленных в базе данных в таблице «section».

В большинстве случаев второй атрибут не используется. В виджет не обязательно перегружать конструктор: по умолчанию он ведёт себя так, как показано в псевдокоде выше, тоесть первый параметр помещает в $this->options, а второй — в $this->link.

Метод __invoke вызывается движком после создания экземпляра класса и предназначен для подготовки данных, из которых формируется HTML-представление, а также решает нужно ли вообще публиковать виджет (например, виджет может выводится на экран только для зарегистрированных пользователей). Если метод __invoke вернёт null или false, то движок прекратит обработку виджета и не будет генерировать никакого HTML-кода.

Внимание! Null и false также означает, что на экране не появятся и кнопки административного интерфейса.

Если метод __invoke вернёт true, то будет вызван метод render(), который должен вывести HTML код представления. Не рекомендуется выводить что-либо в самом методе __invoke().

Метод __invoke() также может вернуть строку, например «Blog», тогда для генерации HTML-кода движок подключит файл с именем widgetBlog.php, находящемся в директории /view. Тут «Blog» - это строка, которую вернул метод __invoke(). Таким образом виджет может иметь своё представление. В нём доступ к каким-либо данным, также как в MVC основного контента, возможен через переменную $this.

Последний вариант — если метод вернёт объект. Тогда движок воспримет этот объект как представление и вызовет метод render() этого объекта.

Процедура title() предназначена для вывода заголовка виджета. Она вызывается только тогда, когда в админке в настройках указано «публиковать название виджета». Если этой процедуры нет, то по умолчанию будет выведен такой заголовок:

<p class="title">ТЕКСТ_ЗАГОЛОВКА</p>

Очень часто в заголовок виджета требуется вставить ссылку на какую-либо страницу сайта. Именно для таких случаев и предусмотрена процедура title().