hampom TODAY

「TODAY」ってタイトルが付くブログが作りたいな、と思った10分後に作ったブログ。

10月 2009のアーカイブ

作ってみたよー!! ランダムバナーを表示する jQuery プラグイン

1件のコメント

「ランダムにバナーを表示したい」という要望があり、データベースとか使うような大袈裟なものじゃないもの…と jQuery でなんとか実現できないものかと、ちょっと自分で作ってみる事にしました。

サンプルを設置しました! → SAMPLE

ソースコードは以下。

(function($){

 $.fn.rb_collection = {};
 $.fn.rb_collection = function(cfg) {

 var that = this;

 if($.browser.msie && !$.fn.random_banner.winloaded)
 $(window).load(function(){ ini(cfg) });
 else
 ini(cfg);

 function ini(cfg) {
 $.post( cfg, function(data, status) {
 var $items = $(".rb_collection", data);

 var arr = $.makeArray($items);
 var nums = Math.floor(Math.random() * arr.length);
 $(that).html(arr[nums]);
 }, "html");
 };

 };

})(jQuery);

使い方は、jQuery(1.3.2 で動作してました!) と一緒に読み込み…。

以下のように、HTML を書きます。
該当するのは、

$("#bp_holder").rb_collection('javascript/semi-item.htm');

こちらの一行。

id が bp_holder というブロック(div)に javascript/semi-item.htm の中に記述されている複数のバナーから1つを表示する。という意味になります。


<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="javascript/jquery.js"></script>
<script type="text/javascript" src="javascript/rb_collection.js"></script>

<script type="text/javascript">
$(document).ready(function(){

 $("#bp_holder").rb_collection('javascript/semi-item.htm');

});
</script>
</head>
<body>

<!-- ランダムバナーが表示される場所 -->
<div id="bp_holder"></div>

</body>
</html>

そして、semi-item.htm には複数のバナーを並べておきます。
ファイルの拡張子からもわかるように、ただの HTML ファイルになっており…


<html>
<body>
<div>

<!-- ひとつ目のバナー -->
<table cellspacing="0" cellpadding="0" width="184" border="0" class="rb_collection">
<tr>
<td>BLOG:</td>
<td><a href="http://hampom.wordpress.com/"></a></td>
</tr>
<tr>
<td>TWITTER:</td>
<td><a href="http://twitter.com/hampom/"></a></td>
</tr>
</table>

<!-- ふたつ目のバナー -->
<div class="rb_collection">
<a href="http://twitter.com/hampom/"><img src="http://a3.twimg.com/profile_images/483611929/avatar.png"></a>
</div>

</div>
<body>
</html>

おおきな div要素の中に、さらに table や div といったブロックがあり css の class 指定「rb_collection」がされています。

この rb_collection が設定されている要素がランダムで元のページに出力されて表示されます。

初めて作ってみたんですが、とりあえず希望通り動いていますのでヨシとしております。改善点や問題点などがあればご指摘いただけると嬉しいです(*´д`*)

投稿者: hampom

2009年 10月 31日 2:05 PM

カテゴリー: 未分類

Codeigniter – Form_validationクラス

コメントする »

Codeigniter の Form_validation クラスのヘルパー関数。

フォームの入力内容にエラーがあった場合なんかに、再度フォームを表示する必要がある。その際に、入力された内容をフォームに予めセットしておく事をよくする。 input の type に合わせて、色々なヘルパーがある。

codeigniter フォーム・バリデーションクラス: ヘルパー関数リファレンス

set_value() なんかは、そのまま表示するものなので良いのだけれど、プルダウン(set_select)やラジオボックス(set_radio)なんかでは、 引数が3つ。

第一が select や radio フォームの名前、第二が 値、そして第三が チェックを付ける(か、選択状態にする)などの true / false になっている。

こいつが厄介で、毎度プログラムでどの値が選択されているかどうかをチェックし、 true または false をセットしなくてはいけなくて面倒だった。

そこで、 true もしくはfalse 以外の値の場合は、第二引数と比較して同一であればチェックを付けるように修正した。

	/**
	 * Set Select
	 *
	 * Enables pull-down lists to be set to the value the user
	 * selected in the event of an error
	 *
	 * @access	public
	 * @param	string
	 * @param	string
	 * @return	string
	 */
	function set_select($field = '', $value = '', $default = FALSE)
	{
		if ( ! isset($this->_field_data[$field]) OR ! isset($this->_field_data[$field]['postdata']))
		{

      if (!is_bool($default))
      {
        if($default == $value)
				  return ' selected="selected"';
        else
          $default = false;
      }

			if ($default === TRUE AND count($this->_field_data) === 0)
			{
				return ' selected="selected"';
			}
			return '';
		}

		$field = $this->_field_data[$field]['postdata'];

		if (is_array($field))
		{
			if ( ! in_array($value, $field))
			{
				return '';
			}
		}
		else
		{
			if (($field == '' OR $value == '') OR ($field != $value))
			{
				return '';
			}
		}

		return ' selected="selected"';
	}

これと、こっち。

	/**
	 * Set Radio
	 *
	 * Enables radio buttons to be set to the value the user
	 * selected in the event of an error
	 *
	 * @access	public
	 * @param	string
	 * @param	string
	 * @return	string
	 */
	function set_radio($field = '', $value = '', $default = FALSE)
	{
		if ( ! isset($this->_field_data[$field]) OR ! isset($this->_field_data[$field]['postdata']))
		{
      if (!is_bool($default))
      {
        if($default == $value)
  				return ' checked="checked"';
        else
          $default = false;
      }

			if ($default === TRUE AND count($this->_field_data) === 0)
			{
				return ' checked="checked"';
			}
			return '';
		}

		$field = $this->_field_data[$field]['postdata'];

		if (is_array($field))
		{
			if ( ! in_array($value, $field))
			{
				return '';
			}
		}
		else
		{
			if (($field == '' OR $value == '') OR ($field != $value))
			{
				return '';
			}
		}

		return ' checked="checked"';
	}

それぞれを、MY_Form_validation.php に追加して application の libraries に置いておけばOK.

投稿者: hampom

2009年 10月 12日 2:25 PM

カテゴリー: 未分類

フォロー

Get every new post delivered to your Inbox.

現在332人フォロワーがいます。