/** * Построение карты * * @return $map Объект карты */ public function get_map($xml = false) { //Создаем экземпляр класса $map = new self(); // Создаем текстовую копию сайтмапа $links = array(); //Проходимся по всем пространствам карты (каждое пространство - компонент) foreach ($map->spaces as $space) { //Подключаем плагин для компонента require_once JPATH_APP_PLUGINS_BASE . DS . 'sitemap' . DS . $space . '.php'; //По несложному правилу определяем имя модельки $model = 'pluginSitemap' . joosInflector::camelize($space); //Настройки плагина $params = $model::get_params(); $params['xml'] = $xml; //Получаем схему (массив с блоками), согласно которой перебираем блоки //(блоки отличаются, в основном, правилами формирования ссылок и аттрибутами) foreach ($model::get_mapdata_scheme($params) as $map_block) { //У каждого блока задан тип: 'single' - одиночная ссылка, 'list' - набор однотипных ссылок //Если тип = 'list' - получаем массив объектов с ссылками из соответствующего метода плагина // - название метода, с помощью которого мы получаем массив содержится в элемента массива, описывающего блок (ключ элемента - 'id') $data = $map_block['type'] == 'single' ? null : call_user_func($map_block['call_from'], isset($map_block['call_params']) ? $map_block['call_params'] : null); // Достаем ссылки foreach ($data as $item) { $links[] = $item->loc; } //Добавляем блок в общий массив с ссылками карты сайта $map->add_mapblock($space, $map_block, $data); } } // Записываем массив с ссылками в файл $filename = JPATH_BASE . DS . 'sitemap.txt'; joosFile::exists($filename) ? joosFile::delete($filename) : null; joosFile::put_content($filename, implode("\n", $links)); return $map; }