Как добавить страницы пагинации в xml карту сайта?

Всем привет!
Написал генератор карты сайта (посмотрел, как сделал Елисеев и немного переработал) для поисковиков, но не знаю как добавить туда страницы пагинации, код генератора:
class XmlController extends AppController{
	
	public function actionMap()
	{
        $urls = array();
 		$categories = Category::find()->asArray()->all();
 		foreach ($categories as $category => $categoryVal){
 			$posts = Product::find()->where(['category_id' => $categoryVal['id']])->asArray()->all();       
        	foreach ($posts as $post => $postVal){
            	$urls[] = '/product/' . $postVal['id'];
        	}
            $urls[] = '/category/' . $categoryVal['id'];
        }

        $pages = Page::find()->where(['enabled' => 1])->asArray()->all();
 		foreach ($pages as $page => $pageVal){
            $urls[] = '/page/' . $pageVal['alias'];
        }
 
        $host = Yii::$app->request->hostInfo;
 
        echo '<?xml version="1.0" encoding="UTF-8"?>' . PHP_EOL;
        echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
        foreach ($urls as $url){
            echo '<url>
                <loc>' . $host . $url . '</loc>
                <changefreq>monthly</changefreq>
                <priority>0.5</priority>
            </url>';
        }
        echo '</urlset>';   
        Yii::$app->end();            
    }
}

Делать какой-то while true и через for, типа $i = 0, $i++, а урл - example.com/category/e?page=$i
И еще вопрос - нужно оно вообще поисковикам или нет необходимости делать такую доскональную карту?
Спасибо.
  • Вопрос задан
  • 608 просмотров
Решения вопроса 2
Maksclub
@Maksclub
maksfedorov.ru
У вас в цикле запрос в БД, это плохо! Лучше сделайте 2 запроса отдельных, чем плодить запросы в цикле

У Елисеева с этим все хорошо:
https://github.com/ElisDN/yii2-demo-shop/blob/mast...

он сделал отдельный сервис для Сайтмапа:
https://github.com/ElisDN/yii2-demo-shop/tree/mast...

Также верстка в контроллере! Вообще разбейте по экшенам генерацию разных сущностей

По вопросу:
можно использовать DataProvider:
$dataProvider = new ActiveDataProvider([
    'query' => Page::find()->where(['enabled' => 1]),
    'pagination' => array('pageSize' => 50),
]);

echo \yii\widgets\LinkPager::widget([
    'pagination'=>$dataProvider->pagination,
]);
Ответ написан
Комментировать
sanek_os9
@sanek_os9
Работаю с Laravel, Vue, Vuetify, AWS Amazon, Linux
нужно оно вообще поисковикам или нет необходимости делать такую доскональную карту

Не нужно, но нужно делать пагинацию которая понравится поисковикам, например это плохая пагинация
Назад 3 4 5 6 7 Вперед
Это хорошая
1 2 3 4 5 6 7 8 9 10...100...200...356
Смысл в том что не нужно делать слишком мало пунктов вывода страниц а как можно подробнее расписать всё.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы