PHP+jsでページ遷移なしのお手軽ワンクリック投票ボタンを設置しましたので、設置方法について簡単にご紹介します。
完成イメージ
このような読者が、クリックして簡単に投票することができる投票ボタンを作ります。
スマホ表示時(レスポンシブ)
仕様
・ワンクリックで投票。
・ページ遷移はしない
・クリック後、即時投票結果が反映
・投票結果はサーバーに蓄積
・投票結果をボタンに表示する
・クリックしたあとに、追加メッセージが表示される
・クリック後は、次回訪問時まで投票できない(セッション単位)
※記事下の現在設置のボタンは、何度でもクリックできる仕様に変更しています。
・月別の投票結果をレポートする(Googleアナリティクス)
設置方法/Wordpressに実装方法
1.javascriptの格納
テンプレートのjsフォルダに以下のjavascriptファイルを格納します。
・vote.js
・html5.js
・jQuery ※通常wordpress標準で持っているので不要
vote.jsは私がカスタマイズしていますので、以下よりダウンロードしてください。
※vote.js.txt → vote.jsに変更して使用します。
'/wp/vote.php'部分は、'/vote.php'に変更の必要あり。ディレクトリにあわせて調整してください。
vote.js
getElementsByClassNameメソッド - JavaScript ライブラリー - HTML5.JP
www.html5.jp/library/dom_getElementsByClassName.html
2.fileフォルダの作成、パーミッション設定
ドメイン直下にfileフォルダを作成します。
アクセス権限は、777(読み書き可能)にしてください。
このフォルダ内に投票結果記録ファイルが作成されます。
3.vote.phpの格納
スクリプトファイル(vote.php)をドメイン直下に配置します。
ファイルは以下よりダウンロードしてください。※vote.php.txt → vote.phpに変更して使用します。
ファイル内のsetcookie部分は、有効期限設定を調整可能です。
vote.php
4.単一記事の編集
格納したjavascriptを読み込むように記述します。ディレクトリパスは調整してください。
1 2 3 | <!-- 投票用スクリプト --> <script type= "text/javascript" src= "<?php bloginfo('template_url'); ?>/js/html5jp/dom/getElementsByClassName.js" ></script> <script type= "text/javascript" src= "<?php bloginfo('template_url'); ?>/js/vote.js" ></script> |
単一記事テンプレート(single.php)に以下のスクリプトを記述します。
記事が読み込まれたあとに記述するとよいです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | <?php // 投票数取得関数 function getVoteCount( $id ) { $filename = "./file/" . $id . ".cnt" ; //fileディレクトリ指定 $fp = @ fopen ( $filename , "r" ); if ( $fp ) { $vote = fgets ( $fp , 9182). "票" ; } else { $vote = "" ; } return $vote ; } ?> <div id= "vote_area1" class = "clear-fix" style= "disply:block;" > <p>この記事はいかがでしたか?</p> <!-- ページ名取得 --> <?php $page_name = "post-" . $post ->ID; ?> <!-- 投票ボタン1 --> <div class = "votebox votebox1" > <a href= "javascript:void(0);" onclick= "Vote(<?php echo " '".$page_name."_vote1' " ?>, 'cntClass1');" class = "vote" title= "" >(知)参考になった <span class = "cntClass1" ><?php echo getVoteCount( $page_name . "_vote1" ); ?></span></a> </div> <!-- 投票ボタン2 --> <div class = "votebox votebox2" > <a href= "javascript:void(0);" onclick= "Vote(<?php echo " '".$page_name."_vote2' " ?>, 'cntClass2');" class = "vote" title= "" >(笑)おもしろい <span class = "cntClass2" ><?php echo getVoteCount( $page_name . "_vote2" ); ?></span></a> </div> <!-- 投票ボタン3 --> <div class = "votebox votebox3" > <a href= "javascript:void(0);" onclick= "Vote(<?php echo " '".$page_name."_vote3' " ?>, 'cntClass3');" class = "vote" title= "" >(驚)びっくり <span class = "cntClass3" ><?php echo getVoteCount( $page_name . "_vote3" ); ?></span></a> </div> <!-- 投票ボタン4 --> <div class = "votebox votebox4" > <a href= "javascript:void(0);" onclick= "Vote(<?php echo " '".$page_name."_vote4' " ?>, 'cntClass4');" class = "vote" title= "" >(美)かっこイイ <span class = "cntClass4" ><?php echo getVoteCount( $page_name . "_vote4" ); ?></span></a> </div> </div><!-- vote_area1 --> <div id= "vote_area2" style= "display:none;" > <p>ご覧いただきありがとうございます。次回もさらに良い記事を目指して頑張ります。</p> </div> |
5.スタイルシート(style.css)の編集
スタイルシートに以下のcssを追加してください。
衝突しないよう調整が必要かもしれません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | /* =投票ボックス --------------------------------------------------- */ div.votebox a{ font-size : 0.8em ; color : #050505 ; background : -moz- linear-gradient ( top , #e7e6e6 0% , #ffffff 22% , #ffffff 35% , #a3a0a0 ); background : -webkit-gradient( linear , left top , left bottom , from( #e7e6e6 ), color-stop( 0.22 , #ffffff ), color-stop( 0.35 , #ffffff ), to( #a3a0a0 )); border : 1px solid #1B1B1B ; -moz- box-shadow : 0px 1px 0px rgba ( 000 , 000 , 000 , 0.7 ), inset 0px 0px 1px rgba ( 255 , 255 , 255 , 0.3 ); -webkit- box-shadow : 0px 1px 0px rgba ( 000 , 000 , 000 , 0.7 ), inset 0px 0px 1px rgba ( 255 , 255 , 255 , 0.3 ); box-shadow : 0px 1px 0px rgba ( 000 , 000 , 000 , 0.7 ), inset 0px 0px 1px rgba ( 255 , 255 , 255 , 0.3 ); text-shadow : 0px 0px 0px rgba ( 000 , 000 , 000 , 0 ), 0px 0px 0px rgba ( 255 , 255 , 255 , 0 ); } div.votebox a{ float : left ; display : inline-block ; width : 22% ; text-align : center ; margin : 0.3em 0 0.3em -1px ; padding : 0.7em 0.8em 0.7em 0.3em ; } /* Mobile devices */ @media ( max-width : 700px ) { div.votebox a{ width : 90% ; font-size : 1.0em ; } } div.votebox a:hover{ filter : alpha(opacity= 80 ); -moz- opacity : 0.8 ; opacity : 0.8 ; } div.votebox a{ text-decoration : none ; color : #444 ; font-weight : bold ; } div.votebox a span{ color : #BE35C4 ; } div#vote_area 1 p { font-size : 1.1em ; color : #535353 ; font-weight : bold ; border-bottom : 1px dotted #3A3C3A ; } div#vote_area 2 p { margin-top : 1em ; font-size : 1.1em ; color : #0C5EDA ; font-weight : bold ; } #vote_area 1 { margin : 0.2em 0 2em 0 ; clear : both ; } div#vote_area 1 p { margin-bottom : 0.7em ; } |
さいごに
微調整が必要な場合がありますので、その場合はファイルを書き換えてください。
この下にも設置していますので押してみてください。