Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: X технологии > изменение значений атрибутов


Автор: check 24.4.2007, 21:52
Имеется такой шаблон в формате xml
Код

<menu>
<table cellspacing="0" cellpadding="4" width="100%">
<tr height="25">
<td background="./backgrounds/fon3.gif" align="left" width="20%"><a href=""><img id="0"  border="0" src="1.gif" /></a></td>
<td background="./backgrounds/fon3.gif" align="left" width="20%"><a href=""><img id="1"  border="0" src="2.gif" /></a></td>
<td background="./backgrounds/fon3.gif" align="left" width="20%"><a href=""><img id="2"  border="0" src="3.gif" /></a></td>
<td background="./backgrounds/fon3.gif" align="left" width="20%"><a href=""><img id="3"  border="0" src="4.gif" /></a></td>
<td background="./backgrounds/fon3.gif" align="left" width="20%"><a href=""><img id="4"  border="0" src="5.gif" /></a></td>
</tr>
</table>
</menu>



Хочу сделать функцию, которая бы изменяла значение атрибута src тега img с определённым id.
Поскольку у тега есть атрибут id, было бы логичным обращаться к нему так
Код

$img = $document->getElementById($id);


Ну допустим обратился, а как быть дальше?
По идее нужно применить replaceAttribute,  но ни один из методов работы с атрибутами к $img применить не получается:
Код

Call to a member function getAttribute() on a non-object

Парсить xml начиная с корневого тега не хотелось бы...

echo $img  ничего не выводит,  хотя наверное должно было бы вывести что-то вроде object.

Автор: check 24.4.2007, 22:20
Дерево xml-документа я получаю так
Код

define('XMLHead', "<?xml version=\"1.0\" encoding=\"Windows-1251\" ?>");
$document = new domDocument("Windows-1251");
$menu = file_get_contents("../templates/top_menu.html"); //это тот самый xml
$menu_doc = XMLHead . $menu;
$document->loadXML($menu_doc);

Автор: check 28.4.2007, 18:20
Как я выяснил, для того чтобы использовать метод getElementById  нужно
описать атрибут id  в DTD как уникальный идентификатор.
Сделать это не трудно,  но в таком случае доступ по id никаких удобств мне не даёт.

Поэтому я  делаю так
Код

function replaceAttribute($id, $replace) {
    global $document;
    $img = $document->getElementsByTagName("img");
    for ($i=0; $i < $img->length; $i++) {
        $ob = $img->item($i);
        $attributes = $ob->attributes;
        if ($attributes->getNamedItem("id")->nodeValue == $id) {
            $new_attr = $ob->setAttribute("src", $replace);
             
        }
    }
}

Как мне теперь сохранить внесённое измненение,  то есть перезаписать 
шаблон изменённым xml-ем?  Ну и как вообще увидеть это изменение?
Если добавить в функцию такой код
Код

$new_attr = $ob->setAttribute("src", $replace);
$ob->appendChild($new_attr);
$new_doc = $document->saveXML();
echo $new_doc;


То он выведет меню в том же виде что и прежде.


P.S. В общем как вы поняли,  я хочу сделать визуальное редактирование шаблонов через DOM. 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)