function default_components() { // запоминаем результат, чтобы несколько раз не вызывать функцию mso_get_path_files static $all = false; if ($all === false) { $all = mso_get_dirs(getinfo('template_dir') . 'components/', array(), true); } return '0||' . tf('Отсутствует') . '#' . implode($all, '#'); }
/** * возвращает массив структуры всех pages * включается title description keywords date dir url, а также массива $DATA в variables.php * date — время создания файла text.php (или явно заданное в $DATA['date']) * * @param $include — включить только указанные страницы * @param $exclude — исключить указанные страницы * @param $dir — основной каталог, если не указано то это PAGES_DIR * @param $url — основной http-путь, если не указано то это BASE_URL * * @return array * * [home] => Array ( * // обязательные * [page] => home * [title] => Blog * [description] => Best page * [keywords] => * [date] => 2014-10-22 12:56 * [dir] => путь к странице * [url] => http-адрес страницы * * // все что задано в $DATA * [menu_name] => home * [menu_class] => icon star * [menu_order] => 23 * [cat] => news, blog * [tag] => first, second * ) */ function mso_pages_data($include = array(), $exclude = array(), $dir = false, $url = false, $cache_time = 3600) { static $cache = array(); // кеш хранится как массив с ключам = входящим параметрам $cache_key = md5(serialize($include) . serialize($exclude) . serialize($dir) . serialize($url)); // уже получали данные, отдаем результат if (isset($cache[$cache_key])) { return $cache[$cache_key]; } else { // возможно есть данные в файловом кеше if ($out = mso_get_cache('pages_data' . $cache_key, $cache_time)) { $cache[$cache_key] = $out; // статичный кеш return $out; } } $out = array(); // путь на сервере if ($dir === false) { $dir = PAGES_DIR; } // url-путь if ($url === false) { $url = BASE_URL; } $pages = mso_get_dirs($dir, $exclude, 'variables.php'); if ($pages) { if ($include) { $pages = array_intersect($include, $pages); } // для вложенных страниц добавляем префикс равный отличию от PAGES_DIR // pages/about => about // pages/blog/about => blog/about $prefix = str_replace(PAGES_DIR, '', $dir); foreach ($pages as $page) { if (!file_exists($dir . $page . '/text.php')) { continue; } // если нет text.php выходим $page_k = $prefix . $page; if ($page == HOME_PAGE) { $out[$page_k] = array('page' => '/'); } else { $out[$page_k] = array('page' => $page_k); } // обнуляем данные $TITLE = ''; $META = array(); $DATA = array(); // считываем данные require $dir . $page . '/variables.php'; $out[$page_k]['title'] = $TITLE; $out[$page_k]['description'] = isset($META['description']) ? $META['description'] : ''; $out[$page_k]['keywords'] = isset($META['keywords']) ? $META['keywords'] : ''; // дата создания text.php $out[$page_k]['date'] = date('Y-m-d H:i', filemtime($dir . $page . '/text.php')); // путь на сервере $out[$page_k]['dir'] = $dir . $page; // url $out[$page_k]['url'] = $url . $page; if (isset($DATA)) { $out[$page_k] = array_merge($out[$page_k], $DATA); } } } $cache[$cache_key] = $out; // статичный кеш mso_add_cache('pages_data' . $cache_key, $out); // файловый return $out; }
function default_header_image() { $dirs = mso_get_dirs(getinfo('uploads_dir'), array('_mso_float', 'mini', '_mso_i', 'smiles')); return '-template-||' . tf('Каталог шаблона') . '#' . implode($dirs, '#'); }
$options = array_merge($options, $add); } if (file_exists(getinfo('template_dir') . 'custom/my_options.php')) { require getinfo('template_dir') . 'custom/my_options.php'; } if (file_exists(getinfo('template_dir') . 'custom/my_options.ini')) { $add = mso_get_ini_file(getinfo('template_dir') . 'custom/my_options.ini'); // и свой $options = array_merge($options, $add); } // подключим все опции компонентов из components // в них ini-файлы, а также php-файлы, обслуживающие ini (для PHP_START PHP_END) // поэтому подключаем все php-файлы, после все ini-файлы // подключаем только те опции и ini компонентов, которые реально существуют // каждый компонент в своем каталоге $all_component = mso_get_dirs(getinfo('template_dir') . 'components/', array(), true); // проверяем опции (options.php) foreach ($all_component as $dir) { $file = getinfo('template_dir') . 'components/' . $dir . '/options.php'; if (file_exists($file)) { require $file; } // php-файлы } // проверяем options.ini foreach ($all_component as $dir) { $file = getinfo('template_dir') . 'components/' . $dir . '/options.ini'; if (file_exists($file)) { $add = mso_get_ini_file($file); // чтобы позволить испльзовать в компонентах одинаковые названия опций, // добавим к названию имя компонета в скобках