UMIhelp

Разработка дополнительного функционала => Custom макросы => Тема начата: fantom103 от 13 Октября 2014, 15:08:36

Название: Помогите вывести данные полученные из xml в TPL шаблон
Отправлено: fantom103 от 13 Октября 2014, 15:08:36
Люди добрые помогите! ???

Надо написать макрос, который парсит данные xml и полученное выводит в TPL шаблон в таком ввиде:

раздел
    подраздел
    подраздел
раздел   
    подраздел
    подраздел
раздел
раздел
раздел

Делаю так:
list($test_block, $test_item, $service) = def_module::loadTemplates("custom/{$template}", "test_block","test_item", "service");
$s = array();
$block_array = array();
$services = array();
$line_array = array();
$service_array = array();


xml:
<?xml version="1.0" encoding="windows-1251"?>
<response>
<Status>Ok</Status>
<Result>
<Device id='49430303' name='раздел'>
<Service id='49706741' name='подраздел'></Service>
<Service id='49706766' name='подраздел'></Service>
</Device>
<Device id='49430303' name='раздел'>
<Service id='49702898' name='подраздел'></Service>
<Service id='49706741' name='подраздел'></Service>
</Device>
<Device id='29641652' name='раздел'></Device>
<Device id='29641652' name='раздел'></Device>
<Device id='29641652' name='раздел'></Device>
</Result>
</response>

с парсингом проблем нет, делаю так:
foreach($resp_xml->Result->Device as $Device) {
$line_array['device'] = (string)$Device['name'];
foreach($Device as $Service) {
$service_array['service'] = (string)$Service['name'];
}
$s[] = def_module::parseTemplate($service,$service_array);
$s[] = def_module::parseTemplate($test_item,$line_array);
}

Пытаюсь вывести вот так:
$block_array = array();
$services = array();
$block_array['lines'] = $s;
$services['services'] = $a;
$s = def_module::parseTemplate($test_block,$block_array);
return $s;

TPL шаблон(test.tpl) у меня такой:
$FORMS = array();

$FORMS['test_block'] = <<<END
<ul>%lines%</ul>
END;

$FORMS['test_item'] = <<<END
<li>
%device%
<ul style="list-style:none;">%services%</ul>
</li>
END;

$FORMS['service'] = <<<END
<li style="color:red;">
%service%
</li>
END;

Результат:

<ul>
<li style="color:red;">подраздел</li>
<li>раздел
     <ul style="list-style:none;">%services%</ul>
</li>
<li style="color:red;">подраздел</li>
<li>раздел
     <ul style="list-style:none;">%services%</ul>
</li>
<li style="color:red;">раздел</li>
<li>раздел
     <ul style="list-style:none;">%services%</ul>
</li>
<li style="color:red;">подраздел</li>
и т. д.  .....
</ul>
Название: Re:Помогите вывести данные полученные из xml в TPL шаблон
Отправлено: admin от 14 Октября 2014, 12:08:12
Было бы понятней, если бы у вас в xml у разделов и подразделов были номера, чтобы видно были при выводе как они расположились.

Я бы в первую очередь посмотрел на место с парсингом и заменил его на что-то вроде этого
foreach($resp_xml->Result->Device as $Device) {
$line_array = array();
$service_array = array();
foreach($Device as $Service) {
   $service_item = array();
$service_item['service']=(string)$Service['name'];
$service_array[] = def_module::parseTemplate($service,$service_item);
}
$line_array['device'] = (string)$Device['name'];
$line_array['service'] = $service_array;
$s[] = def_module::parseTemplate($test_item,$line_array);
}
Название: Re:Помогите вывести данные полученные из xml в TPL шаблон
Отправлено: fantom103 от 15 Октября 2014, 14:31:48
Спасибо! Получилось. 8)