ďťż

[PHP][XHTML][SimpleXML] Odczyt atrybutu z przestrzenią nazw

       

Podstrony


telcocafe

Jest sporo problemów z analizą XHTML w PHP przez funkcje XML. Kilka już rozwiązałem, stosując różne tricki i obejścia. Jednak jest kolejny - jak pobrać wartość atrybutu z przestrzenią nazw? Wprawdzie można zrezygnować z namespace, lecz lepiej zaznaczyć w kodzie XHTML, że znacznik lub atrybut należy do dziedziny F3.
<input type="checkbox" id="something" f3:var="config.item" />
foreach(xpath('//input[@id="ms"]') as $item) echo $item['f3:var'];Niestety, nie działa. Nawet $f3->item['var'].

A może zastosowanie funkcji preg_* i str_* lepiej nadaje się do analizy kodu XHTML? Właściwie operacje na XML-u wykonuję tylko po to, aby odczytać wartości paru atrybutów, np. f3:var, z tym że:
- jeśli znajdzie się w <form>, trzeba przejechać wszystkie pola: checkbox, radio i select i odczytać ich nazwy
- gdy znajdzie się w tych polach - dotyczy tylko tych pól
Trzeba potem jeszcze wstawić instrukcję warunkową. Za pomocą SimpleXML tylko pobieram kod pola do zamiany przez str_replace(), bo w XML-u tego raczej nie zrobię. Przykładowy wynik:
<input type="checkbox" id="something" <?php if($config['item']) echo 'checked="checked" ';?>/> LUB: <?php if($config['item']) echo '<input type="checkbox" id="something" checked="checked" />'; else echo '<input type="checkbox" id="something" />'; ?>
Właściwie zaletą parsera XML jest to, że wyrzuci błąd, gdy jakiś znacznik jest niezamknięty, lecz uruchamiam go dopiero wtedy, gdy znajduje się w szablonie choć 1 znacznik <form>. Może nie ma to nawet sensu?
Użytkownik Ferrari edytował ten post 25 kwiecień 2008, 16:44


XML nie jest dla ludzi. Jeżeli dasz ludziom do edycji bądź tworzenia XML, jeszcze z atrybutami to od razu to skasują ;) Jedna z zasad Ruby on Rails to "No XML-files!" ;)

<input type="checkbox" id="something" <?php if($config['item']) echo 'checked="checked" ';?>/> LUB: <?php if($config['item']) echo '<input type="checkbox" id="something" checked="checked" />'; else echo '<input type="checkbox" id="something" />'; ?>

Jedno i drugie to pomyłka. Kod PHP przemieszany z kodem HTML. Popytaj się trochę na forum php.pl to ci odpiszą ile takie "rozwiązanie" jest warte.


Kod PHP przemieszany z kodem HTML. Sugerujesz, że szablon powinien być przetwarzany podczas każdego żądania? Chyba lepiej skompilować go tylko 1 raz - czyli zrobić cache (a tam trzeba mieszać HTML z PHP), aby potem wystarczyło wywołać tylko include()? ;)
Użytkownik Ferrari edytował ten post 25 kwiecień 2008, 21:02
chyba widziałeś jak działa np. smarty? jeżeli szablon się nie zmienia używany jest kesz - czyli "wersja PHP" szablonu.

  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • nvm.keep.pl

  • Sitedesign by AltusUmbrae.