Avatar billede dotcom1 Nybegynder
07. november 2012 - 15:32 Der er 15 kommentarer og
1 løsning

Parse atom/RSS fees - pagination?

Hej.

Jeg bruger pt. FeedEk.js til at parse et atom/RSS feed. Det virker fint, men hvis man f.eks. vælger at vise 30+ nyheder, bliver siden meget lang. (Og hvordan skal man ellers kunne se ældre nyheder, hvis ikke man vælger at få vist mange nyheder?)
Derfor tænker jeg om man ikke kan lave en paging? Der findes mange færdige plugins, f.eks. SimplePager, men det er ikke lykkes mig at kombinere de to funktionaliteter.

Nogen der kan hjælpe med input?
Avatar billede olebole Juniormester
07. november 2012 - 18:53 #1
<ole>

Hvor er du kommet til? Hvad kan du ikke få til at fungere?

/mvh
</bole>
Avatar billede dotcom1 Nybegynder
08. november 2012 - 10:27 #2
Hej.

Jeg har lavet en test her.

Første problem er, at jeg ikke kan få hver nyhed lagt i én div - lige nu er overskrift, dato og content i hver sin div. Jeg har forsøgt i FeedEk.js - se kommentarer i filen, men uden held.

Andet trin: Jeg har inkluderet SimplePager, bare for at prøve at page f.eks. itemContent, men der sker ikke rigtig noget.

Nogen idé til hvad jeg kan gøre?
Avatar billede olebole Juniormester
08. november 2012 - 15:09 #3
1) Sådan er FeedEk skrevet. Vil du lave det om, går jeg udfra, du må skrive scriptet om. Det er yderst sparsomt med dokumentation, så det er ikke til at vide med sikkerhed (med mindre man gider gå koden igennem i enkeltheder)

2) Jeg kan ikke se, hvad du har prøvet - andet end at sætte SimplePager scriptfilen ind i toppen
Avatar billede dotcom1 Nybegynder
08. november 2012 - 15:44 #4
Hej igen.

Tak for svar.

Jeg prøver nu med en anden parser, som i eksemplet her. Jeg har inkluderet SimplePager, men uden nogen forskel.

Til gengæld har jeg læst i pluginets forum, at man kan bruge offset-metoden i parseren til at lave en paging-funktionalitet - noget med at plugin'ets callback kan checke om der er flere <li> tags tilbage, og lave forrige/næste-knapper til at øge eller mindske offset-værdien.

Jeg har bare ingen anelse om hvordan man gør i praksis.
Avatar billede olebole Juniormester
08. november 2012 - 16:16 #5
Jeg tror, du bør prøve at få én ting til at virke. Du får nok ikke noget ud af at sidde og fægte med begge extensions på én gang.
Avatar billede dotcom1 Nybegynder
08. november 2012 - 17:49 #6
Hej Ole.

Enig. Ud med SimplePager. Har du evt. mod på at hjælpe med at lave en funktion med offset på parseren? Jeg er bange for at mine egne evner ikke helt rækker.
Avatar billede olebole Juniormester
08. november 2012 - 19:30 #7
Det kunne gøres sådan:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
  <meta http-equiv="content-type" content="text/html;charset=utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
  <script type="text/javascript" src="jquery.zrssfeed.js"></script>

<script type="text/javascript">
var oRssConfig = {
    maxItems: 5,
    contempOffset: 1
};
function loadRssItems() {
    $('#test').rssfeed('http://rss.cnn.com/rss/edition.rss', {
        limit: oRssConfig.maxItems,
        offset: oRssConfig.contempOffset
    });
    $('#offsetDispl').text(oRssConfig.contempOffset+" - "+(oRssConfig.contempOffset+oRssConfig.maxItems-1));
}
$(document).ready(function() {
    loadRssItems();
    $('#btnPrev').click(function() {
        if (oRssConfig.contempOffset>oRssConfig.maxItems) oRssConfig.contempOffset -= oRssConfig.maxItems;
        loadRssItems();
    });
    $('#btnNext').click(function() {
        oRssConfig.contempOffset += oRssConfig.maxItems;
        loadRssItems();
    });
});
</script>
<style type="text/css">
body { font-family: arial;font-size: 12px; }
#btns {
    position: relative;
    width: 600px;
}
#btns div  {
    width: 20px;
    margin-bottom: 20px;
    font-weight: bold;
    text-align: center;
    color: #fff;
    background: #999;
    cursor: pointer;
}
#btnPrev  {
    position: relative;
}
#btnNext  {
    position: absolute;
    top: 0;
    right: 0;
}
#btns div#offsetDispl {
    position: absolute;
    width: 100%;
    top: 0;
    text-align: center;
    z-index: -1;
}
</style>
</head>
<body>

<div id="btns">
    <div id="btnPrev">&lt;</div>
    <div id="offsetDispl"></div>
    <div id="btnNext">&gt;</div>
</div>
<div id="test"></div>
</body>
</html>
Avatar billede olebole Juniormester
08. november 2012 - 19:31 #8
Du fixer lige selv URL'erne  *o)
Avatar billede olebole Juniormester
08. november 2012 - 22:04 #9
Hmmm ... kom til at tænke på, at dette nok vile være mere hensigtsmæssigt:

<script type="text/javascript">
var oRssConfig = {
    maxItems: 5,
    contempOffset: 1
};
function loadRssItems() {
    $('#test').rssfeed('http://rss.cnn.com/rss/edition.rss', {
        limit: oRssConfig.maxItems,
        offset: oRssConfig.contempOffset
    });
    $('#offsetDispl').text(oRssConfig.contempOffset+" - "+(oRssConfig.contempOffset+oRssConfig.maxItems-1));
    $('#btnPrev').css("display", oRssConfig.contempOffset>oRssConfig.maxItems ? "block" : "none");
    $('#btnNext').css("display", oRssConfig.contempOffset<100-oRssConfig.maxItems ? "block" : "none");
}
$(document).ready(function() {
    loadRssItems();
    $('#btnPrev').click(function() {
        oRssConfig.contempOffset -= oRssConfig.maxItems;
        if (oRssConfig.contempOffset<1) oRssConfig.contempOffset = 1;
        loadRssItems();
    });
    $('#btnNext').click(function() {
        oRssConfig.contempOffset += oRssConfig.maxItems;
        if (oRssConfig.contempOffset>100) oRssConfig.contempOffset = 100;
        loadRssItems();
    });
});
</script>
Avatar billede dotcom1 Nybegynder
09. november 2012 - 09:43 #10
Hej igen.

Ole, det er jo fantastisk. Det virker super godt. Tusind tak.

Eneste lille ting - hvis der kun er f.eks. 20 items i feedet, så fortsætter den pagingen med tomme sider op til de 100 eller hvad man nu har sat værdien til i scriptet.
Kan man lave et check, der ser om der er flere items i listen når man bladrer, og hvis ikke, så stoppes muligheden for at bladre videre?
Avatar billede olebole Juniormester
09. november 2012 - 12:35 #11
Selvtak. Jeg har ikke selv arbejdet med det pågældende API, og da jeg kikkede i dokumentationen, kunne jeg ikke umiddelbart se muligheden (men brugte heller ikke særlig lang tid på det). Derfor lavede jeg nødløsningen med de 100  =)
Avatar billede dotcom1 Nybegynder
09. november 2012 - 12:44 #12
Helt ok. Læg gerne et svar.
Avatar billede olebole Juniormester
09. november 2012 - 13:04 #13
Et hurtigt 'hack' kunne være følgende i JS-filen (fra linje 94):

            // Send request
            $.getJSON(api, function(data){
               
                // Check for error
                if (data.responseStatus == 200) {

                    // Process the feeds
                    _process(e, data.responseData, options);
                   
                    var inx=0;
                    for (var x in data.responseData.feed.entries) inx++;


                    // Optional user callback function
                    if ($.isFunction(fn)) fn.call(this,$e,inx);
                   
                } else {

- og så disse ændringer i HTML-filens JS:

function handlButtons() {
    var numEntriesReturned = arguments[1];
    if (numEntriesReturned+1-oRssConfig.contempOffset>0 && oRssConfig.contempOffset<100-oRssConfig.maxItems) $('#btnNext').css("display", "block");
    else $('#btnNext').css("display", "none");
    $('#btnPrev').css("display", oRssConfig.contempOffset>oRssConfig.maxItems ? "block" : "none");
    $('#offsetDispl').text(oRssConfig.contempOffset+" - "+Math.min(oRssConfig.contempOffset+oRssConfig.maxItems-1, numEntriesReturned));
}
var oRssConfig = {
    maxItems: 5,
    contempOffset: 90
};
function loadRssItems() {
    $('#test').rssfeed('http://rss.cnn.com/rss/edition.rss', {
        limit: oRssConfig.maxItems,
        offset: oRssConfig.contempOffset
    }, handlButtons);
}

Så vil jeg mene, det kører. Måske ikke fikseste løsning - men en mulighed  =)

Husk at skrive en kommentar (gerne med NB, OBS og VERSALER), i JS-filen, som fortæller, du har lavet modifikationer af den oprindelige kode
Avatar billede olebole Juniormester
09. november 2012 - 13:12 #14
Ellers tak, jeg samler ikke point. Læg selv et svar og accepter det, så tråden lukkes  =)

PS: I nuværende version er Prev-knappen kun aktiv, når man har bladret op. Next-knappen er aktiv, sålænge der returneres mere end max-pr-side (i øjeblikket 5) - og der ikke er bladret op til mere end 100 entries.

PPS: Ret lige contempOffset: 90 tilbage til 1. De 90 var bare til test, fordi jeg ikke gad bladre så langt  :D
Avatar billede olebole Juniormester
09. november 2012 - 13:15 #15
Nu skriver den også 90-92 og ikke 90-100, når der er 92 entries tilgængelig - og der derfor kun returneres tre entries i sidste hug (som tilfældet er i skrivende stund for det pågældende RSS)
Avatar billede dotcom1 Nybegynder
09. november 2012 - 13:32 #16
Yes, det er smukt. Sejt!
Du har gjort mere end rigeligt. Tusind tak for hjælpen.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester