Как поменять в элементе название тэга xml

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Alex80
Сообщения: 21
Зарегистрирован: 2015.04.10, 16:40

Как поменять в элементе название тэга xml

Сообщение Alex80 »

Здравствуйте!

Скажите как при создании документа менять имя тэга элемента. Выбираю с бд например такое:

Код: Выделить всё

<offer>
<id_sale>1</id_sale>
<text_sale>Текст</text_sale>
<info_sale>Тест</info_sale>
<price_sale>0</price_sale>
</offer>
а нужно что бы в xml файле было так например:

Код: Выделить всё

<offer>
<id>1</id>
<text>Текст</text>
<info>Тест</info>
<price>0</price>
</offer>
Я то нашел как менять rootTag и itеmTag, но нигде не написано или плохо смотрю как сами элементы изменить.
lynicidn
Сообщения: 2222
Зарегистрирован: 2014.05.24, 15:12

Re: Как поменять в элементе название тэга xml

Сообщение lynicidn »

посмотрите в сторону toArray
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Как поменять в элементе название тэга xml

Сообщение ElisDN »

Переопределите в модели fields().
Alex80
Сообщения: 21
Зарегистрирован: 2015.04.10, 16:40

Re: Как поменять в элементе название тэга xml

Сообщение Alex80 »

спасибо, переопределил fields() все как нужно показывает, так теперь проблема вылезла что поломался 'itemTag'=>'offer' в formatter. за месть блока <offer></offer> создается блок имени таблицы откуда тяну данные. Я что то вообще в ступор вошел, теперь куда рыть :)
Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Как поменять в элементе название тэга xml

Сообщение rugabarbo »

Alex80 писал(а):спасибо, переопределил fields() все как нужно показывает, так теперь проблема вылезла что поломался 'itemTag'=>'offer' в formatter. за месть блока <offer></offer> создается блок имени таблицы откуда тяну данные. Я что то вообще в ступор вошел, теперь куда рыть :)
Покажите как используете formatter. Нужен код.
Alex80
Сообщения: 21
Зарегистрирован: 2015.04.10, 16:40

Re: Как поменять в элементе название тэга xml

Сообщение Alex80 »

Вот мой весь код

Код: Выделить всё

        
        $sale = Sale::find()
            ->where(['status_sale'=>'Действующая'])
            ->joinWith('picture',false)
            ->all();



        $response = Yii::$app->response;
        $response->format = Response::FORMAT_XML;
        $response->charset = 'UTF-8';
        $response->formatters = ['xml' => ['class' => 'yii\web\XmlResponseFormatter', 'rootTag' => 'discounts','itemTag'=>'offer']];
        $xml = ['operators'=>['name' => 'xxxxxx', 'url'=>'xxxxxxxx', 'logo'=>'xxxxxx'],
                'offers'=> $sale
                ];

        return $xml;
 
структура xml должна выглядеть так
<discounts>
<operators>
<name></name>
......
</operators>
<offers>
<offer>
.............
</offer>
</offers>
</discounts>
Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Как поменять в элементе название тэга xml

Сообщение rugabarbo »

Попробуйте добавить asArray():

Код: Выделить всё

         $sale = Sale::find()
            ->where(['status_sale'=>'Действующая'])
            ->joinWith('picture',false)
            ->asArray()
            ->all(); 
kawabanga
Сообщения: 806
Зарегистрирован: 2013.10.12, 23:35
Откуда: Новосибирск

Re: Как поменять в элементе название тэга xml

Сообщение kawabanga »

Я бы не парился и заменил бы регуляркой или str_replace =)
Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Как поменять в элементе название тэга xml

Сообщение rugabarbo »

kawabanga писал(а):Я бы не парился и заменил бы регуляркой или str_replace =)
Зачем, если простое добавление asArray() решает проблему?
Alex80
Сообщения: 21
Зарегистрирован: 2015.04.10, 16:40

Re: Как поменять в элементе название тэга xml

Сообщение Alex80 »

да как раз я убрал

Код: Выделить всё

->asArray() 
. Потому что когда он стоит то что я переопределяю fields() не работает, тянет все что есть поля с таблицы. Да наверно придется что то мудровать хотя бы тот str_replace
Alex80
Сообщения: 21
Зарегистрирован: 2015.04.10, 16:40

Re: Как поменять в элементе название тэга xml

Сообщение Alex80 »

в модели я дописал

Код: Выделить всё

    
    public function fields()
    {
        return [
            'id' => 'id_sale',
            'text'=>'text_sale',
            'info'=>'info_sale',
        ];
    }
или я тут что то не то сделал или не доделал?
Аватара пользователя
rugabarbo
Сообщения: 1063
Зарегистрирован: 2015.06.21, 16:21
Контактная информация:

Re: Как поменять в элементе название тэга xml

Сообщение rugabarbo »

fields объявлены правильно.

asArray() и fields() ни разу не комбинировал, поэтому не могу подсказать, как правильно их совместить, нужно экспериментировать с живым кодом. Не знал, что они плохо работают вместе.

В любом случае, прежде чем городить свой огород, посмотрите в сторону toArray(). Вот хорошие примеры его использования: http://www.yiiframework.com/forum/index ... _p__244065

Возможно ещё ElisDN что-нибудь подскажет.
Alex80
Сообщения: 21
Зарегистрирован: 2015.04.10, 16:40

Re: Как поменять в элементе название тэга xml

Сообщение Alex80 »

rugabarbo спасибо за помощь. сейчас посмотрю на toArray() что там. А так может еще кто то подскажет.
Ответить