Thursday, April 29, 2010

Joomla Flashdata

Artikel ini gw tulis berhubung sdg giat2 nya
menggunakan Joomla utk bbrp project gw.
Begini, ktika menggunakan CI gw dapetin fitur
yg amat sangat membantu, Flashdata.

Nah pas googling... kok tak kunjung dapet tuh
yg berkaitan dg Flashdata. Buntut2 nya gw liat2
isinya flashdata di CI, trus gw tulis sendiri
utk Joomla. Langsung aja.
/* buat dir baru di path ini flashdata/ */
/joomla/libraries/flashdata/

/* tambahkan flashdata.php */
class Flashdata {

public $flashdata_key = 'flash_';
public $userdata = array();

function __construct(){


}

function set_flashdata($newdata = array(), $newval = '')
{
if (is_string($newdata))
{
$newdata = array($newdata => $newval);
}

if (count($newdata) > 0)
{
foreach ($newdata as $key => $val)
{
$flashdata_key = $this->flashdata_key.$key;
$this->set_userdata($flashdata_key, $val);
}
}
}

function set_userdata($newdata = array(), $newval = '')
{
if (is_string($newdata))
{
$newdata = array($newdata => $newval);
}

if (count($newdata) > 0)
{
foreach ($newdata as $key => $val)
{
$this->userdata[$key] = $val;
}
}

$_SESSION['user_flashdata'] = serialize($this->userdata);
}

function flashdata($key)
{
$flashdata_key = $this->flashdata_key.$key;

$temp = unserialize($_SESSION['user_flashdata']);

$value = $temp[$flashdata_key];

unset($temp[$flashdata_key]);

return $value;
}
}

Cara penggunaan:
tambah kan external link melalui administrator GUI dari joomla
utk dapat masuk ke component anda.

Di dalam component
/* /joomla/components/com_komponenku/komponenku.html.php */
class Komponenku_HTML{

function execute($task){

switch($task){
...
default:

$flashdata_ku = JFlashdata::flashdata('test');

if(!empty($flashdata_ku)){

echo $flashdata_ku;
}else{

JFlashdata::set_flashdata('test','Pesan ku');
header('location : '.JURI::root().'index.php?option=com_komponenku');
}
}
}
}
Nah utk class Flashdata masih jauh dari yg CI.
Tapi dg contoh yg di atas dan gw pribadi gunakan,
sudah memberikan suatu kepuasan. Karena sekali lagi
fitur ini sangat membantu.

Coding for life, coding with ethic.

Thursday, April 22, 2010

Codeigniter The Importance of Flashdata

Mungkin byk yg belum mengetahui,
bhw CI ada fitur yg amat sangat membantu
dalam status/message handling. Yup! flashdata,
fitur ini sungguh membuat kecanduan hehehhehe.
Masalah nya ampe bela2 in, utk buat di Joomla.

Sekilas apa itu flashdata.
"Session data that will only be available for the next server request,
and are then automatically cleared.
These can be very useful,
and are typically used for informational or
status messages (for example: "record 2 deleted")."
Cukup deskriptif, B.Ing menjadi keharusan utk programmer.
Ok, lsg ke implementasi nya aja.
/* controllers/welcome.php */
...
$this->session->set_flashdata('pesan_ku', 'Hello Adesanto');
$this->load->view('welcome');
...

/* views/welcome.html.php */
<?php
echo '1st message, '.$this->session->flashdata('pesan_ku').'<br/>';
echo '2nd message, '.$this->session->flashdata('pesan_ku').'<br/>';
?>

Output:
1st message, Hello Adesanto
2nd message,
Perhatikan setelah pesan "1st message " terdapat data dari flashdata,
tetapi 2nd tidak. Jadi ketika flashdata di panggil maka data terkait
dg key (dlm contoh ini, "pesan_ku") akan lsg terhapus. Fitur ini
sungguh amat sangat berguna ketika anda melakukan insert ke DB
dan setelah itu me-redirect user ke halaman tertentu. Cukup passing
status dari insert ke flashdata dan di tampilkan pesannya di halaman
yg di tuju. Tentunya fitur flashdata ini dapat mempertahankan data
agar tidak lsg terhapus setelah di panggil. Lsg di telusuri aja
user guide dari CI.

Memang CI sesuai dg motonya, "Lightweight and small footprints".
Coding for life, coding with ethic.

Tuesday, April 20, 2010

Codeigniter No More POP-UP Pains

Huhh, hampir semua client yg gw pegang selalu
telp dan menanyakan kenapa ini ga jalan, kenapa
itu ga bisa. Buntut2 nya ehh krn pop-up nya di
block ama tuhh browser. Emang sihh jaman nya
pop-up udah lewat, byk an diblock ama browser.

Karena begitu tinggi nya masalah yg disebabkan
karena pop-up yg ke block. Maka skg gw mau bagiin,
bagaimana supaya kita tidak bergantung pada pop-up
tetapi masih memiliki fitur seperti pop-up.

Ok, cara ini kita tempuh dg kerjasama CSS, AJAX
dan pasti nya PHP. Kita ga lama2 lagi lsg aja.
Struktur CI gw sperti ini,

CI/
CSS/
file_css_pop_up.css
JAVASCRIPT/
pop_up_handler.js
SYSTEM/
APPLICATION/
CONTROLLERS/
welcome.php
...
...
...

Gw kluarin CSS dan JAVASCRIPT dari folder
system/application krn utk alasan security aja sehh.
Coba aja di cek user guide dari CI, mereka memang
menyarankan itu di luar folder system.

/* file_css_pop_up.css */
#pop-up{

display : none;
overflow : auto;
padding-left : 10px;
padding-bottom : 10px;
background-color: #DDF;
border : 1px solid rgb(100,100,225);
Z-Index : 24;
top : 30%;
left : 10%;
width : 80%;
height : 60%;
position : absolute;
}
/* end of css */

/* pop_up_handler.js */
var GMisc={

// _ROOT silahkan di sesuiakan sendiri
_ROOT : 'http://localhost/ci_svc/',
_DEFAULT_POPUP_ID : 'pop-up',
_DEFAULT_POPUP_CONTENT_ID : 'pop-up-content',
_VK_ESC_KEY : 27,
_LOADING_TEXT_STATUS : 'Please wait, loading...',

escKey_kill_popup : function (event,
id){

if(event.which){

keynum = event.which;

if(keynum == this._VK_ESC_KEY){

id = document.getElementById(id);

id.style.display = 'none';
id.innerHTML = this._LOADING_TEXT_STATUS;
}
}
}
}

var MiscControllers={

set_show_id : function (id_popup, str_mode){

id_popup = document.getElementById(id_popup);

if(str_mode == '1'){

id_popup.style.display = 'block';
}else{

id_popup.style.display = 'none';
}
}

set_some_data : function(id_object){

var str_data = 'You could replace this static
data with your ajax call or else
';
id_object = document.getElementById(id_object);
id_object.innerHTML = str_data;
}
}
/* end of js */

/* controllers/welcome.php */
...
function index(){
$this->load->view('footer');
$this->load->view('includes');
$this->load->view('content');
$this->load->view('footer');
}
...
/* end of controllers */

/* view/includes.php */

<script type="text/javascript"
src="<?=base_url() ?>javascript/pop_up_handler.js">
</script>
<link rel="stylesheet"
type="text/css"
href="<?=base_url() ?>css/file_css_pop_up.css" />

/* end of view */

/* view/content.php */

<body onKeyDown='GMisc.escKey_kill_popup(event,
GMisc._DEFAULT_POPUP_ID)'>

<div id='content-wrapper'>
<div id='content'>
<?php
// gw ga specified type='submit'
// krn emg supaya ini button ga submit
// setelah di klik atau mungkin utk safe
// di akhir dari JS nya
// ditambah dg "return false;"
$button_js =
"\" onClick='MiscControllers.set_show_id(
GMisc._DEFAULT_POPUP_ID, 1);
MiscControllers.set_some_data(
GMisc._DEFAULT_POPUP_CONTENT_ID)' \"";

$button_attributes =
array('name' => 'dummy',
'content' => 'Klik gw donk!!!',
$button_js);
?>
</div>
</div>

<div id='pop-up'>
Press (ESC) to close

<div id='pop-up-content'>
Please wait, loading...
</div>

</div>

</body>
/* end of view */

Message "Please wait, loading..." mungkin tidak akan terlihat,
krn proses id_object.innerHTML = ... ini sangat cepat.
Tetapi akan terlihat bila data yg hendak di munculkan bersumber
dari ajax call. Mungkin kalau ada masukan atau komentar silahkan,
jgn ragu. Thx.
Coding for life, coding with ethic.

Monday, April 19, 2010

Codeigniter Awkward Form Helper

Codeigniter awkward form helper

Bagaimana kabar nya para pembaca yg budiman?
Wuihh prolog yg mantab :D (narsis.net/ON).
Anyway sperti nya klise bukan? Nah persis
seperti yg gw alamin. Di User Guide CI kl
boleh di perhatiin, khusus nya form helper.

Disana ada tertera byk contoh guide,
dari <form>,<input>...<hidden>.
Yg mau gw garis bawahin adalah ktika
setup "$attributes = array(...);".
Gw cuba utk menambahkan attribut javascript
utk salah satu button,
ehh yg ada malahan <button> -nya di setup
ngawur atau mungkin gw nya yg ngawur yahh?
Ini code yg gw setup dan berikut hasil
html nya.

@test_view.php
...
$js_grant_button =
" onClick= 'MiscControllers.set_show_id(
GMisc._DEFAULT_POPUP_ID,1);
Menu_Y3.init_grant_menu(
GMisc._DEFAULT_POPUP_CONTENT_ID);
return false;' ";

$grant_button = array('name' =>
'grant_button',
'value' =>
$access->levelmn,
'content' =>
'Users',
$js_grant_button);

echo form_button($grant_button);
...

Output

<button
name="grant_button"
type="button"
value="3"
0=" onClick= '
MiscControllers.set_show_id(
GMisc._DEFAULT_POPUP_ID,1);
Menu_Y3.init_grant_menu(
GMisc._DEFAULT_POPUP_CONTENT_ID);
return false;' " >Users</button>
*Perhatikan 0="..."
**Mohon maklum jika semua di susun ke bawah


Aneh bukan? seharus nya kontruksinya benar.
Tapi entah kenapa jadi ngawur, dengan muncul nya
'0=" onClick=..."'. Nah ini solusinya.

@test_view.php
...
// perhatikan saya menambahkan \" diawal dan sebelum
// akhir daripada "
$js_grant_button =
"\" onClick= 'MiscControllers.set_show_id(
GMisc._DEFAULT_POPUP_ID,1);
Menu_Y3.init_grant_menu(
GMisc._DEFAULT_POPUP_CONTENT_ID);
return false;' \"";

$grant_button = array('name' =>
'grant_button',
'value' =>
$access->levelmn,
'content' =>
'Users',
$js_grant_button);

echo form_button($grant_button);
...

Output

<button
name="grant_button"
type="button"
value="3"
0=""
onClick= '
MiscControllers.set_show_id(
GMisc._DEFAULT_POPUP_ID,1);
Menu_Y3.init_grant_menu(
GMisc._DEFAULT_POPUP_CONTENT_ID);
return false;'
"" >Users</button>
*Perhatikan 0="" dan akhir nya ""


Mungkin ada yg mau kasih masukan silahkan.
Coding for life, coding with ethic.

Friday, April 16, 2010

Codeigniter Pass Object through SESSION variable how to

Codeigniter Can not pass Object through SESSION variable

Untuk yg kesulitan pass object dari controller ke view,
via session. Ini obat nya,

// controller file mu, test1.php
// Location: ./system/application/controllers/test1.php
...
$buffer = array();

$dummy_object = new stdClass;
$dummy_object->name = 'ade1';
$dummy_object->id = 'ADEX1';

array_push($buffer, $dummy_object);

$dummy_object->name = 'ade2';
$dummy_object->id = 'ADEX2';

array_push($buffer, $dummy_object);

/**
* Kalau passing nya spt ini pasti error
* can't convert object to string
*
* $this->session->set_userdata('passed_object', $buffer);
*
* Jadi gimana?
*/

$this->session->set_userdata('passed_object', serialize($buffer));
...
?>

// controller file mu, test2.php
// Location: ./system/application/controllers/test2.php
...

/**
* utk mengambil kembali data nya dlm object tinggal
* di unserialize :D
*/

$passed_object = $this->session->userdata('passed_object', unserialize($buffer));
...
?>


Smoga obat nya ampuh.

Coding for life, coding with ethic.