fuelphpの自作パッケージ二個目です。

webを作るときに個人的には基本だと思うエラーメール機能がfuelphpではデフォルトで入っていないので、パッケージとして作ってみました。

packcage名に少し悩んだんですが、error-mailってなると複数単語になるのでalertにしました。
・・・複数単語の時namespaceとかフォルダ階層関連であまりうまく行かない気がするので。

ソースはGitHubで公開してます
https://github.com/9wick/fuelphp-alert

Continue reading »

 

最近fuelphpでパッケージ化にはまっています。
最初に作ったパッケージがこれ。
https://github.com/9wick/fuelphp-background

結構マニアックかなと思いますが、バックグラウンドでプロセスを走らせるパッケージです。

メルマガもどきを作らなきゃいけなくなって、調べたら1通/sec以上の速度で送るのはスパム扱いされるからやめたほうがいいと。
でもタイムアウトは60秒だし、100通ぐらいは送りたいし・・・・ということで裏で動かすことにしました。

fuelphpにはtaskというものがちょうどあるので、task限定で裏でプロセスを起動させるようにしました。

Continue reading »

 

いつの間にかiTunesConnectのカスタマーレビューのところにRSS機能がついていました!!
iTunesConnectログイン→Manage Your Applications→アプリ選択→Customer Reviewsの右側のボタンでRSS配信ができます

これはもう読むしか無い!と思ったらちょっと使いづらいみたいなので少し工夫してみました

Continue reading »

 

fuelphpのoilでのモデル自動生成が便利なんですが、またまたちょっとだけ不満があって、
自動生成なのにphpdocを書いてくれない・・・・
それによって自動補完もされないので、使いづらい。
って思いが積もったので、oilの中身を改造してphpdocを書くようにしてみました。

oilのなかみはときどきviewをつかったり、時々model側(でいいのかな?)に直書きしたりと読むのが大変なコードでしたが、多分ここだけ追加すれば大丈夫だろうというところをメモっときます。

Continue reading »

 

久しぶりのiPhoneアプリ関連記事です。

エラーで困るものの一つがEXE_BAD_ACCESSで、
もう一つがSIGABRTです。

たいていのSIGABRTはきちんとエラー内容をLogに書いてくれるのですが、なぜかときどき書いてくれない時があります。
そんな時の対処法を見つけたのでメモメモ。

Continue reading »

 

PHPでWebサービスを作るときの定番の機能として、ユーザー認証があります。
FuelPHPではこのユーザー認証に便利なsimpleAuthというものがついています。

これはDBにUser情報を保存して、Sessionなどを使いアクセス制限を行うものです。

デフォルトでプログラムに組み込まれているので非常に使いやすく、便利なのですが、いくつか欠点もあります。
それが

  • プロパティの追加が難しい
  • DBに入っているUser情報をOrm¥Modelを通して使えない

というものです。

Continue reading »

 

fuelphpのCRUDテンプレート

デフォルトで生成されるCRUDが気に入らなかったので、自分で作ってみた。

自動生成の不満点は

  1. クラスが継承じゃないので全体を変えたいときに不便
  2. なぜかViewの方ではテンプレートを組み込む形でやっているので、好きなテンプレートエンジンへの移行がしにくいこと
  3. 確認画面がない
  4. createとeditが別々にある
  5. indexでページャーが居ない
  6. モデルにプロパティをひとつ追加した時の変更が大変

というわけでつくりました。

Continue reading »

 

覚えておくと便利なのでメモ。

Continue reading »

 

Smarty3のテンプレートの継承機能がすごい便利なんですが、ページのベースとしてタブなどのメニューを作った時に子から親に変数を渡すことができなくて少し面倒なところがあります

そこで、ちょっとずるいけど子から親にデータを渡すことの出来る方法を見つけたので紹介します!

Continue reading »

 

CMSを作るときに、fuelphpとnicEditという組み合わせがMITライセンスでお気に入りなんですが、
nicEditの画像アップロードが外部サーバーのため、ちょっとプライベートな用途には使いにくいというのがあります。
そこで、どうせMITライセンスなんだし、改造しちゃえ!ってことできちんと自分のサーバーに画像をアップロードするようにしてみました。

nicEdit側の修正

  1. 画像のファイル位置を修正
    	iconsPath : '/assets/img/nicEditorIcons.gif',
    
  2. var nicUploadButton=…の行を展開する
  3. nicURI: のところをファイルをアップロードするURLに変更
  4. アップロード時に表示される画像を削除
    this.myStatus.setContent('<img src="http://files.nicedit.com/ajax-loader.gif" style="float: right; margin-right: 40px;" /><strong>Uploading...</strong><br />Please wait');
    

        this.myStatus.setContent('<strong>Uploading...</strong><br />Please wait');
    

    に変更

  5. 外部サイトを使わないので、外部サイトの表記を削除
       if(this.uri==this.nicURI){
          A.write('<div style="position: absolute; margin-left: 160px;"><img src="http://imageshack.us/img/imageshack.png" width="30" style="float: left;" /><div style="float: left; margin-left: 5px; font-size: 10px;">Hosted by<br /><a href="http://www.imageshack.us/" target="_blank">ImageShack</a></div></div>')
          }
    

    を削除

Fuelphp側の修正

  1. 公開可能なところに画像呼び出し用URL設置

    <?php
    
    class Controller_File extends Controller_Base {
    
    	public function action_show($filename = "") {
            $path = realpath(APPPATH . '../upload/') .DIRECTORY_SEPARATOR. $filename;
            $pathInfo = ¥Fuel¥Core¥File::file_info($path);
            header('Content-Type: '.$pathInfo['mimetype']);
            readfile($path);
        }
    
    }
    
  2. 公開不可なところに画像アップロード用URL設置
    <?php
    
    class Controller_Admin_File extends Controller_Admin {
    
        public function action_img() {
            $data = array();
            if (Input::method() == 'POST') {
                $config = array('ext_whitelist' => array('gif', 'png', 'jpg', 'jpeg', 'bmp'));
                Fuel¥Core¥Upload::process($config);
    
                if (count(Fuel¥Core¥Upload::get_files()) == 1 && Fuel¥Core¥Upload::is_valid()) {
    
                    Fuel¥Core¥Upload::save(0);
    
                    $file = Fuel¥Core¥Upload::get_files(0);
                    $data['url'] = ¥Fuel¥Core¥Uri::create('file/show/') . $file['saved_as'];
                    $path = $file['saved_to'] . $file['saved_as'];
                    list($width, $height, $type, $attr) = getimagesize($path);
                    $data['width'] = $width;
                    $data['height'] = $height;
    
                    ¥Fuel¥Core¥Session::set('uploadFile', $data['url']);
                    ¥Fuel¥Core¥Session::set('uploadFileWidht', $data['width']);
                    ¥Fuel¥Core¥Session::set('uploadFileHeight', $data['height']);
                    return Fuel¥Core¥Response::forge('<strong>アップロード完了</strong>');
                } else {
                    $data['error'] = $this->getFileErrorMessages('エラー');
                }
            } else {
                $fileName = ¥Fuel¥Core¥Session::get('uploadFile', '');
                if ($fileName) {
                    $data['url'] = $fileName;
                    $data['width'] = ¥Fuel¥Core¥Session::get('uploadFileWidht', '100');
                    $data['height'] = ¥Fuel¥Core¥Session::get('uploadFileHeight', '100');
                } else {
                    $data['error'] = "エラー";
                    $data['sess'] = ¥Fuel¥Core¥Session::get();
                }
            }
    
            return Fuel¥Core¥Response::forge('nicUploadButton.statusCb(' . json_encode($data) . ');');
        }
    
        private function getFileErrorMessages($default = "") {
            $errorMessage = "";
            foreach (Fuel¥Core¥Upload::get_errors() as $file) {
                foreach ($file['errors'] as $error) {
                    $errorMessage .= "{$error['message']}";
                }
            }
            if ($error == '') {
                $errorMessage = $default;
            }
            return $errorMessage;
        }
    
    }
    

ポイントはセッションを使って画像URLを保存するところです。
どうやらアップロードとは別に画像のURLを取得しようとしているらしく、これがないとどの画像を取得したいのかわからなくなり永遠にjsが動き続けました。。。
あと、画像のサイズをきちんと返してあげないとうまく動かないようでした。