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…

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

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

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

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

Dirty_Dance

Dirty_Dance’s avatar

ти кво някъв вид комплексар ли си или кво? можеш ли да ми обясниш след като ти си толкова интелигентен и не се вписваш към оная дадена група към която причисляваш момичетата от XGround Models, защо трябва да ги обиждаш така? Това да си модел е професия като всяка друга и не мисля, че те прави тъпа, или кучка или да те цитирам “Блонди Свиркова”. Това си е лично разбиране, поне според мен, на ония мъже дето просто никога не биха имали подобни момиче, “да го имат” :D:D нека да не ставам смеша, дори не могат да си мечтаят да ги погледне такава мацка и са решили че като им лепнат етикета “тъпа кучка” и ще си го върнат по някъв начин, ама така или иначе не виждам къде ти е изгодата от тва, освен че се правиш на идиот пред секи които реши да ти разгледа сайта. Или пък печелиш популяност в седите на тея комплексари като теб… не знам, ама казано честно не ми и пука.

Пускам коментара без каквато и да било модерация, с всички грешки и т.н. А за авторката.. щом не ти пука няма да се хабя да ти отговарям.

ама защо така са се разлютили какичките под тая статия точно…аз ли изпускам къде са споменти кифлите?!?!

“Тъй като такива (изтрито) красавици като Лора надали се сещат….” - ето тук на изтрито бях споменал вълшебната думичка ;) После си поговорих с нея малко във Facebook, после я изтрих.. и с това се приключи.
Сега пак нещо стана :D
Btw, чувала ли си за Синдрома на кифлите: много трудно лечимо заболяване! Клиничната му картина е “бясна кака моделка влиза по някакъв повод (???) във web development насочен блог, намира публикация за комуникация Flash < -> XML < -> PHP и си въобразява, както обикновено, че тя е центърът на света и че в публикацията става дума за нея!?!!?” - луда работа ти казвам :D Дали има нещо общо с чалга депресията, която коментирахме нощеска в факебукето е друга тема ;)

Ooo, забравих, като за човек, който се води администратор на сайта и блога на Ексграунд според теб дали написаното по някакъв начин ще е насочено срещу агенцията!? Колко трябва да си …, че да ти светне, че по никакъв начин сарказмът ми не е насочен към агенцията, още по-малко към конкретни нейни модели… които не познавам!!! и които не ме вълнуват!!! а просто съм нахранил въобще кифладжийско-чалгаджийската общност, за което имам пълно право в личния си блог.. Егати :D

напоследък всичко има общо с чалгата като цяло..това обяснява до голяма степен нещата :P

А аз викам ше разберем как да се записват данни и после се викат във флаш! Пробвах с Array, но като рестартна .swf-то се губи информацията, успях да изкарам кода на .as файл уж поне там да помни, то същата работа… Ебентуално ако става с xml или php… но КАК??…
Наздоровя!

П.П. Евала за имената във урока, и аз не пропускам да напиша “Съобщението е извратено успешно!” ;)

От Flash не отбирам, но ако минаваш през XML, който след това ще се чете от Flash-a, това е един от начините. Правихме също и комуникация Flash-PHP за crop-ването на картинките.. от Flash през $GLOBALS["HTTP_RAW_POST_DATA"] получавам сурово инфо, записвам го и после връщам чрез http_build_query($returnVars); инфо за Flash-a, където $returnVars ми е масив, договорен с Flash разработчика..