Wonderful! WordPress

右クリックのログとかリストの逆順表示とかのjQuery

この記事は公開または最後に更新されてから2193日が経過しています。情報が古くなっている可能性があるのでご注意下さい。

≪ jQueryによる右クリックや左クリックした時のログ ≫

jQueryにおいて左クリック時のイベントは click で普通に使うのであたりまえのようですが、それでは右クリック時というのは?、と contextmenu ということです。それらを使用すれば、なにかしらをクリックしたときにXMLHttpRrequestを使ってログを残すことができるわけです。
jQueryにおいてのXMLHttpRrequestに関しては『画像クリック時のjquery』にて書いています。
そこの記事と重複しますが、記録したいデータとしては日時、ip address、ページのurlにクリックした要素なんですが、jQueryではアクセスしているページのurlはlocation.hrefで得られますが、ip addressは得られないと思うので、元のページにおいてphpであらかじめhidden属性のinput要素に仕込んでおいたものを取得して使用します。 <script> タグ内で変数に入れてしまっても良いのですが、特にこだわる必要もないのではと。別にhidden inputでなくても <p> タグでも何でも良いわけですが、そうするとcssでhiddenする必要が出てきます。
まず、phpでデータを作って、

<?php
	$strquery = $_SERVER['REMOTE_ADDR'] . ':' . $_SERVER['QUERY_STRING'];
?>
PHP
CopyExpand

htmlでhidden inputに仕込んでおくと。

<input type="hidden" name="senddata" value="<?php echo $strquery; ?>">
PHP
CopyExpand

そして、jQuery

jQuery(function() {
	//右クリック時
	jQuery( '.dllink' ).bind( 'contextmenu', function() {//class="dllink"の要素を右クリックすると
		var idstr = jQuery( this ).attr( 'id' );//クリックした要素のid属性を取得
		clcklog( 'right', idstr );
	});

	//左クリック時
	jQuery( '.dllink' ).click( function() {//class="dllink"の要素を左クリックすると
	var idstr = jQuery( this ).attr( 'id' );//クリックした要素のid属性を取得
	clcklog( 'left', idstr );
	});

	//XMLHttpRrequestさせる関数
	function clcklog( cli, id ) {
		var tarips = jQuery( "[name='senddata']" ).val();//phpで仕込んであるhidden inputのip addressとurlのデータを取得
		var altsrc = '-' + id + '_' + cli + '_click';
		var strsends = '2012/12/1212122691.jpg' + altsrc + ':' + tarips;//送信するデータを作成
		var urls = './logimage.php';//postでデータを受け取ってファイルに記録するphpファイル
		jQuery.post( urls,
			{ target:strsends },
			function( data, status ) {
			}
		);
	}
});
JavaScript
CopyExpand

jQueryにおける部分はたったこれだけ。ほんとに便利です。
送信するデータの中にある画像ファイルは、画像をクリックした場合のデータと同じくするためのもので全く意味はありません。
送信されたデータを受け取って実際にログファイルに記録するlogimage.phpに関しては『画像をクリックした時のログ』に書いていますが、以下のとおり。logimage.phpはこのようにしています。

<?php
	$cdt = date( 'Y/m/d H:i:s' );
	$filnam = './***/imglooklog.php';
	if ( isset( $_POST['target'] ) ) {
		$targetstr = $_POST['target'];
		$targetstr = str_replace( 'https://strix.main.jp/wp-content/uploads/', '', $targetstr );
		list( $imgurl, $ipadrs, $pageid ) = explode( ':', $targetstr );
		$hname = gethostbyaddr( $ipadrs );
		
		if ( '***.***.***.***' !== $ipadrs ) {//管理者のipと違う場合、'***.***.***.***'は管理者のipです
			$fp = fopen( $filnam, 'a+b' );
			flock( $fp, LOCK_EX );
			
			fputs( $fp, "$cdt  [$ipadrs]  [$hname]  [$pageid]  $imgurl\n" );
					
			fclose( $fp );
		}
	} else {
			$fp = fopen( $filnam, 'a+b' );
			flock( $fp, LOCK_EX );
			
			fputs( $fp, "$cdt data none\n" );
					
			fclose( $fp );
	}
?>
PHP
CopyExpand

6行目のstr_replaceは、画像をクリックした時の処理でなんら意味はありません。

≪ リストの逆順に並び替えやローテーション ≫

我がサイトもなんだかんだで気が付くと投稿数もそこそこ多くなって、サイドバーの投稿リストも結構長くなりつつあります。で、リストの逆順に並び替えての表示ができるようにしようと。
ボタンを一つ <p id="reverse"> タグで作っておいて、あとはjQueryを書くだけと。
それともう一つ、たとえば一番下の項目を一番上に持ってくるとか、逆に一番上を一番下にでもいいのですが、それを順々に続けてやればリストのローテーションとなるわけで、それも出来るようにしておけばまぁちょっとは便利かなということで。
とりあえずそのリストはこのページのサイドバーにある投稿リストということで、そのhtml は次のようになっています。
この中の<ul id="postlist">のリストが対象となります。

<li class="widget monthlist-3">
	<h2><span id="urote" title="リストをローテーションします">all post</span><span id="drote" title="リストを逆順にローテーションします">list</span></h2>
	<p id="reverse" title="リストを逆順にします">reverse</p>
	<ul id="postlist">
		<li><a href="https://strix.main.jp/?diys=javascript-click-images">画像クリック時のjavascript</a></li>
		<li><a href="https://strix.main.jp/?diys=can-not-use-syntaxhighlighter">SyntaxHighlighterがつかえない!</a></li>
		<li><a href="https://strix.main.jp/?diys=custom-taxonomy-of-image">カスタム分類による画像個別の分類</a></li>
		<li><a href="https://strix.main.jp/?diys=close-popup-on-scroll">続、画像クリック時のjavascript</a></li>
		/*** 省略 ***/
	</ul>
</li>
HTML
CopyExpand
jQuery( function() {
	//リストを逆順に並び替えて表示*しかしこれだとIEでは動かないのでこの下を
	jQuery( '#reverse' ).click( function() {
		var childli = jQuery( '#postlist' ).children( 'li' );//<ul id="postlist">の子要素<li>を全て取得
		jQuery( '#postlist' ).html( '' );//<ul id="postlist">の子要素<li>を一度全て消去
		for( var i = childli.length-1; i >= 0; i-- ) {
			jQuery( '#postlist' ).append( childli[i] );//取得しておいた子要素<li>を逆順にて挿入
		}
	});

	//一番上の項目を一番下に移動
	jQuery( '#hpostlist' ).click( function() {//id="hpostlist"の要素をクリックすると
		jQuery( '#postlist li:first' ).appendTo( '#postlist' );
		//もしくは一番下の項目を一番上に移動させるのはこちら
		//jQuery( '#postlist li:last' ).prependTo( '#postlist' );
	});
});
JavaScript
CopyExpand

と、Firefox、Chromeでなんてことなく動いているので気にもしていなかったのですが、IE11では逆順に並び替えの方がちゃんと動作しません。
ローテーションの方は大丈夫のようですが・・・、またIEだけと・・・、未だにあるんだなこういうの・・・、やり方がいけないようで。
ということで、逆順の方は今の所IEでは動きません。調べないと・・・。
ネットで探すとこれにてできるとのこと。

jQuery( function() {
	//リストを逆順に並び替えて表示
	jQuery( '#reverse' ).click( function() {
		jQuery( '#postlist' ).html( jQuery( '#postlist li' ).get().reverse() );
	});
});
JavaScript
CopyExpand

ははは・・・、全然簡単にできるのね、しかし知らないというのは・・・、ちょっと恥ずかしい。
で、もう少し親子構造がちょっと複雑になった以下のhtml のような場合。

<div id="englist">
	<h4>Species names list</h4>
	<p class="greencolor">※click on back white to close</p>
	<p class="reverse" title="リストを逆順に並び替えます">rev</p>
	<ul>
		<li><a href="#spc568" title="ノビタキ">African Stonechat</a></li>
		<li><a href="#spc316" title="コシジロアジサシ">Aleutian Tern</a></li>
		<li><a href="#spc682" title="オオホンセイインコ">Alexandrine Parakeet</a></li>
		/*** 途中省略 ***/
		<li><a href="#spc523" title="セッカ">Zitting Cisticola</a></li>
	</ul>
</div>
HTML
CopyExpand

以下のようで出来ましたね。

jQuery( function() {
	jQuery( '.reverse' ).click( function() {
		var tardiv = jQuery( this ).parent( 'div' ),
			tarul = jQuery( tardiv ).children( 'ul' ),
			revli = jQuery( tardiv ).find( 'li').get().reverse();

		jQuery ( tarul ).html( revli );
	});
});
JavaScript
CopyExpand

Leave a Reply!

JavaScript is necessary to send a comment.
You can edit and delete your comment if you input a edit key.
Edit key is necessary for attesting you when you edit and delete it.
The tag of HTML cannot be used in comment.
When you comment for the first time, it is displayed after the approval of the administrator.
Because I cannot speak English so much, it takes time to answer.
Required fields are marked *.

※Please enter more than 5 characters only alphabets.
※Edit or delete are possible for 2000 days after approval.

*

♠Simplistic Comment User Editable v4.0

♠When visitors leave comments on the site this site collect the data shown in the comments form, and also the visitor’s IP address and browser user agent string to help spam detection.
♠This site does not use cookie when visitors leave comments and commenter edit comment.
♠This site uses Akismet to reduce spam. Learn how your comment data is processed.

Comments feed

Trackback URL : https://strix.main.jp/wp-trackback.php?p=58157

Sanbanse Funabashi
2011.01.01 sunrise

Top

スクロールさせるか画像をクリックすると元に戻ります。