Konversi Mata Uang di CodeIgniter dengan kurs yang Up to Date

Emm… mungkin temen2 suatu saat butuh fitur konversi mata uang ini ketika develop Aplikasi dengan CodeIgniter. Misalnya saja ketika kita mau bikin  toko online yang mana harga product nya dapat ditampilkan dengan beberapa mata uang sebagai contoh IDR  (rupiah) dan USD (dolar).

Untuk fitur konversi mata uang ini aku mengunakan library yang  dibuat oleh Simon Jarvis yang bisa didapatkan source nya di http://www.white-hat-web-design.co.uk/articles/php-currency-conversion.php . Kurs mata uangnya up to date , dan tidak ribet implementasinya.  Oleh penulisnya emang dibuat untuk PHP secara umum…, tetapi kita juga bisa memakainya untuk aplikasi yang kita buat dengan framework CodeIgniter. Aku akan coba tuliskan bebrapa langkah untuk memakai library ini. Untuk yang belum pernah install framework CodeIgniter bisa baca artikel aku sebelumnya tentang Instalasi Framwork CodeIgniter.

Pertama kita buat file CurrencyConverter.php di dalam folder application/libraries.  Kemudian kita kopikan kode program yang dibuat oleh Simon Jarvis sperti dibawah.

Currency Converter.php


<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
/*
* File: CurrencyConverter.php
* Author: Simon Jarvis
* Copyright: 2005 Simon Jarvis
* Date: 10/12/05
* Link: http://www.white-hat-web-design.co.uk/articles/php-currency-conversion.php
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details:
* http://www.gnu.org/licenses/gpl.html
*
*/

class CurrencyConverter {

var $xml_file = "www.ecb.int/stats/eurofxref/eurofxref-daily.xml";
var $mysql_host, $mysql_user, $mysql_pass, $mysql_db, $mysql_table;
var $exchange_rates = array();

//Load Currency Rates

function CurrencyConverter() {

$this->mysql_host = "localhost";
$this->mysql_user = "root";
$this->mysql_pass = "";
$this->mysql_db = "cocomomodb";
$this->mysql_table = "ob_currencies";

$this->checkLastUpdated();

$conn = mysql_connect($this->mysql_host,
$this->mysql_user,$this->mysql_pass);

$rs = mysql_select_db($this->mysql_db,$conn);

$sql = "SELECT * FROM ".$this->mysql_table;

$rs =  mysql_query($sql,$conn);

while($row = mysql_fetch_array($rs)) {
$this->exchange_rates[$row['currency']] = $row['rate'];
}
}

/* Perform the actual conversion, defaults to £1.00 GBP to USD */
function convert($amount=1,$from="GBP",$to="USD",$decimals=2) {
return(number_format(($amount/$this->exchange_rates[$from])*
$this->exchange_rates[$to],$decimals));
}

/* Check to see how long since the data was last updated */
function checkLastUpdated() {
$conn = mysql_connect($this->mysql_host,
$this->mysql_user,$this->mysql_pass);

$rs = mysql_select_db($this->mysql_db,$conn);

$sql = "SHOW TABLE STATUS FROM ".$this->mysql_db." LIKE '".$this->mysql_table."'";

$rs =  mysql_query($sql,$conn);

if(mysql_num_rows($rs) == 0 ) {
$this->createTable();
} else {
$row = mysql_fetch_array($rs);
if(time() > (strtotime($row["Update_time"])+(12*60*60)) ) {
$this->downloadExchangeRates();
}
}
}

/* Download xml file, extract exchange rates and store values in database */
function downloadExchangeRates() {
$currency_domain = substr($this->xml_file,0,strpos($this->xml_file,"/"));
$currency_file = substr($this->xml_file,strpos($this->xml_file,"/"));
$fp = @fsockopen($currency_domain, 80, $errno, $errstr, 10);
if($fp) {
$out = "GET ".$currency_file." HTTP/1.1\r\n";
$out .= "Host: ".$currency_domain."\r\n";
$out .= "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8) Gecko/20051111 Firefox/1.5\r\n";
$out .= "Connection: Close\r\n\r\n";
fwrite($fp, $out);
while (!feof($fp)) {
$buffer .= fgets($fp, 128);
}
fclose($fp);

$pattern = "{<Cube\s*currency='(\w*)'\s*rate='([\d\.]*)'/>}is";
preg_match_all($pattern,$buffer,$xml_rates);
array_shift($xml_rates);

for($i=0;$i<count($xml_rates[0]);$i++) {
$exchange_rate[$xml_rates[0][$i]] = $xml_rates[1][$i];
}

$conn = mysql_connect($this->mysql_host,$this->mysql_user,$this->mysql_pass);

$rs = mysql_select_db($this->mysql_db,$conn);

foreach($exchange_rate as $currency=>$rate) {
if((is_numeric($rate)) && ($rate != 0)) {
$sql = "SELECT * FROM ".$this->mysql_table." WHERE currency='".$currency."'";
$rs =  mysql_query($sql,$conn) or die(mysql_error());
if(mysql_num_rows($rs) > 0) {
$sql = "UPDATE ".$this->mysql_table." SET rate=".$rate." WHERE currency='".$currency."'";
} else {
$sql = "INSERT INTO ".$this->mysql_table." VALUES('".$currency."',".$rate.")";
}
$rs =  mysql_query($sql,$conn) or die(mysql_error());
}
}
}
}

/* Create the currency exchange table */
function createTable() {
$conn = mysql_connect($this->mysql_host,$this->mysql_user,$this->mysql_pass);

$rs = mysql_select_db($this->mysql_db,$conn);

$sql = "CREATE TABLE ".$this->mysql_table." ( currency char(3) NOT NULL default '', rate float NOT NULL default '0', PRIMARY KEY(currency) ) ENGINE=MyISAM";

$rs =  mysql_query($sql,$conn) or die(mysql_error());

$sql = "INSERT INTO ".$this->mysql_table." VALUES('EUR',1)";

$rs =  mysql_query($sql,$conn) or die(mysql_error());

$this->downloadExchangeRates();
}

}

?>

Pastikan konfigurasi database Anda benar.  Misal konfigurasi databaseku sperti ini:

$this->mysql_host = "localhost";
$this->mysql_user = "root";
$this->mysql_pass = "";
$this->mysql_db = "cocomomodb";
$this->mysql_table = "ob_currencies";

Kedua,, kita setting agar library CurrencyConverter tersebut diload secara otomatis. Kita bisa melakukan setting autoload untuk library ini pada file autoload.php di application/config/autoload.php. pada baris berikut:


autoload['libraries'] = array('database', 'session', 'form_validation', 'validation', 'system_library', 'CurrencyConverter');

Setelah itu kita bisa melakukan pemanggilan seperti berikut.


<?php
 $x = new CurrencyConverter();
 echo $x->convert(1000000, "IDR", "USD");
 ?>

Okey….gitu aja. Selamat mencoba…..semoga bermanfaat…hehehe

Skripsiku: Antara Tahap Penelitian (Bab 3) dengan Pembahasan (Bab 4) harus sesuai (Match)

Emm…. Mungkin bagi temen2 yang sering mengikuti pelatihan / workshop penulisan karya ilmiah sering mendapatkan nasehat dari pemateri seperti ini. “Klo membuat karya tulis itu,, harus ada benang merah dari latar belakang sampai kesimpulan“. Betul tidak ???..betul aja ya..:)

“Benang Merah” yang dimaksud disini adalah adanya keterkaitan / kesinambungan diantara bagian2 dalam karya tulis itu. Ada yang mau menambahkan????..hehehe

Nah…hal yang cukup berkesan dalam benakku ketika menyusun skripsi adalah bahwa “Antara Tahap Penelitian (Bab 3) dengan Pembahasan (Bab 4) harus sesuai (Match)“. Ini yang baru bisa ku mengerti saat ini. (Selasa 18 Mei 2010  00:42)…. Hoahmmm….(” dah ngantuk bgt”).

Sebelumnya pada tahap penelitian aku menuliskan bahwa aku akan menerapak Prototyping Model dalam tahap pengembangan sistemya. Tetapi di bab 4  (pembahasan) aku menuliskan sub bab yaitu : Analisis, Perancangan, Implementasi, dan Pengujian. Padahal keempat sub itu kan secara jelas menunjukan bahwa pengembangan sistemnya menggunakan model proses Linear Sequential / Warterfall. Sekarang pertanyaannya “Apakah Antara Tahap Penelitian (Bab 3) dengan Pembahasan (Bab 4)  sudah sesuai???“…..hmmm… aku tersenyum malu di depan komputerku.

Aku mencoba membela diriku.. “Ehh…. kok skripsi kakak kelas yang ku jadikan referensi kok bisa lulus yaa???….”, akhh.. Doseny dulu kurang teliti kyakny…:P

Setelah ku mengerti mana yang benar….segera ku perbaiki laporan skripsiku. Dengan berbagai pertimbangan aku mengorbankan untuk mengubah tahapan penelitianku menjadi menggunakan proses Liniear Squential.  Emm… pertimbangannya karena “BAB 4 UDAH BANYAK BGT TAU…..AKU CAPEK NGEDIT KLO YANG DIRUBAH BAB 4. hahaha”. Sambil mikir alasan untuk besok maju bimbingan ke Dosen…:(

Ini lho….potongan tahapan penelitian ku yang telah ku revisi….mohon dikoreksi yach…:)

————————————————————————————————————————————-

D. Tahap Penelitian

Pada penelitian ini diterapkan model linear sequential dalam pengembangan sistemnya. Adapun rincian tahapan yang akan dilalui terdapat pada gambar berikut:

Roger S. Pressman, Ph.D.

1. Analisis (analisis)

Kegiatan yang dilakukan pada tahap ini adalah menganalisis kebutuhan sistem dan menentukan spesifikasi sistem yang akan dikembangkan. Kegiatan analisis ini mengacu pada data-data hasil wawancara dan observasi di Dinas Pariwisata Kabupaten Gunungkidul.

2. Perancangan (Desain)

Kegiatan yang dilakukan pada tahap ini adalah merancang DFD (Data Flow Diagram), merancang algoritma, merancang basis data, dan merancang antarmuka (user interface). Tools yang digunakan pada tahapan ini adalah Ms Visio 2007, Power Designer 9, dan Axure Pro 5.

3. Implementasi (Code)

Kegiatan yang dilakukan pada tahap ini adalah mengimplementasikan rancangan yang telah dibuat menjadi aplikasi yang nyata. Tools yang digunakan dalam tahap ini  adalah Framework CodeIgniter 1.7.2, Wamp Server 2.0i (Apache-PHP- MySQL), Google Map Version 3, dan Netbeans 6.8.

4.  Pengujian Sistem

a)      Black Box Test

Pengujian Black Box Test yaitu proses pengujian yang dilakukan dengan mengamati keluaran dari berbagai masukan. Pengujian ini dilakukan oleh pihak Dinas Pariwisata Gunungkidul sebagai Administrator

b)      Alfa Test

Pengujian Alfa Test yaitu pengujian sistem yang dilakukan oleh pemakai sistem yaitu petugas obyek wisata, wisatawan, dan masyarakat.

————————————————————————————————————————————-

Searching Array Multidimensi di PHP

Emm….. kmarin aku nemui kasus di project yang sedang ku kerjain. Yaitu tentang shopping cart / keranjang belanja. Sekedar info ini shopping cart miliknya CodeIgniter 1.7.2. hehehe.  Bentuk fisik dari shopping cart ku ini berupa array dengan susunan seperti berikut:


$shopping_cart = Array
(

 'c81e728d9d4c2f636f067f89cc14862c' => Array

 (
 'rowid' => 'c81e728d9d4c2f636f067f89cc14862c',

 'id' => 2,
 'qty' => 4,

 'price' => 400000,
 'name' => 'Tas Kondangan',

 'size' => '15 x 15 x 15',
 'color' => 'hitam',

 'subtotal' => 1600000
 ),

 'a87ff679a2f3e71d9181a67b7542122c' => Array
 (

 'rowid' => 'a87ff679a2f3e71d9181a67b7542122c',
 'id' => 4,

 'qty' => 1,
 'price' => 550000,

 'name' => 'Tas Gendong',
 'size' => '30 x 30 x 30',

 'color' => 'Merah',
 'subtotal' => 550000,

 )

);

Nah dari data array itu kan terlihat ada 2 item barang yang dibedakan dengan rowid. Permasalahan yang ingin ku pecahkan adalah “bagaimana mendapatkan informasi quantitas (qty) suatu barang dengan kunci (rowid) tertentu???”. Harapannya aku mempunyai sebuah fungsi pencarian array yang mampu melaksanakan itu. Jadi misal  ak memberikan kepada fungsi tersebut sebuah parameter rowid = a87ff679a2f3e71d9181a67b7542122c , maka aku pengen fungsi itu memberikan informasi / nilai qty = 4. Hmm…. ak trus terang gak iso nek gawe dewe. hehe.  Seperti yang ku katakan pada postingan sebelumnya bahwa aku adalah web programmer dengan problem solving yang rendah...:(. Jadi ya tanya pak dhe Google aja “array multidemension search in php“. Dan berikut ini adalah fungsi dan contoh pemanggilan fungsi yang ku dapatkan:


function search($array, $key, $value)
{
 $results = array();

 if (is_array($array))
 {
 if ($array[$key] == $value)
 $results[] = $array;

 foreach ($array as $subarray)
 $results = array_merge($results, search($subarray, $key, $value));
 }

 return $results;
}

// pemanggilan fungsi
$data = search($shopping_cart, 'rowid', 'a87ff679a2f3e71d9181a67b7542122c');

print_r($data[0]['id']);

Dengan fungsi itu alhmdulillah ak bisa mendapatkan apa yang ku inginkan di depan, dan aku bisa melanjutkan pekerjaan selanjutnya… Semoga bermanfaat….:)

Source : http://stackoverflow.com/questions/1019076/how-to-search-by-keyvalue-in-a-multidimensional-array-in-php

Aku adalah Web Programmer dengan Kemampuan Problem Solving sangat rendah….:(

Ada yang mau kasih saran buat aku????….

Mulai menggunakan Doctrine ORM (Object Relational Mapper) di Framework CodeIgniter

Heii….lama bgt gak nulis di blog ni…lg crowded bgt…:D .. (just openning statement..hehehe)

Sejak kenal framework CodeIgniter sampe skrg udah bebrapa project yang ku kerjain. Aku memang merasakan bekerja dengan Framework CI terasa lebih cepat dan menyenangkan dibanding dengan PHP scratch..(iih,,capek bgt mengenangnya).

Namun..yang kadang ak keluhkan adalah ketika dihadapkan dengan Query2 yang komplex…hmm..mulai gak nyaman deh… Kebayang jika bisa kyak di Framework Ruby on Rails yang OOP bgt…Kan jadi enak bgt tu ngurusi query yang komplex…

Beberapa hari kmarin lihat2 di forum n Wiki CodeIgniter…dan ternyata udah banyak bgt ORM tool di PHP yang support CI… , salah satu yang terkenal adalah Doctrine ORM,..wah jadi seneng bgt ni…

Segera saja aku menuju website resminya Doctrine…dan download sourcenya…hmm….bakal lebih nyaman lagi ni ngerjain projectnya…hehehe

Doctrine adalah salah satu plugin Object Relational Mapper untuk PHP. Sedikit bgt yang ku ketahui tentang apa itu ORM… Tapi menurutku dengan ORM tool kita bisa memetakan tabel2 dalam database ke dalam bentuk class-class / Object dalam aplikasi web yang kita buat., dan Object / Class itu merepresentasikan record2 tabel dalam database kita…

Jadi dengan menggunakan ORM akan membuat proses manipulasi (Create,Read,Upadte,Delete) database menjadi sangat mudah dan menyenangkan. Karena kita akan bisa berfikir lebih Object Oriented dan tidak perlu kontak langsung dengan yang namanya Query.  Dengan ORM maka permasalahan Query yang komplex akan terasa jadi lebih sederhana..dan kita tidak akan frustasi dibuatnya,,,,hehehe.

Ini adalah ilustrasi dari http://phpandstuff.com tentang penggunaan Doctrine ORM di codeigniter:

Okey… cukup untuk posting kali ini…berikutnya mungkin akan posting tentang studi kasusnya langsung,,,hehehe

See you all…

7 Top CMS Application Built on CodeIgniter Framework

Dear all..

Emm… ketika kita pengen membuat aplikasi web dengan cepat maka gunakanlah FRAMEWORK. Dan ketika kita pengen membuat aplikasi web dengan LEBIH cepat lagi maka gunakanlan CMS yang dibuat dengan FRAMEWORK…:D . Akhh,,,, ini cuma ungkapanku saja kok. Mungkin temen2 bisa mencari bukti kebenaranya…

Nah… beberapa bulan kemarin ketika aku searching CMS yang dibuat dengan CodeIgniter baru menemukan Open Blog sperti yang telah ku posting sebelumnya. Dan beberapa hari kemarin aku searching lagi. Wow….aku mendapatkan 6 lagi prend.  Aku sekarang sibuk compare dari 7 CMS (termasuk open blog) hasil searchingku ini. Yaa,,,sambil mikir mana yang lebih asyik  buat ngerjain orderan sich….hehehe

Dan bagi temen2 yang belum tau…. inilah 7 Top CMS Application Built on COdeigniter Framework….:D

Open Blog

Fitur : Friendly User Interface, Easy to Install, Multi language Support, Search Engine Friendly URL, Posts, Pages, Links, Feed Support, Admin Panel, WYSIWYG editor, Plugins, Check Update

open-blog.info

CodeFight

http://www.codefight.org

Expression Engine

Hmm… ini paling gila fiturnya.. , buka aja dech ke webnya. Males nulis… hehehe

http://expressionengine.com

PyroCMS

Fitur : Categories, Comments, Navigation, News,  Pages, Photos Product, Service, User Setting.

http://www.pyrocms.com/

Tarichi

Fitur : pages, banner, product, product category, gallery, file management, template, admin panel

Ini buatan anak Indonesia lho… tapi kyaknya banyak eror… hehehe

dotexe.unnes.ac.id/2009/03/20/tarichi-sebuah-cms-berbasis-ci/

Site Managr

Fitur : Events, News, Media, Links,  Pages, Photos, Email, Statistic, User Setting, dll

http://designelemental.net/sitemanagr

Ci-CMS

Fitur : Pages, News, Navigation,Search, User Permision Setting, Upload Images, language, dll

http://solaitra.tuxfamily.org/

Klo temuan temen2 belum kedaftar silahkan ditambahkan ya,,,, hehehe.

Semoga bermanfaat….

Cinta Pertama Dan Terakhir

sebelumnya tak ada yang mampu
mengajakku untuk bertahan
di kala sedih

sebelumnya ku ikat hatiku
hanya untuk aku seorang
sekarang kau di sini hilang rasanya

semua bimbang tangis kesepian
kau buat aku bertanya
kau buat aku mencari
tentang rasa ini
aku tak mengerti
akankah sama jadinya
bila bukan kamu
lalu senyummu menyadarkanku
kau cinta pertama dan terakhirku

sebelumnya tak mudah bagiku
tertawa sendiri di kehidupan
yang kelam ini

sebelumnya rasanya tak perlu
membagi kisahku saat ada yang mengerti
sekarang kau di sini hilang rasanya
semua bimbang tangis kesepian

bila suatu saat kau harus pergi
jangan paksa aku tuk cari yang lebih baik
karena senyummu menyadarkanku
kaulah cinta pertama dan terakhirku

Axure RP Pro 5.6 : Software untuk Membuat Prototype Aplikasi yang sangat Memanjakan Kita

314bgoi

Axure RP Pro memungkinkan Anda untuk membuat prototype yang interaktif, deskriptif, berbasis browser lebih cepat dan lebih mudah daripada menciptakan prototype atau mockup dengan tools yang ada biasanya.  Desain fungsionalitas, konten, dan navigasi dapat dilakukan dengan klik, drag and drop tanpa menyentuh kode program. Ini tentunya akan sangat menghemat waktu Anda dan yang pasti anda dapat mendemokan prototype aplikasi kepada client dengan sangat menyenangkan. Hasil prototype yang dibuat dengan Axure dapat menggambarkan dengan jelas dan detail, sehingga client seperti dihadapkan kepada aplikasi yang telah jadi (full release). Dan pada akhirnya anda akan segera mendapatkan Kontrak Project.… hehehe

Fitur Pro RP Axure meliputi:
SiteMap :  Membuat dan mengatur halaman di sitemap.
Widgets : untuk membuat widget, termasuk tombol, kolom formulir, bentuk, dan elemen dinamis dan kemudahan untuk memformat
Master : Untuk membuat master yang dapat digunakan kembali seperti header dan footer.
Annotations and Interactions : untuk mengorganisir catatan, link, dan interaksi dinamis ketika Anda mendesain kerangka.
No Programming: Menghasilkan prototipe HTML interaktif drag-drop dan klik tombol.
Interactivity and Conditional Flow : Menunjukkan dan uji desain Anda dengan hubungan kerja, interaksi, dan logika kondisional.
View in Popular Browsers: Berbagi prototipe HTML Anda dengan teman dan klien untuk melihat di Internet Explorer atau Firefox tanpa harus memasang compiler.
Instant Documentation: Menghasilkan spesifikasi fungsional untuk format Microsoft Word dalam hitungan detik lengkap dengan screenshot, penjelasan, dan interaksi.
Built-in and Branded Templates: Menggunakan template built-in atau membuat template disesuaikan dengan tampilan. Pilih satu kolom atau dua kolom layout.
Configurable Content: Pilih dan mengkonfigurasi konten untuk spesifikasi Anda seperti screenshot, penjelasan field dan teks widget.
Shared Projects: Kerja secara bersamaan pada desain dengan orang lain dan tidak diperlukan instalasi server.
Flow Diagram: Gunakan diagram alir bentuk dan konektor untuk membuat diagram alir sistem
Dynamic Elements : Prototipe memiliki widget fungsional termasuk elemen dinamis untuk pengamabangan RIA dan fungsionalitas AJAX.

Segera download trial version di http://www.axure.com/ dan rasakan kemudahan menggunakannya…Semoga bermanfaat.

Page 1 of 212»
Get Adobe Flash playerPlugin by wpburn.com wordpress themes