Exebeche
@Exebeche
Осваиваю программирование

Почему xml генерируется в одну строку?

Создал экшн:
public function actionFeed()
    {
        $products = Product::find()->all();

        \Yii::$app->response->format = Response::FORMAT_XML;
        \Yii::$app->response->headers->add('Content-Type', 'text/xml');

        return $this->renderPartial('merchant', [
            'products' => $products,
        ]);
    }


Сознал вид:
use yii\helpers\Html;
use yii\helpers\Url;
?>
<?xml version="1.0" encoding="UTF-8"?><?xml-stylesheet type="text/css" href="/css/doc.css"?>
<rss version="2.0" xmlns:g="http://base.google.com/ns/1.0">
<channel>
    <title>Manufacture17</title>
    <description>Интернет-магазин тканей</description>
    <link>https://manufacture17.com.ua</link>

    <?php foreach ($products as $product): ?>
    <item>
        <link><?= Html::encode(Url::to(['slug-product', 'slug' => $product->slug])) ?></link>
        <g:id><?= $product->code ?></g:id>
        <g:price><?= $product->price_new ?> UAH</g:price>
        <g:condition>new</g:condition>
        <g:availability>in_stock</g:availability>
        <g:product_type><?= $product->category->name ?>></g:product_type>
        <g:image_link><?= $product->mainPhoto->getThumbFileUrl('file', 'large') ?></g:image_link>
        <title><?= $product->name ?></title>
        <description><?= $product->description ?></description>
    </item>
    <?php endforeach; ?>
</channel>
</rss>


Вроде как все хорошо и открывается, но фид идет между тегами response в одну строку, а в исходном коде все '<' и '>' отображаются как '&lt;' и '&gt;'
Может быть робот GoogleMerchant и схавает, но как-то не красиво... и непонятно - почему не обычная структура, а тупо строка
  • Вопрос задан
  • 711 просмотров
Решения вопроса 1
Exebeche
@Exebeche Автор вопроса
Осваиваю программирование
Как бы я не старался, но с Responce ничего не получалось..
Самое лучшее, что получалось это отображение всего фида в строку, а в конце - оповещение об ошибке.
Как показал лог дублировался заголовок xml. Что странно он дублировался, даже когда я убирал "упоминания" об этом заголовке и измодели и из контроллера.

Решилась задача благодаря XMLWriter в модели и sendContentAsFile в контроллере - страница отображается без ошибок и так, как должен выглядеть XML-файл.

З.Ы.
Очень впечатлила возможность XMLWriter устанавливать кучу атрибутов, а так же строить любую вложенность объектов ))
Всем бобра
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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