Entries Tagged as ''

symfonyのフォームでYahoo UIの綺麗なボタンを使う

状況

  • フォームのボタンをブラウザのデフォルトじゃなく、もうちょっと良いデザインにしたい
  • Yahoo UIのボタンは、CSSでキレイにデザインされている。CSSや画像ファイルもyahoo.comのを使えるのでサーバにもやさしい
  • symfonyで作ったフォームからYUI buttonを使いたい

symfonyでのフォームのsubmitについては、link_to()、button_to()、submit_image_tag()の3つがFormHelperに用意されています。

  • submit_tag() は、ブラウザデフォルトのボタンを書くのでフォームでそのまま動く
  • button_to() type=”button”は作れるけど、formの値を送るには自分でjavascript書く必要あり
  • submit_image_tag() 画像用意すればキレイなsubmit用のボタンが使える

YUI buttonは、type=”button”を使うことを前提にしているのですが、type=”button”でformのサブミットをさせる(ボタンを押したらフォームの各値がリクエストに含まれる)ようにするためには、ボタンが所属するフォームを駆動するようなJavascriptが必要となります。

以上から、次のようにすることで、symfony+YUIでのCSSデザインボタンを作ることができました。

HTMLのほうは、2番目のパラメータにtypeを渡すことで、submit_tag()にもtype=”body”を上書きで指定することができます。

<?php echo submit_tag('実行する', array('type' => 'button', 'id' => 'compareButton')); ?>

YUI buttonのJavascriptでの定義のところでは、この「フォームを駆動するボタン」という設定ができるので、これを指定します。

<script type="text/javascript">
var oButton = new YAHOO.widget.Button(
  "compareButton",
  {
    checked: false,
    type: "submit"
  }
);
</script>

type: “submit”がそれにあたります。

あとは、YUI buttonに必要な定義をします。

なんらかのスタイルをあてる。YUIで提供されているスキンか、自分で改造したスキンを指定することも可能

<body class="yui-skin-sam">

symfonyのconfig/view.ymlでは、関係のあるYUIのCSS/JSを読ませるようにします。

  stylesheets:    [main, http://yui.yahooapis.com/2.4.1/build/grids/grids-min.css, http://yui.yahooapis.com/2.4.1/build/button/assets/skins/sam/button.css]

  javascripts:    [http://yui.yahooapis.com/2.4.1/build/yahoo-dom-event/yahoo-dom-event.js, http://yui.yahooapis.com/2.4.1/build/element/element-beta-min.js, http://yui.yahooapis.com/2.4.1/build/button/button.js]

このへんは、YUIのバージョン変わったり、圧縮版を使うかとか、yahoo.comの提供してくれているファイルを使うか、ローカルにコピーしたファイルを使うかとかで変わってくるでしょう。

symfony, YUIで作ったキレイ目ボタン

理想の彼氏は

理想の彼氏は

理想の彼氏は

やっぱりいつだって私との時間を作ってくれる彼が理想かな。それって自由に時間が使えるフリーエンジニアのことだと思う。

素敵だ…

PEARサイトがリニューアル

PHPの公式ライブラリサイトpear.php.netのデザインがリニューアルしたようです。

Yahoo UIライブラリを使ってすっきりとしたデザインになったり、パッケージリストなどの更新の自動化が入って細々とした不便な点も改善されているということ。(参考) いい感じです。

PEARサイトの新デザイン

猫用カツラ

via Geekologie

これはすごい

ネコカツラ

50ドル(日本へは送料込みで75ドル)でこんなステキなネコヅラが買えるなんて!

ネコ用白カツラ

symfonyで、view.ymlで定義したサイトタイトルをテンプレート中から呼び出す方法

view.ymlのdefault/metas/titleでサイトワイドのタイトルを定義しているのに、layout.phpや_header.phpでタイトルを手打ちするのは嫌だなあ、ということで、どこから辿ってview.ymlのデータが取れるのかを探しました。

layout.php等で、

sfContext::getInstance()->getResponse()->getTitle()

を呼ぶと、view.ymlの中のタイトルが取れます。これを<h1>とかに放り込めばOK。

PHPでオブジェクトを配列に変換するにはget_object_vars

いつも関数名が思い出せなくなるけど、どうやって検索したら見つかるかも毎回悩んでしまうので、自分用にメモ。get_object_varsですね。

# 「オブジェクトを配列にする」, “Object2Array”

昨日の、SimpleXMLElementをserializeしてもunserializeで元に戻せない件で、キャッシュでどうしてもserializeを使いたいことから、SimpleXMLElementの中のデータを配列に変換してしまうという方針にしました。

一つずつ取ってきて配列を再構築してもいいんですが、この手の処理はget_object_vars関数を使えばやってくれるので、その方が間違いが少ないと思います。

ただ、get_object_varsは再帰的に配列にしてくれるわけではありません。、SimpleXMLElementの要素の中にまた、SimpleXMLElementがあれば、それはそのまま残ってしまうため、今回の「serializeさせる」という目的ではこれだけでは不十分です。

PHPマニュアルのコメントにも、どうやってrecursiveに変換するか、というコード例がいろいろ出てきています。

今回は、SimpleXMLElementとget_object_varsで調べて出てきたIBM developerworks のPHP で XML をJSON に変換するを参考に、defineをconstに直すなど調整をしたものを使うことにしました。再帰の深さを制限できるようになってます。

PHP Hacksの目次を見ると53. 任意のオブジェクトを配列に変換する、とあるので、これ持ってる人はたぶんここに似たような話が載ってるんじゃないかな、とも思いました。

[AA-Camp] 開発会7日目レポート

あと2日!

以前のAA-Camp参加者のkambeさんが今回シリーズ初参加。一日で二つのサイトを完成させた。新聞製造機座席占い

[関連]

AA-Camp に参加してきました – ryuzi_kambe の?D