Генерация xml

Как генерим xml?

  • Шаблоном(native-php или другим - неважно)

    Голосов: 5 45,5%
  • SimpleXml и ему подобное

    Голосов: 6 54,5%

  • Всего проголосовало
    11

Adelf

Administrator
Команда форума
Вопрос вот такой возник. Я генерю сейчас шаблоном.. так было проще, ибо были готовые xml, в которые требовалось просто подставлять значения в нужные ноды.
Смотрю я теперь на некоторые шаблоны, которые сильно усложнились и думаю, а не проще было бы генерить по-правильному. Да и xml какой-то некрасивый получается - отступы лишние из-за php вставок.
 

Фанат

oncle terrible
Команда форума
чтобы не было обступов пыховставки надо писать на нулевой строке

PHP:
<? if ($var): ?>
            <tag></tag>
<? endif ?>
Тогда не код получается, а - мммм, конфэтка!

я даже придумал отступы унутре пыхотегов делать.
немного угловато (от слова ugly) получается, но функциональненько

PHP:
<? foreach ($arr as $row): ?>
            <tag></tag>
<?     if ($row['var']): ?>
            <tag></tag>
<?     endif ?>
<? endforeach ?>
 

Adelf

Administrator
Команда форума
Фанат
так и сделал :) Но там теперь есть и switch с echo внутри.. и все портится.. некоторые теги там, некоторые там.. и теперь шаблон смотрится кучей мусора. Думаю что с ним сделать.
 

Фанат

oncle terrible
Команда форума
свитч надо выносить в безнес лоджик.
я на старой работе все по-пацкнски сделал, наговнокодил кучу вспомогательных методов типа getTransmisson()
и в них все упихал
 

Adelf

Administrator
Команда форума
PHP:
        <E1WPBB06>
<? if(!$coupon): ?>
            <KOND_VAL><?=$price?></KOND_VAL>
            <? else:
    switch($discountType)
    {
        case 'R':
        case 'F': echo "<KOND_VAL>$price</KOND_VAL>"; break;
        case '%': echo "<KOND_PER>$price</KOND_PER>"; break;
    }
endif; ?>
            <REQ_MIN><?=$minLimit?></REQ_MIN>
            <REQ_MAX><?=$maxLimit?></REQ_MAX>
        </E1WPBB06>
Вот что тут делать то? Выносить неправильно... здесь оно должно быть. Вощим, думаю не генерить ли xml-мейкером каким-нибудь.
 

Ragazzo

TDD interested
Adelf
что мешает создать MyStuffXMLDataHelper::getSomeShitByDiscount($discountType) ?
 

Adelf

Administrator
Команда форума
Ragazzo
Мысли о том, что, возможно, более правильно генерить xml по-другому, чем продолжать погружаться в это.

О кстати вопрос еще один тем, кто делает шаблонами. Новичковский :) Что вы делаете с начальным тегом в xml, который тоже <?
PHP:
<?= "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" ?>
Так? :)
 

Вурдалак

Продвинутый новичок
Собственно, можно делать какой-то ConcreteXmlView extends XmlView, куда впихнуть логику с генератором XML. Генерить вот так, в обычном шаблоне, буэ.

P.S. Блин, и как вас не тошнит от php native templates :D
 

Ragazzo

TDD interested
Adelf
а что будет по другому? ты также будешь собирать весь xml по частям, хоть через конкатенацию, хоть через специальные функции xml_ перегоняя сначала в массив потом в xml :D
 

Фанат

oncle terrible
Команда форума
бизнес

PHP:
if(!$coupon) {
    $arr['price']=array(tag =>'KOND_VAL','price'=>$price)
} else: {
    switch($discountType)
    {
        case 'R':
        case 'F': $arr['price']=array(tag =>'KOND_VAL','price'=>$price); break;
        case '%': $arr['price']=array(tag =>'KOND_PER','price'=>$price); break;
    }
}
презентейшен
PHP:
        <E1WPBB06>
            <<?=$price['tag']?>><?=$price['price']?></<?=$price['tag']?>>
            <REQ_MIN><?=$minLimit?></REQ_MIN>
            <REQ_MAX><?=$maxLimit?></REQ_MAX>
        </E1WPBB06>
ябытакделал

но вообще, если вложенность большая, то может и енератором.
 

Вурдалак

Продвинутый новичок
Фанат, бизнес знает про KOND_VAL и прочее? А если ты потом в JSON отдавать будешь?
 

Adelf

Administrator
Команда форума
Вариант Фаната неплох. Но делать это не в бизнесе, а в шаблоне рядом нужно, ибо это презентейшен. Но все равно некрасиво.
 

Фанат

oncle terrible
Команда форума
Фанат, бизнес знает про KOND_VAL и прочее?
А кто кроме него в принципе это может знать?
С каких пор $discountType стало относиться к презентейшену? Она отвечает за цвет? За вывод картинок?

Бизнес - что показывать.
Презент - как показывать.

Тут, имхо, вариантов вообще нет.

Если, конечно, у вас бизнес - это SELECT *, а все остальное - презентейшен - тады ой.
Но если нормальный - то не вижу разницы.

А если ты потом в JSON отдавать будешь?
не понял вопроса
PHP:
json_encode($arr);
 

Вурдалак

Продвинутый новичок
Она отвечает за цвет? За вывод картинок?
О, узнаю Фаната, опять толстый троллинг пошёл.

не понял вопроса
PHP:
json_encode($arr);
Что ж тут непонятного, у каждого формата может быть вывод устроен по-своему. Высер из json_encode() твоего массива может не устроить пользователей. Может быть удобнее будет именно
Код:
{"discountType":"%","value":42}
и че?
 

Фанат

oncle terrible
Команда форума
Насколько я знаю бизнес, выдавать что-то кроме конечной цены для конкретного потребителя там очень не принято.
Но, возможно, у вас устроено по-другому.
В любом случае, я не понимаю, какое это все имеет отношение к отображению.
Варианты с "может быть" я плохо воспринимаю. Реальные кейсы из личного опыта мне нравятся больше.
 

Вурдалак

Продвинутый новичок
Ты плохо воспринимаешь всё что угодно, что идёт вразрез с твоим мировоззрением.

Собственно, почему тогда ты не делаешь замечание по поводу того, что конечному пользователю делается различие в виде имени тега? Где твои колкие высказывания про реальные кейсы?
 

Фанат

oncle terrible
Команда форума
Потому что различие в имени тега встречалось мне в практике.
А различие в наборе данных в зависимости от их формата - нет.
 

Вурдалак

Продвинутый новичок
Если не принимать во внимание различие между «F» и «R», пользователь в обоих случаях получит одну и ту же информацию, просто в разном виде, поэтому я не понимаю о каких таких различных наборах данных идёт речь.
 

С.

Продвинутый новичок
О кстати вопрос еще один тем, кто делает шаблонами. Новичковский :) Что вы делаете с начальным тегом в xml, который тоже <?
PHP:
<?= "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>" ?>
Так? :)
Выбранно взять все в двойные кавыки и поэтому эскейпить внутренние это такой "элегантный" троллинг?
отключаю short_tags
Ну да, ну да. Ради одного вшивого ХМЛ-ка оставить весь проект/сервер без коротких тэгов это серьезный и основательный подход.
 
Сверху