membuat environment development testing dan production

pada yii di index file kita akan merubah / menambah

[code]
//choose environment development
$appEnv = filter_input(INPUT_ENV, ‘APPLICATION_ENV’, FILTER_SANITIZE_ENCODED);
$serverName = filter_input(INPUT_SERVER, "SERVER_NAME", FILTER_SANITIZE_SPECIAL_CHARS);
if (!isset($appEnv)) {
if (true === stripos($serverName, ‘localhost’)) {
$appEnv = "development";
} else
if (true === stripos($serverName, ‘www.meltonice.com’)) {
$appEnv = "testing";
} else
if (true === stripos($serverName, ‘www.kresna.host’)) {
$appEnv = "production";
} else {
$appEnv = "development";
}
}
if ($appEnv == "production") {
$config = dirname(__FILE__) . ‘/protected/config/production.php’;
}
if ($appEnv == "development") {
// remove the following lines when in production mode
defined(‘YII_DEBUG’) or define(‘YII_DEBUG’, true);
$config = dirname(__FILE__) . ‘/protected/config/main.php’;
}
if ($appEnv == "testing") {
$config = dirname(__FILE__) . ‘/protected/config/testing.php’;
}

[/code]

sehingga kita dapat membuat file config masing2 dan tanpa repot untuk merubah setting dan konfigurasi untuk database, logging dan lain sebagainya 😀

redirect dengan count down

sebelum saya tertidur karena mengantuk dan kondisi kurang fit saya akan membagikan info tentang bagaimana redirect menggunakan ajax beserta count down js 😀

pertama install ecountdown action

lalu set flash yang akan di tampilkan beserta countdownnya dan ajax request

[code]
<?php if (Yii::app()->user->hasFlash(‘order’)) { ?>

<div class="flash-success">
<?php echo Yii::app()->user->getFlash(‘order’); ?>
</div>
<?php
$this->widget(‘ext.ecountdownaction.ECountdownAction’, array(
‘seconds’ => 10, //8 seconds
‘action’ => ‘   $.ajax(
{
type: "POST",
url: location.pathname+"/index.php?r=site/redirect",
success: function (results)
{
obj = JSON.parse(results);

window.location.href=obj.redirect;
}
});’, //action code…
)
);
}
//
//$this->redirect(array(‘user/registration’), array(‘model’ => new LoginForm));
?>

[/code]

 

lalu pada controller

[code]
public function actionRedirect() {
echo json_encode(array(‘redirect’ => $this->createUrl(‘/user/registration’)));
}

[/code]

 

cukup sederhana tapi membuat pusing LOL

logging pada yii web apps

sering kali kita perlu untuk melakukan logging pada saat development, testing maupun production berikut adalah cara untuk setting loggin

[code]

‘log’ => array(
‘class’ => ‘CLogRouter’,
‘routes’ => array(

//disini di gunakan untuk file log
array(
‘class’ => ‘CFileLogRoute’,
‘levels’ => ‘info,trace’,
‘categories’ => ‘system.*’,
),

//di sini di gunakan untuk profiling database
array(‘class’ => ‘CProfileLogRoute’,
‘report’ => ‘summary’,),

//disini di gunakan untuk web log route yang akan di munculkan di halaman paling bawah website
array(
‘class’ => ‘CWebLogRoute’,
),

// ini adalah fitur yang paling penting ketika production yang akan mengirimkan log berupa info, trace, error dan warning terkecuali yang masuk class system.base.cmodule dan , system.db, systemcmodule , system.web.filters
array(
‘class’ => ‘CEmailLogRoute’,
‘levels’ => ‘info,trace,error, warning’,
’emails’ => ‘freddokresna@gmail.com’,
‘except’ => ‘system.base.CModule.* ,system.db.*, system.CModule.*,system.web.filters.CFilterChain’,
),
),
),

[/code]

untuk profiling database bisa di lihat di profiling database

membuat profiling untuk YII

pada index.php

[code]

Yii::beginProfile(‘blockID’);
Yii::createWebApplication($config)->run();

Yii::endProfile(‘blockID’);

[/code]

 

pada config di database kita set

[code]
‘db’ => array(
‘connectionString’ => ‘mysql:host=127.0.0.1:3306;dbname=mydb’,
’emulatePrepare’ => true,
‘username’ => ‘freddokresna’,
‘password’ => ‘freddokresna’,
‘charset’ => ‘utf8’,
‘enableProfiling’ => true,
),

[/code]

sehingga kita akan bisa melihat hasil profilling time dari query2 yang kita lakukan

membuat multiple application environment

pada web apps kita sering mempunyai beberapa settingan berbeda untuk koneksi database dan fitur config lainnya

mulai dari stage development, testing hingga production

berikut adalah cara untuk setting multiple app environment pada YII framework

sebagai contoh berikut adalah setting yang saya pakai di index.php

[code]

//choose environment development
$appEnv = filter_input(INPUT_ENV, ‘APPLICATION_ENV’, FILTER_SANITIZE_ENCODED);
$serverName = filter_input(INPUT_SERVER, "SERVER_NAME", FILTER_SANITIZE_SPECIAL_CHARS);
if (!isset($appEnv)) {
if (FALSE === stripos($serverName, ‘localhost’)) {
$appEnv = "development";
} else
if (FALSE === stripos($serverName, ‘www.meltonice.com’)) {
$appEnv = "testing";
} else
if (FALSE === stripos($serverName, ‘www.usa4u.com’)) {
$appEnv = "production";
} else {
$appEnv = "development";
}
}
if ($appEnv == "production") {
$config = dirname(__FILE__) . ‘/protected/config/production.php’;
}
if ($appEnv == "development") {
$config = dirname(__FILE__) . ‘/protected/config/main.php’;
}
if ($appEnv == "testing") {
$config = dirname(__FILE__) . ‘/protected/config/testing.php’;
}

[/code]

Yii localization date format indonesia

cara mudah untuk lokalisasi bahasa dengan YII

pada main.

[php]
‘preload’ => array(‘log’),
‘sourceLanguage’ => ‘id’,

[/php]

pada setiap model yang kita punya tambahkan

[php]
protected function afterFind() {

foreach ($this->metadata->tableSchema->columns as $columnName => $column) {

if (!strlen($this->$columnName))
continue;

if ($column->dbType == ‘date’) {
$this->$columnName = Yii::app()->dateFormatter->formatDateTime(
CDateTimeParser::parse($this->$columnName, ‘yyyy-MM-dd’), ‘medium’, null);
} elseif ($column->dbType == ‘datetime’) {
$this->$columnName = Yii::app()->dateFormatter->formatDateTime(
CDateTimeParser::parse($this->$columnName, ‘yyyy-MM-dd hh:mm:ss’));
}
}
return true;
}

[/php]

dan untuk mempermudah lagi gunakan before save

[php]
<pre>protected function beforeSave(){
foreach($this->metadata->tableSchema->columns as $columnName => $column){
if ($column->dbType == ‘date’){
$this->$columnName = date(‘Y-m-d’, CDateTimeParser::parse($this->$columnName, Yii::app()->locale->dateFormat));
}elseif ($column->dbType == ‘datetime’){
$this->$columnName = date(‘Y-m-d H:i:s’, CDateTimeParser::parse($this->$columnName, Yii::app()->locale->dateFormat));
}

}

return true;
}

[/php]

dari pada anda harus merubah satu persatu String
seperti di bawah ini

[php]
date(‘Y-m-d’,now());
[/php]

untuk setiap kali penggunaan date dan

[php]
date(‘Y-m-d’ strtotime($model->tanggal));
[/php]

untuk setiap kali anda posting tanggal maupun datetime format

membuat applikasi chat dengan YII

download https://bitbucket.org/christiansalazarh/yiichat

ekstract di protected/extensions/

pada main.php setting

[php]

‘imports’=>array( ‘application.extensions.yiichat.*’, ),

[/php]

pada site controller

[php]

class SiteController extends Controller {

public function actions() {

return array(
‘captcha’=>array(
‘class’=>’CCaptchaAction’, ‘backColor’=>0xFFFFFF, ),
‘page’=>array( ‘class’=>’CViewAction’, ),</pre>
‘yiichat’=>array(‘class’=>’YiiChatAction’), //
}
[/php]

pasang widget pada index.php

[php]
<h1>Yii Chat Demo</h1>
<div id=’chat’></div>
<?php $this->widget(‘YiiChatWidget’,
array( ‘chat_id’=>’123’, // a chat identificator ‘identity’=>1,
// the user, Yii::app()->user->id ? ‘selector’=>’#chat’,
// were it will be inserted ‘minPostLen’=>2,
// min and ‘maxPostLen’=>10, <
// max string size for post ‘model’=>new MyYiiChatHandler(),
// the class handler. **** FOR DEMO, READ MORE LATER IN THIS DOC ****
‘data’=>’any data’, // data passed to the handler
// success and error handlers, both optionals.
‘onSuccess’=>new CJavaScriptExpression
( "function(code, text, post_id){ }"),
‘onError’=>new CJavaScriptExpression
( "function(errorcode, info){ }"), )); ?>

[/php]

voila, demo chatting sudah bisa di akses 🙂

membuat forum dengan YII

download http://www.yiiframework.com/extension/yii-forum/files/yii-forum-0.3.zip

untuk instalasi YII

extrak di folder apps/protected/modules

berikan configurasi ini di main.php

dan jangan lupa untuk membuat koneksi ke database dan mengimport sql di folder modules/forum/data

'modules'=>array(
    'forum'=>array(
        'class'=>'application.modules.yii-forum.YiiForumModule',
    ),
),

pada user identity tambahkan

 $this->setState('isAdmin', ($this->name == 'admin'));

setelah itu silahkan akses http://localhost/apps/index.php?r=forum