Flash, XML, PHP, CMS - основата

Лора Георгиева - рекламно лица на XGround Models

Абе просто съм се побъркал: вместо да ходя да.. разходя някоя подобна кака, аз седя отново зад компютъра (в събота) и работя. Мой ли проект? Ами не! Всъщност съм се закрастил яко с тази администрация на сайта на 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: , , , , , , , , , ,


Kogato narichash nqkoi “kifla”, pomisli, che i kiflite im se sluchva da se rovqt v mrejata…

Ти тази “Лора” ли си или някоя друга?

Обидена ли си?

Защо, ако не си кифла?

Би ли писала на кирилица? Твоят коментар е единствен на шльокавица в целия блог (обикновено или ги трия, или ги пренаписвам, ако са смислени и важни).. което отново е типично за една група.. така някак си по-обобщено да го кажа…….. :)