PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Problem beim Refresh eines iFrames (Flash-Film)


Popopinsel
2009-05-12, 10:56:28
Hallo,

ich versuche die ganze Zeit vergeblich einen iFrame zu aktualisieren. Dabei habe ich schon JavaScript als auch einen Meta Refresh versucht.

Wenn ich das Script (z.B. setInterval("reloadFunction();", 2000)) oder den Meta Refresh in das im iFrame anzuzeigenden html-/php-Dokument schreibe und dieses direkt öffne, dann funktioniert der Refresh einwandfrei.

Wenn ich diese Seite dann jedoch als iFrame in einer anderen Seite einbinde, dann wird dieser nicht neu geladen. Weder mit dem Meta Refresh im anzuzeigenden Dokument noch mit einem Javascript im iFrame-enthaltenden Dokument.

Vielleicht mach ich es mir auch unnötig kompliziert, denn eigentlich möchte ich nur einen Flash-Film auf der Hauptseite einbinden und diesen ständig in einem Intervall neu laden lassen. Oder kann ich dieses Intervall im ActionScript des Flash-Films direkt angeben, sodass ich den Film einfach auf der Seite einbinde und der Film sich selbst refresht?

astrocreep
2009-05-12, 13:13:16
welchen grund gibt es bitte einen flash film immer wieder laden zu müssen? ich gehe mal stark davon aus, dass du daten ständig aktuell haben willst. dazu einfach im flashfilm die daten entsprechend oft nachladen. es macht so überhaupt keinen sinn, dass ständig alles (daten, grafik etc.) geladen wird.

Popopinsel
2009-05-12, 13:32:11
welchen grund gibt es bitte einen flash film immer wieder laden zu müssen? ich gehe mal stark davon aus, dass du daten ständig aktuell haben willst. dazu einfach im flashfilm die daten entsprechend oft nachladen. es macht so überhaupt keinen sinn, dass ständig alles (daten, grafik etc.) geladen wird.

Der Film stellt einen News-Ticker dar, der sich beim Aufrufen die Daten aus einer MySQL-Datenbank holt. Wie mach ich das denn, dass der Film auf der Webseite sich selbst regelmäßig aktualisiert?

Tommes
2009-05-12, 14:04:50
Indem sich der Flashfilm alle X Sekunden die Newsticker aus einem Webservice holt (z.B. per HTTPService in AS3), welcher die Daten aus der DB ausließt.

Popopinsel
2009-05-12, 14:14:27
Indem sich der Flashfilm alle X Sekunden die Newsticker aus einem Webservice holt (z.B. per HTTPService in AS3), welcher die Daten aus der DB ausließt.

Und das geht wie? Ich hab da keine Ahnung von... =)

Tommes
2009-05-12, 14:53:12
Naja wie hast du den Flash Newsticker denn bisher programmiert?

DanMan
2009-05-12, 17:34:20
Oder kann ich dieses Intervall im ActionScript des Flash-Films direkt angeben, sodass ich den Film einfach auf der Seite einbinde und der Film sich selbst refresht?
Ja.

Popopinsel
2009-05-13, 08:58:09
Naja wie hast du den Flash Newsticker denn bisher programmiert?

Siehe hier... (http://www.forum-3dcenter.org/vbulletin/showthread.php?t=454929)

Tommes
2009-05-13, 11:27:29
lv.load("http://localhost/php/message.php");

Diesen Aufruf musst du einfach mit einem Timer alle X Sekunden ausführen.

Fast & Dirty:

import flash.utils.Timer;
import flash.events.TimerEvent;

var myTimer:Timer = new Timer (2000); // Alle 2 Sekunden

// ListenerMethode wird an den Timer-Event gebunden
myTimer.addEventListener("timer", timerHandler);

// Timer wird gestartet
myTimer.start();

public function timerHandler(event:TimerEvent) {
lv.load("http://localhost/php/message.php");
}

Popopinsel
2009-05-13, 12:19:59
lv.load("http://localhost/php/message.php");

Diesen Aufruf musst du einfach mit einem Timer alle X Sekunden ausführen.

Fast & Dirty:

import flash.utils.Timer;
import flash.events.TimerEvent;

var myTimer:Timer = new Timer (2000); // Alle 2 Sekunden

// ListenerMethode wird an den Timer-Event gebunden
myTimer.addEventListener("timer", timerHandler);

// Timer wird gestartet
myTimer.start();

public function timerHandler(event:TimerEvent) {
lv.load("http://localhost/php/message.php");
}

Ich danke Dir!! Leider funktioniert das irgendwie nicht, ich bekomme immer folgende Fehlermeldung:
Scene=Szene 1, Layer=Ebene 2, Frame=1: Line 1: ';' expected
import flash.utils.Timer;

Scene=Szene 1, Layer=Ebene 2, Frame=1: Line 2: ';' expected
import flash.events.TimerEvent;

Scene=Szene 1, Layer=Ebene 2, Frame=1: Line 12: ';' expected
public function timerHandler(event:TimerEvent) {

Reicht denn Dein Code alleine oder muss ich meinen Code ergänzen, indem ich die Zeile
lv.load("http://localhost/php/message.php");
durch Deinen Code ersetze?

Edit: Ich arbeite mit FlashMX, da ich gerade nichts anderes zur Hand habe. Brauche ich dazu evtl. eine neuere Version, Flash CS 4 oder so, wegen ActionScript 3.0? Gibt es nichts kostenloses zur Entwicklung von Flash-Programmen?

Tommes
2009-05-13, 12:57:10
Achso AS2.0 hat keine Timer imho. Probier mal das:

var myInterval:Number;

function myMethode():Void
{
lv.load("http://localhost/php/message.php");
}


myInterval = setInterval(this, "myMethode", 2000);

esistich
2009-05-13, 13:13:07
wenn ich das richtig verstanden habe brauchst du in Flash ein Script das im Interval eine Abfrage macht?

so solltes du alle 30 Sekunden eine Ausführung erhalte,


var dasInterval : Number ;

function derRefresh () : Void {

lv . load ( "http://localhost/php/message.php" ) ;

}

dasInterval = setInterval ( this, "derRefresh", 30000 ) ;




hier wird 100 mal alle 30 Sekunden ausgeführt, dann stoppt das Script


var dasInterval : Number ;
var zahl : Number = 0 ;
var maxZahl : Number = 100 ;

function derRefresh () : Void {

if ( zahl >= maxZahl ) {

clearInterval ( dasInterval ) ;

} else {

lv . load ( "http://localhost/php/message.php" ) ;

}

zahl ++ ;

}

dasInterval = setInterval ( this, "derRefresh", 30000 ) ;




zu spät;;

Tommes
2009-05-13, 13:15:36
Ich war schneller ;D In ActionScript 3 gibt es dann aber auch richtige Timer.

Popopinsel
2009-05-13, 13:28:35
Super, ich danke Euch beiden für Euer Engagement! =)

@esistich:

Leider auch hier ein Fehler:
Scene=Szene 1, Layer=Ebene 2, Frame=1: Line 1: ';' expected
var dasInterval : Number ;

Kann AS2 vielleicht nichts mit diesem "Variable : XYZ" anfangen?

Edit: Den Fehler konnte ich beheben, indem ich die Leerzeichen vor und nach "Number" sowie vor dem ":" entfernt habe. Jetzt kommt folgender Fehler:
Scene=Szene 1, Layer=Ebene 2, Frame=1: Line 8: '{' expected
function derRefresh () : Void {

Scene=Szene 1, Layer=Ebene 2, Frame=1: Line 12: Unexpected '}' encountered
}

Edit2: Wie im oben verlinkten Post geschrieben, sieht das AS der "Szene1" folgendermaßen aus:
var lv = new LoadVars();
lv.onLoad = function() {
startTicker(this.news);
}
lv.load("http://localhost/php/ticker.php");

function startTicker(val) {
ticker.setText(val);
};

Und so das AS des Objektes "ticker":
var txt = new Array();
var gap = 0;
var spd = 2;
var textwidth = 0;
function setText(t) {
txt[0] = container.attachMovie("text", "txt0", 0);
txt[0].ttext.autoSize = true;
txt[0].ttext.text = t;
txt[0]._x = bg._width+gap;
txt[0]._y = bg._height/2-txt[0].ttext.textHeight/2;
textwidth = txt[0].ttext.textWidth;
var ratio = bg._width/(textwidth+gap)+1;
for (var i = 1; i<Math.ceil(ratio); i++) {
txt[i] = container.attachMovie("text", "txt"+i, i);
txt[i].ttext.autoSize = true;
txt[i].ttext.text = t;
txt[i]._x = txt[i-1]._x+textwidth+gap;
txt[i]._y = txt[i-1]._y;
}
go();
}
function go() {
this.onEnterFrame = function() {
for (var i = 0; i<txt.length; i++) {
txt[i]._x -= spd;
if (txt[i]._x<-(textwidth+gap)) {
queue(i);
}
}
};
}
function queue(n) {
if (n == 0) {
txt[n]._x = txt[txt.length-1]._x+textwidth+gap;
} else {
txt[n]._x = txt[n-1]._x+textwidth+gap;
}
}



Kann ich nun Euren Code anstelle des kompletten AS der Szene1 benutzen oder wo genau muss ich den einbauen?

Tut mir Leid wenn ich mich so unbeholfen anstelle, aber ich hab von der Materie echt keine Ahnung, aber die Sache in Flash zu machen soll am besten sein... :redface:

esistich
2009-05-13, 13:59:50
Super, ich danke Euch beiden für Euer Engagement! =)

@esistich:

Leider auch hier ein Fehler:
Scene=Szene 1, Layer=Ebene 2, Frame=1: Line 1: ';' expected
var dasInterval : Number ;

Kann AS2 vielleicht nichts mit diesem "Variable : XYZ" anfangen?

Doch, da ich auch noch mit Flash 8 arbeite. Kannst du mal in den Voreinstellungen (Einstellungen für Veröffentlichung) schauen ob du unter Flash die Version AS2 aktiviert hast.


Hau mal alle Leerzeichen raus.


var dasInterval:Number;

function derRefresh():Void {
lv.load("http://localhost/php/message.php");
}

dasInterval=setInterval(this,"derRefresh",30000);

Popopinsel
2009-05-13, 14:11:53
Doch, da ich auch noch mit Flash 8 arbeite. Kannst du mal in den Voreinstellungen (Einstellungen für Veröffentlichung) schauen ob du unter Flash die Version AS2 aktiviert hast.


Hau mal alle Leerzeichen raus.

var dasInterval:Number;

function derRefresh():Void {
lv.load("http://localhost/php/message.php");
}

dasInterval=setInterval(this,"derRefresh",30000) ;


Da gibts kein AS2, kann da nur die Flash Player Version auswählen (bis Flash Player 6). Und mit den Leerzeichen brachte auch nichts, meckert immer noch wegen dem '{' und dem '}' vor und nach "function derRefresh():Void"...

Tommes
2009-05-13, 14:16:16
Dann halt ohne Rückgabewert:

var myInterval:Number;

function myMethode() {
lv.load("http://localhost/php/message.php");
}

myInterval = setInterval(this, "myMethode", 2000);

Popopinsel
2009-05-13, 14:22:34
Dann halt ohne Rückgabewert:

var myInterval:Number;

function myMethode() {
lv.load("http://localhost/php/message.php");
}

myInterval = setInterval(this, "myMethode", 2000);

Tausend Dank, es klappt!! :D Endlich läuft es so wie ich möchte!

Nicht dass ich es übertreiben möchte, aber wäre es auch möglich, dass der Ticker nicht unterbricht, also nicht komplett neu läd, sondern quasi "im Hintergrund" nur den zu animierenden text erneuert, sodass bei einer Veränderung des Textes (der ja aus einer Datenbank kommt), der Ticker diesen neuen Text enthält ohne die Animation zu resetten? :biggrin:

esistich
2009-05-13, 14:29:25
Kann ich nun Euren Code anstelle des kompletten AS der Szene1 benutzen oder wo genau muss ich den einbauen?



Nein, der Code dient nur dazu in Abständen ein PHP Skript aufzurufen.

Tommes
2009-05-13, 14:29:34
Na klar ist das möglich, du musst es nur programmieren ;)

Popopinsel
2009-05-13, 14:48:06
So, beim Testen ist gerade ein weiteres Problem aufgetaucht! Bereits wenn die Datenbank mit wenigen, aber längeren Sätzen gefüllt ist, dann beginnt der Ticker fürchterlich an zu ruckeln, außerdem verschmiert und verzerrt die Schrift bis zur Unkenntlichkeit!

Liegt sowas an der Leistungsfähigkeit des Rechners oder an der Art und Weise, wie die Daten aus der Datenbank kommen?

So bekomme ich die Daten:

ticker.php (ehemals message.php):
<?php
require_once('ReadNews.php');

$news = ReadNews();

for ( $i = 0; $i < count($news); $i++ ) {
$theNews = $news[$i]['text']." - - - ".$strNews;
$strNews = $theNews;
}

echo "news= - - - ". utf8_encode($strNews);

?>

Und das ist die ReadNews.php:
<?php

function ReadNews(){

$serverlink = mysql_connect('127.0.0.1','***','***');
mysql_select_db('newsticker');
$query = 'select * from news ORDER BY `id` ASC';
$result = mysql_query($query);

$news = array();

while ($row = mysql_fetch_assoc($result)) {
$news[] = $row;
}

return $news;

}


?>

Edit: Es scheint an der Leisstungsfähigkeit des Rechners zu liegen... Sobald ich die Qualität des Films auf niedrig stelle, läuft es. Wenn ich allerdings noch mehr Einträge (lange Sätze) in die Datenbank einpflege, dann hängt sich der Rechner nahezu auf beim Öffnen des Films! Kann man da was machen? Es handelt sich "immerhin" um einen Athlon64 mit 2.4GHz, einer Radon X1600Pro und 2GB RAM (auf WinXP)...

Tommes
2009-05-13, 14:58:14
Nein damit hat das nichts zu tun. Das gibt ja einfach nur einen String aus. Wenn dann liegt es an der Animation in Actionscript.

esistich
2009-05-13, 17:49:02
So hab jetzt mal einen Ticker erstellt

Die Funktionsweise ist ähnlich Ajax nur das das mit Flash läuft und nicht mit JS

Ich werde das ganze pö a pö hier einfügen.


// xml (message.php)


<?php

// Verbindung zur Datenbank (Benutzer und Passwort anpassen!)
$serverlink = mysql_connect ( "localhost", "foo", "***" ) ;
mysql_select_db ( "newsticker" ) ;
$query = "SELECT * FROM news ORDER BY `id` ASC" ;
$result = mysql_query ( $query ) ;

// Aufbau der XML Datei
echo ( '<?xml version="1.0"?>' . "\n" ) ;
echo ( "<newsticker>\n" ) ;
// Datenbankinhalt auflisten (evtl. tabellen bezeichnungen abändern)
while ( $news = mysql_fetch_assoc ( $result ) ) {
echo ( "\t<news>" . $news [ 'news' ] . "</news>\n" ) ;
}
// Aufbau der XML Datei abschließen
echo ( "</newsticker>" ) ;

// Verbindung zu Datenbank beenden
mysql_close ( $serverlink ) ;

?>



// ActionScript



// Kollation
System.useCodepage = true;
// ticker Eigenschaften
var xPos = 10;
var yPos = 10;
var tiefe = 10;
var speed = 1;
var zyklus = 30000;
// Textstring erstellen
var newsTexte = "";
// xml Objekt erstellen
var meinXml:XML = new XML();
meinXml.ignoreWhite = true;
meinXml.onLoad = function() {
// Array für ausgelesene Daten
var xmlArray = meinXml.firstChild.childNodes;
// Textstring leeren
newsTexte = "" ;
for (i=0; i<xmlArray.length; i++) {
// Textstring befüllen
newsTexte = newsTexte+xmlArray[i].firstChild.nodeValue+" ";
}
// Funktionsaufruf
newsticker(newsTexte);
};
// news funktion
function newsticker(newsTexte) {
this.schalter = true;
// text formatierung
var format:TextFormat = new TextFormat();
format.color = 0xff0000;
format.font = "Arial";
format.size = 13;
createEmptyMovieClip("mc", tiefe);
mc.createTextField("ticker", tiefe+1, xPos, yPos, 5, 18);
mc.ticker.html = true;
mc.ticker.multiline = false;
mc.ticker.htmlText = newsTexte;
mc.ticker.selectable = false;
mc.ticker.autoSize = "left";
mc.ticker.setTextFormat(format);
mc.createTextField("ticker2", tiefe+2, xPos, yPos, 5, 18);
mc.ticker2.html = true;
mc.ticker2.multiline = false;
mc.ticker2.htmlText = newsTexte;
mc.ticker2.selectable = false;
mc.ticker2.autoSize = "left";
mc.ticker2.setTextFormat(format);
// Die Methode sorgt für die Verschiebung der Textfelder
function tick() {
mc.ticker._x -= speed;
mc.ticker2._x -= speed;
if (mc.ticker2._x<=xPos) {
mc.ticker._x = xPos;
mc.ticker2._x = mc.ticker._width+xPos;
}
}
if (this.schalter == true) {
intval = setInterval(tick, 10);
this.schalter = false;
}
mc.onEnterFrame = function() {
// Abfrage ob Maus über dem Ticker gehalten wird, wenn ja dann wird der Ticker angehalten
if (this.hitTest(_root._xmouse, _root._ymouse, false)) {
clearInterval(intval);
this._parent.schalter = true;
} else if (this._parent.schalter != false) {
intval = setInterval(tick, 10);
this._parent.schalter = false;
}
};
}
meinXml.load("message.php");
// xml im Interval laden
var dasInterval:Number;
function derRefresh() {
// Inteval löschen und xml funktion aufrufen, dann beginnt die Abfrage von neu
clearInterval(intval);
meinXml.load("message.php");
}
dasInterval = setInterval(this, "derRefresh", zyklus);




Hier die kompletten Dateien (http://freenet-homepage.de/skydiver_1/misc/newsticker.rar)

Und so sieht es aus (http://esistich.comxa.com/ticker/)

Popopinsel
2009-05-14, 08:20:08
Vielen, vielen Dank für das Engagement, das ist wesentlich mehr als ich erwartet habe! :)

Eine Frage zu dem ActionScript:

Kann ich den Code so wie er ist einfach in einen neuen, leeren Flash-Film einfügen, oder müssen dazu schon irgendwelche Objekte/Szenen vorhanden sein? Auf den ersten Blick würde ich jetzt anhand "mc.createTextField" denken, die Sachen werden beim Starten automatisch erstellt...

Edit: Ich hab auch gerade mal probiert, in der message.php lediglich die Angaben zum Login sowie die Tabellenbezeichnungen zu ändern, aber der Ticker zeigt mir dann nichts an. Wenn ich allerdings die message.php direkt "anbrowse", dann zeigt er mir den Inhalt der DB an (Quelltext enthält auch den XML-Code). Müsste doch dann irgendwie am AS liegen, oder? Vielleicht weil ich nur so ne alte Version habe (Flash MX Version 6)?

esistich
2009-05-14, 09:55:59
Eine Frage zu dem ActionScript:

Kann ich den Code so wie er ist einfach in einen neuen, leeren Flash-Film einfügen, oder müssen dazu schon irgendwelche Objekte/Szenen vorhanden sein? Auf den ersten Blick würde ich jetzt anhand "mc.createTextField" denken, die Sachen werden beim Starten automatisch erstellt...



Ja, alles wird zur Laufzeit erstellt, du kannst aber trotzdem weitere Ebenen erstellen und das Design anpassen.



Edit: Ich hab auch gerade mal probiert, in der message.php lediglich die Angaben zum Login sowie die Tabellenbezeichnungen zu ändern, aber der Ticker zeigt mir dann nichts an. Wenn ich allerdings die message.php direkt "anbrowse", dann zeigt er mir den Inhalt der DB an (Quelltext enthält auch den XML-Code). Müsste doch dann irgendwie am AS liegen, oder? Vielleicht weil ich nur so ne alte Version habe (Flash MX Version 6)?

wenn du das PHP Skript direkt ansteuerst, und es wird eiine XML Struktur mit dem Inhalt aus deiner Datenbank erstellt, so wie hier z.B.


<?xml version="1.0"?>
<newsticker>
<news>Das ist der Newsticker 1</news>
<news>Das ist der Newsticker 2</news>
<news>Das ist der Newsticker 3</news>
</newsticker>


dann ist der Fehler bei Flash zu suchen, da ich aber die MX Version von Flash nicht habe, kann ich das leider nicht testen.

Um sicher zu gehen kannst du auch eine test.xml erstellen und das AS diese test.xml laden lassen (vorher natürlich den Inhalt einfügen), dann weisst du genau obs an Flash oder an PHP liegt.

Popopinsel
2009-05-14, 10:37:58
wenn du das PHP Skript direkt ansteuerst, und es wird eiine XML Struktur mit dem Inhalt aus deiner Datenbank erstellt, so wie hier z.B.


<?xml version="1.0"?>
<newsticker>
<news>Das ist der Newsticker 1</news>
<news>Das ist der Newsticker 2</news>
<news>Das ist der Newsticker 3</news>
</newsticker>


Genau so sieht es bei mir aus. Dann werde ich mir mal die Trial von Flash CS4 saugen und schauen, obs es dann geht!

esistich
2009-05-14, 10:46:05
Genau so sieht es bei mir aus. Dann werde ich mir mal die Trial von Flash CS4 saugen und schauen, obs es dann geht!

Ich hoffe doch das du Flash nicht aus der Entwicklungsumgebung heraus testest (offline), da sonst kein Server da ist der das PHP-Script parst und Flash den PHP-Code anstelle eines dynamisch generierten XML-Code verarbeitet was natürlich nicht funktioniert.

Popopinsel
2009-05-14, 11:01:16
Ich hoffe doch das du Flash nicht aus der Entwicklungsumgebung heraus testest (offline), da sonst kein Server da ist der das PHP-Script parst und Flash den PHP-Code anstelle eines dynamisch generierten XML-Code verarbeitet was natürlich nicht funktioniert.

Vielleicht hab ich mich ungenau ausgedrückt. Der Quelltext der message.php sieht so aus wie beschrieben (XML-Struktur), wenn ich die Seite über einen Browser ansteuere. Die Ausgabe auf der Seite selbst beinhaltet lediglich den Text aus der Datenbank.

Der Server läuft immer (xampp -> apache, mysql), also daran sollte es nicht liegen. Es sei denn ich hab Dich gerade missverstanden... :redface:

esistich
2009-05-14, 11:07:55
Vielleicht hab ich mich ungenau ausgedrückt. Der Quelltext der message.php sieht so aus wie beschrieben (XML-Struktur), wenn ich die Seite über einen Browser ansteuere. Die Ausgabe auf der Seite selbst beinhaltet lediglich den Text aus der Datenbank.

Der Server läuft immer (xampp -> apache, mysql), also daran sollte es nicht liegen. Es sei denn ich hab Dich gerade missverstanden... :redface:

Ne, dann ist ok, ich dachte du testest die SWF Datei ohne das sie im Browser eingebettet ist. :wink:

Tommes
2009-05-14, 11:14:24
Lad dir lieber den Flex Builder 3, damit geht das doch viel einfacher und schöner:

http://dave.needlz.nl/index.php/2009/ticker/
http://www.needlz.nl/flex/ticker/srcview/index.html

Popopinsel
2009-05-14, 11:24:56
Ne, dann ist ok, ich dachte du testest die SWF Datei ohne das sie im Browser eingebettet ist. :wink:

Leider doch, hatte gedacht das geht wie bei meinem vorigen Ticker auch so, also durch direktes Starten der SWF! :redface: Schande über mich, aber eingebettet im Browser klappt es! :) Vielen Dank nochmal!

Was mir noch als Idee gekommen ist:

Du hast es ja jetzt so gemacht, dass der Ticker und das Eingabefeld für neue News auf ein und derselben Seite sind. Bei mir sieht es allerdings so aus, dass es zwei Seiten gibt. Auf der einen Seite gibt es ein Webinterface zum Eintragen der News. Diese Seite wird von meheren Clients im Netzwerk angesteuert, die dort die News pflegen können. Auf dem Rechner selbst, auf dem MySQL/Apache/PHP läuft, wird nur der Ticker angezeigt.

Ich kann doch dann den Refresh des Tickers, der in Deinem Beispiel durch den Button auf der selben Seite wie der Ticker ausgelöst wird, auch mit einem Button auf der zweiten Seite zum Eintragen der News (welche von PCs aus dem LAN aufgerufen wird) verknüpfen, oder?

Edit: Kannst Du vielleicht auch noch die .FLA uppen plz? =)

esistich
2009-05-14, 11:36:51
Du hast es ja jetzt so gemacht, dass der Ticker und das Eingabefeld für neue News auf ein und derselben Seite sind. Bei mir sieht es allerdings so aus, dass es zwei Seiten gibt. Auf der einen Seite gibt es ein Webinterface zum Eintragen der News. Diese Seite wird von meheren Clients im Netzwerk angesteuert, die dort die News pflegen können. Auf dem Rechner selbst, auf dem MySQL/Apache/PHP läuft, wird nur der Ticker angezeigt.

Ich kann doch dann den Refresh des Tickers, der in Deinem Beispiel durch den Button auf der selben Seite wie der Ticker ausgelöst wird, auch mit einem Button auf der zweiten Seite zum Eintragen der News (welche von PCs aus dem LAN aufgerufen wird) verknüpfen, oder?

Ich habe dieses Eingabefeld natürlich nur testweise eingefügt, sowas gehört in der Regel in einen Backend damit nicht jeder Dödel seine lustigen Texte auf die Menschheit loslassen kann. Ausserdem aktualisiert es lediglich den letzten Ticker.

Das Script sollte unabhängig von dem von dir bereits erstelltem Adminbereich sein, es gibt lediglich die Infos aus der Datenbank wieder, die du über deinen Adminbereich einpflegst. Natürlich nur dann wenn die gleiche Datenbank, Tabelle etc. verwendet wird.


ist die FLA nicht in der Zipfile dabei, die ich weiter oben verlinkt habe?

Popopinsel
2009-05-14, 11:42:34
ist die FLA nicht in der Zipfile dabei, die ich weiter oben verlinkt habe?


Nein, leider nicht. Vielleicht kannst Du dann auch die add.php gleich mit dazu packen? Danke! =)

esistich
2009-05-14, 11:51:04
Ok, sollte jetzt alles da sein.

Wie gesagt, die add.php ist nur ein test, taugt nicht als Adminpanel.

Popopinsel
2009-05-14, 11:54:12
Ok, sollte jetzt alles da sein.

Wie gesagt, die add.php ist nur ein test, taugt nicht als Adminpanel.

Also über den o.a. Link ist nur das alte Paket zu erreichen... Wollte mir die add.php auch nur mal anschauen, werde wahrscheinlich einen Button zum Updaten den Tickers in meinem geschützten Bereich erstellen, der den Ticker dann auf Bedarf neu startet.

esistich
2009-05-14, 11:58:09
Sollte eigentlich aktualiesiert sein, probier mal die hier (http://freenet-homepage.de/skydiver_1/misc/newsticker2.rar).

Popopinsel
2009-05-14, 12:12:15
Hat funktioniert, wunderbar!

Wie hast Du denn den Button so gemacht, dass er den Ticker neu startet? Woebi ich will ja nicht die gesamt Seite neu laden lassen, sondern nur die SWF an sich bzw. den Ticker dazu bringen, sich die Daten aus der DB neu zu holen.

Edit: Kann die FLA nicht öffnen: "Unexpected file format!". Brauch also wirklich ein aktuelles Flash...

esistich
2009-05-14, 12:24:39
Hat funktioniert, wunderbar!

Wie hast Du denn den Button so gemacht, dass er den Ticker neu startet? Woebi ich will ja nicht die gesamt Seite neu laden lassen, sondern nur die SWF an sich bzw. den Ticker dazu bringen, sich die Daten aus der DB neu zu holen.

Edit: Kann die FLA nicht öffnen: "Unexpected file format!". Brauch also wirklich ein aktuelles Flash...

Das Eingabefeld diente mir zum testen ob das Flashscript auch funktioniert, also ob das AS im Interval das PHP Script (message.php) aufruft und somit die aktuellen Datenbankeinträge abfragt. Eine aktualisierung der Siete ist nicht notwendig, das macht Flash im Hintergrund. Kannst ja mal testen in dem du 2 Browserfenster öffnest, im einen eine aktuallisierung vornimmst und im zweiten ohne Refresh ob sich der Ticker ändert. Die Intervallzeit kannst du im AS anpassen indem du die Variable zyklus von 30000 (30 Sekunden) auf einen anderen Wert änderst.

edit:
Die FLA besteht nur nur aus einem Frame mit dem obigen Script.

Popopinsel
2009-05-14, 12:37:25
Achso, alles klar, hatte vergessen das durch das setInterval ein Refresh der Seite/des SWF unnötig ist. Abe leider scheint es bei mir nicht zu funktionieren. Ich sehe zwar, dass sich der Ticker alle 30 Sek. neu startet (kurzes ruckeln/springen), allerdings steht dann immer noch der alte Text drin.

Ich bezieh mich dabei auf Deine fertige SWF, da wenn ich Deinen geposteten Code in einen neuen, leeren Film bei mir in Flash MX 6 einfüge und daraus ein SWF mache, dann wird überhaupt nix angezeigt (DB/Tabellen sind natürlich angepasst).

Edit: Ich seh auch gerade, dass der Ticker nicht als endlose Laufschrift läuft, sobald ich nur ganz kurze Sätze als News habe. Es ensteht dann am Ende eine, von Durchlauf zu Durchlauf größer werdende, Lücke nach jedem "News-String" (also den aneinandergereihten einzelnen News). Es sollte aber nach Möglichkeit so sein, dass auch wenn ich nur ein Wort/einen Satz habe, dieser als endloses Band die komplette Bildschirmbreite verläuft.

Kann dieses Problem daran liegen, dass ich über "so . addParam" die Breite des SWF manipuliert habe, aber die Variablen innerhalb der FLA nicht angepasst habe?

esistich
2009-05-14, 13:17:42
Achso, alles klar, hatte vergessen das durch das setInterval ein Refresh der Seite/des SWF unnötig ist. Abe leider scheint es bei mir nicht zu funktionieren. Ich sehe zwar, dass sich der Ticker alle 30 Sek. neu startet (kurzes ruckeln/springen), allerdings steht dann immer noch der alte Text drin.

Ich bezieh mich dabei auf Deine fertige SWF, da wenn ich Deinen geposteten Code in einen neuen, leeren Film bei mir in Flash MX 6 einfüge und daraus ein SWF mache, dann wird überhaupt nix angezeigt (DB/Tabellen sind natürlich angepasst).

Edit: Ich seh auch gerade, dass der Ticker nicht als endlose Laufschrift läuft, sobald ich nur ganz kurze Sätze als News habe. Es ensteht dann am Ende eine, von Durchlauf zu Durchlauf größer werdende, Lücke nach jedem "News-String" (also den aneinandergereihten einzelnen News). Es sollte aber nach Möglichkeit so sein, dass auch wenn ich nur ein Wort/einen Satz habe, dieser als endloses Band die komplette Bildschirmbreite verläuft.

Kann dieses Problem daran liegen, dass ich über "so . addParam" die Breite des SWF manipuliert habe, aber die Variablen innerhalb der FLA nicht angepasst habe?

Das funktioniert so, das zwei Textfelder generiert werden und ständig nebeneinander sich nach links bewegen, sobald das ende des Textfeldes die Bühne links verlässt, taucht es rechts wieder auf so das der Eindruck einer Endlosschleife ensteht. Wenn der Text kleiner als die Bühne ist, dann sieht man natürlich die Versetzungen. Die Größe deines Films, musst du in Flash festlegen, da MX hier aber offensichtlich nicht funktioniert wirds problematisch. "so . addParam" ist Javascript, damit binde ich die Flashdatei ein, die Größenangabe sollte die in Flash festgelegte Originalgröße sein (Bühne), da sonst die SWF skaliert und somit falsch dargestellt wird ausserdem musst du den Ticker anpassen, (Schriftfarbe, Schriftart, Größe, Geschwindigkeit etc.). Sag mal die Breite und Höhe an, dann erstell ich nochmal eine SWF.

esistich
2009-05-15, 00:17:16
Ich hab das Script soweit abgeändert, das die Flashdatei nun 10px Breit ist und man sie mit Javascript entprechend anpasst, ohne das es verzerrt, die Höhe funktioniert nicht (keine Lust den Fehler zu suchen :rolleyes:) also sollte man die Höhe bei 30 belassen da sonst die Textfelder ausserhalb der Bühne auftauchen.

Der Rest ist ebenfalls jetzt über JS einstellbar.


so . addVariable ( "flashVarText", "&x_Pos=0" +
"&y_Pos=3" +
"&geschwindigkeit=0.5" +
"&intervalzeit=30000" +
"&textabstand= ::: " +
"&textfarbe=0xFF0000" +
"&schrift=Arial,sans-serif" +
"&schriftgroesse=18" +
"&unterstrich=true" +
"&fett=false" ) ;


die Variablen sind aufgrund ihrer Bezeichnungen selbsterklärend, die Werte können dann entsprechend geändert werden. Somit bist du von Flash komplett unabhängig.


hier nochmal der Link zu den Dateien (http://freenet-homepage.de/skydiver_1/misc/newsticker2.rar)

edit:
Die Grössenangabe wird sowohl unter

so . addParam

als auch am Objekt selbst verändert

var so = new SWFObject( flashdatei, name, breite, höhe, Flashversion, Hintergrundfarbe )

Popopinsel
2009-05-15, 08:18:02
Genial esistich! :D

Bin gerade dabei, den Ticker anzupassen. Ich bekomms aber nicht hin, dass der Ticker auf voller Bildschirmbreite (1280px) läuft und das endlos. Es bleibt immer am eine Lücke am Ende des Strings, sodass der Text irgendwann komplett nach links raus geflogen und der Ticker für einige Sekunden komplett leer ist, bis er wieder von rechts reinkommt.

esistich
2009-05-15, 12:25:14
Genial esistich! :D

Bin gerade dabei, den Ticker anzupassen. Ich bekomms aber nicht hin, dass der Ticker auf voller Bildschirmbreite (1280px) läuft und das endlos. Es bleibt immer am eine Lücke am Ende des Strings, sodass der Text irgendwann komplett nach links raus geflogen und der Ticker für einige Sekunden komplett leer ist, bis er wieder von rechts reinkommt.

Ja, wie ich bereits oben erwähnte, werden lediglich 2 Textfelder erzeugt und ständig nebeneinander angezeigt, wenn ein text zu kurz ist, die Bühne aber sehr lang, dann kommt es zu dem von dir beschriebenen "Phänomen".

Du kannst ja die Texte mehrmals einpflegen, damit verlängerst du den Gesamttext und der Inhalt geht dann über die komplette Bühne.

Popopinsel
2009-05-15, 13:40:39
So, hab alles genau so hinbekommen wie ich mir das vorgestellt habe! Vielen Dank für den Tipp mit dem mehrmals einpflegen des Textes! =)

Noch eine letzte Frage:

Wie stell ich es an, dass wenn ein Client, der über das LAN auf der Seite, auf der er die News in die DB einpflegen kann (auf dieser Maschine läuft neben der DB auch die Seite mit dem Ticker in Vollbild), den Submit-Button drückt, gleichzeitig auch der Ticker neu geladen wird?

Edit: Es besteht leider immer noch das Problem, dass zwar die Animation des Ticker im angegebenen Intervall neu gestartet wird, allerdings werden nicht die aktuellen Daten aus der Datenbank geholt. Stattdessen werden die Daten angezeigt, die sich zum Zeitpunkt des Aufrufens/Refreshs der Seite in der Datenbank befanden... Wird der Film evtl. gecached? Kann man das unterbinden?

Edit2: Oder kann es auch sein, dass Flash selbst die message.php nicht neu lädt, da die Datei gecached wird bzw. als unverändert angesehen wird?

Edit3: Es lag am Browser-caching! Habe in den Internetoptionen nun eingestellt, dass bei jedem Zugriff auf die Seite neu geladen werden soll (also kein Cache mehr). Jetzt werden im nächsten Intervall die neuen Daten aus der DB angezeigt! =)

esistich
2009-05-15, 15:24:40
Wie stell ich es an, dass wenn ein Client, der über das LAN auf der Seite, auf der er die News in die DB einpflegen kann (auf dieser Maschine läuft neben der DB auch die Seite mit dem Ticker in Vollbild), den Submit-Button drückt, gleichzeitig auch der Ticker neu geladen wird?

Edit: Es besteht leider immer noch das Problem, dass zwar die Animation des Ticker im angegebenen Intervall neu gestartet wird, allerdings werden nicht die aktuellen Daten aus der Datenbank geholt. Stattdessen werden die Daten angezeigt, die sich zum Zeitpunkt des Aufrufens/Refreshs der Seite in der Datenbank befanden... Wird der Film evtl. gecached? Kann man das unterbinden?

Edit2: Oder kann es auch sein, dass Flash selbst die message.php nicht neu lädt, da die Datei gecached wird bzw. als unverändert angesehen wird?

Nein da wird nichts gecached, da Flash im Interval die message.php aufruft und die wiederum die aktuellen Inhalte der Datenbank ausliest und an Flash zurücksendet, ich habe das Script nochmal getestet und es läuft wie es soll, die aktuallisierten Inhalte werden von Flash übernommen.

Ich habe auch testweise anstatt die message.php eine test.xml laden lassen, bei der ich mit einem Texteditor neue Einträge tätigte, auch diese wurden von Flash athock übernommen.

Ich habe nochmals das AS überarbeitet, da Flash einige Variablen anstelle eines Integer als String übernimmt, daher solltest du die SWF Datei austauschen. Die Datei ist in der newsticker2.rar (http://freenet-homepage.de/skydiver_1/misc/newsticker2.rar) (eventuel deinen Browsercache leeren oder einen anderen Browser zum downloaden verwenden)