Ausgabe einer HTML-Datei bei Aufruf einer Node dort einbinden...
am 13.09.2013 - 22:58 Uhr in
Liebe Drupalianer,
entweder suche ich nach den falsche Wörtern, oder ich finde es einfach nicht.
Folgende Problematik:
Wir haben bald bei uns eine Regatta. Unsere Regattasoftware kann die Ergebnisse automatisch in eine html-datei per ftp hochladen.
Nun möchte ich diese HTML-Datei, im Seitendesign anzeigen, also z. B. in eine Node einbinden, die ich dann im Menü als Menüpunkt auch verlinken kann.
Ich glaube ich erkläre es gerade unheimlich kompliziert, ist ja auch schon spät...
Hier einfach mal die Datei, bzw, der Link:
http://wsbederkesa.de/sites/wsbederkesa.de/files/regergeb/Mld_Erg_Vereine.htm
und eingebunden soll es natürlich in die Webseite
http://www.wsbederkesa.de
werden.
Die Rennen werden ca. im 3-minutentakt stattfinden. die Datei wird automatisch aktualisiert, wenn die Ergebnisse erfasst sind. Dies geschiet allerdings manuell, aber auch ca. alle 3 Minuten. Somit wäre es also am besten, wenn im Moment des Aufrufs der Node der Inhalt der HTML gelesen und eingebunden wird.
Wie gehe ich denn da vor? PHP in der Node? Ein Modul? Ganz anders?
Liebe Grüße
Jerns
- Anmelden oder Registrieren um Kommentare zu schreiben
Der einfachste Weg für die
am 14.09.2013 - 08:51 Uhr
Der einfachste Weg für die Einbindung der externen Inhalte wäre wohl ein iFrame - dieses iFrame würdest du dann einfach als Seiteninhalt einbinden. Die Einbindung kannst du entweder direkt in den Content integrieren (Text-Format: Full-HTML) oder mithilfe des Moduls https://drupal.org/project/insertframe - hier hast du dann einen Inputfilter, der die Einbindung etwas erleichtert.
Alternativ wäre das Nachladen der Inhalte via Ajax - hier würdest du dir aber auch eine eigene Seite im System anlegen und dort dann die nachgeladenen Inhalte als Seiteninhalt anzeigen. Hier hättest du im Gegensatz zur iFrame Lösung noch die Möglichkeit das Styling komplett zu beeinflussen.
SteffenR
oder ein kleines Modul
am 14.09.2013 - 09:27 Uhr
das die Datei einliest und ins Textfeld eines Nodes schreibt, also einen Node generiert.
ronald schrieb das die Datei
am 15.09.2013 - 17:21 Uhr
das die Datei einliest und ins Textfeld eines Nodes schreibt, also einen Node generiert.
Das wäre auch noch eine Möglichkeit. Hierfür müsste man sich - um den Drupalweg zu gehen - aber eigentlich einen eigenen Menu Callback schreiben und durch diesen die Seite ausliefern lassen. Den Inhalt der externen Quelle könnte man sich via file_get_contents oder der Klasse simplehtmldom (direktes Auslesen definierter DOM Selektoren) auslesen.
SteffenR
eindeutig ist...
am 15.09.2013 - 22:18 Uhr
... das ich gerade merke, dass ich mir noch sehr viel aneignen muss...
ich verstehe zumindest wohl grob, wie es technisch ablaufen würde, wie ich es umsetzen müsste, davon habe ich aber leider keinen Plan.
Mit meinem Freund google habe ich bisher folgendes zu stande gebracht:
http://www.wsbederkesa.de/inhalt/ergebnisse-der-beerster-kanuregatta-2013
folgendes habe ich mir dazu zusammengegoogelt:
ein script, welches die größe des iframe anpasst, und den iframe dann halt an sich einbindet.
allerdings wäre es cool, wenn dieser sich nun in regelmäßigen Intervallen neu die Quelldatei einliest.
Ich habe beim Probieren festgestellt, dass recht lange eine Version aus dem Cache angezeigt wird. ich musste den Browser-Cache löschen, um den Inhalt der neuen HTML-Datei im IFrame angezeigt zu bekommen... das ist für die Live-Ergebnisse natürlich kaum praktikabel.
Das chaching an sich möchte ich für die Seite aber auch nicht abstellen müssen...
Das mit AJAX oben habe ich übrigens, trotz google, nicht verstanden bisher. auch wenn ich grob verstanden habe, was AJAX macht bzw. bewirkt...
Hier mal der Code des Node hinter dem Link oben:
<script language="JavaScript">
<!--
function autoResize(id){
var newheight;
var newwidth;
if(document.getElementById){
newheight=document.getElementById(id).contentWindow.document .body.scrollHeight;
newwidth=document.getElementById(id).contentWindow.document .body.scrollWidth;
}
document.getElementById(id).height= (newheight) + "px";
document.getElementById(id).width= (newwidth) + "px";
}
//-->
</script>
<IFRAME SRC="/sites/wsbederkesa.de/files/regergeb/Mld_Erg_Vereine.htm" width="50%" height="200px" id="iframe1" marginheight="0" frameborder="0" onLoad="autoResize('iframe1');"></iframe>
kann mir jemand weiterhelfen, was die regelmäßige aktualisierung angeht?
Ich habe soeben auch festgestellt, dass ich die Ergebnisse auch als XML-Datei übertragen könnte... wäre das ggf einfacher zu handeln?
Grüße
Jens
wenn die Daten innerhalb
am 15.09.2013 - 22:29 Uhr
Laufend aktualisiert werden sollen, kommst du an AJAX kaum vorbei.
Es sei denn, du machst die Aktualisierungen aus einem eingebetteten Objekt aus Flash oder JAVA.
mal wieder google...
am 15.09.2013 - 22:49 Uhr
aber die Lösung scheint es nicht zu sein
Wie bringe ich denn in den obigen code eine Ajax-Routine zum regelmäßigen aktualisieren mit rein?
so offenbar nicht.
<script type="text/javascript">
$(document).ready(function() {
$("#refresh").load("/sites/wsbederkesa.de/files/regergeb/Mld_Erg_Vereine.htm");
var refreshId = setInterval(function() {
$("#refresh").load('/sites/wsbederkesa.de/files/regergeb/Mld_Erg_Vereine.htm' + 1*new Date());
}, 1000);
});
</script>
<script language="JavaScript">
<!--
function autoResize(id){
var newheight;
var newwidth;
if(document.getElementById){
newheight=document.getElementById(id).contentWindow.document .body.scrollHeight;
newwidth=document.getElementById(id).contentWindow.document .body.scrollWidth;
}
document.getElementById(id).height= (newheight) + "px";
document.getElementById(id).width= (newwidth) + "px";
}
//-->
</script>
<div id="refresh" style="text-align:center;">
<IFRAME SRC="/sites/wsbederkesa.de/files/regergeb/Mld_Erg_Vereine.htm" width="50%" height="200px" id="iframe1" marginheight="0" frameborder="0" onLoad="autoResize('iframe1');"></iframe></div>
Ich habe zwei separate Lösungen, aber...
am 17.09.2013 - 12:07 Uhr
die müsste ich jetzt irgendwie zusammen gefügt bekommen... Da hab ich gestern hin und her probiert, aber zuletzt hat es mir das Layout zerschossen :( kann mit da jemand weiterhelfen?
Also, ich habe einen Html-seite, welche regelmäßig den Inhalt der Quelle aktualisiert:
<!doctype html>
<html>
<head>
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<META HTTP-EQUIV="EXPIRES" CONTENT="Wed, 11 Jan 1984 05:00:00 GMT">
<meta http-equiv="Expires" content="0" />
<meta charset="utf-8" />
<script src="/misc/jquery.js"></script>
<script>
$( document ).ready(function() {
$("#refresh").load("/sites/wsbederkesa.de/files/regergeb/Mld_Erg_Vereine.htm");
var refreshId = setInterval(function() {
$("#refresh").load("/sites/wsbederkesa.de/files/regergeb/Mld_Erg_Vereine.htm");
}, 1500);
});
</script>
</head>
<body>
<div id="refresh" style="text-align:left;"></div>
</body>
</html>
und einen Code, der die Seite als iframe einbindet, aber leider nicht aktualisiert...
<!DOCTYPE HTML>
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
<meta http-equiv="Pragma" content="no-cache" />
<meta http-equiv="Expires" content="0" />
<script language="JavaScript">
<!--
function autoResize(id){
var newheight;
var newwidth;
if(document.getElementById){
newheight=document.getElementById(id).contentWindow.document .body.scrollHeight;
newwidth=document.getElementById(id).contentWindow.document .body.scrollWidth;
}
document.getElementById(id).height= (newheight) + "px";
document.getElementById(id).width= (newwidth) + "px";
}
//-->
</script>
<script>
window.setInterval("reloadIFrame();", 1000);
function reloadIFrame() {
document.frames["MeldeErg"].location.reload();
}
</script>
<IFRAME SRC="/sites/wsbederkesa.de/files/regergeb/Mld_Erg_Vereine.htm" name="MeldeErg" width="50%" height="200px" id="iframe1" marginheight="0" frameborder="0" onLoad="autoResize('iframe1');"></iframe>
wie bekomme ich jetzt beides in eins? Also einen iframe, der von der größe her automatisch sich dem Inhalt anpasst und aktualisiert?
Grüße
Jens