پلاگین نمایش تعداد دانلود ها

پلاگین نمایش تعداد دانلود ها

ما تاکنون آموزش های مفیدی در زمینه PHP و MySql در وبسایت به شما عزیزان دادیم.امروز قصد داریم تا یک پلاگین ساده ولی در عین حال قدرتمند شمارنده تعداد دانلودهای فایل های شما را بهتون آموزش بدیم.

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

در قدم اول شروع به نوشتن کدهای HTML پلاگینمان میکنیم.این کار بسیار ساده است،ما یک تگ file-manager داریم که شامل یک لیست نامرتبی از فایل ها و عناصر هر کدام از آنها در داخل یک تگ li است.

فایل هایی را که قرار است شمارنده آنها را نمایش دهد در داخل پوشه file در مسیر اصلی اسکریپت قرار می دهیم.سپس PHP از طریق یک حلقه تمام فایل ها را تکرار کرده و هر کدام از آنها را داخل تگ li به صورت مجزا قرار میدهد.

demo.php


به موجودیت href لینک توجه کنید،آن نام فایل را به عنوان پارامتر به download.php ارسال میکند.اینجا جایی است که شمارش تعداد دانلود ها انجام میشود.(کمی پایینتر بیشتر توضیح  خواهیم داد) شماهیچ محدودیتی در شمارش تعداد دانلود ها نخواهید داشت،تنها کاری که شما انجام خواهید داد این است که  لینک های مطالب وبسایت یا وبلاگتان را به download.php ارسال خواهید کرد.تمام دانلودها به طور درست شمارش خواهند شد.

i11

CSS

بعد از نوشتن کدهای HTML ما میتوانیم به بخش دیگری از اسکریپت توجه کنیم.نقش CSS در زیر هدف قرار دادن تگfile-manager با ID است که تنها یک بار در صفحه بوجود می آید و سپس توسط کلاس names بازگردانی(reset) میشود.

styles.css

#file-manager{
    background-color:#EEE;
    border:1px solid #DDD;
    margin:50px auto;
    padding:10px;
    width:400px;
}

ul.manager li{
    background:url("img/bg_gradient.gif") repeat-x center bottom #F5F5F5;
    border:1px solid #DDD;
    border-top-color:#FFF;

    list-style:none;
    position:relative;
}

ul.manager li a{
    display:block;
    padding:8px;
}

ul.manager li a:hover .download-label{
    /* When a list is hovered over, show the download green text inside it: */
    display:block;
}

span.download-label{
    background-color:#64B126;
    border:1px solid #4E9416;
    color:white;
    display:none;
    font-size:10px;
    padding:2px 4px;
    position:absolute;
    right:8px;
    text-decoration:none;
    text-shadow:0 0 1px #315D0D;
    top:6px;

    /* CSS3 Rounded Corners */

    -moz-border-radius:3px;
    -webkit-border-radius:3px;
    border-radius:3px;
}

span.download-count{
    color:#999;
    font-size:10px;
    padding:3px 5px;
    position:absolute;
    text-decoration:none;
}

قسمت جالب اینجا است که لیبل Download به صورت پیشفرض display:none است و وقتیکه با موس روی آن برویم آن نمایان خواهد شد و ما با استفاده از کدهای CSS کمی به آن شکلی خوش فرم دادیم.

i21

PHP

همانطور که قبلا اشاره شد  PHP از طریق یک حلقه تمام فایل ها را تکرار کرده و هر کدام از آنها را داخل تگ li به صورت یک لیست نامرتب قرار میدهد.اکنون به صورت دقیق نحوه انجام این کار را بررسی می کنیم.

demo.php – Top Section

// Error reporting:
error_reporting(E_ALL^E_NOTICE);

// Including the DB connection file:
require 'connect.php';

$extension='';
$files_array = array();

/* Opening the thumbnail directory and looping through all the thumbs: */

$dir_handle = @opendir($directory) or die("There is an error with your file directory!");

while ($file = readdir($dir_handle))
{
    /* Skipping the system files: */
    if($file{0}=='.') continue;

    /* end() returns the last element of the array generated by the explode() function: */
    $extension = strtolower(end(explode('.',$file)));

    /* Skipping the php files: */
    if($extension == 'php') continue;

    $files_array[]=$file;
}

/* Sorting the files alphabetically */
sort($files_array,SORT_STRING);

$file_downloads=array();

$result = mysql_query("SELECT * FROM download_manager");

if(mysql_num_rows($result))
while($row=mysql_fetch_assoc($result))
{
    /* 	The key of the $file_downloads array will be the name of the file,
        and will contain the number of downloads: */

    $file_downloads[$row['filename']]=$row['downloads'];
}

توجه کنید که ما تمام سطرها رو توسط  ()mysql_query از جدول  download_manager انتخاب کردیم و سپس آنها را به آرایه  file_downloads$ با استفاده از نام فایل ها به عنوان کلید تعداد دانلودها اضافه کردیم.با این روش بعدا در کد،ما میتوانیم با ارسال  [‘file_downloads[‘archive.zip$ تعداد دانلودهای هر فایل را دریافت کنیم.

شما در زیر کد مربوط به مقداردهی اولیه عناصر li را مشاهده می کنید.

demo.php – Mid Section

foreach($files_array as $key=>$val)
{
    echo '
  • '.$val.' '.(int)$file_downloads[$val].' download
  • '; }

    کدبالا بسیار ساده است.یک حلقه با استفاده از foreach تمام آرایه را طی کرده و از طریق دستور echo تمام نشانه گذاری ها را در صفحه چاپ میکند.

    حا اجازه بدهید نگاهی دقیق تر به نحوه شمارش دانلود ها بیاندازیم

    download.php

    // Error reporting:
    error_reporting(E_ALL^E_NOTICE);
    
    // Including the connection file:
    require('connect.php');
    
    if(!$_GET['file']) error('Missing parameter!');
    if($_GET['file']{0}=='.') error('Wrong file!');
    
    if(file_exists($directory.'/'.$_GET['file']))
    {
        /* If the visitor is not a search engine, count the downoad: */
        if(!is_bot())
        mysql_query("	INSERT INTO download_manager SET filename='".mysql_real_escape_string($_GET['file'])."'
                        ON DUPLICATE KEY UPDATE downloads=downloads+1");
    
        header("Location: ".$directory."/".$_GET['file']);
        exit;
    }
    else error("This file does not exist!");
    
    /* Helper functions: */
    
    function error($str)
    {
        die($str);
    }
    
    function is_bot()
    {
        /* This function will check whether the visitor is a search engine robot */
    
        $botlist = array("Teoma", "alexa", "froogle", "Gigabot", "inktomi",
        "looksmart", "URL_Spider_SQL", "Firefly", "NationalDirectory",
        "Ask Jeeves", "TECNOSEEK", "InfoSeek", "WebFindBot", "girafabot",
        "crawler", "www.galaxy.com", "Googlebot", "Scooter", "Slurp",
        "msnbot", "appie", "FAST", "WebBug", "Spade", "ZyBorg", "rabaz",
        "Baiduspider", "Feedfetcher-Google", "TechnoratiSnoop", "Rankivabot",
        "Mediapartners-Google", "Sogou web spider", "WebAlta Crawler","TweetmemeBot",
        "Butterfly","Twitturls","Me.dium","Twiceler");
    
        foreach($botlist as $bot)
        {
            if(strpos($_SERVER['HTTP_USER_AGENT'],$bot)!==false)
            return true;	// Is a bot
        }
    
        return false;	// Not a bot
    }

    چک کردن از آن جهت مهم است تا شما بتوانید مشاهده کننده فایل خود را بشناسید که آیا او یک روبات است یا یک شخص واقعی.

     MySQL

    قبلا اشاره شد که تعداد دانلود ها در سطری در جدول  download_manager واقع در دیتابیس شما ذخیره شد.در زیر نحوه انجام این کار را مشاهده می کنید

    download.php

    INSERT INTO download_manager SET filename='filename.doc'
    ON DUPLICATE KEY UPDATE downloads=downloads+1
    

    کاری که کد بالا انجام میدهد این است که به Myslq میگوید که یک سطر جدید در download_manager قرار دهد و فیلد filename را به سطر ست میکند و آن را برای درخواست دانلود ارزش گذاری میکند.

    ON DUPLICATE KEY UPDATE نیز به دیتابیس میگوید تا در صورت وجود فایل در دیتابیس یک ستون به ستون های قبلی اضافه کند.

    در زیر شمای کلی دیتابیس را مشاهده می کنید.

    i21

    jQuery

    برای اینکه شمارش دانلود ها برخط(real-time) به نظر بیایند ما باید امکانی اضافه کنیم تا هنگامی که کاربر فایلی را دانلود کرد همان لحظه شماره دانلود آن افزایش پیدا کند در غیر این صورت کاربر باید صفحه را دوباره بارگذاری کند تا نتیجه را مشاهده کند.ما این کار را با نوشتن چند سطر کد Jquery که در زیر مشاهده میکنید انجام دادیم.

    script.js

    $(document).ready(function(){
        /* This code is executed after the DOM has been completely loaded */
    
        $('ul.manager a').click(function(){
    
            var countSpan = $('.download-count',this);
            countSpan.text( parseInt(countSpan.text())+1);
        });
    });
    

    ما در بالا فقط یک برنامه کنترل کلیک ها نوشتیم که هنگام دانلود فایل در همان لحظه به مقدار تعداد دانلود های فایل یک واحد اضافه کند.

    htaccess

    کاری که download.php انجام میدهد این است که بازدید کننده را به عنوان یک پارامتر به فایل مورد نظر هدایت می کند.شاید شما بخواهید برای نوع خاصی از فایل ها دسترسی محدود قرار دهید برای انجام این کار از فایل htacess. واقع در دایرکتوری اصلی فایلهایتان استفاده می شود.کد مربوطه را در زیر مشاهده می کنید.

    
    ForceType application/octet-stream
    
    
    +8
    -2


    هرگونه انتشار مطالب اختصاصي و محصولات اين سايت بجز با درج لينک مستقيم شرعا حرام بوده و پيگرد قانوني دارد.
    طبق ماده 12 فصل سوم قانون جرائم رايانه هرگونه کپي برداري ممنوع بوده و پيگرد قانوني دارد. براي اطلاعات بيشتر کليک کنيد.

    درباره‌ی مدیر سایت

    در اردیبهشت سالی از سال های خدا بدنیا آمدم.درس خواندم و مهندس شدم.ازآنجایی که علاقه شدیدی به برنامه نویسی و ترجمه وآموزش داشتم در راستای اهدافم این وبسایت رو راه اندازی کردم تا دین خود را به جامعه برنامه نویسی ادا کرده باشم.

    ۲ دیدگاه ها

    1. با سلام

      این مطلب رو خودتون از یه سایت خارجی کپی کردین و لینکشو هم قرار ندادین. چه طور انتظار دارین دیگران لینک شما رو قرار دهند؟؟؟؟؟؟؟؟

    دیدگاه خود را بنویسید

    آدرس پست الکترونیک شما منتشر نخواهد شد.خانه های ضروری نشانه گذاری شده اند. *

    *


    شش − 5 =

    You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>