Jump to content
php.lv forumi

Read/Unread


eT`

Recommended Posts

2easy, bet teiksim, ja veido bez posta laika, kapēc gan nevarētu vnk dzēst laukus

Mēģināšu paskaidrot

eT izveidoja tematu(1): 13:50 (ar forums_read neko nedaram)
2easy(12) apskatīja tematu 13:52 (insert into forums_read 12,1)
bubu apskatīja tematu 13:55 (insert into...)
briedis pievienoja atbildi 13:57 (delete from forums_read where temata_id = 1 and lietotajs != briedis_id

un pēc briedis visiem rādas, ka temats nav lasīts, jo ir jauns posts.

 

apmēram šādi

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

  • Replies 30
  • Created
  • Last Reply

Top Posters In This Topic

PAr glabāšanu cepumos - sanāk ka, ja es izdzēšu cepumus, tad man visi forumi, visas tēmas rādās nelasītas?

Neliekas pareizi. Manuprāt tas ir DB jāglabā...

kāpēc nav pareizi? cookiji tieši ir domāti, lai glabātu usera settingus. ja userim tos nevajag, viņš tos nodzēš. turklāt ir anonīmie lasītāji, kuriem nav nekāda user id. ko nu? diskriminēt??? :D

 

par anonīms variantu: ir ok. tad nevajag menedžēt laiku. db variantā tā var darīt. glabājot cepumā, gan vajadzētu arī laiku pieglabāt

Link to comment
Share on other sites

Šodien pieķēros un iznākums ir tāds:

tabulas forumam

forums_kategorijas (id, name)

forums_subkategorijas (id, name, kategorija)

forums_temati (id [as temata_id],name)

forums_read (temats, lietotajs)

 

Pašā foruma sākumā iemetam (forums.php)

$read_status = 'http://php.lv/f/public/style_images/master/f_unread.png';

Galvenā foruma lapa (Kur tie attēlotas visas kategorijas un forumi iekšs tiem. (Nejaukt ar atvērtu forumu un tematu listiem)

if($ielogojies)
{
$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';
}

Forumu forumu lapā (Lapā, kur tiek attēloti noteikta foruma temati)

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

Apskatot kādu tematu

if($ielogojies)
{
$topic_read = mysql_num_rows(mysql_query("SELECT lietotajs FROM ".PREFIX."forums_read WHERE lietotajs = '".$lietotajs['id']."' AND temats = '".$temats['temata_id']."'"));
if($topic_read < 1)
{
mysql_query("INSERT INTO ".PREFIX."forums_read (temats, lietotajs) VALUES ('".$temats['temata_id']."','".$lietotajs['id']."')") or die(mysql_error());
}
}

Post'ojot atbildi kādā tematā. [$_POST]

mysql_query("DELETE FROM ".PREFIX."forums_read WHERE temats = '".$temats['temata_id']."' AND lietotajs != '".$lietotajs['id']."'");

Veidojot jaunu tematu [$_POST]

// veidotā tematu ID velk ārā kā nu kurš grib
$get_topic_id = mysql_result(mysql_query("SELECT id FROM ".PREFIX."temati WHERE autors = '".$lietotajs['id']."' AND nosaukums = '".$nosaukums."' ORDER BY id DESC LIMIT 1"),0,0);
mysql_query("INSERT INTO ".PREFIX."forums_read (temats, lietotajs) VALUES ('".$get_topic_id."','".$lietotajs['id']."')");

 

Tas laikam arī ir viss..

Kārtīgi testējis gan neesmu, bet vajadzētu strādāt.

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

Lielā vajadzība nav, bet tu biji domājis teiksim

forums_kategorijas (id,name,k)

ja k nav tukšs, tātad tātad tā ir apakškategorija, ja empty, tad lielā?

 

mhm. Kaut kad biju te rakstījis par to, kā to realizēt lai nebūtu rekursīvi kvēriju izsaukumi, lai to visu varētu atlasīt feini ar vienu kvēriju un nedaudz php piepalīdzēšanas... Tad vismaz rodas iespēja ērti menedžēt tās kategorijas neierobežotā dziļumā... Varbūt tavam forumam tas īsti nav nepieciešams, bet var noderēt citiem gadījumiem :)

Edited by briedis
Link to comment
Share on other sites

tamm vadoties pēc anonīmā posta izveidoju to sistēmu.

man strādā kad apskatu noteiktu subkategoriju ( rādās lasītiet un nelasītie ) bet nestrādā foruma galvenajā lapā.

 

$sql2 = mysql_query("SELECT * FROM forums_forumi WHERE kid='$kat_id' ORDER BY id ASC");
while($row2 = mysql_fetch_array($sql2))
{
$for_id = $row2["id"];

$rs = mysql_query("SELECT t2.user FROM forums_topics AS t1, forums_views AS t2 WHERE t2.user = '".$_COOKIE['id']."' AND t1.fid = '".$for_id."'");
if(mysql_num_rows($rs) > 0) $read = "http://filmam.lv/images/read.png";
else $read = "http://filmam.lv/images/unread.png";

 

EDIT:

šāds man ir kad apskatu noteiktu subkategoriju ( forumu )

$rs = mysql_query("SELECT * FROM forums_views WHERE user = '".$_COOKIE['id']."' AND temas_id = '".$row5['id']."'");
if(mysql_num_rows($rs) > 0) $read = "http://filmam.lv/images/read.png";
else $read = "http://filmam.lv/images/unread.png";

Edited by eT`
Link to comment
Share on other sites

Vispār to else unread.gif vari neizmantot.

Par to, ka neiet: parādi savu db struktūru vai vēl labāk. visu kodu, kurš velk ārā galveno foruma lapu.

 

EDIT: salīdzini savu foruma id ar to id, ko tev padod kverijā. (Vai viņi maz sakrīt)

Bet tā uzmetot acis uz kodu, izskatās, ka viss ir ok.

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

DB:

forums_kategorijas ( piemēram Galvenais, Offtopic utt. ) <= main kategorijas

forums_forumi ( visi foruma piem. Jaunumi, Atsauksmes utt. )

forums_topics ( tēmas )

forums_posts ( posti )

forums_views ( skatījumi )

 

vieta, kur izvelk galveno forumu

$sql1 = mysql_query("SELECT * FROM forums_kategorijas ORDER BY id ASC");
while($row1 = mysql_fetch_array($sql1))
{
//print_r($_SESSION);
$kat_name = $row1["name"];
$kat_id = $row1["id"];
echo "<tr><th colspan=4>$kat_name</th></tr>";
echo "<tr><td class=title>Nosaukums</td><td class=title>Tēmas</td><td class=title>Ieraksti</td><td class=title>Pēdējais ieraksts</td></tr>";
	$sql2 = mysql_query("SELECT * FROM forums_forumi WHERE kid='$kat_id' ORDER BY id ASC");
	while($row2 = mysql_fetch_array($sql2))
	{
	$for_id = $row2["id"];
	$rs = mysql_query("SELECT t2.user FROM forums_topics AS t1, forums_views AS t2 WHERE t2.user = '".$_COOKIE['id']."' AND t1.fid = '".$for_id."'");
 		if(mysql_num_rows($rs) > 0) $read = "http://filmam.lv/images/read.png";
	else $read = "http://filmam.lv/images/unread.png";

	$for_name = $row2["name"];
	$for_name_seo = seo_string($row2["name"]);
	$for_desc = $row2["desc"];
	$for_t_sk = $row2["topiccount"];
	$for_p_sk = $row2["postcount"];
		$sql3 = mysql_query("SELECT * FROM forums_posts WHERE fid='$for_id' ORDER BY date DESC LIMIT 1");
		$sql3a = mysql_query("SELECT * FROM forums_topics WHERE fid='$for_id' ORDER BY date DESC LIMIT 1");
		$row3 = mysql_fetch_array($sql3);
		$row3a = mysql_fetch_array($sql3a);
		if($row3a["date"] > $row3["date"])
		{
		$laiks = $row3a["date"];
		$name_ori = substr($row3a["title"],0,15);
		$name = seo_string($row3a["title"]);
		$useris = $row3a["user"];
		}
		else
		{
		$laiks = $row3["date"];
		$tid3 = $row3["tid"];
		$sql3b = mysql_query("SELECT title FROM forums_topics WHERE id='$tid3'");
		$row3b = mysql_fetch_array($sql3b);
		$name_ori = substr($row3b["title"],0,15);
		$name = seo_string($row3b["title"]);
		$useris = $row3["user"];
		}
	echo "
	<tr width=100%>
	<td width=60%>
		<table class=forum>
		<tr width=100%>
		<td class=no width=10%><img src=$read /></td><td class=no width=90%><b><a href=http://filmam.lv/forum/$for_name_seo>$for_name</b></a><br />$for_desc</td>
		</tr>
		</table>
	</td>
	<td width=10% class=num>$for_t_sk</td>
	<td width=10% class=num>$for_p_sk</td>
	<td width=20%>";
	if(!empty($row3) || !empty($row3a))
	{
	echo "<small>$laiks<br />Tēma: <a href=http://filmam.lv/forum/$for_name_seo/$name>$name_ori</a><br />Autors: <a href=http://filmam.lv/user/$useris>$useris</a></small>";
	}
	else
	{
	echo "<small>Nav ierakstu!</small>";
	}
	echo "</td>
	</tr>";
	}
	echo "<tr><td class=atstarpe></td></tr>";
}

 

EDIT: tikko ievēroju, ka man foruma galvenajā lapā read rāda visiem, forumiem, kuros ir ieraksti, bet pārējiem unread. Tātad vaina ir kvērijā, ne?

Edited by eT`
Link to comment
Share on other sites

kverijā gan.

Bet tas kods tāds pagars izskatās. Kveriji ar daudz

 

EDIT: Vispār man ir uznācis slinkums, tapēc dodu kā piemēru visu savu galvenās foruma lapas kodu.

http://paste.php.lv/5e23e2c326bd40c2a6a98a03ac5bf705/nonum

 

Jau laikus brīdinu - nebļaut par tur esošo haosu. :D

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

tammm mēģinu un man nesanāk izdomāt kādam būtu jāizskatās kvērijam kura f-ja būtu šāda:

izvelk lasīto topiku skaitu no forums_views, kas ir noteiktam forumam, un ja skaits nesakrīt ar kopējo skaitu izvadīt UNREAD.

 

SQL struktūra:

forums_forumi (id,kid[kategorijas id], name,seoid,desc[description],topiccount,postcount)

forums_topics (id,fid[foruma id], title,seoid,text,user,date, views, replies, pinned, locked,lastpost )

forums_views (id,user, teemas_id )

 

PHP struktūra

while(izvelkam kategorijas)
{
  while(izvelkam forumus no noteiktas kategorijas)
  {
   $rss = mysql_query("SELECT t2.user FROM forums_topics as t1, forums_views AS t2 WHERE t2.user = '".$_COOKIE['id']."' AND t1.fid = '".$for_id."'") or die(mysql_error());
       if(mysql_num_rows($rss) > 0) $read = 'http://filmam.lv/images/read.png';
  }
}

 

man varbūt vajag views tabulā pievienot vēl lauku foruma_id?

un tad izvilkt visus ar to foruma_id un salīdzināt skaitu?

Edited by eT`
Link to comment
Share on other sites

varbūt tu arī taisies tos ciklus ar sql pieprasījumiem izpildīt katrā requestā??? pie pietiekami liela skaita forumu/topiku/postu/useru tur viss sāks reāli bremzēt. turklāt tas viss tikai dēļ kkāda read/unread :D gribot, negribot atmiņā ataust 20% 80% sakarība. šajā gadījumā izskatās, ka 20% darba serveris paveic, lai nodrošinātu 80% funkcionalitāti, un pārējos 80% darba veic, lai izcīnītu atlikušos 20% funkcionalitāti (tā saucamos "sīkumus" ar read/unrad tai skaitā :D)

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...