برگزیده های پرشین تولز

شمارنده کلیک واسه لینک دونی

amir

مدیران قدیمی
تاریخ عضویت
15 دسامبر 2002
نوشته‌ها
894
لایک‌ها
2
سلام !
ببخشید یه خورده دیر شدش ، این چند روزه همش می رفتم عروسی !! نرسیدم که این - به قول مشاهیر - مقاله رو بنویسم !! ( مقاله اسم شیکی است ها !)
خوب حالا واسه این (Hit Counter ) باید کارهای زیر رو انجام بدهید !
اول از همه بگم که شیوه کار چه جوری است ، که اگه کسی جور بهتری بلد بود بگه ، کلا این " Hit Counter" بر این مبنا کار می کنند که وقتی روی لینک کلیک می کنین این لینک می ره یه فایلی که عملیات شمردن رو انجام می ده باز می کنه و بعد از این که اون یه دونه کلیک شمرده شدش اون فایل به صفحه اصلی redirect می شود. پس مشاهده می گردد که نوشتن یه تقه شمار هیچ کاری نداره و فقط باید یه خورده باهاش ور بری که یه کدی بنویسی که زور کمتر ی به سرور بیاره !!! این کدهایی که من نوشتم مثلا ادعا می کنه که زور کم میاره به سرور !!! اگه به نظر شما زیاد میاره بگین که اصلاحش کنم.
خوب شروع می کنیم:
اول یه دونه table به قرار زیر توی دیتا بیس MT بسازید :
PHP:
  CREATE TABLE `mt_hits` (
    `uid` int(11) NOT NULL auto_increment,
    `url` int(11) NOT NULL default '0',
    `hits` int(11) NOT NULL default '0',
    `cat` int(3) NOT NULL default '0',
    `date` date NOT NULL default '0000-00-00',
    PRIMARY KEY  (`uid`)
  ) TYPE=MyISAM;

فیلد های این table به درد های زیر می خورند :
URL : توی اون مقدار entry_id از تیبل mt_entry نوشته می شه ( بعدا که بخواهید عملیات redirect رو انجام بدین به درد می خوره )
hits : توش تعداد کلیک ها نوشته می شه ( می خواهین می تونین الکی بیایید دستی زیادش کنین ملت خیال کنند کلی کلیک خورده ! )
Cat: توی اون شماره Category که لینک بهش تعلق داره قرار می گیره ( البته اگه چند تا دسته توی MT تعریف کرده باشین وگرنه به دردتون نمی خوره !)
date : این هم ورمیداره ماه و سال موقعی که لینک پست شده رو می نویسه ! موقعی به درد می خوره که بخواهین آرشیو تاریخی داشته باشین و هیت های ماه یا سال رو نشون بدین !

بعد از اینکه table محترم رو ساختین حالا می ریم سراغ اون فایل شمارنده و ریدایرکت کننده ! این فایل با کلیک کردن روی هر لینک فعال می شه و اول چک می کنه می بینه که اون لینک قبلا توی دیتا بیس ثبت شده یا نه ! اگه نشده باشه اونو اضافه می کنه و اگر هم موجود باشه که خوب یه دونه به کلیک های قبلیش اضافه می کنه ! بعد از پایان یافتن عملیات فوق الذکر ! این فایل به صفحه که لینک اصلی اونجاست redirect می شه ! ( اسم فایل رو هم می زاریم go.php که اسم شیک و با کلاسی است!)
قبل از اینکه این go.php رو بسازین یه فایل واسه وصل شده به دیتا بیس می سازیم اسمش رو هم می زاریم db.php و این چند تا خط رو می نویسیم توش!

PHP:
<?php
  $dbhost = "localhost"; // The host where your database is
  $dbname = "database";  // Your database name
  $dbuser = "root";      // The user name
  $dbpass = "password";  // The user's password
  
  $connect = mysql_connect($dbhost, $dbuser, $dbpass);
  mysql_select_db($dbname, $connect);
  ?>
توضیح هم فکر نکنم بخواد! خداییش خیلی تابلو است بعدش این go.php رو می سازیم
PHP:
<?php
  
  include ('db.php');
  $a = explode(",",$_REQUEST['url']);
  $url = 1 + $a[0] - 1;
  $cat = 1 + $a[1] - 1;
  $year = $a[2];
  $month = $a[3];
  $date = $year."-".$month."-00";
  $query = "SELECT `hits` FROM `mt_hits` WHERE `url`='$url'";
  $res = mysql_query($query) ;
  $query = "SELECT `entry_text` FROM `mt_entry` WHERE `entry_id` = '$url'";
  $res2 = mysql_query($query);
  $row2 = mysql_fetch_array($res2);
  $loc = $row2['entry_text'];
  if ( $row = mysql_fetch_array($res) )
  {
  
    $new_hit = $row['hits'] + 1;
    $rr = mysql_query ("UPDATE `mt_hits` SET `hits` = '$new_hit' WHERE `url` = '$url' LIMIT 1");
    header ("Location: $loc");
  }
  else
  {
    mysql_query("INSERT INTO `mt_hits` ( `uid` , `url` , `hits` , `cat` , `date` ) VALUES ('', '$url', '1', '$cat', '$date')");
    header ("Location: $loc");
  }
  
  ?>
خوب حالا ببینیم این فایل چی کار می کنه !
اولش که به دیتا بیس وصل می شه ( از طریق همون فایل db.php که قبلا ساخته بودیم ! )
بعدش می یاد یه متغیر به اسم url رو که از طریق لینک بهش می دیم تیکه تیکه می کنه ! ( یه نیگاه به تریپ لینک های www.webgardi.com بندازین دستتون میادش که مدل اون لینک چه جوری است )
هر لینک 4 تا تیکه داره قسمت اول entry_id است که از توی تیبل mt_entry خونده شده و از طریق اون لینک اصلی پیدا می شه ، قسمت دومش ID اون بخشی است که پست توش زده شده ! قسمت سوم و چهارم هم ماه و سال است !
بعد از اینکه لینک رو تیکه تیکه کرد میاد چک می کنه که قبلاا همچین لینکی بوده یا نه ! اگر بوده که یکی به hit هاش اضافه می کنه اگر هم نیست که یه دونه خط توی table اضافه می کنه و مقدار کلیک اون رو هم می زاره 1 !
این از کل چیز های php که لازم داشتید ! این دو تا فایل رو هم کپی می کنید بغل دست همدیگه !
حالا باید این لینک هایی که فایل go.php لازم داره بسازین !
واسه این کار باید لینک ها رو توی MT به فرمت زیر بنویسین
این کد برای یک لینک لینکدونی خواهد بود و لازمه که کدهای مناسب لینکدونی رو توش قرار بدین.
این فرض هم شده که توی EntryBody شما URL کامل رو نوشتین
به صورت http://www.link.com
در قسمت Title هم عنوان لینک و در قسمت More هم توضیحاتی که در حالت OnMouseOver میاد نوشته شده است.

PHP:
  <a target="_blank"
 href="go.php?url=<$MTEntryID$>,<MTEntryCategories><$MTCategoryID$></MTEntryCategories>,<$MTEntryDate format="%Y"$>,<$MTEntryDate format="%m"$>"
  title="<$MTEntryMore$>">
  <$MTEntryTitle$>
  </a>


تا اینجای کار لینک هاتون درست ساخته می شه و روش که کلیک کنین می ره یه دونه به تعداد کلیک هاش توی دیتا بیس اضافه می کنه !
حالا باید این اطلاعات رو از دیتا بیس بخونیم و جلوی هر لینکی تعداد کلیک هاشو بنویسیم !
واسه این کار این چند خط رو بالای تمپلیت mt بنویسید:
منظور هم تمپلیت صفحه ای است که توش لینکدونی است.


PHP:
  <?
  include ('db.php');
  GLOBAL $array;
  $link_id = $_REQUEST['url'];
  $query = "SELECT * FROM `mt_hits` ORDER BY `uid` DESC LIMIT 20";
  $res = mysql_query($query);
  while ($row = mysql_fetch_array($res))
  {
    $key = $row['url'];
    $value = $row['hits'];
    $array[$key] = $value;
  }
  function hits($id)
  {
    GLOBAL $array;
    if (isset($array[$id]))
    {
      echo $array[$id];
    }
    else
    {
      echo "0";
    }
  }
  ?>

یه عدد 20 می بینین توی خط چهارم ! این عدد رو برابر تعداد پستهایی که می خواد توی صفحه دیده بشه قرار بدین !
مثلا اگه 50 تا لینک نشون می دین اون رو بزارین 50 .
بعد از اینکه اوو کد رو بالای تمپلت گذاشتین حالا این تیکه کد mt رو جلوی هر پستتون قرار بدین که تعداد لینک هاش رو نشون بده !

PHP:
  [ <?  hits(<$MTEntryID$>); ?> clicks ]

همین !
سوال یا مشکلی بود در قسمت زیر بپرسید! اگر بلد بودم در خدمتم.
http://forum.persiantools.com/showthread.php?t=8038
 
بالا