Как прикрепить счетчик загрузок к моей кнопке загрузки HTML?


Я начинающий дизайнер, который мог бы просто использовать HTML для создания своего собственного веб-сайта, на который я загрузил свои файлы emagazine. Это моя страница запланированной загрузки на моем веб-сайте: http://www.aamaodisha.org/secdownload.html

Как вы можете видеть, на этой странице загрузки я разместил изображения 6 изданий моего электронного журнала и подключил кнопки загрузки для каждого издания, чтобы всякий раз, когда пользователь нажимает кнопку загрузки, запускался этот конкретный файл (файл.RAR). загрузка. Как я уже сказал, я разработал эти кнопки в обычном HTML и CSS.

Что я хотел бы иметь, так это СЧЕТЧИКИ ЗАГРУЗОК для каждого издания журнала, прикрепленные к КНОПКАМ ЗАГРУЗКИ, что означает, как вы можете видеть на моей HTML-странице, количество загрузок, которое должно быть написано под каждым изданием. Как иметь что-то подобное? Могу ли я договориться об этом с html?

HTML-код для 6 КНОПОК ЗАГРУЗКИ:

<div class="button button1">
      <a href="#my link">Download</a>
      <p class="top">Click to begin</p>
      <p class="bottom">7.54 MB .RAR</p>
</div>
<div class="button button2">
      <a href="#my link">Download</a>
      <p class="top">Click to begin</p>
      <p class="bottom">7.8 MB .RAR</p>
</div>
<div class="button button3">
      <a href="#my link">Download</a>
      <p class="top">Click to begin</p>
      <p class="bottom">7.05 MB .RAR</p>
</div>
<div class="button button4">
      <a href="#my link">Download</a>
      <p class="top">Click to begin</p>
      <p class="bottom">3.8 MB .RAR</p>
</div>
<div class="button button5">
      <a href="#my link">Download</a>
      <p class="top">Click to begin</p>
      <p class="bottom">7.5 MB .RAR</p>
</div>
<div class="button button6">
      <a href="#my link">Download</a>
      <p class="top">Click to begin</p>
      <p class="bottom">8 MB .RAR</p>
</div>

И это CSS для кнопки:

.button {
  width: 115px;
}

.button1 {
    position:absolute;
    left:430px;
    top:410px;

}    
.button2 {
    position:absolute;
    left:632px;
    top:410px;

}  
.button3 {
    position:absolute;
    left:833px;
    top:410px;

}    
.button4 {
    position:absolute;
    left:430px;
    top:636px;

}    
.button5 {
    position:absolute;
    left:632px;
    top:636px;

}   
.button6 {
    position:absolute;
    left:833px;
    top:636px;

}   
.button a {
  display: block;
  height: 28px;
  width: 115px;

  /*TYPE*/
  color: white;
  font: bold 11px/28px Helvetica, Verdana, sans-serif;
  text-decoration: none;
  text-align: center;
  text-transform: uppercase; 

  /*GRADIENT*/  
  background: #00b7ea; /* Old browsers */
  background: -moz-linear-gradient(top, #00b7ea 0%, #009ec3 100%); /* FF3.6+ */
  background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#00b7ea), color-stop(100%,#009ec3)); /* Chrome,Safari4+ */
  background: -webkit-linear-gradient(top, #00b7ea 0%,#009ec3 100%); /* Chrome10+,Safari5.1+ */
  background: -o-linear-gradient(top, #00b7ea 0%,#009ec3 100%); /* Opera 11.10+ */
  background: -ms-linear-gradient(top, #00b7ea 0%,#009ec3 100%); /* IE10+ */
  background: linear-gradient(top, #00b7ea 0%,#009ec3 100%); /* W3C */
  filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00b7ea', endColorstr='#009ec3',GradientType=0 ); /* IE6-9 */
}

.button a, p {
    -webkit-border-radius: 4px;
     -moz-border-radius: 4px;
          border-radius: 4px;

  -webkit-box-shadow: 2px 2px 8px rgba(0,0,0,0.2);
     -moz-box-shadow: 2px 2px 8px rgba(0,0,0,0.2);
          box-shadow: 2px 2px 8px rgba(0,0,0,0.2);
}

.button p {
  background: #222;
  display: block;
  height: 25px;
  width: 105px;
  margin: -27px 0 0 5px;

  /*TYPE*/
  text-align: center;
  font: bold 10px/28px Helvetica, Verdana, sans-serif;
  color: #ffffff;

  /*POSITION*/
  position: absolute;
  z-index: -1;

  /*TRANSITION*/  
  -webkit-transition: margin 0.4s ease;
     -moz-transition: margin 0.4s ease;
       -o-transition: margin 0.4s ease;
      -ms-transition: margin 0.4s ease;
          transition: margin 0.4s ease;
}

/*HOVER*/
.button:hover .bottom {
  margin: -4px 0 0 5px;
}

.button:hover .top {
  margin: -50px 0 0 5px;
  line-height: 22px;
}

/*ACTIVE*/
.button a:active {
background: #00b7ea; /* Old browsers */
background: -moz-linear-gradient(top,  #00b7ea 36%, #009ec3 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(36%,#00b7ea), color-stop(100%,#009ec3)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top,  #00b7ea 36%,#009ec3 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top,  #00b7ea 36%,#009ec3 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top,  #00b7ea 36%,#009ec3 100%); /* IE10+ */
background: linear-gradient(top,  #00b7ea 36%,#009ec3 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#00b7ea', endColorstr='#009ec3',GradientType=0 ); /* IE6-9 */

}

.button:active .bottom {
  margin: -14px 0 0 5px;
}

.button:active .top {
  margin: -30px 0 0 5px;
}

у меня есть еще одно сомнение : я искал в Google для счетчиков скачать и где-то я читал, что вместо того чтобы непосредственно давать истинный путь мой файл журнала в href, следует дать альтернативный путь через другой php файл я.я в настоящее время данный HTML-код для кнопки Скачать с Скачать

<div class="button button1">
      <a href="#my link">Download</a>
      <p class="top">Click to begin</p>
      <p class="bottom">7.54 MB .RAR</p>
</div>

Должен ли я иметь что-то вроде <a href="/download.php file=my link">Download</a>?

Пожалуйста, помогите мне реализовать счетчики для этих кнопок загрузки. Я буду вам очень признателен. Спасибо. С уважением

Author: Amit Pattnaik, 2012-06-25

3 answers

Я бы выбрал прослушиватель событий jQuery по ссылке для загрузки и сделал все это на стороне сервера через PHP. Это может быть не совсем надежно, но это не так сильно влияет на пользователя.

Если вы хотите сделать что-то подобное, то сначала вам нужно сгруппировать кнопки таким образом, чтобы они были доступны через jQuery; есть и другие способы выбора нескольких элементов в jQuery, но самый простой - сделать их членами определенного класса.

Затем вы можете выполнить цикл по классу используя функцию .each(). Таким образом, для инициализации страницы; т. Е. для того, чтобы все содержимое страницы работало; вам нужно пройти через каждую кнопку и отправить запрос на PHP-скрипт; все, что нужно отправить PHP-скрипту, - это идентификатор загрузки. Это делается в части 1 приведенного ниже кода.

Часть 2 - это настройка прослушивателя событий при загрузке. Еще раз, просто поместив прослушиватель событий на весь класс, мы можем обнаружить щелчок по любому из них; а затем определите, с какой кнопки он пришел, получив доступ к его идентификатору. (Примечание: Для простоты; сделайте идентификатор в разметке таким же, как идентификатор в базе данных)

Затем это делает еще один запрос post к php-скрипту; но предоставляет дополнительный параметр - "загрузить". На самом деле значение, соответствующее загрузке, на самом деле не имеет значения; потому что этот случай достаточно прост, чтобы пользователь либо загружал его, либо нет. Поэтому в сегменте PHP кода (ниже) мы даже не проверяем, что это значение; мы просто проверяем, что оно существует.

$(document).ready(function(){
  /* [[PART 1]]: loop through every element in the .button class*/
  $(".button").each(function (e) {

    /* get it's ID (which is equal to the download id stored in the db */
    var id = e.target.id;

    /* Post the download id to ranking.php; then echo the returned value to an 
    ** element with the id of 'count<num>'; where num is the download id. */
    $.post( 'ranking.php', { 'id' : id }, function(data){
        $('#count' + id).html(data);
    });
  });

  /* Part 2: When button is clicked, post the download data to "ranking.php" */
  $('.button').click(function(event){
      var id = e.target.id; //get the id of the button

      $.post( 'ranking.php', { 'id' : event.target.id, 'download' : 'YES' },  //set 'download'
          function(){ $('#count' + id).html(data) });   //echo new value to html
  });
});

Я предлагаю jQuery, так как он предоставляет достаточно синтаксического сахара, чтобы все было довольно просто. Кроме того, используя jQuery, вы открываете двери для множества возможностей в будущем, если захотите.

Серверная сторона - это то, где PHP берет верх. Все, что для этого нужно сделать на самом деле, - это проверить, установлена ли "загрузка", и повторить количество загрузок. (Очевидно, увеличивая число с помощью базы данных, если установлен параметр "загрузить")

Этого можно было бы достичь с помощью чего-то вроде...

<?php
    mysql_connect(localhost,$user,$password);
@mysql_select_db($database) or die( "Unable to select database");   

    if(! isset($_POST['id']) {
         //die error!
    }

    /* if $_POST['download'] isn't set, then just get the current download number
       and echo it back to the browser */
    if(! isset($_POST['download'] ){
        $query = sprintf('SELECT * FROM dl_table WHERE id = %d', $_POST['id']);
        mysql_query($query);
    print mysql_result($query, 0, 'download');
        exit; // no need to carry on, our job is done..
    }

    /* if the script reaches here then $_POST['download'] is set, so you need to log a 
    ** new download */
    $query = //generate query to increment the database field
?>

Приведенный выше пример будет работать (очевидно, с исправленными функциями базы данных) для простых случаев, но очевидно - это, вероятно, неверный код, поскольку я буквально набрал его за ужином! Естественно, это просто для того, чтобы дать вам представление о возможном решении. (Если вы решите сделать то же самое, я продемонстрировал плохую практику - операции mysql предпочтительно следует выполнять с помощью mysqli* функции или PDO сейчас)

Посмотрите документацию PHP My SQL; надеюсь, это указало вам правильное направление.

Теперь в качестве альтернативы, поскольку я знаю, что вы не слишком увлечены jQuery (это здорово, как только вы к нему приступите!), PHP-скрипт, который вы использовали бы с решением jQuery, можно использовать самостоятельно. Просто измените $_POST[] на $_GET[] и, как уже говорилось в других ответах, используйте URL-адреса, такие как "ranking.php?id="; однако затем вам нужно посмотреть, как получить PHP-скрипт для передачи файла после запросы к базе данных завершены.

Это также оставляет вопрос относительно отображения номера загрузки; так как без AJAX вам придется встроить некоторые PHP в HTML-разметку. Я надеюсь, что отредактировал это, чтобы придать немного больше смысла, и дал вам обзор другого варианта!:)

 6
Author: Fergus In London, 2012-06-25 23:02:41

При использовании только HTML и CSS отслеживание загрузок будет невозможно. Вам нужно будет полагаться (в идеале) на комбинацию PHP и некоторого типа базы данных, чтобы отслеживать это. Один из вариантов - передать файл для загрузки через PHP-файл, но если вы предпочитаете этого избегать, вы также можете заставить ссылки запускать запрос ajax, увеличивая счетчик на единицу при каждом нажатии на ссылку.

 1
Author: johnmadrak, 2012-06-25 19:12:32

Я бы рекомендовал проверить ссылку ниже:

Http://www.kavoir.com/2010/05/simplest-php-hit-counter-or-download-counter-count-the-number-of-times-of-access-visits-or-downloads.html

Как отметил @johnmadrak, вы не можете отображать количество просмотров страницы или загрузку файла без какого-либо языка сценариев на стороне сервера, подчеркивающего какую-либо базу данных. В некоторых сценариях вы даже можете разместить количество раз файл был загружен с помощью текстового документа, а затем загружен с помощью PHP.

 1
Author: Aaron Brewer, 2012-06-25 19:36:39