Lithiumのプラグインli3_designの不具合を報告。

Lithiumプラグインli3_designの不具合を報告してマージされました!

https://github.com/UnionOfRAD/li3_design/pull/3
たった1行なんだけど。

どんな不具合?

li3_designプラグインとli3_flash_messageプラグインを使用してた時に、viewで下記のソースを実行するとエラーが発生した。

<?php //echo $this->flashMessage->output(); ?>


原因は、li3_flash_messageプラグイン内でelementパスのviewを使う際にelementのパスが設定されていなくてエラーが起っていました。

Lithium内(lithium/net/http/Media.php)ではelementパスが下記の様に設定されています。

<?php
        $handlers = static::$_handlers + array(
            'default' => array(
                'view'     => 'lithium\template\View',
                'encode'   => false,
                'decode'   => false,
                'cast'     => false,
                'paths'    => array(
                    'template' => '{:library}/views/{:controller}/{:template}.{:type}.php',
                    'layout'   => '{:library}/views/layouts/{:layout}.{:type}.php',
                    'element'  => '{:library}/views/elements/{:template}.{:type}.php'
                )
            ),
            'html' => array(),
            'json' => array('cast' => true, 'encode' => 'json_encode', 'decode' => function($data) {
                return json_decode($data, true);
            }),
            'text' => array('cast' => false, 'encode' => function($s) { return $s; }),
            'form' => array('cast' => true, 'encode' => 'http_build_query')
        );
?>

しかし、li3_design内ではgithubで報告した様にMedia::type設定時のpaths内に、elementが含まれていなかった為エラーが発生していました。


他のプラグインへ影響を与えないプラグインを作る意識が必要だなと感じました。


[PR]Spreeの情報を集めています。

ECを持ちたい方、仕事でECを使いたい方向けのコミュニティサイトです。
このサイトでは世界で最も使用されているECの1つであるSpreeについての情報を提供しています。
http://spreecommerce.jp/

Lithiumのちょっとしたメモ。

Lithiumgithubで開発し始めましたが、UnionOfRAD/lithium と UnionOfRAD/frameworkがあるのですが、UnionOfRAD/lithiumlithium本体コア部分の開発で、UnionOfRAD/frameworkがコア部分を含めた全体のファイル構成になっています。

なので、0.10で開発したい人はUnionOfRAD/lithiumで0.10をダウンロードしてcore部分を差し替えればokです。

https://github.com/UnionOfRAD



(間違えていたらごめんなさい。)


[PR]Spreeの情報を集めています。

ECを持ちたい方、仕事でECを使いたい方向けのコミュニティサイトです。
このサイトでは世界で最も使用されているECの1つであるSpreeについての情報を提供しています。
http://spreecommerce.jp/

”CakePHPのデバッグレベル0の時に$this->cakeError('error500')が404のエラーになる”の回避方法について。

CakePHPデバッグレベル0の時に$this->cakeError('error500')が404のエラーになる
http://d.hatena.ne.jp/STAR_ZERO/20110319/1300495970


僕も上記の不具合(仕様?)に遭遇したので、回避方法をメモ。

余りcoreファイルを弄りたくない人の場合を想定してみました。


missingControllerメソッドと動作が同じで良いなら下記の方法でどうだろうかなぁ?

<?php

class AppError extends ErrorHandler {

    function error404($params) {
        parent::missingController($params);
    }
}

[PR]Spreeの情報を集めています。

ECを持ちたい方、仕事でECを使いたい方向けのコミュニティサイトです。
このサイトでは世界で最も使用されているECの1つであるSpreeについての情報を提供しています。
http://spreecommerce.jp/

ソーシャルなサービスを支援 (PHP Advent Calendar 2010 14日目)

久しぶりの記事です。

今年に入ってだらだらと日々を過ごしてしまい記事を書けずにいましたが、このAdvent Calender 2010をきっかけに再び日課になれたらと思います。

ソーシャルなサービスを支援

少し前に作成して放置しているopenpearライブラリの紹介です。
http://openpear.org/package/Services_Twitter_Time

Exception処理とかしていないやっつけライブラリなのですが、意外と使用するので良い感じ。
(誰かメンテナンスしてくれると嬉しいです。)

ソースコード

<?php

class Services_Twitter_Time {

    private $prefix = 'about ';
    private $now_time;
    private $conditions;

    public function __construct() {

        $this->now_time = time();

        $this->conditions = array (
            1         => array(
                      'range' => range(1,50),
                      'word'  => ' seconds ago'
                      ),
            60        => array(
                      'range' => range(1,59),
                      'word'  => ' minutes ago'
                      ),
            3600      => array(
                      'range' => range(1,23),
                      'word' => ' hours ago'
                      ),
            86400     => array(
                      'range' => range(1,29),
                      'word' => ' days ago'
                      ),
            1036800   => array(
                      'range' => range(1,11),
                      'word' => ' months ago'
                      ),
            12441600  => array(
                      'range' => range(1,100),
                      'word' => ' years ago'
                      ),

        );
    }
    public function setNowTime ($now_time) {
        $this->now_time = $now_time;
    }

    public function get ($time) {

        foreach ($this->conditions as $key => $conditions) {
            foreach ($conditions['range'] as $range) {
                if ($this->now_time - $time <= (int)($range * $key)) {
                    return $this->prefix . $range . $conditions['word'];
                }
            }
        }
    }
}

使用方法

getメソッドにタイムスタンプを指定すれば、現在の時間(now_timeプロパティ)との差を計算して"Twitter風の時間表示に整形"して表示します。

<?php

require_once('Services/Twitter/Time.php');

$time = new Serveices_Twitter_Time();
echo $time->get(...);// 6 minute ago等...

こんな感じです。

ソーシャルなサービスをリリースしたんですよ。

告知します。昨日リリースしたのです。

Livlis
http://www.livlis.com

絶賛バグ取り中です!よろしくお願いします。


[PR]Spreeの情報を集めています。

ECを持ちたい方、仕事でECを使いたい方向けのコミュニティサイトです。
このサイトでは世界で最も使用されているECの1つであるSpreeについての情報を提供しています。
http://spreecommerce.jp/

Services_Twitter_Timeを作成しました。

Twitterの"2 minutes ago"とか"10 days ago"とかの計算を簡単にしてしまおうというライブラリです。

http://openpear.org/package/Services_Twitter_Time

全然デバッグしていないので、報告お待ちしております。


[PR]Spreeの情報を集めています。

ECを持ちたい方、仕事でECを使いたい方向けのコミュニティサイトです。
このサイトでは世界で最も使用されているECの1つであるSpreeについての情報を提供しています。
http://spreecommerce.jp/

phpで簡単に画像を合成。Image_Combinationを作成しました。

phpImageMagickライブラリの方が沢山機能があって便利だと思います。

phpのGDを利用して画像合成するライブラリ作ってみよと思いまして遊び半分で作成しました。

openpearチャンネルのインストール&Image_Combinationのインストール

pear channel-discover openpear.org
sudo pear install openpear/Image_Combination-alpha 

画像の合成&セーブ

<?php

require_once ('Image/Combination.php');

$image = new Image_Combination(100,100);
$image->setImageType('gif');
$image->push(array('file' => 'body.gif',   'x' => 30, 'y' => 5));
$image->push(array('file' => 'weapon.gif', 'x' => 5,  'y' => 35));
$image->push(array('file' => 'shield.gif', 'x' => 55, 'y' => 45));
$image->save('person.gif');

画像の合成&出力

<?php
require_once ('Image/Combination.php');

$image = new Image_Combination(100,100);
$image->setImageType('gif');
$image->push(array('file' => 'body.gif',   'x' => 30, 'y' => 5));
$image->push(array('file' => 'weapon.gif', 'x' => 5,  'y' => 35));
$image->push(array('file' => 'shield.gif', 'x' => 55, 'y' => 45));
$image->output();





まとめ

頭の体操にちょうど良かったかな。どうだろう。


[PR]Spreeの情報を集めています。

ECを持ちたい方、仕事でECを使いたい方向けのコミュニティサイトです。
このサイトでは世界で最も使用されているECの1つであるSpreeについての情報を提供しています。
http://spreecommerce.jp/

phpを使用してOAuthを利用し、TwitterAPIを実行する方法

物凄く久しぶりの更新。
週一位で更新する頻度に戻したい。

最近open socialやtwitter連携サービス等に触れる機会を頂いてそれをちょこちょことメモしようと思いました。
そこで、phpを使用してOAuthを利用し、TwitterAPIを実行する方法を書きました。

環境

OS:CentOS5.4
PHP:5.2.1

phpを使用してOAuthを利用し、TwitterAPIを実行する方法

下記のサイトを参考にphpからOAuthを利用する方法を調査しました。
http://www.sdn-project.net/labo/oauth.html

簡単に書くと、単にライブラリを使用するだけなんですけどね。

先ほどのサイトに紹介されている下記のライブラリをサーバーにダウンロードします。
http://github.com/abraham/twitteroauth

ダウンロード・解凍後、index.phpにアクセスする事で簡単にOAuthを利用する事が出来ます。


しかし、対象ユーザーのトークンを利用して呟かしたいとかだと、ダウンロードだけでは出来ないので簡単に下に列挙。
(コールバックで返ってきた後の話です)

ステータスの更新(ツイート)
<?php

require_once('twitteroauth/twitteroauth.php');

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);

//投稿
$parameters = array('status' => 'OAuthからの投稿だよ!');
$connection->post('statuses/update', $parameters);
フォロー
<?php

require_once('twitteroauth/twitteroauth.php');

$connection = new TwitterOAuth(CONSUMER_KEY, CONSUMER_SECRET, $access_token['oauth_token'], $access_token['oauth_token_secret']);

//フォロー
$method = 'friendships/create/93915746';
$connection->post($method);

他にも出来る事があるのですが、詳しくはライブラリの中にあるtest.phpの中を覗くと出来る事が列挙されているという親切な設計。

まとめ

phpでOAuthは全然難しくない!
認証システムを外部で持てるのは、作成側もユーザーも便利なので、どんどんその様なサイトが増えると良いなと思いました。


[PR]Spreeの情報を集めています。

ECを持ちたい方、仕事でECを使いたい方向けのコミュニティサイトです。
このサイトでは世界で最も使用されているECの1つであるSpreeについての情報を提供しています。
http://spreecommerce.jp/