Saturday, June 26, 2010

Codeigniter Language Class Bug!

Saya sedang membangun web site yg support 2 bahasa.
Alhasil, sempat dibuat frustasi oleh CI. Setelah
setengah hari berkonsultasi ke google dan forum
hasil nya nihil. Kira2 begini masalah nya:
1. ./system/application/config/config.php
$language = "indonesia"; # default indonesia

2. ./system/application/config/autoload.php
$language = array('caption');

3. ./system/application/language/english/caption_lang.php
$lang['caption_welcome'] = 'Welcome';

4. ./system/application/language/indonesia/caption_lang.php
$lang['caption_welcome'] = 'Selamat datang';

5. ./system/application/controllers/welcome.php
$this->load->library('config');
$this->config->set_item('language','english');
$this->lang->load('caption');

echo $this->lang->line('caption_welcome');

Expected Result:
Welcome

Actual Result:
Selamat datang

Fixes:
create a file Language.php into your ./system/application/library

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
/**
* CodeIgniter
*
* An open source application development framework for PHP 4.3.2 or newer
*
* @package CodeIgniter
* @author ExpressionEngine Dev Team
* @copyright Copyright (c) 2008 - 2009, EllisLab, Inc.
* @license http://codeigniter.com/user_guide/license.html
* @link http://codeigniter.com
* @since Version 1.0
* @filesource
*/

// ------------------------------------------------------------------------

/**
* Language Class
*
* @package CodeIgniter
* @subpackage Libraries
* @category Language
* @author ExpressionEngine Dev Team
* @link http://codeigniter.com/user_guide/libraries/language.html
*/
class CI_Language {

var $language = array();
var $is_loaded = array();
var $current_language = '';
var $mode = 'Replacement';

/**
* Constructor
*
* @access public
*/
function CI_Language()
{
log_message('debug', "Replacement of Language Class Initialized");
}

// --------------------------------------------------------------------

/**
* Load a language file
*
* @access public
* @param mixed the name of the language file to be loaded. Can be an array
* @param string the language (english, etc.)
* @return mixed
*/
function load($langfile = '', $idiom = '', $return = FALSE)
{
$langfile = str_replace(EXT, '', str_replace('_lang.', '', $langfile)).'_lang'.EXT;

if (in_array($langfile, $this->is_loaded, TRUE))
{
if($this->current_language == '' ||
$this->current_language == $idiom){

return;
}
}

if ($idiom == '')
{
$CI =& get_instance();
$deft_lang = $CI->config->item('language');
$idiom = ($deft_lang == '') ? 'english' : $deft_lang;
}else{

if($this->current_language != $idiom){

$this->is_loaded = array();
}
}

$this->current_language = $idiom;

// Determine where the language file is and load it
if (file_exists(APPPATH.'language/'.$idiom.'/'.$langfile))
{
include(APPPATH.'language/'.$idiom.'/'.$langfile);
}
else
{
if (file_exists(BASEPATH.'language/'.$idiom.'/'.$langfile))
{
include(BASEPATH.'language/'.$idiom.'/'.$langfile);
}
else
{
show_error('Unable to load the requested language file: language/'.$idiom.'/'.$langfile);
}
}

if ( ! isset($lang))
{
log_message('error', 'Language file contains no data: language/'.$idiom.'/'.$langfile);
return;
}

if ($return == TRUE)
{
return $lang;
}

$this->is_loaded[] = $langfile;
$this->language = array_merge($this->language, $lang);
unset($lang);

log_message('debug', 'Language file loaded: language/'.$idiom.'/'.$langfile);
return TRUE;
}

// --------------------------------------------------------------------

/**
* Fetch a single line of text from the language array
*
* @access public
* @param string $line the language line
* @return string
*/
function line($line = '')
{
$line = ($line == '' OR ! isset($this->language[$line])) ? FALSE : $this->language[$line];
return $line;
}

}
// END Language Class

/* End of file Language.php */
/* Location: ./system/application/libraries/Language.php */
Komentar: Library native saya replace, jadi tidak ada core hack.
perhatikan, saya menambahkan var $current_language yg penggunaannya
cukup desktriptif. Lalu saya menambahkan pengecekan di in_array()
dan ada peng-reset-an
...
if($this->current_language != $idiom){

$this->is_loaded = array();
}
...
utk memastikan ketika terjadi penggantian bahasa, var $lang
yg telah di cache ter-reset. Semoga membantu.
Coding for life, coding with ethic.

Saturday, June 5, 2010

Python, Scrapy Installation Step-by-step

Wahh... kok mainnya sekarang python? Hahhaha
sangat berbisa! Anyway di artikel ini gw
mau bagiin caranya install makhluk yg satu ini.
Sebelumnya apaan sehh itu Scrapy? Gampangnya
light framework utk web crawler! Utk apa tuh
crawler? crawler atau spider crawler biasanya
digunakan utk mengumpulkan informasi dari suatu
web site, entah itu link nya atau content nya.

Informasi ini nanti nya bisa diolah sedemikian
rupa utk keperluan tertentu. Misalkan utk statistik
penggunaan kata yg di mana akan dibobotkan dan
dijadikan misalnya utk data penyusun "tag clouds".
Ok, gw akan tunjukkin gimana cara install nya di
windows.

1. install python dari sini unduh nya http://www.python.org/download/,
gw seh pake nya python2.6 run .exe atau .msi nya
2. Twisted for windows
unduh dan run .msi nya
3. Zope.interface
nah yg ini butuh penjelasan lbh lanjut, pastikan download source nya.
Setelah itu unzip lalu ketik ini di command line "python setup.py install"
4. libxml2 for windows
unduh dan run .msi nya
5. PyOpenSSL for Windows
unduh dan run .msi nya
6. Scrapy-0.8.win32.exe
unduh dan run .msi nya
7. Scrapy-0.8 source
unduh, unzip dan run ini di command line "python setup.py install"
8. masih di dalam direktori hasil unzip source Scrapy, buka direktori example scripts,
lalu ketik ini "python count_and_follow_links.py http://adesanto-asman.blogspot.com 2"
atau "python count_and_follow_links.py" nanti akan ada help yg muncul

Sekedar tambahan, utk file dg extension
".egg" adalah merupakan file yg ter-zip.
Utk unzip nya pakai easy_install
Selamat mencoba dan happy crawling.
Coding for life, coding with ethic.

Joomla! Embed Javascript in Article

Buat sharing aja. Kalau di dalam artikel
dapat di sisipkan Javascript. Caranya:
1. Login di administrator site.
2. Buka artikel manager.
3. Tulis baru atau edit yg sudah ada.
4. Plugin editor akan muncul,
Klick "html", muncul window utk
meng-edit Html source.
5. Masukan tag script selayaknya kita
menyisipkan Javascript.
<script type="text/javascript">
alert("Hello, i've been embedded in an article!");
</script>
6. Save atau apply.
7. Buka artikel tersebut melalui
front page.
8. Ketika artikel selesai load,
seharus nya alert box akan muncul.

Semoga membantu. Coding for life, coding with ethic.