Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Создание динамических текстовых полей согласно содержимому XML файла (http://www.flasher.ru/forum/showthread.php?t=114576)

jakim_denis 02.08.2008 18:20

Создание динамических текстовых полей согласно содержимому XML файла
 
добрый день!
Подскажите пожалуста, как работая с вот таким XML:
Код:

−
<datapacket>
<row pID="1" Business="Business1" Address="Address 1" Telephone="12345" Website="http://www.b1.com" Email="email1@something.com" Details="some text for Details." Picture="image1.jpg"/>
<row pID="2" Business="Business2" Address="Address 2" Telephone="67879" Website="http://www.b2.com" Email="email2@something.com" Details="some more text for Details." Picture="image2.jpg"/>
<row pID="3" Business="Business3" Address="Address 3" Telephone="010203" Website="http://www.b2.com" Email="email3@something.com" Details="and some more text for Details." Picture="image3.jpg"/>
</datapacket>

Для каждого ROW создать отдельное динамическое текстовое поле шириной скажем 200px/висотой 400px и выстроить из по горезонтали на подобии http://www.x3studios.com/en/

Какую логистику и инструментарий для этого лутше использовать?

Разбирался как обрабатывать XML согласно вот этого мануала. http://www.adobe.com/devnet/flash/ar...php_print.html

Зарание прошу извенить за скорее всего глупый вопрос новичка )))

Wolsh 02.08.2008 18:33

Так и не понял, что именно у Вас не получилось. Покажите Ваш код.

jakim_denis 02.08.2008 18:43

Цитата:

Сообщение от Wolsh (Сообщение 755948)
Так и не понял, что именно у Вас не получилось. Покажите Ваш код.

ну у меня пока что не то чтобы не получилось ) Я просто хочу вокруг монитора и незнаю с какого боку подойти к решению такой задачи и какой инструментарий стоит для этого использовать.

jakim_denis 02.08.2008 20:26

Цитата:

Сообщение от Wolsh (Сообщение 755948)
Так и не понял, что именно у Вас не получилось. Покажите Ваш код.

Перерывши форумы пришол к такому:
В данный момент я работаю с таким кодом:
Код:

Stage.align = "LT";
Stage.scaleMode = "noScale";
embedFonts = true;

headlineXML = new XML();

headlineXML.onLoad = myLoad;
headlineXML.load("headlines.xml");

function myLoad(ok) {
        if (ok == true) {
                Publish(this.firstChild);
        }
}

function Publish(HeadlineXMLNode) {
        if (HeadlineXMLNode.nodeName.toUpperCase() == "BROADCAST") {
                content = "<b>List:</b><br><br>";
                story = HeadlineXMLNode.firstChild;
                while (story != null) {
                        if (story.nodeName.toUpperCase() == "STORY") {
                                lead = "";
                                body = "";
                                URL = "";
                                element = story.firstChild;
                                while (element != null) {
                                       
                                        if (element.nodeName.toUpperCase() == "LEAD") {
                                                lead = element.firstChild.nodeValue;
                                        }
                                        if (element.nodeName.toUpperCase() == "BODY") {
                                                body = element.firstChild.nodeValue;
                                        }
                                        if (element.nodeName.toUpperCase() == "URL") {
                                                URL = element.firstChild.nodeValue;
                                        }
                                        element = element.nextSibling;
                                }
                                content += "<a href='"+URL+"'>"+lead+"</a><br>"+body+"<br><br>";
                                createTextField("dynamic_txt", 10, 0, 0, 150, 30);
                                dynamic_txt.border = true;
                                dynamic_txt.html = true;
                                dynamic_txt.autoSize = true;
                                dynamic_txt.htmlText=content;
                        }
                        story = story.nextSibling;
                }
        }
}

Для XML:
Код:

<broadcast>
<story>
<lead>This is Headline 1</lead>
<body>This is where you can add content that will appear under the first headline</body>
<URL>http://www.communitymx.com/</URL>
</story>

<story>
<lead>This is Headline 2</lead>
<body>This is content that can appear under the second headline.</body>
<URL>http://www.flash-remoting.com/</URL>
</story>
</broadcast>

Данный код создает TextField и вставляет в него все содержимое XML, мне же необходимо для каждого <story> создать отдельный и выстроить их один за другим по горизонтали.
Надеюсь я движусь в правильном русле

Wolsh 02.08.2008 22:14

Уже лучше)
У Вас получается один текстфилд, потому что Вы создаете его (думаете что их) на одной глубине. А на одной глубине может быть только один объект. Значит надо ввести счетчик нодов и использовать его значение для управления глубиной и заодно координатой по горизонтали.
Перед циклом while вставим объявление переменной - нашего счетчика
Код:

var counter:Number = 0;
А в теле цикла, при создании текстфилда, воспользуемся им
Код:

content += "<a href='"+URL+"'>"+lead+"</a><br>"+body+"<br><br>";
createTextField("dynamic"+counter+"_txt", 10+counter, counter*150, 0, 150, 30);
counter+=1; // увеличиваем значение счетчика


jakim_denis 03.08.2008 15:52

Я логистику решение задачи понял.
Спасибо огромное!
Еще маленький вопрос:
Подскажите, а какой синтаксис правильно использовать для
Код:

dynamic_txt.border = true;
dynamic_txt.html = true;
dynamic_txt.autoSize = true;
dynamic_txt.htmlText=content;

чтоб дать им имена dynamic1_txt ....... dynamicX_txt ?

Wolsh 03.08.2008 17:44

Ну например так
Код:

var _txt:TextField = this["dynamic"+counter+"_txt"];
_txt.html = _txt.autoSize = true;
_txt.htmlText=content;

или делаем ссылку сразу при создании (если возможно)
Код:

var _txt:TextField = this.createTextField("dynamic"+counter+"_txt", 10+counter, counter*150, 0, 150, 30);
_txt.html = _txt.autoSize = true;
_txt.htmlText=content;
counter+=1; // увеличиваем значение счетчика


jakim_denis 03.08.2008 17:54

я пробовал - но что-то кажись тогда не так с скриптом в целом (
Код:
Код:

Stage.align = "LT";
Stage.scaleMode = "noScale";
embedFonts = true;

headlineXML = new XML();

headlineXML.onLoad = myLoad;
headlineXML.load("headlines.xml");

function myLoad(ok) {
        if (ok == true) {
                Publish(this.firstChild);
        }
}

function Publish(HeadlineXMLNode) {
        if (HeadlineXMLNode.nodeName.toUpperCase() == "BROADCAST") {
                content = "";
                story = HeadlineXMLNode.firstChild;
                while (story != null) {
                        if (story.nodeName.toUpperCase() == "STORY") {
                                lead = "";
                                body = "";
                                URL = "";
                                element = story.firstChild;
                                var counter:Number = 0;
                                while (element != null) {
                                       
                                        if (element.nodeName.toUpperCase() == "LEAD") {
                                                lead = element.firstChild.nodeValue;
                                        }
                                        if (element.nodeName.toUpperCase() == "BODY") {
                                                body = element.firstChild.nodeValue;
                                        }
                                        if (element.nodeName.toUpperCase() == "URL") {
                                                URL = element.firstChild.nodeValue;
                                        }
                                        element = element.nextSibling;
                                }
                                content += "<a href='"+URL+"'>"+lead+"</a><br>"+body+"<br><br>";
                                createTextField("dynamic"+counter+"_txt", 10+counter, counter*150, 0, 150, 30);                       
                                var _txt:TextField = this["dynamic"+counter+"_txt"];
                                _txt.html = true;
                                _txt.border = true;
                                _txt.autoSize = true;
                                _txt.htmlText=content;
                                counter+=1;
                                }
                        story = story.nextSibling;
                }
        }
}

Не дает вообще никакого результата при запуске мувика (

Wolsh 03.08.2008 18:16

Код:

var counter:Number = 0;
ПЕРЕД while а не внутри
Код:

counter+=1;
в конце while, т.е. перед
Код:

story = story.nextSibling;
Счетчи считает стори, а у Вас - почемуто считает ноды внутри стори)))

jakim_denis 03.08.2008 18:22

Перепутад wile =)))
Поправил, но толку было 0 (((
Код:

Stage.align = "LT";
Stage.scaleMode = "noScale";
embedFonts = true;

headlineXML = new XML();

headlineXML.onLoad = myLoad;
headlineXML.load("headlines.xml");

function myLoad(ok) {
        if (ok == true) {
                Publish(this.firstChild);
        }
}

function Publish(HeadlineXMLNode) {
        if (HeadlineXMLNode.nodeName.toUpperCase() == "BROADCAST") {
                content = "";
                story = HeadlineXMLNode.firstChild;
                var counter:Number = 0;
                while (story != null) {
                        if (story.nodeName.toUpperCase() == "STORY") {
                                lead = "";
                                body = "";
                                URL = "";
                                element = story.firstChild;
                                while (element != null) {
                                       
                                        if (element.nodeName.toUpperCase() == "LEAD") {
                                                lead = element.firstChild.nodeValue;
                                        }
                                        if (element.nodeName.toUpperCase() == "BODY") {
                                                body = element.firstChild.nodeValue;
                                        }
                                        if (element.nodeName.toUpperCase() == "URL") {
                                                URL = element.firstChild.nodeValue;
                                        }
                                        element = element.nextSibling;
                                }
                                content += "<a href='"+URL+"'>"+lead+"</a><br>"+body+"<br><br>";
                                createTextField("dynamic"+counter+"_txt", 10+counter, counter*150, 0, 150, 30);                       
                                var _txt:TextField = this["dynamic"+counter+"_txt"];
                                _txt.html = true;
                                _txt.border = true;
                                _txt.autoSize = true;
                                _txt.htmlText=content;
                                }
                        counter+=1;
                        story = story.nextSibling;
                }
        }
}

В ответ лишь белый скрин и пустое окно ошибок (

Wolsh 03.08.2008 20:01

Код:

headlineXML.ignoreWhite = true;
Забыли (ну или не знали))))
Примерно так
Код:

Stage.align = "LT";
Stage.scaleMode = "noScale";
//embedFonts = true;

headlineXML = new XML();
headlineXML.ignoreWhite = true;
headlineXML.onLoad = function (ok) {
    ok ? Publish(this.firstChild) : trace("XML loading ERROR!");
}
headlineXML.load("headlines.xml");

function Publish(HeadlineXMLNode:XMLNode) {
    if (HeadlineXMLNode.nodeName.toUpperCase() == "BROADCAST") {
        var story:XMLNode = HeadlineXMLNode.firstChild;
        var counter:Number = 0;
        while (story != null) {
            if (story.nodeName.toUpperCase() == "STORY") {
                var lead:String = "";
                var body:String = "";
                var URL:String = "";
                var element:XMLNode = story.firstChild;
                while (element != null) {
                   
                    if (element.nodeName.toUpperCase() == "LEAD") {
                        lead = element.firstChild.nodeValue;
                    }
                    if (element.nodeName.toUpperCase() == "BODY") {
                        body = element.firstChild.nodeValue;
                    }
                    if (element.nodeName.toUpperCase() == "URL") {
                        URL = element.firstChild.nodeValue;
                    }
                    element = element.nextSibling;
                    trace(element)
   
                }
                var content:String = "<a href='"+URL+"'>"+lead+"</a>"+"\n"+body+"<br><br>";
                var _txt:TextField = createTextField("dynamic"+counter+"_txt", 10+counter, counter*150, 0, 150, 30);           
                _txt.wordWrap = true;
                _txt.html = true;
                _txt.border = true;
                _txt.autoSize = true;
                _txt.htmlText=content;
                }
            counter+=1;
            story = story.nextSibling;
        }
    }
}


jakim_denis 03.08.2008 20:05

Цитата:

Сообщение от Wolsh (Сообщение 756075)
Код:

headlineXML.ignoreWhite = true;
Забыли (ну или не знали))))

не лечит (

Wolsh 03.08.2008 20:17

Приведенный выше код делает то что Вы хотели. На этом я с Вами временно прощаюсь, чтобы у Вас не создалось впечатление, что можно сделать сайт на флэше, ничего не изучая и ни разу не открыв хелп. Учите язык и удачи!

jakim_denis 03.08.2008 20:24

Цитата:

Сообщение от Wolsh (Сообщение 756077)
Приведенный выше код делает то что Вы хотели. На этом я с Вами временно прощаюсь, чтобы у Вас не создалось впечатление, что можно сделать сайт на флэше, ничего не изучая и ни разу не открыв хелп. Учите язык и удачи!

Ок
Спасибо огромное за помощь которая само по себе была велика!
Хелпом орудую постоянно но просто он не всегда обьясняет мои ошибки.
Буду лабать скрипт дальше, так как это было не все - скрипт так и не выводит текст из xml ((

Wolsh 03.08.2008 20:35

Вложений: 1
Ну скажем так, это не в моей манере шутить) Смотрим:


Часовой пояс GMT +4, время: 19:38.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.