Yii2 рендер XML для карты сайта - PullRequest
0 голосов
/ 19 января 2019

Я пытаюсь создать карту сайта для своего веба, поэтому я создаю действие для отображения карты сайта в формате xml, но я получаю простой текстовый файл

Мое действие:

public function actionIndex()
    {
        $channels = Channel::find()->all(); 

        $response = Yii::$app->response;
        $response->format = \yii\web\Response::FORMAT_XML;

        $headers = Yii::$app->response->headers;
        $headers->add('Content-Type', 'application/xml');

        return $this->renderPartial('/sitemap/_viewChannel', [
            'channels'   => $channels,
        ]);
    }

Мой взгляд:

<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">

    <?php foreach ($channels as $channel){ ?>
        <url>
            <loc><?=Url::to(['/chn-channel/view', 't'=>$channel->channel_uid])?></loc>
            <changefreq>daily</changefreq>
        </url>
    <?php } ?>

</urlset>

но я получаю обычный текст в виде вывода

Вывод: enter image description here

Ответы [ 2 ]

0 голосов
/ 20 января 2019

Найдите решение, изменив:

$response = Yii::$app->response;
$response->format = \yii\web\Response::FORMAT_XML;

$headers = Yii::$app->response->headers;
$headers->add('Content-Type', 'application/xml');

на

Yii::$app->response->format = \yii\web\Response::FORMAT_RAW;
Yii::$app->response->headers->add('Content-Type', 'text/xml');
0 голосов
/ 19 января 2019

Вам не хватает объявления XML в начале вашего XML:

<?xml version="1.0" encoding="UTF-8"?>

Но XML - это простой текст, он просто использует указанную разметку и правила - способ, которым браузер форматирует этот вывод, на самом деле не имеет значения. Вам нужно использовать некоторый валидатор карты сайта (например, https://www.xml -sitemaps.com / validate-xml-sitemap.html или https://www.google.com/webmasters/tools/sitemap-list), чтобы проверить, есть ли какие-либо проблемы с вашей картой сайта.

...