6

私は初心者のデザイナーで、HTML を使用して、emagazine ファイルをアップロードした自分の Web サイトをデザインすることができました。これは、私の Web サイトで計画しているダウンロード ページです: http://www.aamaodisha.org/secdownload.html

ご覧のとおり、このダウンロード ページでは、電子雑誌の 6 つのエディションの画像を配置し、各エディションのダウンロード ボタンを接続して、ユーザーがダウンロード ボタンをクリックすると、その特定のファイル (.RAR ファイル) ) ダウンロードが開始されます。私が言ったように、私はプレーンな HTML と CSS でこれらのボタンをデザインしました。

私が望んでいるのは、特定のダウンロード ボタンに添付された各雑誌のエディションのダウンロード カウンターです。つまり、私の HTML ページでわかるように、各エディションの下にダウンロード数が書き込まれます。どうやってそのようなものを持っていますか?htmlでその配置をすることはできますか?

6 つのダウンロード ボタンの 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>
<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ファイルを介して代替パスを指定する必要があることをどこかで読んだことがあります。つまり、現在これを持っていますDownload を含むダウンロード ボタンの 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>か?

これらのダウンロード ボタンのカウンターの実装を手伝ってください。大変お手数をおかけいたします。ありがとう。よろしく

4

3 に答える 3

6

ダウンロードリンクでjQueryイベントリスナーを探し、すべてPHPを介してサーバー側で実行します。絶対確実ではないかもしれませんが、ユーザーにはそれほど影響しません。

このようなことをしたい場合は、最初にjQueryからアクセスできる方法でボタンをグループ化する必要があります。jQueryで複数の要素を選択する方法は他にもありますが、最も簡単な方法は、それらをすべて特定のクラスのメンバーにすることです。

次に、.each()関数を使用してクラスをループできます。したがって、ページの初期化のために; つまり、すべてのページコンテンツを機能させる。すべてのボタンをループして、PHPスクリプトにPOSTリクエストを送信する必要があります。PHPスクリプトに送信する必要があるのは、ダウンロードのIDだけです。これは、以下のコードのパート1で行われます。

パート2は、ダウンロードが発生したときのイベントリスナーの設定です。繰り返しになりますが、クラス全体にイベントリスナーを配置するだけで、それらのいずれかのクリックを検出できます。次に、そのIDにアクセスして、どのボタンからのものかを特定します。(注:わかりやすくするために、マークアップのIDをデータベースのIDと同じにします)

次に、phpスクリプトに別のPOSTリクエストを送信します。ただし、追加のパラメータ「ダウンロード」を提供します。実際には、ダウンロードに対応する値は実際には重要ではありません。このケースは、ユーザーがダウンロードしているかどうかにかかわらず、非常に単純だからです。したがって、コードの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をお勧めします。さらに、jQueryを使用することで、将来的には多くの可能性への扉が開かれます。

サーバーサイドは、PHPが引き継ぐ場所です。これが実際に行う必要があるのは、「ダウンロード」が設定されているかどうかを確認し、ダウンロード数をエコーバックすることだけです。(「download」パラメーターが設定されている場合は、明らかにデータベースで数を増やします)

これは次のようなもので達成できます...

<?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で今すぐ実行する必要があります)

PHPMySQLのドキュメントを調べてください。うまくいけば、これはあなたを正しい方向に向けました。

あるいは、jQueryにあまり熱心ではないことを知っているので(一度慣れれば素晴らしいです!)、jQueryソリューションで使用するPHPスクリプトを単独で使用することもできます。$_POST[]を$_GET[]に変更するだけで、他の回答が言っているように、「ranking.php?id=";」のようなURLを使用します。ただし、データベースクエリが終了した後、PHPスクリプトでファイルを渡す方法を検討する必要があります。

また、ダウンロード番号の表示についても疑問が残ります。AJAXがない場合と同様に、HTMLマークアップインラインにPHPを埋め込む必要があります。もう少しわかりやすくするためにこれを編集し、他のオプションの概要を説明したことを願っています。:)

于 2012-06-25T19:39:17.537 に答える
1

以下のリンクを確認することをお勧めします。

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を介してコンテンツをロードできる場合もあります。

于 2012-06-25T19:31:06.197 に答える
1

HTML と CSS だけでは、ダウンロードを追跡することはできません。これを追跡するには、(理想的には) PHP とある種のデータベースの組み合わせに依存する必要があります。1 つのオプションは、PHP ファイルを介してダウンロードするファイルを渡すことですが、それを避けたい場合は、リンクがクリックされるたびにカウンターを 1 ずつ増やす ajax リクエストをリンクでトリガーすることもできます。

于 2012-06-25T19:12:32.233 に答える