You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
344 lines
15 KiB
344 lines
15 KiB
<?
|
|
|
|
/* Подруключение всех ajax controller если запрос сделан по ajax */
|
|
$modulesDir = __DIR__ . '/modules';
|
|
|
|
/* Реккурсивное подключение всех PHP-файлов из директории */
|
|
/*
|
|
find ./ -not -path "*cache*" -type f -exec grep -Ho --color=always 'includeFilesFromFolder' {} \;
|
|
./wp-content/themes/cosmopet/temp-functions/modules-logic.php:includeFilesFromFolder
|
|
./wp-content/themes/cosmopet/temp-functions/modules-logic.php:includeFilesFromFolder
|
|
*/
|
|
|
|
function includeFilesFromFolder($folder) {
|
|
// Проверяем, существует ли папка
|
|
if (is_dir($folder)) {
|
|
// Открываем директорию
|
|
$files = scandir($folder);
|
|
|
|
// Перебираем файлы в директории
|
|
foreach ($files as $file) {
|
|
// Пропускаем текущую и родительскую директории
|
|
if ($file !== '.' && $file !== '..') {
|
|
// Формируем полный путь к файлу
|
|
$filePath = $folder . DIRECTORY_SEPARATOR . $file;
|
|
|
|
// Проверяем, является ли это файлом и имеет ли нужное расширение (например, .php)
|
|
if (is_file($filePath) && pathinfo($filePath, PATHINFO_EXTENSION) === 'php') {
|
|
include_once $filePath; // Подключаем файл
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
throw new Exception("Директория не найдена: $folder");
|
|
}
|
|
}
|
|
|
|
/* Подключаем все файлы с глобальными функциями */
|
|
includeFilesFromFolder(get_template_directory() . '/global-functions');
|
|
|
|
|
|
/**
|
|
* Подключает компонентов из папки из директории указанного модуля
|
|
*/
|
|
function include_component($module_name, $component_name) {
|
|
// Убедитесь, что имя модуля и компонента не пустые
|
|
if (empty($module_name) || empty($component_name)) {
|
|
return;
|
|
}
|
|
|
|
// Получаем путь к каталогу модуля
|
|
$component_dir = get_template_directory() . '/modules/' . $module_name . '/components/' . $component_name;
|
|
|
|
// Регистрируем стили и скрипты
|
|
add_action('wp_enqueue_scripts', function() use ($module_name, $component_name, $component_dir) {
|
|
// Подключаем стили
|
|
$css_dir = $component_dir . '/assets/css';
|
|
if (is_dir($css_dir)) {
|
|
$css_files = scandir($css_dir);
|
|
|
|
// Приоритетные файлы в нужном порядке
|
|
$priority_files = [
|
|
'gp-style-core.css',
|
|
'gp-style-desktop.css',
|
|
'gp-style-tablet.css',
|
|
'gp-style-mobile.css'
|
|
];
|
|
|
|
// Подключаем приоритетные файлы в заданном порядке
|
|
foreach ($priority_files as $priority_file) {
|
|
$file_path = $css_dir . '/' . $priority_file;
|
|
if (file_exists($file_path)) {
|
|
$handle = "{$module_name}-{$component_name}-" . pathinfo($priority_file, PATHINFO_FILENAME);
|
|
$src = get_template_directory_uri() . "/modules/{$module_name}/components/{$component_name}/assets/css/{$priority_file}";
|
|
wp_enqueue_style($handle, $src, [], filemtime($file_path)); // Используем filemtime для версии
|
|
}
|
|
}
|
|
|
|
// Подключаем остальные CSS-файлы
|
|
foreach ($css_files as $css_file) {
|
|
if (pathinfo($css_file, PATHINFO_EXTENSION) === 'css' && !in_array($css_file, $priority_files)) {
|
|
$file_path = $css_dir . '/' . $css_file;
|
|
$handle = "{$module_name}-{$component_name}-" . pathinfo($css_file, PATHINFO_FILENAME);
|
|
$src = get_template_directory_uri() . "/modules/{$module_name}/components/{$component_name}/assets/css/{$css_file}";
|
|
wp_enqueue_style($handle, $src, [], filemtime($file_path));
|
|
}
|
|
}
|
|
}
|
|
|
|
// Подключаем скрипты
|
|
$js_dir = $component_dir . '/assets/js';
|
|
if (is_dir($js_dir)) {
|
|
$js_files = scandir($js_dir);
|
|
foreach ($js_files as $js_file) {
|
|
if (pathinfo($js_file, PATHINFO_EXTENSION) === 'js') {
|
|
$file_path = $js_dir . '/' . $js_file;
|
|
$handle = "{$module_name}-{$component_name}-" . pathinfo($js_file, PATHINFO_FILENAME);
|
|
$src = get_template_directory_uri() . "/modules/{$module_name}/components/{$component_name}/assets/js/{$js_file}";
|
|
wp_enqueue_script($handle, $src, ['jquery'], filemtime($file_path), true);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
$component_controller = $component_dir . '/component-controller.php';
|
|
if (file_exists($component_controller)) {
|
|
include_once $component_controller ;
|
|
}
|
|
|
|
// $component_ajax_controller = $component_dir . '/component-ajax-controller.php';
|
|
// if (file_exists($component_ajax_controller)) {
|
|
// include_once $component_ajax_controller ;
|
|
// }
|
|
}
|
|
|
|
/**
|
|
* Подключает модуль из папки /modules/
|
|
*/
|
|
function include_module($module_name) {
|
|
// Убедитесь, что имя модуля не пустое
|
|
if (empty($module_name)) {
|
|
return;
|
|
}
|
|
|
|
// Получаем путь к каталогу модуля
|
|
$module_dir = get_template_directory() . '/modules/' . $module_name;
|
|
|
|
|
|
|
|
// Регистрируем стили и скрипты
|
|
add_action('wp_enqueue_scripts', function() use ($module_name, $module_dir) {
|
|
// Подключаем стили
|
|
$css_dir = $module_dir . '/assets/css';
|
|
if (is_dir($css_dir)) {
|
|
$css_files = scandir($css_dir);
|
|
|
|
// Приоритетные файлы
|
|
$priority_files = [
|
|
'normalize.css',
|
|
'gp-style-core.css',
|
|
'gp-style-desktop.css',
|
|
'gp-style-tablet.css',
|
|
'gp-style-mobile.css'
|
|
];
|
|
|
|
// Подключаем приоритетные файлы в заданном порядке
|
|
foreach ($priority_files as $priority_file) {
|
|
$file_path = $css_dir . '/' . $priority_file;
|
|
if (file_exists($file_path)) {
|
|
wp_enqueue_style(
|
|
$module_name . '-' . pathinfo($priority_file, PATHINFO_FILENAME),
|
|
get_template_directory_uri() . '/modules/' . $module_name . '/assets/css/' . $priority_file,
|
|
[],
|
|
filemtime($file_path)
|
|
);
|
|
}
|
|
}
|
|
|
|
// Подключаем остальные CSS-файлы
|
|
foreach ($css_files as $css_file) {
|
|
if (
|
|
pathinfo($css_file, PATHINFO_EXTENSION) === 'css' &&
|
|
$css_file !== '.' &&
|
|
$css_file !== '..' &&
|
|
!in_array($css_file, $priority_files)
|
|
) {
|
|
$file_path = $css_dir . '/' . $css_file;
|
|
wp_enqueue_style(
|
|
$module_name . '-' . pathinfo($css_file, PATHINFO_FILENAME),
|
|
get_template_directory_uri() . '/modules/' . $module_name . '/assets/css/' . $css_file,
|
|
[],
|
|
filemtime($file_path)
|
|
);
|
|
}
|
|
}
|
|
}
|
|
|
|
// Подключаем скрипты
|
|
$js_dir = $module_dir . '/assets/js';
|
|
if (is_dir($js_dir)) {
|
|
$js_files = scandir($js_dir);
|
|
foreach ($js_files as $js_file) {
|
|
if (
|
|
pathinfo($js_file, PATHINFO_EXTENSION) === 'js' &&
|
|
$js_file !== '.' &&
|
|
$js_file !== '..'
|
|
) {
|
|
$file_path = $js_dir . '/' . $js_file;
|
|
wp_enqueue_script(
|
|
$module_name . '-' . pathinfo($js_file, PATHINFO_FILENAME),
|
|
get_template_directory_uri() . '/modules/' . $module_name . '/assets/js/' . $js_file,
|
|
['jquery'],
|
|
filemtime($file_path),
|
|
true
|
|
);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
|
|
// Подключаем контроллер модуля
|
|
$module_controller = $module_dir . '/module-controller.php';
|
|
if (file_exists($module_controller)) {
|
|
include_once $module_controller ;
|
|
}
|
|
|
|
// $module_ajax_controller = $module_dir . '/module-ajax-controller.php';
|
|
// if (file_exists($module_controller)) {
|
|
// include_once $module_controller ;
|
|
// }
|
|
|
|
}
|
|
|
|
|
|
/**
|
|
* Регистрируем шаблоны из всех подпапок /templates/
|
|
*/
|
|
add_filter('theme_page_templates', function ($templates) {
|
|
// Путь к папке с шаблонами
|
|
$custom_templates_dir = get_template_directory() . '/modules/static-pages/';
|
|
|
|
// Ищем ВСЕ PHP-файлы в /templates/ и подпапках
|
|
$all_templates = new RecursiveIteratorIterator(
|
|
new RecursiveDirectoryIterator($custom_templates_dir)
|
|
);
|
|
|
|
foreach ($all_templates as $template_file) {
|
|
// Пропускаем не-PHP файлы и папки
|
|
if ($template_file->isDir() || $template_file->getExtension() !== 'php') {
|
|
continue;
|
|
}
|
|
|
|
// Получаем относительный путь (например, "pages/template-landing.php")
|
|
$relative_path = str_replace($custom_templates_dir, '', $template_file->getPathname());
|
|
|
|
// Формируем имя шаблона (убираем .php и заменяем слэши на дефисы)
|
|
$template_name = str_replace(['/', '.php'], [' - ', ''], $relative_path);
|
|
|
|
// Добавляем в список шаблонов
|
|
$templates['/modules/static-pages/' . $relative_path] = $template_name;
|
|
}
|
|
|
|
return $templates;
|
|
});
|
|
|
|
/**
|
|
* Подключает статические CSS и JS файлы из указанной директории и прописываем version в src
|
|
*
|
|
* @param string $dir_name Название директории в папке /static/
|
|
* @param array $options Дополнительные параметры:
|
|
* - 'css' => false - отключить подключение CSS
|
|
* - 'js' => false - отключить подключение JS
|
|
* - 'version' => string - версия файлов (по умолчанию использует время модификации файла)
|
|
*/
|
|
|
|
/*
|
|
find ./ -not -path "*cache*" -type f -exec grep -Ho --color=always 'enqueue_static_assets' {} \;
|
|
./wp-content/themes/cosmopet/temp-functions/modules-logic.php:enqueue_static_assets
|
|
./wp-content/themes/cosmopet/templates/about/template-about.php:enqueue_static_assets
|
|
./wp-content/themes/cosmopet/templates/production/template-prod-page.php:enqueue_static_assets
|
|
*/
|
|
|
|
function enqueue_static_assets($dir_name, $options = []) {
|
|
// Устанавливаем пути к директориям
|
|
$static_dir = get_template_directory() . '/static/' . $dir_name;
|
|
$static_uri = get_template_directory_uri() . '/static/' . $dir_name;
|
|
|
|
// Подключаем CSS файлы
|
|
if (!isset($options['css']) || $options['css'] !== false) {
|
|
$css_dir = $static_dir . '/css/';
|
|
if (file_exists($css_dir)) {
|
|
$css_files = scandir($css_dir);
|
|
foreach ($css_files as $file) {
|
|
if (pathinfo($file, PATHINFO_EXTENSION) === 'css') {
|
|
$handle = $dir_name . '-' . pathinfo($file, PATHINFO_FILENAME);
|
|
$src = $static_uri . '/css/' . $file;
|
|
$ver = isset($options['version']) ? $options['version'] : filemtime($css_dir . $file);
|
|
|
|
wp_enqueue_style(
|
|
$handle,
|
|
$src,
|
|
array(),
|
|
$ver
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Подключаем JS файлы
|
|
if (!isset($options['js']) || $options['js'] !== false) {
|
|
$js_dir = $static_dir . '/js/';
|
|
if (file_exists($js_dir)) {
|
|
$js_files = scandir($js_dir);
|
|
foreach ($js_files as $file) {
|
|
if (pathinfo($file, PATHINFO_EXTENSION) === 'js') {
|
|
$handle = $dir_name . '-' . pathinfo($file, PATHINFO_FILENAME);
|
|
$src = $static_uri . '/js/' . $file;
|
|
$ver = isset($options['version']) ? $options['version'] : filemtime($js_dir . $file);
|
|
$in_footer = strpos($file, 'admin') === 0 ? false : true;
|
|
|
|
wp_enqueue_script(
|
|
$handle,
|
|
$src,
|
|
array(),
|
|
$ver,
|
|
$in_footer
|
|
);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/* Вставить в поиск по модулям */
|
|
$modules_path = get_template_directory() . '/modules/*/editor-blocks/*/editor-block-controller.php';
|
|
foreach (glob($modules_path) as $file) {
|
|
require_once $file; // Подключаем каждый найденный файл
|
|
}
|
|
|
|
|
|
// include_module('blog');
|
|
require_once(__DIR__ . '/../modules/blog/module-ajax-controller.php'); // !!! внутри него include_module('blog');
|
|
|
|
require_once(__DIR__ . '/../modules/forms/module-ajax-controller.php');
|
|
require_once(__DIR__ . '/../modules/shop/module-ajax-controller.php');
|
|
require_once(__DIR__ . '/../modules/profile/module-ajax-controller.php');
|
|
require_once(__DIR__ . '/../modules/footer/module-ajax-controller.php');
|
|
require_once(__DIR__ . '/../modules/author/module-ajax-controller.php');
|
|
|
|
|
|
include_module('forms');
|
|
include_module('layout');
|
|
|
|
|
|
add_action('wp', 'my_custom_checkout_code');
|
|
function my_custom_checkout_code() {
|
|
if (function_exists('is_checkout') && is_checkout()) {
|
|
include_component('shop', 'checkout');
|
|
}
|
|
}
|
|
|
|
|
|
|