CakePHP メールé€ä¿¡è¨±å¯ãƒ•ラグã«ã‚ˆã£ã¦ãƒ¡ãƒ¼ãƒ«ã‚’一斉é€ä¿¡ã™ã‚‹ãƒ¡ãƒ¼ãƒ«ãƒ“ヘイビア

CakePHP 1 Comment »

Acts As Emailable | The Bakery, Everything CakePHP : Articles

メールé€ä¿¡è¨±å¯ãƒ•ラグã«ã‚ˆã£ã¦ãƒ¡ãƒ¼ãƒ«ã‚’一斉é€ä¿¡ã™ã‚‹ã“ã¨ãŒã§ãるメールビヘイビアãŒä¸Šè¨˜ã‚¨ãƒ³ãƒˆãƒªã§ç´¹ä»‹ã•れã¦ã„ã¾ã™ã€‚
ビヘイビアã¨ã„ã†ã®ã¯ä»Šã¾ã§ä½¿ã£ãŸã“ã¨ãŒãªã‹ã£ãŸã®ã§ã™ãŒã€ãƒ¢ãƒ‡ãƒ«ã«å…±é€šã®æŒ¯ã‚‹èˆžã„ã‚’ã•ã›ã‚‹ã‚ˆã†ãªã¨ãã«ä½¿ã†æ„Ÿã˜ã§ã—ょã†ã‹ã€‚ã“ã®ãƒ¡ãƒ¼ãƒ«ãƒ“ヘイビアã¯ãƒ¢ãƒ‡ãƒ«ã«ãƒ¡ãƒ¼ãƒ«ã®ä¸€æ–‰é€ä¿¡æ©Ÿèƒ½ã‚’付加ã—ã¾ã™ã€‚

テーブル

CREATE TABLE `users` (
  `id` int(11) NOT NULL auto_increment,
  `username` varchar(255) NOT NULL default '',

  `emailable` tinyint(4) NOT NULL default '1',
  `email` text NOT NULL,
  PRIMARY KEY  (`id`)
)

emailable カラム㯠0 or 1 ã®å€¤ã§ã€1ã®å ´åˆã¯ãƒ¡ãƒ¼ãƒ«é€ä¿¡è¨±å¯ã§ã™ã€‚
email カラムã¯ãƒ¡ãƒ¼ãƒ«ã‚¢ãƒ‰ãƒ¬ã‚¹ãŒå…¥ã‚Šã¾ã™ã€‚

モデル

app/models/user.php

< ?php
class User extends AppModel {
     var $actsAs = array('emailable');
}
?>

モデルã§ãƒ¡ãƒ¼ãƒ«ãƒ“ヘイビアを使ã†ã“ã¨ã‚’定義ã—ã¾ã™ã€‚

ビヘイビア

Acts As Emailable | The Bakery, Everything CakePHP : Articles ã«ãƒ¡ãƒ¼ãƒ«ãƒ“ヘイビアã®ã‚³ãƒ¼ãƒ‰ãŒã‚りã¾ã™ã€‚
ã“れを app/models/behaviors/emailable.php ã¨ã—ã¦ä¿å­˜ã—ã¾ã™ã€‚
ãŸã ã—1点修正ãŒå¿…è¦ã§ã—ãŸã€‚
322行目ã®
App::import('Component', 'EmailComponent');
ã‚’
App::import('Component', 'Email');
ã¨ã—ã¦ä¿å­˜ã—ã¦ãã ã•ã„。
Email コンãƒãƒ¼ãƒãƒ³ãƒˆãŒä¿®æ­£å‰ã®ã‚³ãƒ¼ãƒ‰ã§ã¯èª­ã¿è¾¼ã‚ãšã«ã‚¨ãƒ©ãƒ¼ã«ãªã‚Šã¾ã™ã€‚

メールテンプレート

< ?php
    echo "テストメッセージã§ã™ã€‚åå‰ã¯".$username."ã§ã™";
?>

ä¿å­˜å…ˆã§ã™ãŒã€ã©ã“ãŒã„ã„ã®ã‹æ‚©ã¿ã¾ã—ãŸãŒä»Šå›žã¯ app/views/emails/test_template.php ã¨ã—ã¾ã—ãŸã€‚
テンプレート内ã®å¤‰æ•°ã¯ãƒ¢ãƒ‡ãƒ«ã®ã‚«ãƒ©ãƒ åãŒä½¿ç”¨ã§ãã¾ã™ã€‚

メールé€ä¿¡

$email_options = array('from' => 'hoge@example.com', 'subject' => 'テストã§ã™');
$template = "views/emails/test_template.php";
$this->User->send_campaign_to_emailable($template, $email_options);

ã“れã§ãƒ¡ãƒ¼ãƒ«é€ä¿¡è¨±å¯ã—ã¦ã„る(users.emailable=1)ã®ãƒ¦ãƒ¼ã‚¶ã«ãƒ¡ãƒ¼ãƒ«ãŒé€ä¿¡ã•れã¾ã™ã€‚

ãã®ã»ã‹ã«ä»¥ä¸‹ã®ã‚ˆã†ãªãƒ¡ã‚½ãƒƒãƒ‰ãŒã‚りã¾ã™ã€‚
send_campaign_to_all($template, $email_options)
登録ã•れã¦ã„るユーザ全ã¦ã«ãƒ¡ãƒ¼ãƒ«ã‚’é€ä¿¡ã—ã¾ã™ã€‚

send_campaign_to_non_emailable($template, $email_options)
登録ã•れã¦ã„るユーザã§ãƒ¡ãƒ¼ãƒ«é€ä¿¡è¨±å¯ã—ã¦ã„ãªã„ユーザã«ãƒ¡ãƒ¼ãƒ«ã‚’é€ä¿¡ã—ã¾ã™ã€‚

add_emailable($id)
ID ã§æŒ‡å®šã—ãŸãƒ¦ãƒ¼ã‚¶ã® emailable=1 ã«ã—ã¾ã™ã€‚

remove_emailable($id)
ID ã§æŒ‡å®šã—ãŸãƒ¦ãƒ¼ã‚¶ã® emailable=0 ã«ã—ã¾ã™ã€‚

デフォルト㯠mail 関数ã§ãƒ¡ãƒ¼ãƒ«é€ä¿¡ã—ã¾ã™ãŒã€SMTP を指定ã—ã¦é€ä¿¡ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚

ã¾ã¨ã‚

ã“ã®ãƒ¡ãƒ¼ãƒ«ãƒ“ヘイビアを今回試ã™ã“ã¨ã«ã‚ˆã£ã¦ãƒ“ヘイビアã®ä½¿ã„æ–¹ã€ä¾¿åˆ©ã•ãŒå°‘ã—ç†è§£ã§ãã¾ã—ãŸã€‚ã¾ã ãƒ“ヘイビアを試ã•れã¦ã„ãªã„æ–¹ã¯ä¸€åº¦è©¦ã—ã¦è¦‹ã¦ã¯ã„ã‹ãŒã§ã—ょã†ã‹ï¼Ÿ

Firefox ã®æ¤œç´¢ãƒãƒ¼ã®æ¤œç´¢ã‚¨ãƒ³ã‚¸ãƒ³ã‚’キーボードã§åˆ‡ã‚Šæ›¿ãˆã‚‹

Firefox 1 Comment »

å‚考URL
HackAttack:Firefoxをマウスãªã—ã§ä½¿ã„倒㙠– ITmedia Biz.ID

Firefox ã§æ¤œç´¢ãƒãƒ¼ã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動ã™ã‚‹ã‚·ãƒ§ãƒ¼ãƒˆã‚«ãƒƒãƒˆã¯ Ctr+K ã§ã™ãŒã€ãã®æ¤œç´¢ãƒãƒ¼ã®æ¤œç´¢ã‚¨ãƒ³ã‚¸ãƒ³ã‚’切り替ãˆã‚‹ã®ã‚‚ショートカットã§ã§ãã‚‹ã“ã¨ã‚’知りã¾ã—ãŸã€‚

検索ãƒãƒ¼ã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’移動
Ctrl+K

検索エンジンを切り替ãˆ
Ctrl+↓ or Ctrl+↑

ãƒã‚¤ãƒ³ãƒˆã¯æ¤œç´¢ãƒãƒ¼ã«ã‚«ãƒ¼ã‚½ãƒ«ãŒãªã„ã¨æ¤œç´¢ã‚¨ãƒ³ã‚¸ãƒ³ã®åˆ‡ã‚Šæ›¿ãˆãŒã§ããªã„ã¨ã„ã†ã“ã¨ã§ã™ã€‚å…ˆã«ã‚«ãƒ¼ã‚½ãƒ«ã‚’検索ãƒãƒ¼ã«ç§»å‹•ã—ã¦ã‹ã‚‰åˆ‡ã‚Šæ›¿ãˆã§ã™ã€‚
元記事ã«ã¯æ›¸ã‹ã‚Œã¦ã„ãªã‹ã£ãŸã®ã§æœ€åˆã¯ã§ããšã«ã€Œï¼Ÿã€ã¨æ€ã£ãŸã‚‚ã®ã§ã€å¿µã®ãŸã‚ã«æ›¸ã„ã¦ãŠãã¾ã™ã€‚

CakePHP HTML ヘルパーã§å‡ºåŠ›ã™ã‚‹ãƒ©ã‚¸ã‚ªãƒœã‚¿ãƒ³ã«ãƒ©ãƒ™ãƒ«ã‚’付ã‘る方法

CakePHP 1 Comment »

CakePHP 1.1 ã® HTML ヘルパーãŒå‡ºåŠ›ã™ã‚‹ãƒ©ã‚¸ã‚ªãƒœã‚¿ãƒ³ã«ã¯ãƒ©ãƒ™ãƒ«ãŒä»˜ã„ã¦ã„ãªã„ã®ã§ãƒ©ã‚¸ã‚ªãƒœã‚¿ãƒ³ä»¥å¤–ã®æ–‡å­—ã®éƒ¨åˆ†ã‚’クリックã—ã¦ã‚‚ãƒã‚§ãƒƒã‚¯ãŒã§ãã¾ã›ã‚“。ãã“ã§ CakePHP HTML ヘルパーã§å‡ºåŠ›ã•れるタグを変更ã™ã‚‹æ–¹æ³• ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã®æ–¹æ³•を使用ã—ã¦ãƒ©ã‚¸ã‚ªãƒœã‚¿ãƒ³ã«ãƒ©ãƒ™ãƒ«ã‚’付加ã—ã¦ã¿ã¾ã—ãŸã€‚

app/config/tags.ini.php
radio = <label><input type="radio" name="data[%s][%s]" id="%s" %s />%s</label>

ã‚ã¨ã¯æ™®é€šã« $html->radio() を使用ã—ã¦å‡ºåŠ›ã™ã‚Œã°ãƒ©ãƒ™ãƒ«ãŒä»˜åŠ ã•れã¦ã„ã¾ã™ã€‚

CakePHP 1.2 ã§ã¯ãƒ©ã‚¸ã‚ªãƒœã‚¿ãƒ³ã«ãƒ©ãƒ™ãƒ«ãŒã¤ã„ãŸçŠ¶æ…‹ã§å‡ºåŠ›ã•れã¦ã„ã¾ã—ãŸã€‚

CakePHP HTML ヘルパーã§å‡ºåŠ›ã•れるタグを変更ã™ã‚‹æ–¹æ³•

CakePHP 1 Comment »

ヘルパーã§å‡ºåŠ›ã•れるタグを変更ã™ã‚‹æ–¹æ³•ã§ã™ã€‚

やりãŸã„ã“ã¨

ビューã§
< ?php echo $html->link('Love CakePHP', 'http://www.cakephp.org'); ?>
ã¨æ›¸ãã¨
<div class="link"><a href="http://www.cakephp.org" >Love CakePHP</a></div>
㨠div ã‚¿ã‚°ã§å›²ã‚“ã§è¡¨ç¤ºã™ã‚‹ã‚ˆã†ã«ã—ãŸã„。

概è¦

app/config 内ã«å¤‰æ›´ã—ãŸã„タグを定義ã—ã¦ãƒ˜ãƒ«ãƒ‘ーã®è¦ªã‚¯ãƒ©ã‚¹ï¼ˆAppHelper) ã§å®šç¾©ã—ãŸã‚¿ã‚°ã‚’読ã¿è¾¼ã‚€ã¨ã„ã†æ–¹æ³•ã§ã™ã€‚
CakePHP1.1 㨠1.2 ã§å°‘ã—æ–¹æ³•ãŒé•ã„ã¾ã™ã€‚

CakePHP1.1

app/config ã« tags.ini.php ã¨ã„ã†ãƒ•ァイルを作æˆã—ã“ã“ã«ã‚¿ã‚°ã‚’定義ã™ã‚‹ã¨è‡ªå‹•çš„ã«å映ã•れã¾ã™ã€‚
app/config/tags.ini.php
link = <div class="link"><a href="%s" %s>%s</a></div>

CakePHP1.2

app/config/tags.php

< ?php
$tags = array(
    'link' => '<div class="link"><a href="%s" %s>%s</a></div>'
);
?>

app/app_helper.php

< ?php
class AppHelper extends Helper {
    function __construct() {
        parent::__construct();
        $this->loadConfig();
    }
}
?>

CakePHP 1.2 ã® AppHelper::loadConfig ã¯ä»¥ä¸‹ã®ã‚ˆã†ã«ãªã£ã¦ã„ã¦ãƒ‡ãƒ•ォルトã§ã¯ app/config/tags.php を読ã¿è¾¼ã¿ $this->tags ã«ãƒžãƒ¼ã‚¸ã—ã¾ã™ã€‚

function loadConfig($name = 'tags') {
    if (file_exists(APP . 'config' . DS . $name .'.php')) {
        require(APP . 'config' . DS . $name .'.php');
        if (isset($tags)) {
            $this->tags = array_merge($this->tags, $tags);
        }
    }
    return $this->tags;
}

AppHelper ã®ã‚³ãƒ³ã‚¹ãƒˆãƒ©ã‚¯ã‚¿ã§
$this->loadConfig("hoge.php");
ã¨ã™ã‚Œã° hoge.php ã®ã‚ˆã†ã«ä»»æ„ã®ãƒ•ァイルを読ã¿è¾¼ã‚“ã§ãƒžãƒ¼ã‚¸ã™ã‚‹ã“ã¨ãŒã§ãã¾ã™ã€‚

HTML ヘルパーãŒä½¿ç”¨ã™ã‚‹ã‚¿ã‚°ã¯ cake/libs/view/helpers/html.php ã§ $tags ã¨ã—ã¦å®šç¾©ã•れã¦ã„ã¾ã™ã€‚
ã“ã®ä¸­ã®ãƒ•ォーム関連ã®ã‚¿ã‚°ã¯ Form ヘルパーã§ã‚‚使用ã—ã¦ã„ã¾ã™ã®ã§ã€ä¸Šè¨˜ã®æ–¹æ³•ã§ Formヘルパーã§ä½¿ç”¨ã™ã‚‹ã‚¿ã‚°ã‚‚変更ã§ãã¾ã™ã€‚

å‚考URL
Overriding specific HTML tags before using helper methods | The Bakery, Everything CakePHP : Articles

CakePHP コントローラã«å‡¦ç†ã‚’書ã‹ãšã«ãƒ¢ãƒ‡ãƒ«ã«ãƒ¡ã‚½ãƒƒãƒ‰ã‚’追加ã—よã†ï¼

CakePHP 2 Comments »

CakePHP ã ã‘ã§ã¯ãªãフレームワーク全般ã«å½“ã¦ã¯ã¾ã‚‹ã“ã¨ã ã¨æ€ã„ã¾ã™ã€‚
Fat models and how they change how you use the Model class – cakebaker

ç§ã‚‚フレームワークを使ã„å§‹ã‚ãŸå½“åˆã¯ãã†ã ã£ãŸã®ã§ã™ãŒã€ãƒ¢ãƒ‡ãƒ«ã«æœ€åˆã‹ã‚‰ã‚るメソッドã ã‘を使用ã—ã¦ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ã§ãªã‚“ã§ã‚‚ã‹ã‚“ã§ã‚‚ã‚„ã£ã¦ã—ã¾ã£ã¦ã„ã¾ã—ãŸã€‚
ãã†ã§ã¯ãªãã€ã‚‚ã£ã¨ãƒ¢ãƒ‡ãƒ«ã«ã‚ªãƒªã‚¸ãƒŠãƒ«ã®ãƒ¡ã‚½ãƒƒãƒ‰ã‚’追加ã—ã¦ã€ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ã§ã¯ãれを使用ã—ãŸæ–¹ãŒã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ã‚‚ã™ã£ãりã—ã¦å¾Œã‹ã‚‰è¦‹ãŸã¨ãã«ã‚‚何をã—ã¦ã„ã‚‹ã‹åˆ†ã‹ã‚Šã‚„ã™ã„ã¨æ€ã„ã¾ã™ã€‚

例ãˆã°ãƒ–ãƒ­ã‚°ã®æœ€æ–°ã‚¨ãƒ³ãƒˆãƒª10ã‚’ find ã™ã‚‹å ´åˆã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ã«
$this->Post->findAll(array('Post.is_published' => true), null, array('Post.published DESC'), 10);
ã¨æ›¸ãよりも
Postモデル

function findMostRecent($limit = 10) {
    return $this->findAll(array('Post.is_published' => true), null, array('Post.published DESC'), $limit);
}

コントローラ
$this->Post->findMostRecent();
ã¨æ›¸ã„ãŸæ–¹ãŒã‚³ãƒ¡ãƒ³ãƒˆãªã©ãªãã¦ã‚‚何をã—ã¦ã„ã‚‹ã®ã‹ãŒåˆ†ã‹ã‚Šã‚„ã™ããªã‚Šã¾ã™ã€‚

CakePHP 1.2 ã® deleteAll

CakePHP No Comments »

CakePHP 1.2 ã® saveAll ãã®1
CakePHP 1.2 ã® saveAll ãã®2
ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã‚’書ã„ã¦ã„ã‚‹ã¨ãã« deleteAll ã¨ã„ã†ãƒ¡ã‚½ãƒƒãƒ‰ãŒã‚り気ã«ãªã£ãŸã®ã§èª¿ã¹ã¦ã¿ã¾ã—ãŸã€‚

CakePHP 1.1 ã§é–‹ç™ºæ™‚ã« delete ã™ã‚‹ã¨ãã« ID を指定ã™ã‚‹ã—ã‹æ–¹æ³•ãŒãªãã€ã‚ã‚‹æ¡ä»¶ã§ã¾ã¨ã‚ã¦å‰Šé™¤ã—ãŸã„ã¨ããªã©ã¯ findAll ã—ã¦ã‹ã‚‰ãƒ«ãƒ¼ãƒ—ã§ delete ã—ã¦ã„ã¾ã—ãŸã€‚ã“ã®ã¨ãã‚‚æ¡ä»¶ã‚’指定ã—ã¦å‰Šé™¤ã™ã‚‹æ–¹æ³•ãŒãªã„ã‹ã¨ã‚½ãƒ¼ã‚¹ã‚’調ã¹ãŸã®ã§ã™ãŒã‚りã¾ã›ã‚“ã§ã—ãŸã€‚

ä½¿ã„æ–¹ã¯éžå¸¸ã«ç°¡å˜ã§ã™ã€‚findAll ã®ã‚ˆã†ã«æ¡ä»¶ã‚’指定ã—㦠deleteAll を実行ã™ã‚‹ã ã‘ã§ã™ã€‚

$conditions = array('User.name'=>'suzuki');
if ($this->User->deleteAll($conditions)) {
    $this->Session->setFlash('削除ã—ã¾ã—ãŸ');
} else {
    $this->Session->setFlash('削除ã«å¤±æ•—ã—ã¾ã—ãŸ');
}

実行ã•れる SQL ã¯ä»¥ä¸‹ã®ã‚ˆã†ãªæ„Ÿã˜ã§ã™ã€‚

SELECT `User`.`id` FROM `users` AS `User` WHERE `User`.`name` = 'suzuki'
DELETE `User` FROM `users` AS `User` WHERE `User`.`id` IN (8, 10)

SELECT ã§æ¡ä»¶ã«åˆã† ID を抽出ã—㦠WHERE IN ã§ DELETE ã—ã¦ã„ã¾ã™ã€‚
ãŸã ã— CakePHP1.2 ã®å‰Šé™¤ã§ã™ãŒã€MySQL 4.0 ã§ã¯ SQL ã® DELETE æ–‡ã§ã‚¨ãƒ©ãƒ¼ã«ãªã£ã¦ã—ã¾ã„ã¾ã™ã€‚
MySQL 5.0 ã§ã¯ã‚¨ãƒ©ãƒ¼ã«ãªã‚‰ãšã«å‰Šé™¤ã§ãã¾ã—ãŸã€‚エラーã«ãªã‚‹åŽŸå› ã¯ “DELETE” ã®å¾Œã‚ã«ãƒ†ãƒ¼ãƒ–ルã®ã‚¨ã‚¤ãƒªã‚¢ã‚¹åãŒã‚ã‚‹ãŸã‚ã§ã™ã€‚

ã“れ㯠“cakephp1.2ã§ã®PostgreSQLエラー。” フォーラム – CakePHP Users in Japan ã§ã‚‚ã‚るよã†ã«æ—¢ã«ä¿®æ­£ã•れã¦ã„るよã†ã§ã™ãŒã€æ˜¨æ—¥ CakePHP ã®ã‚µã‚¤ãƒˆã‹ã‚‰ãƒ€ã‚¦ãƒ³ãƒ­ãƒ¼ãƒ‰ã—㟠CakePHP 1.2.0.6311 beta ã§ã¯ã¾ã ä¿®æ­£ã•れã¦ã„ãªã„よã†ã§ã™ã€‚

CakePHP 1.2 ã® saveAll ãã®2

CakePHP 2 Comments »

CakePHP 1.2 ã® saveAll ãã®ï¼‘ ã§ã¯åŒä¸€ãƒ¢ãƒ‡ãƒ«ã¸ã®è¤‡æ•°ãƒ¬ã‚³ãƒ¼ãƒ‰ã‚’ saveAll ã§ä¿å­˜ã—ã¾ã—ãŸã€‚今回ã¯ã‚¢ã‚½ã‚·ã‚¨ãƒ¼ã‚·ãƒ§ãƒ³ã®ãƒ¢ãƒ‡ãƒ«ã®ãƒ‡ãƒ¼ã‚¿ã‚’ saveAll ã§ä¿å­˜ã™ã‚‹æ–¹æ³•ã§ã™ã€‚

アソシエーションã®ãƒ¢ãƒ‡ãƒ«ã®ãƒ‡ãƒ¼ã‚¿ã‚’ä¿å­˜

モデル
user.php

< ?php
class User extends AppModel {
    var $name = 'User';
    var $hasMany = array('Comment');
}
?>

comment.php

< ?php
class Comment extends AppModel {
    var $name = 'Comment';
    var $belongsTo = array('User');
}
?>

コントローラ
users_controller.php

function add() {
    if (!empty($this->data)) {
        $this->cleanUpFields();
        $this->User->create();
        if ($this->User->saveAll($this->data)===false) {
            $this->Session->setFlash('ä¿å­˜ã«å¤±æ•—ã—ã¾ã—ãŸ);
        } else {
            $this->Session->setFlash('ä¿å­˜ã—ã¾ã—ãŸ');
        }
        $this->redirect(array('action'=>'index'), null, true);
    }
}

ビュー
users/add.ctp

< ?php echo $form->create('User');?>
< ?php echo $form->input('User.name');?>
< ?php echo $form->input('Comment.body'); ?>
< ?php echo $form->end('Submit');?>

CakePHP 1.2 ã® saveAll ãã®ï¼‘ ã®åŒä¸€ãƒ¢ãƒ‡ãƒ«ã¸ã®è¤‡æ•°ãƒ¬ã‚³ãƒ¼ãƒ‰ã®ä¿å­˜ã‚ˆã‚Šã‚‚使ã„é“ã¯å¤šã„ã®ã§ã¯ãªã„ã‹ã¨æ€ã„ã¾ã™ã€‚

追記
ã“ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã¯ CakePHP 1.2.0.6311 beta ã§æ¤œè¨¼ã—ã¦ã„ã¾ã™ã€‚

CakePHP 1.2 ã® saveAll ãã®ï¼‘

CakePHP 1 Comment »

CakePHP 1.2 ã‹ã‚‰ model ã« saveAll メソッドãŒè¿½åŠ ã•れã¾ã—ãŸã€‚
åŒä¸€ãƒ¢ãƒ‡ãƒ«ã¸ã®è¤‡æ•°ãƒ‡ãƒ¼ã‚¿ã®ä¸€æ‹¬ä¿å­˜ã‚„アソシエーションã®ãƒ¢ãƒ‡ãƒ«ã®ãƒ‡ãƒ¼ã‚¿ã®ä¿å­˜ãŒ saveAll ã§ã§ãã¾ã™ã€‚

åŒä¸€ãƒ¢ãƒ‡ãƒ«ã¸ã®è¤‡æ•°ãƒ‡ãƒ¼ã‚¿ã®ä¿å­˜

$data = array(
    array('name'=>'tanaka'),
    array('name'=>'suzuki'),
    array('name'=>'yamada')
);
if ($this->User->saveAll($data)===false) {
    $this->Session->setFlash('ä¿å­˜ã«å¤±æ•—ã—ã¾ã—ãŸ');
} else {
    $this->Session->setFlash('ä¿å­˜ã—ã¾ã—ãŸ');
}

ãŸã Î²ãƒãƒ¼ã‚¸ãƒ§ãƒ³ã®ãŸã‚ã‹ã€saveAll ã®æˆ»ã‚Šå€¤ãŒæˆåŠŸæ™‚ã«ã¯ NULL 失敗ã—ãŸã¨ãã«ã¯ false ãŒè¿”ã£ã¦æ¥ã¾ã™ã€‚
ãã®ãŸã‚ã«
If ($this->User->saveAll($data)) {
ã¨ã‚„ã‚‹ã¨æˆåŠŸã®åˆ¤å®šãŒæ­£ã—ã行ãˆã¾ã›ã‚“。

CSV を読ã¿è¾¼ã‚“ã§ãƒ‡ãƒ¼ã‚¿ã‚’インãƒãƒ¼ãƒˆã™ã‚‹ã‚ˆã†ãªã¨ãã«ã„ã„ã‹ã‚‚ã—れã¾ã›ã‚“。

追記
ã“ã®ã‚¨ãƒ³ãƒˆãƒªãƒ¼ã¯ CakePHP 1.2.0.6311 beta ã§æ¤œè¨¼ã—ã¦ã„ã¾ã™ã€‚

CakePHP æºå¸¯å°‚用サイトを作æˆã™ã‚‹

CakePHP 5 Comments »

CakePHP ã§æºå¸¯ç”¨ã®ãƒšãƒ¼ã‚¸ã‚’作æˆã™ã‚‹éš›ã« CakePHP æºå¸¯ç”¨ãƒ“ューを表示ã™ã‚‹ | Shin x blog ã®ãƒšãƒ¼ã‚¸ãŒå¤§å¤‰å‚考ã«ãªã‚Šã¾ã™ã€‚

ã—ã‹ã—ã€/m/ ã®ã‚ˆã†ãª URL ã§ã¯ãªãæºå¸¯å°‚用サイトã«ã—ãŸã‹ã£ãŸã®ã§ä¸‹è¨˜ã®ã‚ˆã†ãªæ–¹æ³•ã§å®Ÿè£…ã—ã¾ã—ãŸã€‚ãªãŠã€PC ã§ã‚¢ã‚¯ã‚»ã‚¹ã—ãŸã¨ãã«ã¯ /pc.html ã¨ã„ã†é™çš„ãªãƒšãƒ¼ã‚¸ã‚’表示ã™ã‚‹ã‚ˆã†ã«ã—ã¦ã‚りã¾ã™ã€‚
ã¾ãŸã€PCã€æºå¸¯ã®æŒ¯ã‚Šåˆ†ã‘ã¯ãƒ¦ãƒ¼ã‚¶ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã§è¡Œã£ã¦ã„ã¾ã™ã€‚

æºå¸¯ç”¨ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆ

app/controller/component/mobile.php を作æˆã—ã€PEAR ã® Net_UserAgent_Mobile を使用ã—ã¦ã„ã¾ã™ã€‚ã“ã®ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã§ãƒ¦ãƒ¼ã‚¶ã‚¨ãƒ¼ã‚¸ã‚§ãƒ³ãƒˆã‚’判定ã—㦠PC ã ã£ãŸã‚‰ pc.html ã¸ãƒªãƒ€ã‚¤ãƒ¬ã‚¯ãƒˆã—ã¾ã™ã€‚

PEAR ã® Net_UserAgent_Mobile ã¯ã‚µãƒ¼ãƒã«ã‚¤ãƒ³ã‚¹ãƒˆãƒ¼ãƒ«ã—ã¦ã‚‚ã„ã„ã®ã§ã™ãŒã€ä»Šå›žã¯ app/vendors/ ディレクトリã«å…¥ã‚Œã¾ã—ãŸã€‚ã¾ãŸã€app/vendors/ ã« include_path を通ã™ãŸã‚ã«ã€CakePHPガイドブック ã‚’å‚考㫠include_path_vendors.php を作æˆã—ã¾ã—ãŸã€‚

app/controller/component/mobile.php

vendor("include_path_vendors");
vendor("Net/UserAgent/Mobile");
class MobileComponent extends Object {
    function startup(&$controller) {
        $this->controller = $controller;
        $mobile = &Net_UserAgent_Mobile::factory();
        if ($mobile->isNonMobile()) {
            $this->controller->redirect("/pc.html");
        }
    }
}

今回ã¯ç°¡å˜ã« PC ã‹æºå¸¯ã§ã‚¢ã‚¯ã‚»ã‚¹æŒ¯ã‚Šåˆ†ã‘ã¦ã„ã‚‹ã ã‘ã§ã™ãŒã€ç”»é¢ã®å¤§ãã•やキャリアãªã©ã«ã‚ˆã£ã¦è‰²ã€…ãªå‡¦ç†ã®æŒ¯ã‚Šåˆ†ã‘ãŒè€ƒãˆã‚‰ã‚Œã¾ã™ã€‚

æºå¸¯ç”¨ãƒ˜ãƒ«ãƒ‘ー

app/views/helper/mobile.php を作æˆã—㦠HTML å‡ºåŠ›æ™‚ã«æ–‡å­—コードを Shift-JIS ã¸å¤‰æ›ã—ã¾ã™ã€‚ヘルパー㮠afterRender メソッドを使用ã—ã¦ã„ã¾ã™ã€‚

class MobileHelper extends Helper {
    function afterRender() {
        $out = ob_get_clean();
        $out = mb_convert_kana($out, "rak", "UTF-8");
        $out = mb_convert_encoding($out, "SJIS", "UTF-8");
        ob_start();
        echo $out;
    }
}

ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ã§æºå¸¯ç”¨ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã€ãƒ˜ãƒ«ãƒ‘ーを使用ã™ã‚‹

app/app_controller.php ã§æºå¸¯ç”¨ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã¨æºå¸¯ç”¨ãƒ˜ãƒ«ãƒ‘ーを使用ã—ã¾ã™ã€‚

var $components = array('Mobile');
var $helpers = array('Mobile');

app_controller.php ã§è¨­å®šã—ã¦ãŠã‘ã°å…¨ã¦ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ã§å…±é€šã«èª­ã¿è¾¼ã‚€ã®ã§å„コントローラã«ãã®éƒ½åº¦æ›¸ãå¿…è¦ãŒãªããªã‚Šã¾ã™ã€‚DB ã®ç®¡ç†ç”»é¢ãªã© PC 用ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ãŒå¿…è¦ãªå ´åˆã¯å„ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ã«æ›¸ã„ãŸæ–¹ãŒã„ã„ã§ã—ょã†ã€‚今回ã¯å®Œå…¨ã«æºå¸¯ç”¨ã«ã—ã¦ã„ã¾ã™ã€‚PC 用ã®ç®¡ç†ç”»é¢ã‚‚ã‚ã‚‹ã®ã§ã™ãŒã€ã‚µãƒ–ドメインを変ãˆã¦ app ディレクトリもé•ã†ã‚‚ã®ã‚’使用ã—ã¦ã„ã¾ã™ã€‚

ã¾ãŸã€å„コントローラ内ã§è¨­å®šã™ã‚‹ã‚¿ã‚¤ãƒˆãƒ«ã®æ–‡å­—コードを変æ›ã—ãªã„ã¨ã„ã‘ãªã„ã®ã§ã€app_controller.php ã® beforeRenderメソッドã§ã‚¿ã‚¤ãƒˆãƒ«ã®æ–‡å­—コードを変æ›ã—ã¾ã™ã€‚

function beforeRender() {
    $this->pageTitle = mb_convert_encoding($this->pageTitle, "SJIS", "UTF-8");
    parent::beforeRender();
}

ä»¥ä¸Šã§æºå¸¯å°‚用ã®ã‚µã‚¤ãƒˆãŒ CakePHP ã§ä½œæˆã§ãã¾ã—ãŸã€‚

コントローラ㮠afterFilter ã§æ–‡å­—コードを変æ›ã™ã‚‹æ–¹æ³•

コントローラ㮠afterFilter ã§æ–‡å­—コードを変æ›ã™ã‚‹ã“ã¨ã‚‚ã§ãã¾ã™ã€‚

app/controller.php

function afterFilter() {
    parent::afterFilter();
    $out = ob_get_clean();
    $out = mb_convert_kana($out, "rak", "UTF-8");
    $out = mb_convert_encoding($out, "SJIS", "UTF-8");
    ob_start();
    echo $out;
}

ã“ã®å ´åˆã¯ã€beforeRender ã§ã®ã‚¿ã‚¤ãƒˆãƒ«ã®æ–‡å­—コード変æ›ã®å‡¦ç†ãŒå¿…è¦ãªã„ã®ã¨ã€æºå¸¯ç”¨ãƒ˜ãƒ«ãƒ‘ーã¯å¿…è¦ã‚りã¾ã›ã‚“。
PC 用ã®ã‚³ãƒ³ãƒˆãƒ­ãƒ¼ãƒ©ã‚‚作りãŸã„ã¨ãã¯æºå¸¯ç”¨ã‚³ãƒ³ãƒãƒ¼ãƒãƒ³ãƒˆã€æºå¸¯ç”¨ãƒ˜ãƒ«ãƒ‘ーを使用ã™ã‚‹æ–¹æ³•ãŒã‚ˆã„ã‹ã¨æ€ã„ã¾ã™ã€‚

CakePHP アクションã§ã‚¨ãƒ¬ãƒ¡ãƒ³ãƒˆã‚’出力ã™ã‚‹æ–¹æ³•

CakePHP 1 Comment »

Rendering elements from controllers – cakebaker

上記エントリã§ã‚¨ãƒ¬ãƒ¡ãƒ³ãƒˆã®ã¿ã‚’出力ã™ã‚‹æ–¹æ³•ãŒç´¹ä»‹ã•れã¦ã„ã¾ã™ã€‚

ãƒãƒ¼ã‚¸ãƒ§ãƒ³1.2 ã®å ´åˆ

app/views/elements/controller/hoge.thtml ã®ã‚¨ãƒ¬ãƒ¡ãƒ³ãƒˆã‚’出力ã™ã‚‹å ´åˆ
$this->render(DS.'elements'.DS.'controller'.DS.'hoge');

ãƒãƒ¼ã‚¸ãƒ§ãƒ³1.1 ã®å ´åˆ

app/views/elements/controller/hoge.thtml ã®ã‚¨ãƒ¬ãƒ¡ãƒ³ãƒˆã‚’出力ã™ã‚‹å ´åˆ
$this->render(null, null, ELEMENTS.'controller'.DS.'hoge.thtml');

注æ„点

ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã¯æŒ‡å®šã—ãªã„㨠default ã«ãªã‚Šã¾ã™ã€‚Ajax ãªã©ã§ã‚¨ãƒ¬ãƒ¡ãƒ³ãƒˆã®ã¿ã‚’出力ã—ãŸã„å ´åˆã¯ãƒ¬ã‚¤ã‚¢ã‚¦ãƒˆã« ‘ajax’ を指定ã—ã¦head ã‚¿ã‚°ã‚„ body ã‚¿ã‚°ãŒå‡ºåŠ›ã•れãªã„よã†ã«ã™ã‚‹å¿…è¦ãŒã‚りã¾ã™ã€‚

v1.2$this->render(DS.'elements'.DS.'controller'.DS.'hoge', 'ajax');
v1.1$this->render(null, 'ajax', ELEMENTS."controller".DS."hoge.thtml");

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS ログイン