منتخب بازارچه

شمارش تعداد دفعات مشاهده هر مطلب

ehsan

Administrator
این رو به عنوان یه راهنمای ساده با فشار کم بر روی سرور پیشنهاد می کنم. از طرفی اگر کسی پیشنهادی برای بهتر شدنش داره حتما مطرح کنه. امیدوارم به درد بخوره.

ملزومات:
- مووبل تایپ
- phpmyadmin با هر ابزار دیگه کار با دیتابیس
- ابزار مناسب برای upload کردن فایل (ftp client)
- هوش و استعداد

مرحله اول:
در ابتدا لازمه که یه table برای این شمارنده بسازیم. من اسمش رو گذاشتم mt_hits که شبیه بقیه table های مووبل تایپ بشه. با استفاده از کد زیر table رو توی phpmyadmin بسازید.
توضیحات:
بعد از ورود به phpmyadmin وارد دیتابیسی که table های mt توی اون وجود داره بشید و بعد از منوی بالای صفحه وارد قسمت SQL شده و کدهای زیر رو داخل محل مربوطه وارد کنید.
در ضمن توجه کنید که table جدید با نام mt_hits ساخته خواهد شد و لازمه که این Table از قبل وجود نداشته باشه.

کد:
CREATE TABLE `mt_hits` (
`uid` int(11) NOT NULL auto_increment,
`entry` int(11) NOT NULL default '0',
`hits` int(11) NOT NULL default '0',
PRIMARY KEY (`uid`)
) TYPE=MyISAM ;
مرحله دوم:
یک فایل با نام counter.php بسازید و اونو یه جای مناسب upload کنید. این فایل حاوی کدهای زیر خواهد بود. به توضیحاتی که توی کد نوشته شده دقت کنید.
PHP:
<?php
function counter($entry)
{
$dbhost = "localhost"; // The host where your database is
$dbname = "NAME"; // Your database name
$dbuser = "USER";	 // The user name
$dbpass = "PASSWORD"; // The user's password
$connect = mysql_connect($dbhost, $dbuser, $dbpass);
mysql_select_db($dbname, $connect);
$query = "SELECT `hits` FROM `mt_hits` WHERE `entry`='$entry'";
$res = mysql_query($query) ;
if ( $row = mysql_fetch_array($res) )
{
$new_hit = $row['hits'] + 1;
$rr = mysql_query ("UPDATE `mt_hits` SET `hits` = '$new_hit' WHERE `entry` = '$entry' LIMIT 1");
return $new_hit;
}
else
{
mysql_query("INSERT INTO `mt_hits` ( `uid` , `entry` , `hits` ) VALUES ('', '$entry', '1' )");
return "1";
}
}
?>
مرحله سوم:
اکنون وارد تمپلیت تکی خود در مووبل تایپ شده (individual entry) و تغییرات زیر را انجام دهید.
کد زیر را در یک جای مناسب (ترجیحا بالای تمپلیت) قرار دهید.
کد:
 <? include ("/home/username/public_html/counter.php"); ?>
آدرسی که در کد فوق استفاده شده مختص سرورهای cPanel است. در هر صورت منظور آدرس به فایل counter.php است.

در جای مناسبی که میخواهید تعداد نمایش مطلب دیده شود کد زیر را قراردهید:
کد:
 <? echo counter(<$MTEntryID$>) ?>
مرحله آخر:
تمپلیتهای Individual Archive را دوباری سازی کنید. و نتیجه را ببنید.

اگر یه مقدار دانش php و mysql داشته باشید، خیلی راحت میتونید نتایج مفید و به درد بخوری از table آمار (mt_hits) بگیرید. مثلا پرخواننده ترین مطالب، تعداد مشاهده مطالب روی صفحه های اصلی که لیست مطالب هستند و ...
البته من سعی می کنم به مرور function های بهتری به اینی که الان هست اضافه کنم.
اگر در این زمینه مشکلی داشتید توی فروم مووبل تایپ مطرح کنید.

موفق باشید
 

ehsan

Administrator
تكميل: (امير عظمتي)

حل مشكل نمايش تعداد بازديد در صفحه اول يا صفحات فرعی
من این مشکل رو با کمک آرش مصلحی ( این‌کاره‌ی PHP ) حل کردم و گفتم اینجا هم به صورت مرحله به مرحله بذارم که بقیه فیض‌شو ببرند.
در حالت عادی اگر در صفحه اول و یا صفحات فرعی دیگر ( مثلا صفحه‌ای حاوی تمام عنواین وبلاگ ) بخواهیم تعداد بازدید رو نشون بدیم مجبوریم که فایل Counter.php رو اینکلود کنیم. بنابراین هر بار که اون صفحات ( مثلا صفحه‌ اول ) باز می‌شه، یک واحد به همه اون شمارنده‌های واقع در اون صفحه ( یعنی به تعداد بازدید پست‌ها ) اضافه می‌شه درصورتی که اون آرشیو تکی دیده نشده! یعنی آمار کلی می‌ره بالا و غیر واقعی می‌شه.
یه کلام بگم که اون مدلی آمار اشتباه خواهد بود. راه‌حل این قضیه هم اینکلود یک فایل جدید در صفحه‌ی اول یا ... می‌باشد که فقط تعداد بازدید‌ها رو نشون بده و به شمارنده چیزی رو اضافه نکنه.


مرحله اول:
یک فایل با نام countershow.php بسازید و اونو یه جای مناسب upload کنید. این فایل حاوی کدهای زیر خواهد بود. به توضیحاتی که توی کد نوشته شده دقت کنید. (اگه اسم Table ی که از روی راهنمای احسان ساختین، رو عوض کردین؛ اسم جدید رو به جای mt_hits وارد کنید )

PHP:
 <?php 
function showcounter($entry) 
{ 
$dbhost = "localhost"; // The host where your database is 
$dbname = "NAME"; // Your database name 
$dbuser = "USER";	 // The user name 
$dbpass = "PASSWORD"; // The user's password 
$connect = mysql_connect($dbhost, $dbuser, $dbpass); 
mysql_select_db($dbname, $connect); 
$query = "SELECT `hits` FROM `mt_hits` WHERE `entry`='$entry'  "; 
$res = mysql_query($query) ; 
while ( $row = mysql_fetch_array($res)){ 
   $hits=$row["hits"]; 
} 
echo $hits; 
} 
?>
مرحله دوم:
اکنون وارد تمپلیت صفحه اصلی ( یا هر جایی که می‌خواهید تعداد بازدیدکننده هر مطلب را نشان دهید ) خود در مووبل تایپ شده (Main Index) و تغییرات زیر را انجام دهید.
کد زیر را در یک جای مناسب (ترجیحا بالای تمپلیت) قرار دهید.

کد:
 <? include ("/home/username/public_html/countershow.php"); ?>
آدرسی که در کد فوق استفاده شده مختص سرورهای لینوکس است. در هر صورت منظور آدرس به فایل countershow.php است.

در جای مناسبی که میخواهید تعداد بازدید هر مطلب دیده شود، کد زیر را قرار دهید:

کد:
  <? showcounter(<$MTEntryID$>) ?>

مرحله آخر:
تمپلیتهایی را که تغییر داده‌اید، دوباری سازی کنید. و نتیجه را ببنید.

( بعضی جمله‌ها رو از راهنمای احسان کپ زدم! )
من این روش رو تست کردم و کاملا هم خوب و درست جواب می‌ده :) مشکلی داشتین مطرح کنید، اگه سوادم برسه جواب می‌دم.
 
بالا