2008年9月アーカイブ

cakephpポケットリファレンスのfindのページによると
2項を抜き出すのに
$prefectures = $this->Prefecture->find("all",array("fields" => array("id","name"),"order" => "id ASC"));
とあったんだけどこの方式だと抜けなかった

APIを見てみると
http://api.cakephp.org/class_model.html#e60758f27fa8486a063b8cc424bad741

Model::find ( conditions = null,


fields = array(),


order = null,


recursive = null 

)


となっていたので
            $result = $this->Product->find($condition,array("id","name"));
な形式にしたらid,nameで配列が取れました

と思ったら1件しか取れて無くって
複数取りたかったので
findAllに変更して取れました
PHPで配列をまわすときとかに
配列やオブジェクトが無いとワーニングが出たりするので
その配列とかがあるかを確認しようとすると
Undefined property: stdClass::~
とNoticeで怒られたりする

昔なPHPの書き方でゆるーく書いてるとNoticeだらけになるので
(debugレベルで表示しないでもいいですが、調べたほうがいいので)

そんなときはissetでチェックするのがなかなかいいかも
厳密なチェックではありませんがw

cp /cake/libs/view/layouts/default.ctp /app/views/layouts/
としてインストール時に表示されているデフォルトテンプレートをコピーする

このdefault.ctpを編集することによってヘッダー、フッター等同じデザインで利用できる
URLが不正です http://www.sixapart.com/movabletype/styles/mt4/library
と表示されていてアップデートしたMT4で昔使っていたスタイルが設定できなかったんだが

perl-libwww-perlが無いのが原因らしい

yum install perl-libwww-perlとしてインストールした後
スタイルライブラリの利用が可能となった

アーカイブの内容をディレクトリでごっそり移行しようとしたことがあだになったか
インストール完了のモジュールチェックで
perl-libwww-perlがもれていたために発生したっぽい

参考:
http://www.arbk.net/weblog/2008/09/mt4-3.html
自動で作ってくれたりしないかなとか甘い考えを持っていたんだが
全自動という感じにはなっていないようだ
ヘルパーとかまだ全て分かっているわけではないので
簡単なやり方もあるのかもしれないが

とりあえずフォームに関しては
<?php echo $form->create('User', array('enctype' => 'multipart/form-data'));?>
<?php echo $form->file('photo');

とする
multipartにしないとファイル情報が取れないため

次にモデルに
    function savePhoto($fileData) {
        if (move_uploaded_file($fileData['tmp_name'], WWW_ROOT . "img/photos" .DS. $fileData['name'])) {
            return true;
        }else{
            return false;
        }
    }
のようなファンクションを追加する
ここでは画像のアップロードを想定している

コントローラは
bakeで焼いたものを元に
 if(!$this->User->savePhoto($this->params['data']['User']['photo'])){
                $this->Session->setFlash(__('The Coordinate could not be saved. Please, try again.', true));
            }
            $this->data['User']['photo']= $this->params['data']['User']['photo']['name'];
            if ($this->User->save($this->data)) {
...以下省略

data['User']['photo']にパラメータからのファイル名を送っているのは
この部分
[id] => 2
[title] => 秋
[caption] => gfdsgfds
[photo] => Array
(
[name] => xxxxxx.jpg
[type] => image/jpeg
[tmp_name] => /tmp/phpcGsPee
[error] => 0
[size] => 4085
)
こんな感じに入っているようで
そのまま、DBに欠かせにいったらarrayはダメだよと怒られたので
このようにして対処した

ちなみに初めにファイル処理とDB処理を逆にしてしまうと正しく処理しないので
注意が必要

#もっとスマートなやり方ありませんか?




           



jCarousel Liteを利用して画像のカルーセル(って読むの?)を作って
それを選択したときにHTMLを入れ替えるような処理を行いたい場合

$(function() {


$(".anyClass").jCarouselLite({
btnNext: ".next",
btnPrev: ".prev"
});


$(".anyClass img").click(function() {
$(".top img").attr("src", $(this).attr("src"));
$(".items").load("test.php", {
cordinate_id: $(this).attr("name")
});

})
});

こんな感じで行う
一覧の画面から何かでID的なものを特定しなければいけないのだが
このリストを作る事も動的に行うと思うので属性nameにIDを設定してしまう

HTMLでは
<div class="anyClass">
<ul>
<li><img src="images/photo_5.jpg" alt="" width="68" height="100" name = "1"></li>
<li><img src="images/photo_6.jpg" alt="" width="68" height="68" name="2"></li>
<li><img src="images/photo_7.jpg" alt="" width="87" height="130" name="3"></li>
<li><img src="images/photo_8.jpg" alt="" width="68" height="68" name="4"></li>
<!-- name に コーディネートIDを持たせる -->
    </ul>
</div>
の用にname="ID"とする


http://www.airtightinteractive.com/projects/autoviewer/instruct.html
を使うと画像をスライドショーのように、簡単にWEB上にアップできる
PicasaをつかったりPHPを使ってサーバのフォルダを一括公開させたりとできるが

gallery.xmlを変換してキャプションをつけたりするときにはUTF8にする必要がある
適当な変換ツールがなければ、サーバでnkfコマンドで nkf -w として変換を行う

caption内にはCDATAで書くことにより
フォント関係のタグやBRあたりがつかえる

<image>
  <url>images/muaythai-techniques.jpg</url>
  <caption><![CDATA[ここに説明文<br>書いて<br><u><a href="alleyoop.jp">リンク</a></u>じゃだめかな?]]></caption>
  <width>320</width>
  <height>308</height>
</image>

このような感じリンクにはアンダーラーンが付かないので<u>を利用するとリンクが見やすくなって良い