Kamis, 28 Februari 2013

[Yii Framework] Input, Edit, dan Tampilkan Format Tanggal Indonesia


Sebelum berangkat ke kampus, saya akan memberikan sedikit tips untuk anda yang sedang membuat aplikasi dengan Yii Framework yang berkaitan dengan penanggalan. Penanggalan yang saya maksud adalah penanggalan dengan format yang lazim kita temui di indonesia yaitu "tanggal-bulan-tahun" atau "dd-mm-yyyy". anda dapat menggunakannya dengan extensions DateTimeI18NBehavior dengan sedikit modifikasi.
Berikut script yang telah dimodifikasi

<?php

/*
 * DateTimeI18NBehavior
* Automatically converts date and datetime fields to I18N format
*
* Author: Ricardo Grana <rickgrana@yahoo.com.br>, <ricardo.grana@pmm.am.gov.br>
* Version: 1.1
* Requires: Yii 1.0.9 version
*/

class DateTimeI18NBehavior  extends CActiveRecordBehavior
{
    public $dateOutcomeFormat = 'Y-m-d';  //Format pengisian tanggal di My-SQL yang ditentukan
    public $dateTimeOutcomeFormat = 'Y-m-d H:i:s';

    public $dateIncomeFormat = 'yyyy-MM-dd';
    public $dateTimeIncomeFormat = 'yyyy-MM-dd hh:mm:ss';

    public function beforeSave($event){

        //search for date/datetime columns. Convert it to pure PHP date format
        foreach($event->sender->tableSchema->columns as $columnName => $column){

            if (($column->dbType != 'date') and ($column->dbType != 'datetime')) continue;

            if (!strlen($event->sender->$columnName)){
                $event->sender->$columnName = null;
                continue;
            }

            if (($column->dbType == 'date')) {
                $event->sender->$columnName = date($this->dateOutcomeFormat, CDateTimeParser::parse($event->sender->$columnName, 'dd-MM-yyyy'));
            } else {

                $event->sender->$columnName = date($this->dateTimeOutcomeFormat,
                        CDateTimeParser::parse($event->sender->$columnName,
                                strtr(Yii::app()->locale->dateTimeFormat,
                                        array("{0}" => Yii::app()->locale->timeFormat,
                                                "{1}" => Yii::app()->locale->dateFormat))));
            }

        }

        return true;
    }


    public function afterFind($event){
           
        foreach($event->sender->tableSchema->columns as $columnName => $column){

            if (($column->dbType != 'date') and ($column->dbType != 'datetime')) continue;

            if (!strlen($event->sender->$columnName)){
                $event->sender->$columnName = null;
                continue;
            }

            if ($column->dbType == 'date'){
                $event->sender->$columnName = Yii::app()->dateFormatter->format('dd-MM-yyyy',
                        CDateTimeParser::parse($event->sender->$columnName, $this->dateIncomeFormat));
            }else{
                $event->sender->$columnName =
                Yii::app()->dateFormatter->formatDateTime(
                        CDateTimeParser::parse($event->sender->$columnName,    $this->dateTimeIncomeFormat),
                        'medium', 'medium');
            }
        }
        return true;
    }
}
simpan dengan nama DateTimeI18NBehavior.php dan simpan di folder extensions. Bagaimana cara menggunakannya ? Anda buka model yang hendak anda ganti format tanggalnya, kemudian tambahkan script berikut
    
    public function behaviors()
    {
        return array(
            'datetimeI18NBehavior'=>array(
                'class'=>'application.extensions.DateTimeI18NBehavior'
            ),
        );
    }
atau jika modelnya banyak, maka akan lebih mudah jika anda membuat component baru dengan nama terserah anda. sebagai contoh saya membuat dengan nama EActiveRecord.php kemudian isi dengan script berikut
<?php

class EActiveRecord extends CActiveRecord
{
    public static function model($className=__CLASS__)
    {
        return parent::model($className);
    }
    
    public function behaviors()
    {
        return array(
            'datetimeI18NBehavior'=>array(
                'class'=>'application.extensions.DateTimeI18NBehavior'
            ),
        );
    }
}
dan pada model yang ingin di ubah format tanggalnya, silahkan ganti CActiveRecord menjadi EActiveRecord. Selesai :D

[CodeIgniter] Menghubungkan CodeIgniter dengan SQLite



Setelah sebelumnya saya bahas alternatif phpMyAdmin untuk SQLite   kali ini saya akan bahas cara mengkoneksikan SQLite dengan CodeIgniter. Untuk contoh, saya menggunakan database belajar.sqlite yang telah dibuat pada artikel sebelumnya dan mengganti nama menjadi belajar.db dan di simpan di proyek codeigniter pada folder data

Berikut ini adalah konfigurasi database pada codeigniter,
 
$db['default']['hostname'] = 'sqlite:'data/belajar.db';
$db['default']['username'] = '';
$db['default']['password'] = '';
$db['default']['database'] = '';
$db['default']['dbdriver'] = 'pdo';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

dan untuk penggunaannya sama saja dengan menggunakan  mysql atau yang lainnya

[PHP] phpLiteAdmin, Alternatif phpMyAdmin untuk SQLite


Pagi ini saya bangun dengan leher sakit, entah kenapa tapi kata orang-orang tua dulu ini gara-gara salah bantal, tapi saya sendiri nggak ngerti apa itu salah bantal. Sebab, bantal sama sekali nggak salah. malahan kalo nggak ada bantal kepala yang bakalan jadi sakit :D udah beberapa kali saya ngalamin kayak gini tapi untungnya siangnya suka sembuh, jadi nggak sengkleh ini kepala. wkwkwkwk

Pada artikel ini saya akan bahas pengelolaan database SQLite dengan phpLiteAdmin, untuk prakteknya, sliahkan ada download terlebih dahulu phpLiteAdminnya disini, Setelah download, kemudian buat folder di localhost (htdocs) dengan nama phpLiteAdmin dan extrack phpLiteAdmin yang telah di download tadi pada folder yang telah dibuat. kemudian rename dengan nama index.php. Ini dilakukan agar nanti pas pemanggilan di browser kayak gini 'http://localhost/phpLiteAdmin' mirip phpmyadmin bukan :D

Untuk memulai pembuatan database, silahkan anda buka http://localhost/phpLiteAdmin pada browser, kemudian login dengan username 'admin', sehingga akan tampak halaman yang meminta anda untuk membuat database baru.
masukan nama database yang hendak anda buat,sebagai contoh isi dengan nama belajar dan enter, maka akan muncul tampilan seperti berikut



untuk membuat table, klik SQL dan berikut contoh sqlnya

CREATE TABLE tbl_user (
    id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
    username VARCHAR(128) NOT NULL,
    password VARCHAR(128) NOT NULL,
    email VARCHAR(128) NOT NULL
);


dan jika telah selesai mengetikkan sqlnya, kemudian takan Go, dan kemudian klik structure dan lihat disitu ada table dengan nama tbl_user,


Untuk memasukkan data silahkan anda pilih terlebih dahulu tablenya kemudian untuk input anda dapat menggukan  sql maupun langsung dengan memilih tombol insert.

Untuk file database yang anda buat, anda dapat menemukannya di folder phpLiteAdmin dengan nama sesuai dengan nama databasenya. dan jika anda ingin mengubah extensionnya menjadi .dll atau pun yang lain, anda dapat langsung merenamenya tetapi jika hendak di edit menggukan phpLiteAdmin maka ubah kembali extensionnya menjadi .sqlite


[Yii Framework] Hapus banyak data dalam CGridView


Karena sekarang (saat ngebuat postingan ini) sudah menunjukan jam 1:38 malam, mata juga sudah 5 watt, jadi saya tidak mau panjang lebar curhat disini. Langsung aja, berikut contoh kode untuk Viewnya.

<?php echo CHtml::form(array('deleteBanyak')); ?>
<?php $this->widget('zii.widgets.grid.CGridView',array(
    'id'=>'lastactivity-grid',
    'dataProvider'=>$model->search(),
    'selectableRows'=>2,
    'filter'=>$model,
    'columns'=>array(
        array(
            'class'=>'CCheckBoxColumn',   
            'id'=>'id',
        ),
        'userid',
        'username',
        'ipaddress',
        'lastactivity',
        'useragent',
    )
)); ?>
<?php echo CHtml::submitButton('Hapus',array(
    'onclick'=>'return confirm("Are you sure you want to delete this item? ");',
)); ?>
<?php echo CHtml::endForm(); ?>


dan ini untuk di controllernya

public function actionDeleteBanyak()
{
    if(!Yii::app()->request->isPostRequest)
        throw new CHttpException(400,'Invalid request. Please do not repeat this request again.');
    
    if(isset($_POST['id']) && $_POST['id']!=='')
    {
        foreach($_POST['id'] as $key=>$val)
            $this->loadModel($val)->delete();
    
        Yii::app()->user->setFlash('success','<strong>Berhasil</strong> Anda berhasil menghapus.');
    }
    else
        Yii::app()->user->setFlash('error','<strong>Gagal</strong> Anda belum memilih data untuk di hapus.');
    $this->redirect('index');
}

yang mesti diperhatingkan disini adalah baris kode ini

    'selectableRows'=>2,

    'columns'=>array(
        array(
            'class'=>'CCheckBoxColumn',   
            'id'=>'id',
        ),

untuk selectableRows itu jika 1 maka yang bisa dipilih hanya satu, dan jika 0 maka tidak ada untuk memilih dan untuk class CCheckBoxColumn yang id nya di isi 'id' itu untuk informasi agar saat di submit maka dapat di ambil $_POST['id'], hehe simpelnya gitu :D

dan ini adalah penampakannya

   

Selasa, 26 Februari 2013

[CodeIgniter] jQuery autocomplete dengan remote json


Untuk postingan yang ini saya tidak mau terlalu banyak basa basi, sebab mungkin diantara pembaca pada malas untuk melihat dan mencermati renungan saya. Ya sebab saya sendiri jika lihat postingan orang lain yang terlalu basa basi jadi males sendiri :D ok deh langsung saja

buat database seperti berikut


CREATE TABLE IF NOT EXISTS `tbl_bahasa` (
  `id` int(5) NOT NULL AUTO_INCREMENT,
  `bahasa` varchar(200) NOT NULL,
  PRIMARY KEY (`id`)
) 
INSERT INTO `tbl_bahasa` (`id`, `bahasa`) VALUES
(1, 'ActionScript'),
(2, 'AppleScript'),
(3, 'Asp'),
(4, 'BASIC'),
(5, 'C'),
(6, 'C++'),
(7, 'Clojure'),
(8, 'COBOL'),
(9, 'ColdFusion'),
(10, 'Erlang'),
(11, 'Fortran'),
(12, 'Groovy'),
(13, 'Haskell'),
(14, 'Java'),
(15, 'JavaScipt'),
(16, 'Lisp'),
(17, 'Perl'),
(18, 'PHP'),
(19, 'Python'),
(20, 'Ruby'),
(21, 'Scala'),
(22, 'Scheme');


kemudian buka database.php, atur sesuai dengan nama database yang anda buat.
Karena ini hanya contoh, jadi tidak perlu repot-repot membuat controller baru, jadi pake saja welcome.php

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class Welcome extends CI_Controller {    

    public function __construct()
    {
        parent::__construct();
        $this->load->model('autocomplete_model');
        $this->load->database();
        $this->load->helper('url');
    }
    public function index()
    {
        $this->load->view('welcome_message');
    }
    public function suggestions()
    {
        $bahasa = $this->input->post('bahasa',TRUE);
        $rows = $this->autocomplete_model->getData($bahasa);
        $json_array = array();
        foreach ($rows as $row)
            $json_array[]=$row->bahasa;
        echo json_encode($json_array);
    }
}
/* End of file welcome.php */
/* Location: ./application/controllers/welcome.php */


buat juga model dengan nama autocomplete_model.php

<?php

class Autocomplete_Model extends CI_Model
{
    public function __construct()
    {
        parent::__construct();
    }
    public function getData($bahasa)
    {
        $this->db->select('bahasa');
        $this->db->like('bahasa', $bahasa);
           $query = $this->db->get('tbl_bahasa');
        return $query->result();
    }
}

buka view welcome_message.php kemudian tambahkan

<link href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css" rel="stylesheet" type="text/css"/>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>
    <script type="text/javascript">
    // <![CDATA[
    $(document).ready(function () {
        $(function () {
            $( "#autocomplete" ).autocomplete({
                source: function(request, response) {
                    $.ajax({ 
                        url: "<?php echo site_url('welcome/suggestions'); ?>",
                        data: { bahasa: $("#autocomplete").val()},
                        dataType: "json",
                        type: "POST",
                        success: function(data){
                            response(data);
                        }    
                    });
                },
            });
        });
    });
    // ]]>
    </script>
</head>
<body>
<div id="container">
    <h1>jQurey AutoComplete with remote json</h1>
    <div id="body">
        Text: <input type="text" id="autocomplete" />
    </div>
    <p class="footer">Page rendered in <strong>{elapsed_time}</strong> seconds</p>
</div>
</body>
</html>

dan berikut adalah penampakannya


Download
Password: didanurwanda.blogspot.com

[Yii Framework] Mempercantik tampilan dengan Yii Bootstrap



Nggak terasa sudah hampir setahun saya belajar dengan yang namanya php. Awal-awal mempelajarinya membuat otak saya mumet, pusing, stress, banting keyboard karena sering kali terjadi kesalahan. Namun setelah beberapa lama kesalahan-kesalahan itu mulai gampang di perbaiki, ya karena sudah paham alurnya :D hingga beberapa saat masalah baru mulai menghampiri, yakni desain template. Saya sendiri sangat kacau dan bego kalo harus berurusan dengan desain template. Sampai pada akhirnya saya kenal dengan yang namanya Twitter Bootstrap. Setelah coba-coba akhirnya suka karena simpel dalam penggunaannya. Akan tetapi jika pada yii, pembuatan template dengan bootstrap sangat jauh lebih simple, sebab kita tidak banyak mengetikan tag-tag html, hampir semua komponen bootstrap sudah di konversi kedalam widget-widget. Sebelum lanjut ke pokok pembahasan, silahkan anda download telebih dahulu Yii Bootstrap-nya

Untuk penginstallan, Silahkan anda buka folder extensions dan buat folder bootstrap, kemudian extract yii bootstrap yang telah ada download di dalam folder bootstrap yang di buat tadi dan untuk folder theme copy atau pindahkan kedalam direktory themes dan rename menjadi bootstrap. Kemudian edit file main.php di folder config

Yii::setPathOfAlias('bootstrap', dirname(__FILE__).'/../extensions/bootstrap');
return array(
    ....
    'modules' => array(
        .....
        'gii' => array(
            'class' => 'system.gii.GiiModule',
            'password' => 'admin',
            'ipFilters' => array(
                '127.0.0.1',
                '::1',
            ),
            'generatorPaths' => array(
                'bootstrap.gii',
            ),
        ),
        .....
    ),
    'theme'=>'bootstrap',
     ....
    'components' => array(
        ....
        'bootstrap' => array(
            'class' => 'application.extensions.bootstrap.components.Bootstrap',
        ),

Mudah kan :D

Untuk cara penggunaan widget dan fitur-fitur lainnya, silahkan kunjungi http://cniska.net/yii-bootstrap/

[Yii Framework] Menampilkan jumlah data pada footer CGridView


Sungguh hari ini melelahkan, berjalan kesana kesini mencari makanan yang pas di kantong susahnya minta ampun. Mana perut keroncongan mikir juga nggak bisa. Duit dikantong sungguh pas-pasan, makanan di warung-warung harganya nggak manusiawi buat seorang mahasiswa. Akhirnya pulang ke kosan dengan berbekal mie rebus dengan telor. Sialnya lagi pas mau masak mie di RiceCooker eh mati lampu. Lama menunggu lampu nyala, terpikir untuk melihat blog cupu ini. Tapi kebingungan menghampiri lagi. Wkwkwk "mau posting apa ya?", Buka-buka kerjaan eh liat akhirnya dapat inspirasi untuk memposting apa :D nggak usah basa basi lagi deh.

Saya sebenarnya belum begitu lama kenal dengan Yii Framework karena sebelumnya saya suka memakai CodeIgniter karena simpel. Tapi setelah di suruh pindah ke Yii Framework oleh teman dan kemudian coba-coba eh jadi Srak juga.

Untuk postingan hari ini saya akan memberikan contoh penampilkan jumlah atau hitungan pada table seperti gambar berikut

Bisa di lihat pada footer terdapat total dan nilai totalnya, ini bisa dilakukan dengan manambahkan extensions GridColumn.  Silahkan anda download extension tersebut dan extract beserta foldernya di folder extensions

berikut contoh penggunaanya
<?php $this->widget('zii.widgets.grid.CGridView',array(
    'id'=>'bayar-grid',
    'dataProvider'=>$model->search(),
    'filter'=>$model,
    'columns'=>array(
        array(
            'name'=>'keterangan',
            'footer'=>'<b>Total :</b>',
            'footerHtmlOptions'=>array(
                'style'=>array('text-align:right')
            )
        ),
        array(
            'class'=>'ext.gridcolumns.TotalColumn',
            'name'=>'bayar',
            'filter'=>'',
            'htmlOptions'=>array('style'=>'text-align:right;width:120px'),
            'output'=>'Yii::app()->numberFormatter->formatCurrency($value,"Rp. ")',
            'type'=>'raw',
            'footer'=>true,
            'footerHtmlOptions'=>array(
                'style'=>'text-align: right; padding-right: 5px;'
            ),
        ),
    )
)); ?>


Kali ini saya tidak memberikan sample karena memang sedang terburu-buru memasak mie :D

Senin, 25 Februari 2013

[PHP] Membuat Table Multi Column dengan FPDF


Alhamdulillah, ini adalah postingan pertama saya di blog ini. Sebenarnya pembuatan atau register blog ini sudah lama, tapi saya sendiri bingung mau mengisi dengan kontent apa, hingga beberapa minggu, bulan sampai akhirnya saya kembali kangen dengan dunia blogging :)

Nah daripada bertele-tele mending lanjut ke topik pembahasan. Kemarin saya sempat kesusahan eh bingung aja deh membuat table dengan FPDF sebab jika  pake $this->Cell(... itu akan bermasalah apabila tulisan kita terlalu panjang, akhirnya saya dapet ilham dari internet untuk menangani masalah ini, yaitu dengan html_table dan support untuk fpdf17

berikut contoh kodenya


<?php
require('html_table.php');

$htmlTable=
'<TABLE>
 <tr>
  <td>No.</td><td>Nama</td><td>Hobi</td>
 </tr>
 <tr>
  <td>1</td><td>Dida Nurwanda</td><td>Makan, Maen PES, Ngoding, Maen Gundu, Jalan jalan sore</td>
 </tr>
</TABLE>';

$pdf=new PDF_HTML_Table();
$pdf->AddPage();
$pdf->SetFont('Arial','',10);
$pdf->WriteHTML("Start of the HTML table.<BR>$htmlTable<BR>End of the table.");
$pdf->Output();
?>

dan berikut penampakannya


Download

Password: didanurwanda.blogspot.com