Example #1
0
 /**
  * Построение карты
  *
  * @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;
 }