JavaScript Daten aus ext. Datei in Script einfügen

User007

Vice Admiral
Registriert
Feb. 2008
Beiträge
6.473
Guten Morgen liebe Leute !

Hab' ein ziemlich nerviges Problem in JavaScript, wie im Titel bereits erwähnt, und bin leider beim Suchen in verschiedenen Foren (und hier) noch nicht fündig geworden.
Hier die Problemstellung:
Ich habe verschiedene Scripte, in denen per Variablen Textstrings zugewiesen sind (wie üblicherweise z.B. in Ticker-Scripts u. ähnl.). Nun möchte ich gerne diese Texte in eine externe Datei, die zentral gespeichert wird, auslagern. Zweck des Ganzen ist, dass zum Einen diese Texte an verschiedensten Stellen des Projekts (Website) zur Verfügung stehen, und zum Anderen ist somit eine leichtere Administration gegeben - grad' im Hinblick auf die Möglichkeit, dass Anwender ohne Programmierkenntnisse diese Texte ganz einfach ändern können sollen.
Zusätzlich würde auch noch die Fehlerquote reduziert (mal abgesehen von evtl. Fehlern im Text!), da die Änderungen an allen gewünschten Stellen des Projekts gleichzeitig durchgeführt werden. So kann man nix vergessen !
Hat hier jemand 'ne Idee, wie Inhalte aus 'ner separaten Datei, z.B. "xyz.txt", zeilenweise in ein JS eingelesen und bestimmten Variablen zugewiesen werden können ?

Für jegliche Anregungen, Hinweise und Tipps wäre ich sehr dankbar !

Grüße
 
also falls ich das richtig verstanden habe, liegen die Text auf einem Server, und du möchtest das das JavaScript vom Client drauf zugreifen kann?

also ich würde das mit php machen, da giebt es genügend Funktionen mit denen du auf Dateien zugreifen kannst:
http://de.php.net/manual/de/ref.filesystem.php

gruß: clem
 
Hey,

sorry, hab mich vermutlich doch zu undeutlich ausgedrückt.

Also,...
ich hab 'ne HTML-Seite ("start.php") in der ein JS (ähnl. wie News-Ticker) aufgerufen wird. Im Script sind Variablen mit verschiedenen Textstrings belegt (diese zeigt der Ticker ja auf der "start.php" an!). Ich möchte nun gerne, wenn möglich, dass diese Textstrings sozusagen ausgelagert werden, damit man - ganz simpel - zum Editieren der Texte nur diese separate Datei (z.B. "texte.txt") öffnen muss und keinerlei Rücksicht auf Codefragmente, wie sie in Scriptdateien (egal ob JS, PHP o. ä.) ja nun mal vorkommen, nehmen braucht. So kann nicht aus Versehen etwas vom Scriptcode gelöscht, überschrieben, etc. werden und die Funktionalität des Scripts wäre garantiert.

So, hoffe nu' kann besser nachvollzogen werden, was ich such'.

Danke...
 
Die sauberste Lösung ist imo eine Kombination aus PHP und JS.

Zuerst lagerst du die Textfragmente in eine externe Datei aus, die wir text.txt nennen. Dabei sollte jeder neue, unabhängige Textteil durch eine neze Zeile getrennt sein.

Mittels der Funktion file() liest du die Datei jetzt in ein PHP Array ein:
PHP:
$text=file('text.txt');

Jede neue Zeile in deiner Datei spiegelt jetzt einen Indizies in deiner Datei wieder.
Nun kannst du in der HTML Datei (die du jetzt in eine .php Datei umwandeln musst) den JavaScript Teil bearbeiten.

HTML:
<script type=text/javascript>
//deine JS Funktion, evt. eine Schleife was auch immer
//danach folgt deine Ausgabe Funktion
document.write("<?php echo $text[0]; ?>");
//Rest deiner JS Funktion
</script>

Damit hast du nun den ersten Inhalt deines Arrays wiedergegeben.
Du kannst so natürlich auch ganze PHP Schleifen implementieren.

HTML:
<script type=text/javascript>
//deine JS Funktion, evt. eine Schleife was auch immer
//danach folgt deine Ausgabe Funktion
<?php for($i=0,$j=count($text);$i<$j;$i++){
echo 'document.write("'.$text[$i].'");';
}
?>
//Rest deiner JS Funktion
</script>


Hoffe das war so einigermaßen klar und verständlich :)


so long
Renegade
 
Ok, das ist doch ein passender Ansatz !

Bis inkl.
-=Renegade=- schrieb:
Jede neue Zeile in deiner Datei spiegelt jetzt einen Indizies in deiner Datei wieder.
Nun kannst du in der HTML Datei (die du jetzt in eine .php Datei umwandeln musst) den JavaScript Teil bearbeiten.
kann ich das nachvollziehen.
Aber wie binde ich jetzt das PHP in JS ein ?
Es geht mir um den blau markierten Code, in dem die verschiedenen Texte für eine Art Ticker hinterlegt werden:
Code:
... - hier werden Variablen definiert - ...
[COLOR="Blue"]meld[m++] = '...hier Text aus externer Datei...';
meld[m++] = '...hier anderer Text aus externer Datei...';
meld[m++] = '...und noch ein Text aus externer Datei...';[/COLOR] ...usw.
(dachte ich auch: alles in nur [U]einer[/U] ext. Datei, aber versch. Zeilen)
... - hier wieder Def von Var sowie Funktion - ...

Solllte es tatsächlich so simpel sein ?
meld[m++] = '<?php echo $text[0]; ?>';
meld[m++] = '<?php echo $text[1]; ?>';
meld[m++] = '<?php echo $text[2]; ?>';
usw.

Kann man PHP wirklich einfach so mit JS verbinden ?

Danke und Grüße
 
Jop, es ist in der Tat so leicht :)

Allerdings musst du darauf achten, dass du dein JS jetzt in keine .html Datei mehr einbinden kannst sondern in eine PHP Datei :)

(also start index.html musst du index.php verwenden)

PHP setzt dann dynamisch auf dem Server den Inhalt der Datei zusammen und schickt dann dieses Dokument mit den Inhalten an den User, dessen Browser dann das JS interpretiert.


so long
Renegade
 
Hallo Leute,

hab jetzt 3 (drei!) Tage+Nächte mit meinem Code herumgetüftelt, es aber leider nicht zum Laufen gebracht. Allerdings mag ich nich' glauben, dass es hierfür keine Lösung gibt - wahrscheinlich bin ich einfach nur zu "blind"...
Mit den vorgeschlagenen Anregungen (etc.) hab ich die ausgelagerten Meldungstexte mittels PHP in ein Array eingelesen. Leider besteht nach wie vor das Prob, die Daten des Arrays in JS verfügbar zu machen. Als Lösungsansatz hab ich etwas unter dem Link http://php-faq.de/q-funktion-php-js.html gefunden und den dortigen Code versucht einzubinden - hat aber irgendwie auch nicht gefunzt...
Also, meine Datei "start.php" beinhaltet folgenden
HTML:
...
<?php
$text=file('../every/infobox_texte_de.txt');// Datei zeilenweise in Array einlesen
?>
<script language="javascript"><!--
var meld = new Array();
var m = 0;
meld[m++] = '[COLOR="Blue"]Meldung1[/COLOR]';
meld[m++] = '[COLOR="Blue"]Meldung2[/COLOR]';
meld[m++] = '[COLOR="Blue"]Meldung3[/COLOR]';
var dauer = 4000;
id = setInterval('schreiben()',dauer);
var t = 0;

function schreiben() {
  app = meld[t++];
  if (t == m) t = 0;
  window.document.forms[2].box.value = app;
}
--></script>
...
Wie krieg ich nun den Inhalt des PHP-Arrays an die Stelle des blau markierken JS-Codes?
Der so simpel gedachte
PHP:
meld[m++] = '<?php echo $text[0];?>';
meld[m++] = '<?php echo $text[1];?>';
meld[m++] = '<?php echo $text[2];?>';
funktioniert auch nicht...

Evtl. mag sich jemand von Euch doch bitte nochmal damit beschäftigen u. findet vllt. die "rettende Lösung"?!
Wäre zutiefst dankbar...
 
Moin alle miteinander !

Zu meinem letzten Post:
1. ist der HTML-Code der "start.php" so natürlich nicht korrekt und
2. hab' ich noch'n bischen weitergebastelt und bin dabei auf folgende Teillösung gestoßen...

- externe Datei, z.B. "texte.txt" (reine Textdatei, keine HTML-Elemente!), zum Hinterlegen der anzuzeigenden Meldungstexte
Code:
1. Zeile -> anzuzeigender Meldungstext 1...
2. Zeile -> anzuzeigender Meldungstext 2...
u.s.w.

- korrekte PHP-Datei "start.php"
HTML:
...
<?php
$text=file('../every/infobox_texte_de.txt');// Datei zeilenweise in Array einlesen
?>
<script type="text/javascript"><!--
var meld = new Array();
var m = 0;
meld[m++] = '<?php echo trim($text[0]);?>';
meld[m++] = '<?php echo trim($text[1]);?>';
meld[m++] = '<?php echo trim($text[2]);?>';
var dauer = 4000;
id = setInterval('schreiben()',dauer);
var t = 0;

function schreiben() {
  app = meld[t++];
  if (t == m) t = 0;
  window.document.forms[2].box.value = app;
}
--></script>
...

Jetzt funktioniert zumindest das korrekte Einlesen aus der ext. Datei !
Nun such' ich nur noch 'ne Lösung um die Variable meld[m++] im JavaScript automatisch sooft zu generieren, wie im PHP-Array $text Einträge vorhandenen sind.
Ich dachte, dass man das evtl. mit einer for-Schleife realisieren kann.
Weiß dazu jemand Rat und kann helfen ?
 
Hm, ich würd das ganze gleich mit ner PHP schleife realisieren:

PHP:
<?php
for($i=0,$j=count($file);$i<$j;$i++){
   echo 'meld[m++] = '.trim($text[$i]).';';
}
?>


€dit zu unterem Beitrag: Jo, sind mir 2 Klammern abhanden gekommen, sry ^.^ habs jetzt hier editiert damit keiner was falsches abschreibt. Ansonsten isses eh hübsch gleich :) sry nochmal


so long
Renegade
 
Zuletzt bearbeitet:
Hallo Leuts,

hatte 'n hartes WE und deshalb erst jetzt Feedback.
Aber...mein Problem hab ich zwischenzeitlich (mit freundlicher Unterstützung aus einem anderen Forum) gelöst und möchte das hier nochmal aufzeigen, damit auch ALLE, die sowas brauchen und suchen, was davon haben.

Vorweg noch @Renegade
Danke für den Vorschlag (wie du siehst, ist meine Lösung ziemlich ähnlich), aber leider funktioniert's so nicht - da ist wohl was mit den Klammern durcheinandergelaufen, gell !

So, nachfolgend nun meine Lösung komplett:
Ich lagere die Texte der Meldungen, die vom Javascript angezeigt werden sollen, in eine externe Datei aus. Diese kann frei nach Wunsch benannt werden, allerdings ist zu beachten, dass es eine reine Textdatei (sog. "plain text") werden muß. HTML-Code innerhalb funktioniert nicht (siehe mein letzter Post) ! Jede Zeile steht für eine anzuzeigende Meldung, egal wie viele.
Code:
1. Zeile -> anzuzeigender Meldungstext 1...
2. Zeile -> anzuzeigender Meldungstext 2...
u.s.w.
Nun füge ich innerhalb der PHP-Datei, von der das JavaScript gestartet wird, folgendes ein:
HTML:
<?php
$texte=file('./hier_eure_textdatei.txt');// ext. Datei zeilenweise in Array einlesen
?>
<script type="text/javascript"><!--
var meld = new Array();
var m = 0;
<?php
# anhand der Inhaltsanzahl des Arrays $texte mittels for-Schleife die JavaScript-Variable meld[m++] automatisch sooft generieren, wie das Array Inhalt enthält.
# Deswegen ist es auch egal, wie viele Zeilen man in die ext. Textdatei schreibt!
for ($q=0;$q<count($texte);$q++)
{
?>
meld[m++] = '<?php echo trim($texte[$q]);?>';
<?php
}
?>
var dauer = 4000;// Zeit in ms -> 1000 = 1s
id = setInterval('schreiben()',dauer);
var t = 0;

function schreiben() {
  app = meld[t++];
  if (t == m) t = 0;
  window.document.forms[2].box.value = app;// Zuordnung, wo die Texte angezeigt werden sollen
  // ACHTUNG, auf die logische Zählfolge achten (0=1,1=2,2=3,etc.)
  // hier wird das dritte definierte Formular mit dem Kindelement namens "box" angesprochen
}
--></script>

So, allen die sich bemüht haben vielen Dank nochmals und nun viel Freude damit und vllt. erweitert ja jemand dieses noch für seine Verwendungszwecke (und veröffentlicht's dann hier!)...
CU

P.S.: sollte jemand noch was wissen wollen, gern fragen...
 
Zurück
Oben