• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Feeds per js abholen

glupto

New member
Hallo, bin leider nicht js-erfahren. Habe bisher eine Reihe von feeds per php abgeholt und dann per css un html abgebildet. Der Seitenaufbau dauert aber zu langen und ich habe mir sagen lassen, dass es per js schneller ginge, da man für jeden feed einen eigenen request startet. Ich habe verschiedene vorhandenene js-Scripts angeschaut ( 20+ Best jQuery Rss feed reader tutorial & plugin with examplesund ausprobiert, leider ohne dass überhaupt ein Feed dargestellt wurde. (Manches habe ich aber auch gar nicht erst ausprobiert, da das script nicht für mich gepasst hätte.). Hat jemand einen Tipp für mich?

Gruß und Dank glupto
 
Du kannst auch mit PHP parallel deine Feeds holen: bei cURL die ganzen multi-Funktionen.

Aber wenn du das mit JS machen willst, musst du dich schon ein bisschen in JS reinlesen - aber das ist alles keine Hexerei.
 
Danke für den Hinweis. cURL ist mir bisher noch nicht begegnet. Kennst Du da was Deutschsprachiges zum Reinarbeiten? Ich WILL es gar nicht unbedingt mit js machen. Ich merke nur, dass meine Seite zu lange zum Laden braucht. (Merkwürdigerweise nur manchmal) kommt es zum memory-limit-timeout, so dass nur eine weiße Seite erscheint (Antwort des providers:
Wir vermuten, dass der Code hier das Memory Limit (memory_limit = 128MB) überschreitet und dann zum Timeout führt. Ein Problem ist, dass Sie Ihre RSS Feeds und Seiteninformationen direkt in Ihrem PHP-Code eingebettet haben. Es gibt keinen Cache oder Ajax (Siehe: de.wikipedia.org/wiki/Ajax_(Programmierung) ) welcher das Laden der Daten übernimmt, um ein Timeout zu verhindern. Wenn Sie den Code diesbezüglich optimieren könnten Sie nicht nur das Timeout verhindern, sondern auch wesentlich schnellere Ladezeiten erreichen.")

So kam ich auf die Idee mit js und AJAX. ALso, wenn es nur mit PHP (und cURL) auch ginge, wäre ich froh...

(Hier meine aktuelle Seite Nachrichtentisch und meine Seite für einen geplanten Relaunch mit responsible webdesign und tooltips: http://nachrichtentisch.de/theme4d.php)

Gruß
glupto
 
Zuletzt bearbeitet von einem Moderator:
Es gibt das PHP-Manual auch auf Deutsch und zu cURL ist es auch relativ vollständig.

Aber wenn du auch noch Speicherprobleme hast, kann JS da schon helfen, da du dann die Arbeit auf den Client auslagerst. Aber dann musst du ein Proxyskript auf deinem Server laufen lassen, da du sonst die SOP verletzt.
 
Hallo, also, ich habe jetzt versucht, zwei Lösungen miteinander zu kombinieren, die getrennt voneinander laufen, aber zusammen bisher nicht. Vielleicht ist jemand so nett und schaut mal rauf. Also:

Die eine Variante baut mit js die feeds nacheinander auf, ist aber vom Design und manchen Funktionalitäten (media queries/tooltips) nicht auf dem letzten Stand:
http://nachrichtentisch.de/js.php
Und die zweite
http://nachrichtentisch.de/test.php
ist weitgehend "responsible", lädt die feeds aber nach wie vor mit php - und das dauert.

Ich habe jetzt mit
http://nachrichtentisch.de/test1.php
versucht, das Ganze zu kombinieren, was aber nicht klappt. Merkwürdigerweise sieht die Sache zunächst völlig vermurkst aus. Bei einem Resize werden aber immerhin die article-Elemente annähernd in voller Schönheit präsentiert. Also erst damm wird das equalheights-script in "scripts2.js" geladen, das die articles in gleiche Größe bringt. Die tooltips von tooltipster im selben script werden auch nicht geladen.

Gruß und Dank
glupto

P.S. Sorry hatte zunächst die Links falsch angegeben.
 
Zuletzt bearbeitet:
Du musst natürlich jedes mal, wenn ein Feed mit JS abgeholt, geparst und ist DOM geschrieben wurde, deine Skripte, die deine Darstellung anpassen sollen, noch mal ausführen.

PS: ich bin ja der Meinung, dass man das auch komplett mit CSS machen können sollte... hab's mir aber nicht zu genau angesehen.
 
Du musst natürlich jedes mal, wenn ein Feed mit JS abgeholt, geparst und ist DOM geschrieben wurde, deine Skripte, die deine Darstellung anpassen sollen, noch mal ausführen.

PS: ich bin ja der Meinung, dass man das auch komplett mit CSS machen können sollte... hab's mir aber nicht zu genau angesehen.

Frage an die JS-Experten: Wie rufe ich am Ende der Feedverarbeitung das Script zu equalheight und toltipster auf. Ich habe es mit equalheight so versucht.
Code:
  <script type="text/javascript">

var feedObj = null;
    feedObj = new XMLHttpRequest();
var i = 1;

window.onload = function() {

    function beginneLaden() {

        feedObj.open("GET", "feeds1.php?feedid="+i);
        feedObj.onreadystatechange = ladeFeeds;
        feedObj.send(null);

        function ladeFeeds() {

            var fa = false;
            var anzahl = 18;      // Anzahl der Feeds angeben

            if (feedObj.readyState == 4) {
                document.getElementById("feed"+i).innerHTML += feedObj.responseText;
                i++;
                fa = true;
                if (i > anzahl) {fa = false;
                }
            }
            if (fa != false) {

                beginneLaden();
                equalheight();
            }
        }
    }
    beginneLaden();
    equalheight();
}
</script>

was aber nicht funktioniert. Kann ich das Skript (scripts2.js)pauschal in eine js-Function einbinden und wie?

Hier der Code von scripts2.js
Code:
equalheight = function(container){

var currentTallest = 0,
     currentRowStart = 0,
     rowDivs = new Array(),
     $el,
     topPosition = 0;
 $(container).each(function() {

   $el = $(this);
   $($el).height('auto')
   topPostion = $el.position().top;

   if (currentRowStart != topPostion) {
     for (currentDiv = 0 ; currentDiv < rowDivs.length ; currentDiv++) {
       rowDivs[currentDiv].height(currentTallest);
     }
     rowDivs.length = 0; // empty the array
     currentRowStart = topPostion;
     currentTallest = $el.height();
     rowDivs.push($el);
   } else {
     rowDivs.push($el);
     currentTallest = (currentTallest < $el.height()) ? ($el.height()) : (currentTallest);
  }
   for (currentDiv = 0 ; currentDiv < rowDivs.length ; currentDiv++) {
     rowDivs[currentDiv].height(currentTallest);
   }
 });
}

$(window).load(function() {
  equalheight('.main article');
});


$(window).resize(function(){
  equalheight('.main article');
});


        $(document).ready(function() {
            $('.tooltip').tooltipster({
   contentAsHTML: true,
   autoclose: true,
   animation: 'grow',
   delay: 400,
   theme: 'tooltipster-default',
   touchDevices: true,
   trigger: 'click',
   interactive: true,
   timer: '15'
});
 $(window).keypress(function() {
      $('#example').tooltipster('hide');
   });
});


function timedRefresh(timeoutPeriod) {
    setTimeout("location.reload(true);",timeoutPeriod);
}

Wie man die automatische Größenanpassung der articles nur mit css hinkriegt, ist mir unklar, habe viel überlegt und gesucht. Deshalb fand ich das equalheight-script ganz nützlich.

Gruß
glupto
 
Zuletzt bearbeitet:
du verwendest globale variablen.
equalheight erwartet einen parameter
mas bedeutet eigentlich das i? wenn du 18 mal beginneLaden() aufgerufen hast, ist schluss. warum? und warum 18 requests? warum nicht alles mit einmal?
steht was in der fehlerkonsole?
 
du verwendest globale variablen.
equalheight erwartet einen parameter
mas bedeutet eigentlich das i? wenn du 18 mal beginneLaden() aufgerufen hast, ist schluss. warum? und warum 18 requests? warum nicht alles mit einmal?
steht was in der fehlerkonsole?

Es sind 18 Feeds, die auf diese Weise geholt werden, manche Seiten lassen sich nur durch PHP abrufen. Insofern ist 18 = alles.

Die Fehlerkonsole sagt meiner Einschätzung nach nichts, was mit dem js-script zu tun hat (css-Fehler, box-sizing usw.)

Kann mir jemand dabei helfen, welchen Parameter equalheight an der Stelle erwartet - ich habe es mit "main", "container" und "article" versucht, außerdem habe ich damit ja auch noch nicht den tooltipster-scriptteil integriert.
 
Zuletzt bearbeitet:
Kann mir jemand dabei helfen, welchen Parameter equalheight an der Stelle erwartet - ich habe es mit "main", "container" und "article" versucht,
das ist raten und nicht unbedingt hilfreich.
dem funktionsnamen nach, groben überfliegen des codes und deiner beschreibung nach, sollte das ein jQuery-objekt sein, mit elementen, welche gleich ausgerichtet werden sollen.
aber irgendwo musst du das doch her haben. gibts da keine beschreibung?


außerdem habe ich damit ja auch noch nicht den tooltipster-scriptteil integriert.
ja?
 
das ist raten und nicht unbedingt hilfreich.
dem funktionsnamen nach, groben überfliegen des codes und deiner beschreibung nach, sollte das ein jQuery-objekt sein, mit elementen, welche gleich ausgerichtet werden sollen.
aber irgendwo musst du das doch her haben. gibts da keine beschreibung?


ja?

Naja, meine zweite Frage zielte darauf ab, ob ich nicht "einfach" innerhalb oder am Ende des feed-Aufrufs mein script2.js aufrufen, in dem ist ja sowohl die article-Höhen-Angleichung enthalten, die ja in meinem Nachrichtentisch funktioniert als auch die tooltipster-Funktion und der Reload der Seite?

Das eqheight-Script stammt von hier: eqHeight.coffee by jsliang

Dort gibt es zwar ein How-To-Use, das mir aber in dem Fall auch nicht weiterhilft.

Gruß und Dank
glupto
 
Naja, meine zweite Frage zielte darauf ab, ob ich nicht "einfach" innerhalb oder am Ende des feed-Aufrufs mein script2.js aufrufen, in dem ist ja sowohl die article-Höhen-Angleichung enthalten, die ja in meinem Nachrichtentisch funktioniert als auch die tooltipster-Funktion und der Reload der Seite?
ein script kann man nicht aufrufen, sondern einbinden. aufrufen kann man funktionen. das scheinen bei dir
* equalheight
* tooltipster
* timedRefresh
zu sein.
timedRefresh kannst du einmal im onload/document-ready aufrufen, aber wozu soll es gut sein? das lädt ständig die seite neu! das will keiner!

mit equalheight scheinst du nachgeladenes html ausrichten zu wollen, dann musst du es im onreadystate des requestobjektes machen, und machst es ja auch. ob die anderen stellen nötig sind, wo du es noch aufrufst weiss ich nicht.

der tooltipster erzeugt vermutlich einen tooltip, ob es reicht, diesen im onload/document-ready aufzurufen weiss ich nicht. was steht denn im tooltip? auch/nur nachgeladenes html? dann ins onreadystate kopieren/verschieben mit den entsprechenden parametern.
 
Das Merkwürdige ist ja: im Moment, wo ich die feeds per php hole, klappt es. Ich binde am Ende nach dem Aufrufen aller feeds die Datei script2.js ein und alle articles kriegen die richtige Größe und die tooltips sind da (darin ist die Description bzw. Content bzw. Summary der feeds). timedRefresh wird ja nur einmal aufgerufen zu Beginn der Seite, damit wird nach fünf Minuten die Seite neu geladen, denn in Nachrichtenfeeds ändert sich häufig etwas. Warum aber wird das eingebundene script nicht am Ende geladen, sondern nur beim resize und die tooltips sind gar nicht da.
 
Das Merkwürdige ist ja: im Moment, wo ich die feeds per php hole, klappt es.
was ist daran merkwürdig? einmal hast du eine statische html seite, auch wenn sie über php generiert wird, auf dem client ist sie erst mal statisch.
in dieses statische html bindest du am ende jetzt ein script ein. das registriert an elementen eventhandler, ändert evtl. auch noch ein bischen was am html, um eine struktur zu bekommen mit dem das script etwas anfangen kann.

jetzt fängst du an teile dieses html nicht mehr statisch einzubinden, sondern später, zur laufzeit, nachzuladen. du lieferst also erst mal wieder html, aber ohne die html elemente der feeds. in dieses html, ohne die html elemente der feeds, bindest du am ende wieder das script ein. das versucht eventhandler an den html elementen der feeds zu registrieren, die sind aber noch gar nicht da. die werden ja erst später geladen.

timedRefresh wird ja nur einmal aufgerufen zu Beginn der Seite, damit wird nach fünf Minuten die Seite neu geladen, denn in Nachrichtenfeeds ändert sich häufig etwas.
wenn du die feeds aber jetzt sowieso nachlädst, musst du doch nicht die ganze seite neu laden, sondern nur wieder die feeds. und ggf. die alten vorher entfernen.

Warum aber wird das eingebundene script nicht am Ende geladen
das script wird schon geladen, es kann aber nichts machen, weil es die feeds nicht findet.
 
Zurück
Oben