開発メモ,主に補足by子連れ親父プログラマー

2010-10-26

jQuery UIのDialogで、開くウインドウの中身を別ファイルにしたい

ついでなので。
こちらもサンプルソースを見ると、
HTMLはただdialogってidでdiv作っておいて、
<div id="dialog" title="Basic dialog">
  <p>ここに中身</p>
</div>
JavaScript側はこんだけ。
$(function() {
  $( "#dialog" ).dialog();
});
そっけないなあ。
ドキュメントのoptionsとか見ても皆目見当が付かない。
ただやはりこれも同じHTMLのソース(テンプレ)の中にダイアログ用のソースをどんどん書いていくと、ごちゃごちゃになってくる。
1個、2個くらいならいいとは思うが。
ということで調べてみると、

Loading a page into a dialog

こういう記事があり、やり方はあることが分かった。

jqueryでまず一発 div を生成し、そこに .load() で別ファイルを読み込んで、そいつに dialog のオプションを設定し、そして .open() すれ、ってことらしい。

例として、id="add" のなにがしをクリックした場合として、
$('#add').click(function() {
  $('<div></div>')
    .load('add.php')
    .dialog({
      modal: true,
      autoOpen: false,
      buttons: {
        "登録": function() {
          $(this).dialog("close");
        }
      }
    })
    .dialog('open');
  return false;
});
こんな感じでしょうかー。

jQuery UIのTabsを使って切り替えるタブの中身のコンテンツ部分を別ファイルにしたい

他にいいのがなくて仕方なく使ってるjQuery UIですが、一番よく使う、いや、使いたくなるのが、Tabsを使ったタブレイアウトですね。
デザイナーがぱぱぱっと作ってくれればいいんだけど、いないし。
ということでそのTabsですが、サンプルのソースを見ると、
こんな感じになっていて、
<div id="tabs">
  <ul>
    <li><a href="#tabs-1">メニュー1</a></li>
    <li><a href="#tabs-2">メニュー2</a></li>
    <li><a href="#tabs-3">メニュー3</a></li>
  </ul>
  <div id="tabs-1">
    <p>一個目</p>
  </div>
  <div id="tabs-2">
    <p>2個目</p>
  </div>
  <div id="tabs-3">
    <p>3個目</p>
  </div>
</div>
切り替えるコンテンツの中身も全部同じ一個のファイル(テンプレ)に書く、それを出したり、隠したりする、ということになっている。
中身がちょびっとだったらいいけれども、量が多いとソース書く時に長くなるし、見づらくなるし、分割したい訳です!
別ファイルに。

ということで考えてみたんだが、、
HTMLの方は、
<div id="tabs">
  <ul>
    <li><a href="#tabs-1">メニュー1</a></li>
    <li><a href="#tabs-2">メニュー2</a></li>
    <li><a href="#tabs-3">メニュー3</a></li>
  </ul>
  <div id="tabs-1">
  </div>
  <div id="tabs-2">
  </div>
  <div id="tabs-3">
  </div>
</div>
コンテンツ部分を空っぽにしておいて、
$("#tabs").tabs({
  select: function(event, ui) {
    if (ui.index == 0) {
      $(ui.panel).load('index.php');
    }
    else if (ui.index == 1) {
      $(ui.panel).load('menu.php');
    }
    else if (ui.index == 2) {
      $(ui.panel).load('user.php');
    }
  }
});
とするのはどうだろうか。
もちろん、.load() で呼び出すindex.phpとかには<div>の間に入る内容を出力させます。
もっといい方法ありますか?

2010-10-25

postgreSQLで通し番号(シーケンス)をリセットする時に1から始めたい場合

postgreSQL で id とかのフィールドで自動的に番号が増えていく、auto_increment みたいな設定をテーブルにすると、シーケンスが作られる。
例えばこんなテーブルを作ると
CREATE TABLE users(
  id SERIAL PRIMARY KEY,
  name VARCHAR(255)
);
こんなんなる。
 Schema |     Name     |   Type   |  Owner
--------+--------------+----------+----------
 public | users        | table    | postgres
 public | users_id_seq | sequence | postgres
しばらく users にデータをインサートした後で、
このシーケンスに対してセレクトをかけると、
SELECT * FROM users_id_seq ;
こんな結果が返ってくる
 sequence_name | last_value | increment_by |      max_value      | ・・・
---------------+------------+--------------+---------------------+-------
 users_id_seq  |         34 |            1 | 9223372036854775807 | ・・・
この last_value というのが自動で増えていった id の最後の番号で、これが34になったまま、 users テーブルのデータを消してしまうと、次は id が34から始まってしまう。
1からにしたい、という時に、
select setval ('users_id_seq', 1);
とやるんだが、こうすると last_value が1になるので、次は2からになってしまう。
じゃあ、
select setval ('users_id_seq', 0);
としてみたらどうかと思うが、これはエラーになる。

ということでこうするとよい。
select setval ('users_id_seq', 1, false);

一回目は last_value は1のままで、is_called が true になり、二回目は last_value は2になる。

2010-10-21

2010-10-01

テーブルの一番右端の列の値だけを取り出したい

テーブルの一番右端の列の値だけを取り出したい テーブルの一番右端の列に文字が入っていて、中にはリンクが貼られている場合もあるとする。
リンクが貼られている場合はそのURLを、文字だけの場合は、文字を、取り出したい。
var val=''; 
$('tr td:last-child').each(function(n){ 
    if ($(this).find('a').attr('href') != '') { 
        val += $(this).find('a').attr('href')+"\n";
    } else {
        val += $(this).text()+"\n";
    }
});
$('body').append('
' + val + '
');

こんな感じにしてみた。

このブログを検索

Powered by Blogger.

ラベル

php (17) jQuery (13) OSX (10) MySQL (8) Javascript (7) Postgres (7) port (7) apache (6) Java (3) Smarty (2) html (2) pear (2) FCKEditor (1) XAMPP (1) css (1) git (1) perl (1) ruby (1)

Facebookバナー