Функция aikiTreeReadObj() - чтение DOM-объекта формы каталога

Функция aikiTreeReadObj() - чтение DOM-объекта формы каталога

Функция aikiTreeReadObj(string $name) читает указанную в параметре $name запись из формы Tree и возвращает её в виде DOM-объекта для дальнейшего преобразования, получения данных и иных манипуляций.

После преобразования вы можете сохранить объект в форму, используя функцию aikiTreeSaveObj()

Пример:

<?php
include($_SERVER["DOCUMENT_ROOT"]."/engine/engine.php");
header("Content-Type: text/xml");
$out=aikiTreeReadObj("test");
echo $out->outerHtml();
?>

Пример выше отобразит структуру каталога в виде xml:

<tree>
    <name>test</name>
    <descr>Каталог</descr>
    <images/>
    <fields>
        <meta fldname="fld1" fldlabel="Поле1" fldtype="string" flddescr=""/>
        <meta fldname="fld2" fldlabel="Поле2" fldtype="editor" flddescr=""/>
        <meta fldname="fld3" fldlabel="Поле3" fldtype="enum" flddescr="1;2;3"/>
    </fields>
    <branch data-id="5893026204bd" class="5893026204bd" open="1">
        <name>Ветка 1</name>
        <data>
            <fld1>Значение поля 1</fld1>
            <fld2>
                <p>Текст поля 2</p>
            </fld2>
            <fld3>1</fld3>
        </data>
        <branch data-id="589300830aa8" class="589300830aa8">
            <name>Ветка 1-1</name>
            <data>
                <fld1>Значение поля 1</fld1>
                <fld2>
                    <p>Текст поля 2 в ветке 1-1</p>
                </fld2>
                <fld3>2</fld3>
            </data>
        </branch>
        <branch data-id="589300dc24d2" class="589300dc24d2" open="0">
            <name>Ветка 1-2</name>
            <data/>
            <branch data-id="589302a108b6" class="589302a108b6">
                <name>Ветка 1-2-1</name>
                <data>
                    <fld1>Значение поля 1</fld1>
                    <fld2/>
                    <fld3>1</fld3>
                </data>
            </branch>
        </branch>
    </branch>
    <branch data-id="589301da1653" class="589301da1653" open="1">
        <name>Ветка 2</name>
        <data/>
        <branch data-id="589302700fe8" class="589302700fe8">
            <name>Ветка 2-1</name>
            <data/>
        </branch>
    </branch>
</tree>

Имея такой объект каталога, можно легко им манипулировать используя методы работы с DOM.

В следующем примере, показано как получить имя ветки, имея её id:

<?php
include($_SERVER["DOCUMENT_ROOT"]."/engine/engine.php");
$out=aikiTreeReadObj("test");
echo $out->find("branch[data-id=589302a108b6] > name")->text();
?>

Или наоборот, имея имя ветки, получить её id:

<?php
include($_SERVER["DOCUMENT_ROOT"]."/engine/engine.php");
$out=aikiTreeReadObj("test");
echo $out
     ->find("name:contains(Ветка 1-2-1)")
     ->parent("branch")
     ->attr("data-id");
?>

Следующий пример показывает как найти ветку по имени, поменять значения полей в ней, сохранить и показать результат:

<?php
include($_SERVER["DOCUMENT_ROOT"]."/engine/engine.php");
header("Content-Type: text/xml");
$str="Ветка 1-2-1";
$out=aikiTreeReadObj("test");
    $out->find("name:contains({$str})")->parent("branch")
        ->find("data fld1")->html("Новое значение 1");
    $out->find("name:contains({$str})")->parent("branch")
        ->find("data fld2")->html("Новое значение 2");
    $out->find("name:contains({$str})")->parent("branch")
        ->find("data fld3")->html("Новое значение 3");
aikiTreeSaveObj($out);
echo $out->outerHtml();
?>
 

Интеграция с Bootstrap v.3

Чистый & понятный код

Парсер DOM в PHP