Új bejegyzés felülre

Új bejegyzés felülre
2012-06-29T21:46:11+02:00
2012-06-29T22:34:40+02:00
2022-11-26T05:15:33+01:00
retep_x
Sziasztok!

A lenti kód először letölti adatbázisból az utolsó 4 bejegyzést, majd ha érkezik új, akkor azt automatikusan hozzáilleszteni az aljára.
Én azt szeretném elérni, hogy az oldal betöltése után érkezett bejegyzések a legtetejére kerüljenek. Vagyis, hogy mindig a legfrissebb bejegyzés kerüljön előre.

A lenti php ajaxosan van meghíva egy másik oldalra, ahol egy div-be jelenik meg.

Tudnátok segíteni?

thx


<?php require('conn.php'); function getNewMessagesSince($timestamp, $limit) { $lastupdate = array(); $html = ''; // get last ten messages if($timestamp == -1) { $sql = 'SELECT fid, tartalom,user_name,uid, datum FROM fal,user WHERE ki=uid ORDER BY fid DESC LIMIT '.intval($limit); $res = mysql_query($sql); while ($row = mysql_fetch_array($res)) { $lastupdate[] = $row['fid']; $html .= '<li>'.htmlentities($row['tartalom'], ENT_QUOTES, 'UTF-8','').'<div class="uzenofal_kuldo">' . nicetime($row['datum']) .' | <a href="profil.php?uid=' . $row['uid'] .'">'. $row['user_name'] . '</a> </div> </li>'; } } // get latest messages else { $sql = 'SELECT fid, tartalom,user_name,uid, datum FROM fal,user WHERE ki=uid and fid > '.intval($timestamp).' ORDER BY fid DESC LIMIT '.intval($limit); $res = mysql_query($sql); while ($row = mysql_fetch_array($res)) { $lastupdate[] = $row['fid']; $html .= '<li class="first">'.htmlentities($row['tartalom'], ENT_QUOTES, 'UTF-8','').'<div class="uzenofal_kuldo">' . nicetime($row['datum']) .' | <a href="profil.php?uid=' . $row['uid'] .'">'. $row['user_name'] . '</a> </div> </li>'; } } if(count($lastupdate)) { rsort($lastupdate); return array( 'lastupdate' => array_shift($lastupdate), 'html' => $html ); } return false; } $lastupdate = isset($_POST['lastupdate']) ? $_POST['lastupdate'] : null; $limit = isset($_POST['limit']) ? $_POST['limit'] : 4; $timeout = time() + 4; while(!($row = getNewMessagesSince($lastupdate, $limit)) && time() < $timeout) { usleep(200000); } echo json_encode($row); ?>
Mutasd a teljes hozzászólást!
Akkor kódban valahogy így nézhetne ki a javaslatom:


document.getElementById(up.div).innerHTML = data.html + document.getElementById(up.div).innerHTML;

(Az "append"-el nem feltétlenül az .append()-re gondoltam. Persze, nem voltam egészen egyértelmű. )
Mutasd a teljes hozzászólást!

  • Én azt szeretném elérni, hogy az oldal betöltése után érkezett bejegyzések a legtetejére kerüljenek. Vagyis, hogy mindig a legfrissebb bejegyzés kerüljön előre.


    Ez esetben "fid" helyett "datum" alapján rendezz a lekérdezéseben.
    Mutasd a teljes hozzászólást!
  • Az sajnos mind1, nem ez a gond mert a legnagyobb fid a legújabb is egyben.
    Mutasd a teljes hozzászólást!
  • Igen. Én voltam a figyelmetlen.

    Mivel javascript/jQuery-t nem mellékeltél, ezért elvben egy lehetséges megoldás:

    Teljes egészében frissítsd a dived úgy, hogy először az új bejegyzést tedd bele, majd append-eld az addigi tartalmát.
    Mutasd a teljes hozzászólást!
  • Ez van a megjelenítő oldalon a head-ben:

    <script type="text/javascript" src="ajax.js"></script> <script type="text/javascript"> function Chat(div, url, lastupdate) { this.div = div; this.url = url; this.lastupdate = lastupdate || null; this.start = function(lastupdate) { this.lastupdate = lastupdate || this.lastupdate; ajaxPost(this.url, 'lastupdate='+ this.lastupdate, function(up) { return function() { if (this.readyState == 4) { // success if(this.status == 200) { var data = eval('(' + this.responseText + ')'); // start next timer, if response is empty, reuse the last known update index up.start(data.lastupdate || up.lastupdate); // fill chat if(data.html) { document.getElementById(up.div).innerHTML += data.html; } } // connection error else { // try again in 5 seconds setTimeout(function(){ up.start(up.lastupdate); }, 5000); } } }; }(this)); }; } var chat = new Chat('chat', 'forras.php', -1); </script>

    Body:


    <div id="chat"></div> <script type="text/javascript">chat.start();</script>

    Korábban már próbáltam appendel is, de nem sikerült jól működő verziót összehoznom.
    Mutasd a teljes hozzászólást!
  • Akkor kódban valahogy így nézhetne ki a javaslatom:


    document.getElementById(up.div).innerHTML = data.html + document.getElementById(up.div).innerHTML;

    (Az "append"-el nem feltétlenül az .append()-re gondoltam. Persze, nem voltam egészen egyértelmű. )
    Mutasd a teljes hozzászólást!
  • Köszönöm, most már jó! :)
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd