Бесплатная CMS для вашего сайта Разумная альтернатива WordPress

Type_foreach-файлы

Поскольку за вывод данных отвечает type-файл, то часто возникает ситуация, когда нужно изменить вывод какого-то блока, например поменять формат заголовков записей. Очевидно, что править большой type-файл не лучшая идея, поэтому в MaxSite CMS используются type_foreach-файлы.

Изначально type_foreach-файлы предназначались только для изменения внутри цикла foreach в type-файлах. Отсюда и их название. Но постепенно область действия type_foreach-файлов расширилась и они стали использоваться повсеместно, поскольку предлагают простой и удобный способ заменять и дополнять функциональность любых модулей системы.

В шаблоне используется предопределённый каталог type_foreach, куда и помещаются все type_foreach-файлы. В последних версиях MaxSite CMS можно использовать альтернативный каталог take, который работает практически так же как и type_foreach.

В MaxSite CMS type_foreach-файлы используются для решения двух основных задач. Первая — для внедрения своих блоков в другой модуль, например в цикл вывода type-файла. Вторая задача — это возможность замены какой-то функциональности своей.

Например, если нужно добавить какой-то свой блок в type-файл, может использоваться такой вариант:

...
if ($f = mso_page_foreach('page-do-page-only')) require($f);
...

Функция произведёт поиск файла шаблон/type_foreach/page-do-page-only.php и если он есть, то выполнит подключение с помощью require(). Данный пример — типовой и очень часто встречается в коде системы. Особенность здесь в том, что подключение выполняется обычным require(), а значит type_foreach-файлу будут доступны все переменные и данные целевого файла.

Такой подход позволяет с помощью type_foreach-файла изменить какие-то предопределённые данные для дальнейшего выполнения. Рассмотрим простой пример.

...
$par = array(
	'cut' => false,
	'cat_order' => 'category_id_parent',
	'cat_order_asc' => 'asc',
	'type' => false);

if ($f = mso_page_foreach('page-mso-get-pages')) require($f);

$pages = mso_get_pages($par, $pagination);
...

Массив $par содержит данные для функции mso_get_pages(). Если стоит задача добавить или изменить эти данные, то достаточно создать файл, где можно переопределить параметры шаблон/type_foreach/page-mso-get-pages.php:

$par['limit'] = 3;

Таким образом нет необходимости копировать type-файл в свой шаблон, чтобы изменить такую мелочь.

С помощью type_foreach-файлов также решается задача полной замены функциональности определенного участка кода.

if ($f = mso_page_foreach('page-other-pages'))
	require($f);
else
	mso_page_other_pages($p->val('page_id'), $p->val('page_categories'));

В данном примере используется вывод похожих записей с помощью функции mso_page_other_pages(). Если необходимо заменить или даже отключить этот блок, то создаётся файл шаблон/type_foreach/page-other-pages.php, где и размещается свой вариант вывода.

В MaxSite CMS очень много разных type_foreach-файлов, поскольку за время развития системы возникали самые разные задачи. Понять назначение type_foreach-файла гораздо проще по исходному коду type-файла. Описывать же каждый type_foreach-файл будет крайне затруднительно, поскольку их много в самых разных частях системы. Поэтому, если у вас возникнет желание изменить поведение какой-то части type-файла, то проверьте: скорее всего для этого уже предусмотрен type_foreach-файл.

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

Сайт использует cookie
Для улучшения работы сайта собирается анонимная статистика через Google Analytics. Разрешить использование аналитических cookie?