Jump to content
php.lv forumi

Read/Unread


eT`

Recommended Posts

  • Replies 30
  • Created
  • Last Reply

Top Posters In This Topic

tabula views(

user_id

thread_id

date_viewed

)

 

ja date_viewed(vai tāda vispār nav) ir mazāks par thread last post date, tad lietotājs nav lasījis postu. Tiklīdz lietotājs ieiet postā, tā ievietojam views tabulā ierakstu (protams, to nevajadzētu darīt uz katra refresh)

 

Šito nekad neesmu taisījis, bet tā iztēlojos, ka tas notiktu....

Link to comment
Share on other sites

Labprāt redzētu, ko eT ir/būs sadarījis :]

Pats arī pašlaik cenšos to veidot. Tieši pēc tam, kad izlasīju briedis iedoto.

 

EDIT: Esmu iesprūdis jau pie pirmā kverija.

Kad tiek izvadītas kategorijas, tad nepieciešams noteikt, vai iekšs šīs kategorijas ir kāds temats, kuru nav lasījis lietotājs.

 

forums_temati (id, name)

forums_read (lietotajs,temats,datums)

 

EDIT: Dabūju sev gatavu kaut ko tādu.

$rs = mysql_query("SELECT t2.lietotajs FROM ".PREFIX."forums_temati as t1, ".PREFIX."forums_read AS t2 WHERE t2.lietotajs = '".$lietotajs['id']."' AND t1.subkategorija = '".$subkategorija['id']."'") or die(mysql_error());
if(mysql_num_rows($rs) > 0) $read_status = 'http://php.lv/f/public/style_images/master/f_read.png';

Edited by anonīms
Link to comment
Share on other sites

ideja.

 

SQL tabula.

id,lietotajs,temas_id,posta_id

 

izvelkam no konkrētā topika pēdējā posta id, tad salīdzinam ja tabulā jau ir attiecīgs lauks rādam read, bet ja nav pie apskatīšanas ievietojam un rādam unread.

 

EDIT:

 function read($temasid,$useris)
 {
 $k = mysql_query("SELECT id FROM forums_posts WHERE tid='$temasid' ORDER BY id DESC LIMIT 1");
 $row = mysql_fetch_array($k);
 $posts = $row["id"];
 $l = mysql_query("SELECT * FROM forums_views WHERE user='$useris' AND temas_id='$temasid' AND posta_id='$posts'");
 $m = mysql_fetch_array($l);
   if(empty($m))
   {
   /*atgriež nelasīto bildi*/
   }
   else
   {
   /*atgriež lasīto bildi*/
   }
 }

 

bet vajadzētu atgriezt bildītes.

Edited by eT`
Link to comment
Share on other sites

lol, tādas lietas, ko kurš ir apskatījis, vsp neglabā db. priekš tam ir cookie. ieliec tur sarakstu ar visiem thread id, kurus useris ir apskatījis (neatkarīgi vai ir ielogojies vai nav). piemēram: viewed_threads=1,2,5,7,8,14,23,112,123,250

 

un kad rādi thread sarakstu, tad katru apskatīto kkā vizuāli noformē, lai atšķiras no neapskatītajiem, balstoties uz to cookie informāciju

Link to comment
Share on other sites

Tik tālu nu ir :D

<?php
$array['uid'] = 1337; // lietotaja ID
$array['b'] = 'kaka';

$str = serialize($array);
$strenc = urlencode($str);
setcookie('forum_read',$strenc,mktime()+99999999999999);
echo $str . "<br />";
echo $strenc;
?>

 

Tik īsti nav skaidrs nafig tam $array vaajg ['wtf'], jo bez tā viņš tikai ķer vienu.

Kā tad īsti izvilkt visus tematus un tad atlasīt, kuri ir, kuri nav lasīti?

Link to comment
Share on other sites

@ 2easy, bet ja tēmā ir jauns posts?

piemēram vai ir kāda iespēja, kā salādēt cepumā visu saturu kā emm varētu pat ar masīvu laikam.

un katru reizi kā apskata topiku, tā pievieno cepumam jaunu masīva elementu.

Bet kā no cepuma pārbaudīt vai tāds elements eksistē?

 

@ anonīms. neko nesaprotu, ko tu tur esi sarakstījis :D ķīniešu ābece :D

Link to comment
Share on other sites

nav jāmet nekāds uid. vsp no mana viedokļa nav svarīgi, vai topikus ir apskatījis ielogojies useris vai anonīms apmeklētājs. galvenais, ka man no šī apmeklētāja browsera pienāk cookie ar visu apskatīto topiku id sarakstu: topics_read:123,234,345,456

 

tālāk no šī saraksta var iegūt masīvu: $aRead = explode(',', $_COOKIE['topics_read']);

un kad echoju foruma topikus, tad čekoju: if (in_array($topic_id, $aRead)) ... else ...

 

pārējo daļu, kā izveidot/papildināt to topics_read kūkiju, cerams, jūs varēsiet izdomāt paši ;)

 

tīri no lietojamības viedokļa es pats šādu fīču nelietotu. vnk paskatītos jaunākos topikus. tas man liekas daudz svarīgāk. un arī padomājot loģiski, palielākā forumā tie topiki ir tūkstošiem. sanāk katru reizi, katrā pieprasījumā līdzi ceļo miiilziiiga kūka ar visiem izlasītajiem id. es tīri no performances/trafika neko tādu nedarītu, ja pats taisītu savu forumu. bet nju treniņa pēc jau šādu "fīču" varat uzkodēt ;) nu jā tādā gadījumā, lai atslogotu trafiku, izlasītos id tiešām saprātīgāk būtu glabāt db (ja tas tiešām ir tik svarīgi. man gan tā drīzāk liktos kā db piecūkošana ar mazsvarīgu/nesvarīgu/nevajadzīgu info). lol

Edited by 2easy
Link to comment
Share on other sites

@easy es jau labprāt liktu caur DB bet nevari pačekot kapēc mana f-ja neiet?

 

 function read($temasid,$useris)
 {
 $k = mysql_query("SELECT id FROM forums_posts WHERE tid='$temasid' ORDER BY id DESC LIMIT 1");
 $row = mysql_fetch_array($k);
 $posts = $row["id"];
 $l = mysql_query("SELECT * FROM forums_views WHERE user='$useris' AND temas_id='$temasid' AND posta_id='$posts'");
 $m = mysql_fetch_array($l);
   if(empty($m))
   {
   $lasita = "unread.png";
   }
   else
   {
   $lasita = "read.png";
   }
 return $lasita;
 }

 

un f-jas izsaukšana

read($row5["id"], $_SESSION["user"]);
<img src=http://filmam.lv/images/$lasita />

Edited by eT`
Link to comment
Share on other sites

a kam tev vajag posta_id?

Ja teiksim iemet jaunu atbildi, tad delete from where user_id != postotaja_id and temata_id = ?

Neredzu jēgu tam postam, ja pēc katra posta var drīzāk izmest ārā tos, kuri skatījušies pirms viņš postojis

EDIT: eT, a te f-ja kaut ko atgriež vispār?

EDIT2: Es tikai nesaprotu kapēc tev tur visu sarežģīt vajag?

Parādi kā tev tabula izskatās.

Edited by anonīms
Link to comment
Share on other sites

omg, uz katra topika parādīšanu 2x mysql_query()!!! tas nav uz labu :D vajag jau laikus vienu selektu ar visiem šī usera apskatītajiem topiku id un laiku, kad apskatījās. un jā, anonīms pareizi atgādināja, ka laiks ir svarīgs!!! tipa jauns posts, un topic vairs neskaitās read (savādāk tikai pirmo postu izlasīs un domās, ka tālāk nekā jauna nav :D). tāpēc pie topika arī vajag info, kad ir pēdējais posts bijis. ja šis posts ir bijis senāk nekā apskatīts, zna4it topic ir read, else unread

Edited by 2easy
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

×
×
  • Create New...