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

11 коментара
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
26.11.2008 at 0:20
лора
Kogato narichash nqkoi “kifla”, pomisli, che i kiflite im se sluchva da se rovqt v mrejata…
26.11.2008 at 11:23
Hamaelleon
Ти тази “Лора” ли си или някоя друга?
Обидена ли си?
Защо, ако не си кифла?
Би ли писала на кирилица? Твоят коментар е единствен на шльокавица в целия блог (обикновено или ги трия, или ги пренаписвам, ако са смислени и важни).. което отново е типично за една група.. така някак си по-обобщено да го кажа……..
29.01.2009 at 16:17
Dirty_Dance
ти кво някъв вид комплексар ли си или кво? можеш ли да ми обясниш след като ти си толкова интелигентен и не се вписваш към оная дадена група към която причисляваш момичетата от XGround Models, защо трябва да ги обиждаш така? Това да си модел е професия като всяка друга и не мисля, че те прави тъпа, или кучка или да те цитирам “Блонди Свиркова”. Това си е лично разбиране, поне според мен, на ония мъже дето просто никога не биха имали подобни момиче, “да го имат” :D:D нека да не ставам смеша, дори не могат да си мечтаят да ги погледне такава мацка и са решили че като им лепнат етикета “тъпа кучка” и ще си го върнат по някъв начин, ама така или иначе не виждам къде ти е изгодата от тва, освен че се правиш на идиот пред секи които реши да ти разгледа сайта. Или пък печелиш популяност в седите на тея комплексари като теб… не знам, ама казано честно не ми и пука.
29.01.2009 at 16:41
Hamaelleon
Пускам коментара без каквато и да било модерация, с всички грешки и т.н. А за авторката.. щом не ти пука няма да се хабя да ти отговарям.
30.01.2009 at 1:46
Боряна
ама защо така са се разлютили какичките под тая статия точно…аз ли изпускам къде са споменти кифлите?!?!
30.01.2009 at 10:59
Hamaelleon
“Тъй като такива (изтрито) красавици като Лора надали се сещат….” - ето тук на изтрито бях споменал вълшебната думичка
После си поговорих с нея малко във Facebook, после я изтрих.. и с това се приключи.
Дали има нещо общо с чалга депресията, която коментирахме нощеска в факебукето е друга тема 
Сега пак нещо стана
Btw, чувала ли си за Синдрома на кифлите: много трудно лечимо заболяване! Клиничната му картина е “бясна кака моделка влиза по някакъв повод (???) във web development насочен блог, намира публикация за комуникация Flash < -> XML < -> PHP и си въобразява, както обикновено, че тя е центърът на света и че в публикацията става дума за нея!?!!?” - луда работа ти казвам
30.01.2009 at 11:11
Hamaelleon
Ooo, забравих, като за човек, който се води администратор на сайта и блога на Ексграунд според теб дали написаното по някакъв начин ще е насочено срещу агенцията!? Колко трябва да си …, че да ти светне, че по никакъв начин сарказмът ми не е насочен към агенцията, още по-малко към конкретни нейни модели… които не познавам!!! и които не ме вълнуват!!! а просто съм нахранил въобще кифладжийско-чалгаджийската общност, за което имам пълно право в личния си блог.. Егати
30.01.2009 at 11:33
Боряна
напоследък всичко има общо с чалгата като цяло..това обяснява до голяма степен нещата
06.05.2009 at 7:23
berge
А аз викам ше разберем как да се записват данни и после се викат във флаш! Пробвах с Array, но като рестартна .swf-то се губи информацията, успях да изкарам кода на .as файл уж поне там да помни, то същата работа… Ебентуално ако става с xml или php… но КАК??…
Наздоровя!
П.П. Евала за имената във урока, и аз не пропускам да напиша “Съобщението е извратено успешно!”
06.05.2009 at 9:25
Hamaelleon
От Flash не отбирам, но ако минаваш през XML, който след това ще се чете от Flash-a, това е един от начините. Правихме също и комуникация Flash-PHP за crop-ването на картинките.. от Flash през $GLOBALS["HTTP_RAW_POST_DATA"] получавам сурово инфо, записвам го и после връщам чрез http_build_query($returnVars); инфо за Flash-a, където $returnVars ми е масив, договорен с Flash разработчика..