Как прикрепить счетчик загрузок к моей кнопке загрузки 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>
?
Пожалуйста, помогите мне реализовать счетчики для этих кнопок загрузки. Я буду вам очень признателен. Спасибо. С уважением
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-разметку. Я надеюсь, что отредактировал это, чтобы придать немного больше смысла, и дал вам обзор другого варианта!:)
При использовании только HTML и CSS отслеживание загрузок будет невозможно. Вам нужно будет полагаться (в идеале) на комбинацию PHP и некоторого типа базы данных, чтобы отслеживать это. Один из вариантов - передать файл для загрузки через PHP-файл, но если вы предпочитаете этого избегать, вы также можете заставить ссылки запускать запрос ajax, увеличивая счетчик на единицу при каждом нажатии на ссылку.
Я бы рекомендовал проверить ссылку ниже:
Как отметил @johnmadrak, вы не можете отображать количество просмотров страницы или загрузку файла без какого-либо языка сценариев на стороне сервера, подчеркивающего какую-либо базу данных. В некоторых сценариях вы даже можете разместить количество раз файл был загружен с помощью текстового документа, а затем загружен с помощью PHP.