Всё началось с того, что гугл уже три дня не хочет жрать мою карту сайта для нового сайта и я решил попробовать добавить другой вариант карты, в этот раз в формате txt, так я пришёл к необходимости создать свой генератор, и дальше к самому методу.
Метод подходит для сайтов где используется всего один или два компонента из арсенала первой ветки.
Для его реализации нужно понимание того в каких таблицах бд хранятся записи из нужных нам компонентов, например для доски объявлений это cms_board_items
и как формируется ссылка на запись в нужном нам компоненте, для ДО шаблон ссылки /board/read(id).html для статьи /content/(seo url).html
Если понимание этих моментов есть, можно продолжить.
Создаём php файл с таким содержимым.
<?php include(PATH.'/core/cms.php'); cmsCore::getInstance(); $inDB = cmsDatabase::getInstance(); $text = ''; $c_domain = $_SERVER['HTTP_HOST']; //блок с постоянными ссылками, который добавлены в карту вручную $text .= 'https://'.$c_domain.'/about.html'."\n"; $text .= 'https://'.$c_domain.'/terms.html'."\n"; //блок с автоматически сгенерированными ссылками //для каждого компонента дублируем следующий блок "блок", меняя таблицу, и шаблон ссылки //блок начало $sql = "SELECT * FROM cms_board_items WHERE published = 1 ORDER BY id ASC"; $result = $inDB->query($sql); while ($item = $inDB->fetch_assoc($result)){ $text .= 'https://'.$c_domain.'/board/read'.$item['id'].'.html'."\n"; } //блок конец //блок для вывода ссылок на города в которых есть объявления, в качестве еще одного примера $sql = "SELECT city, published FROM cms_board_items WHERE published = 1 GROUP BY city ORDER BY city ASC"; $result = $inDB->query($sql); if ($inDB->num_rows($result)){ while ($item = $inDB->fetch_assoc($result)){ } } //вывод списка страниц echo $text; ?>
в файл htaccess после строки
RewriteRule ^(.*)$ /index.php [L]
добавляем строку
Rewriterule ^sitemap\.txt$ /sitemap.php [L]
в файле robots.txt и в панели вебмастера яндекс/гугл указываем ссылку на карту сайта как
сайт.ру/sitemap.txt
открываем эту ссылку в браузере, там должен открыться текстовый файл со списком страниц.
Что удобно, список пополняется новыми ссылками сразу после создания новых страниц, удалённые страницы пропадают из карты — тут же, не нужно использовать крон или запускать генератор карты самому.
Впрочем, если на сайте ну ооочень много ссылок, или задействованы все компоненты, думаю, рациональнее все же использовать типичный генератор, который не будет заново делать запросы ко многим таблицам базы данных при каждом обращении к sitemap
Ещё раз уточню, что в этом примере речь идёт о первой ветке, как это адаптировать под вторую — не подскажу.