
Абе просто съм се побъркал: вместо да ходя да.. разходя някоя подобна кака, аз седя отново зад компютъра (в събота) и работя. Мой ли проект? Ами не! Всъщност съм се закрастил яко с тази администрация на сайта на XGround Models.. ако беше “официално” поръчано щеше да ме домързи и да го работя вероятно в понеделник към 4-5 сутринта.. ама не, като ми е интересно и си го човъркам по всяко време, без значение, че никой не го изисква..
Та, имаме Flash сайт, който вече е изграден (т.е приемаме го за константа). Той използва семпли XML файлове като база данни. Задачата е да се напише back-end, чрез който да се редактират тези XML файлове, респективно да се променя обликът на front-end-a. В предишната публикация споменах за тази задача.
Оставяме настрана файловите операции (имам предвид качване, преоразмеряване, рязане на снимки, създаване на thumbnail-и, etc.) настрана, не се занимаваме и с DTD на този етап. Ползваме DOM за парсване и създаване на XML-ите и това е всичко. Основата..
Ако имаме XML файл със структура и съдържание подобно на следното:
< ?xml version="1.0" encoding="UTF-8"?> <models> <model name="Флейта Тромпеткова" age="23" readonly="1"/> <model name="Блонди Свиркова" age="19" readonly="1"/> <model name="Ганка Заблейкова" age="20" readonly="1"/> <model name="Учтивост Лицемеркова" age="18" readonly="1"/> <model name="Съска Змейкова" age="22" readonly="1"/> </models>
..то можем да извършваме базовите операции с помощта на методите от този примерен PHP клас. Тези операции са:
- добавяне на нов елемент
- редактиране на даден елемент
- изтриване на елемент
- пренареждане в произволен ред (не просто сортиране) на елементите
< ?php
class xmlLib {
// XML File Parse -> PHP Array
function getXML($xmlFile) {
$xmlArr = array();
$c = 1;
$xml = new DomDocument('1.0', 'UTF-8');
$xml->load($xmlFile);
$root = $xml->documentElement;
$children = $root->childNodes;
foreach ($children as $element) {
if ($element->nodeType == XML_ELEMENT_NODE &&
$element->nodeName == 'model') {
$xmlArr[$c]['name'] =
$element->getAttributeNode('name')->value;
$xmlArr[$c]['age'] =
$element->getAttributeNode('age')->value;
$xmlArr[$c]['readonly'] =
$element->getAttributeNode('readonly')->value;
$c++;
}
}
return $xmlArr;
}
// Add Entry
function addEntry($add, $xmlArr, $xmlFile) {
$p = sizeof($xmlArr) + 1;
$xmlArr[$p]['name'] = $add['name'];
$xmlArr[$p]['age'] = $add['age'];
$xmlArr[$p]['readonly'] = $add['readonly'];
if ($this->saveXML($xmlFile, $xmlArr)) {
return true;
}
}
// Edit Entry
function editEntry($edit, $xmlArr, $xmlFile) {
$who = $edit['who'];
foreach ($xmlArr as $key => $person) {
if ($xmlArr[$key]['name'] == $who &&
$xmlArr[$key]['readonly'] != '1') {
$xmlArr[$key]['name'] = $edit['name'];
$xmlArr[$key]['age'] = $edit['age'];
}
}
if ($this->saveXML($xmlFile, $xmlArr)) {
return true;
}
}
// Remove Entry
function removeEntry($remove, $xmlArr, $xmlFile) {
$who = $remove['name'];
foreach ($xmlArr as $key => $person) {
if ($xmlArr[$key]['name'] == $who &&
$xmlArr[$key]['readonly'] != '1') {
$xmlArr[$key] = null;
}
}
if ($this->saveXML($xmlFile, $xmlArr)) {
return true;
}
}
// Set Entries Order
function setOrder($order, $xmlArr, $xmlFile) {
$tmp = array();
for ($i = 1; $i < = sizeof($xmlArr); $i++) {
for ($j = 1; $j <= sizeof($xmlArr); $j++) {
if ($order[$i - 1] == $xmlArr[$j]['name']) {
$tmp[$i]['name'] = $xmlArr[$j]['name'];
$tmp[$i]['age'] = $xmlArr[$j]['age'];
$tmp[$i]['readonly'] =
$xmlArr[$j]['readonly'];
}
}
}
if ($this->saveXML($xmlFile, $tmp)) {
return true;
}
}
// Save PHP Array -> XML File
function saveXML($xmlFile, $xmlArr) {
$xml = new DomDocument('1.0', 'UTF-8');
$xml->formatOutput = true;
$root = $xml->createElement('models');
$root = $xml->appendChild($root);
foreach ($xmlArr as $key => $person) {
if ($xmlArr[$key]['name'] != null) {
$model = $xml->createElement('model');
$model = $root->appendChild($model);
$name = $xml->createAttribute('name');
$name = $model->setAttribute('name',
$xmlArr[$key]['name']);
$name = $model->appendChild($name);
$age = $xml->createAttribute('age');
$age = $model->setAttribute('age',
$xmlArr[$key]['age']);
$age = $model->appendChild($age);
$readonly = $xml->createAttribute('readonly');
$readonly = $model->setAttribute('readonly',
$xmlArr[$key]['readonly']);
$readonly = $model->appendChild($readonly);
}
}
if ($xml->save($xmlFile)) {
return true;
}
}
}
?>
Кодът е семпъл и няма нужда от допълнителни коментари, старал съм се да пиша максимално чисто. Некондензиран и с допълнителни инденти го има и в демо страницата.
Пробвайте демото и си кажете мнението. Мързи ме да пиша повече. Точка.
Тъй като такива кифли като Лора надали се сещат за съществуването на моя милост мисля да отида да си купя един-два кроасана с шоколад и да се натъпча подобаващо.
Tags: back-end, CMS, Flash, PHP, Xground, xgroundmodels, XML, администрация, базисни положения, Ексграунд, основа

1 коментар
RSS емисия за коментарите към тази публикация
Trackback линк
http://www.vlkomarov.info/blog/2008/07/12/flash-xml-php-cms_basic/trackback/
12.07.2008, 20:30
Pingback от Hamaelleon: Това са базисните положения.. - edno23.com