cakephp basics.php に最初に設定しとくべき11の関数

2013年3月27日更新 view: 24 view
photoBy: http://www.pd-trinity.com/file/40/56-2.jpg

basics.php ってなに?

/cake/basics.phpにあるファイル。
これに関数を設定しておくと、MVCのどこからでも関数が使えます。

prの修正

スポンサードリンク

デバッグするときに pr(); を使います。
その際に 行数や情報をを見やすく表示させるように改造します。

613から623行目あたり

function pr($var) {
        if (Configure::read() > 0) {
        $array = debug_backtrace();
            
            echo "<div align='left' style='background-color:black;color:white;'><pre style='background-color:black;color:white;font-size:14px;'>";
            echo '<b style="font-weight:bold;color:white;background-color:black;">'.$array[0]['file']." (line ".$array[0]['line'].")".'</b><br />';
            
            print_r($var);
            echo "</pre></div>";
        }    
    }

これで、 pr とすれば 黒く表示されてデバッグが見やすくなります。

その他最初に設定しておくと超激烈便利な関数

スマートフォンからのアクセスか?

スマートフォンからのアクセスの場合は true を返します。

function isSmartPhone()
{
    $res = false;
    $ua_list = array(
        'iPhone',    // Apple iPhone
        'iPod',    // Apple iPod touch
        'Android',    // Android
        'dream',    // Pre 1.5 Android
        'CUPCAKE',    // 1.5+ Android
        'blackberry',    // blackberry
        'webOS',    // Palm Pre Experimental
        'incognito',    // Other iPhone browser
        'webmate'    // Other iPhone browser
    );
    
    $pattern = '/'.implode('|', $ua_list).'/i';
    
    if(isset($_SERVER['HTTP_USER_AGENT'])){
        if(preg_match($pattern, $_SERVER['HTTP_USER_AGENT']))
        {
            $res = true;
        }
    }

    return $res;
}

指定ファイルを削除

指定ファイルを削除します。
TMP.'cache/views/'.$lastId.'.php'

function delFile($file)
{
    $res = false;
    if(is_file($file)){
        unlink($file);
        $res = true;
    }
    return $res;
}

デバッグモードか?

デバッグモードなら true を返します。

function is_debug()
{
    $res = false;
    if(Configure::read('debug') > 1){
        $res = true;
    }
    
    return $res;
}

20歳は 何年何月何日から何年何月何日までの生まれか?

指定した年齢のユーザーは yyyy-mm-dd ? yyyy-mm-dd までの生まれですよ
という結果を配列で返す。

function getBirthdayRange($before_age,$after_age = '')
{    
    $start = mktime(0, 0, 0, date('m'), date('d') + 1, date('Y') - $before_age - 1);
    
    if(!empty($after_age)){
        $age = $after_age;
    } else {
        $age = $before_age;    
    }
    
    $end = mktime(0, 0, 0, date('m'), date('d'), date('Y') - $age);

    return array(date('Y-m-d', $start), date('Y-m-d', $end));
}

Array
(
    [0] => 1994-03-28
    [1] => 1995-03-27
)

文字数を指定した文字でカット

500文字ある文字列を 30文字 でカット。
さらに ... をつけます。

function truncate($text, $length = 100, $ending = '…', $exact = true)
{
    if (strlen($text) <= $length) {
        return $text;
    } else {
        
            mb_internal_encoding("UTF-8");

        if (mb_strlen($text) > $length) {
            $length -= mb_strlen($ending);
            if (!$exact) {
                $text = preg_replace('/\s+?(\S+)?$/', '', mb_substr($text, 0, $length+1));
            }
            return mb_substr($text, 0, $length).$ending;
        } else {
            return $text;
        }
    }
}

年齢を計算

誕生日 yyyy-mm-dd を入れると、現在何歳かを取得します。

function getAge($birthday)
{
    $dif = date("Ymd") - date('Ymd',strtotime($birthday));
    $age = floor($dif/10000);
    return $age;
}

経過日数を計算

mixiのように ○ 日前にログイン みたいな感じのを出したいときに使えますね。
end を空にしとくと自動的に今日の日付が入ります。

function difdate($bgn, $end = '', $format = 'day'){

    if($end == ''){
        $end = date("Y-m-d");
        
    }
    
    $t_bgn = strtotime($bgn);
    $t_end = strtotime($end);
    
    
    
    switch($format){
        
        case 'day':
            $res = floor(($t_end - $t_bgn) / (60 * 60 * 24))+1;
        break;
        case 'month':
            $month1=date("Y",$t_bgn)*12+date("m",$t_bgn);
            $month2=date("Y",$t_end)*12+date("m",$t_end);
            $res = $month1 - $month2;
            $res = $res*-1;
        break;
        case 'yearmonth':
            $month1=date("Y",$t_bgn)*12+date("m",$t_bgn);
            $month2=date("Y",$t_end)*12+date("m",$t_end);
            $res = $month1 - $month2;
            $res = $res*-1;
            
            $year = floor($res/12);
            $month = $res%12;
            $res = array($year,$month);
        break;
    }

    return $res;
}

奇数ならtrueを返す

テーブルの奇数の時は 何か class をつけたいとか、そういったときに使えます。

/* 奇数なら true を返す*/
function isOdd($i)
{
    if($i % 2 != 0) {
        return true;
    } else {
        return false;
    }
}

ユーザーのログイン情報を見る

Auth で ログインさせたユーザーの情報を見るとき、
$this->Auth->user();ってやるのは面倒ですね。

そこれで、 u('name'); でユーザー名が見れるようにしました。

どこのフィールドかを指定すれば、ログイン情報を返す。
u('name'); => ユーザーの名前を取得。
u(); ユーザーの全ての情報を取得
u(); が false ならログインしていない
@params str or false
@return ユーザーのセッション情報

function u($column = '')
{
    $res = false;
    
    if($column != ''){
        if(isset($_SESSION['Auth']['User'][$column])){
            $res = $_SESSION['Auth']['User'][$column];
        }
    } else {
        if(isset($_SESSION['Auth']['User'])){
            $res = $_SESSION['Auth']['User'];
        }
    }

    return $res;
}

指定フォルダの中身を全て表示

scandir だと .. とゴミ配列ができます。
そのゴミ配列を削除したものを取得する関数です。

function neoscandir($dir)
{
    $res = false;
    if(is_dir($dir)){
        $res = array();
        $items = scandir($dir);
        array_shift($items);array_shift($items);//ゴミ削除
        foreach($items as $v){
            $res[] = $v;
        }
    }
    
    return $res;
}

改行コードを削除

trimだと 改行コードがうまく削除できない場合がある。
これで文字の先頭と、最後の改行や空白タブなどコードなどを削除する

function neotrim($str,$mode = null,$replace = '_')
{
    $after = mb_ereg_replace('^[  \r\n]*(.*?)[  \r\n]*$', '\1',$str);
    
    if($mode == 1){
        $after = preg_replace('/\s+| /',$replace,$after);
    }
    
    return $after;
}
スポンサードリンク

関連記事

関連カテゴリ

コロ助

web関連の記事や制作系の記事をどんどんまとめていきます。 宜しくお願いします!

ピックアップ

パソコン・ソフトウェア ランキング

10月21日 ( 日 ) にアクセスが多かった記事はこちら!