Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Шаблон отображения списка категорий (магазин "Современный")

Автор manadsgnРаздел Шаблоны XSLT

Ответов: 2
Просмотров: 1725
Последний ответ 03 Июль 2012, 15:22:23
от manadsgn
Как вывести для разных доменов разных адресатов

Автор SumrakrndРаздел Шаблоны XSLT

Ответов: 14
Просмотров: 552
Последний ответ 17 Февраль 2017, 20:20:12
от Sumrakrnd
Вывести цену для группы "элитных" пользователей

Автор SeweryssРаздел Настройка системы и модулей

Ответов: 3
Просмотров: 1481
Последний ответ 12 Ноябрь 2013, 23:27:00
от Seweryss
Вывести сумму заказа на странице "Заказ поступил в обработку"

Автор AxiomateriaРаздел Шаблоны XSLT

Ответов: 2
Просмотров: 1297
Последний ответ 07 Ноябрь 2014, 23:46:49
от Axiomateria
Шаблон для вывода новостей с 3 разными блоками

Автор koroganРаздел Шаблоны TPL

Ответов: 3
Просмотров: 2023
Последний ответ 01 Октябрь 2011, 03:05:48
от admin

0 Пользователей и 1 Гость просматривают эту тему.

*

fantom103

  • *
  • 9
  • +0/-0
    • Просмотр профиля
Люди добрые помогите! ???

Надо написать макрос, который парсит данные 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>
« Последнее редактирование: 13 Октябрь 2014, 16:51:20 от fantom103 »

*

admin

  • *****
  • 2421
  • +172/-1
    • Просмотр профиля
Было бы понятней, если бы у вас в 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);
}

*

fantom103

  • *
  • 9
  • +0/-0
    • Просмотр профиля
Спасибо! Получилось. 8)