Joomla! 1.5 Kodlarına Giriş (Bölüm 5)

CaptainSalvador

Adanmış Üye
17 Eki 2014
6,073
15
Teşkilat
Joomla! kodlarına kaldığımız yerden devam edelim. Bu yazı disinin son yazısında JFactory sınıfını anlatacağımı söylemiştim. Şimdi kısaca factory.php ve JFactory sınıfını anlatalım.

JFactory, diğer tüm sınıfları tek bir elden kullanmamızı sağlayan oldukça güzel bir sınıftır. Daha önceki yazımda da belirttiğim gibi nesne, veritabanı, uygulama, şablon, oturum v.b işlemleri kolayca kullanmamızı sağlar. Şimdi bu işlemleri örneklerle açıklamaya başlayalım. Konu çok geniş olduğu için kısa kısa anlatmaya özen göstereceğim. Biliyorum ki okumayı sevmeyen bir millet olarak fazla uzun bir yazı sizleri sıkacaktır.

Öncelikle JFactory sınıfının en çok kullanacağımız metodu olan veritabanı ilişkilerini ele alalım. Diyelim ki bir eklentimiz var ve bu eklenti veritabanında bir tablo kullanıyor. JFactory ile veritabanı bağlantısı oluşturmak istersek yazacağımız kod oldukça basittir;

$db =& JFactory::getDBO();


Joomla 1.0.x serisinde hatırlarsanız veritabanı bağlantısı için bir global ($database) tanımlamamız gerekiyordu. Joomla! 1.5 serisi ile birlikte artık yapmamız gereken yukarıdaki kodu kullanmak. Daha sonra yapacağımız işlemimize geçelim.

$db->setQuery("buraya sql sorgumuz geliyor");
$veriler = $db->loadObjectList();


setQuery ve loadObjectList metodlarını JDatabase sınıfını anlatırken detaylı olarak anlatacağım. getDBO metodu JFactory sınıfı içerisindedir ve Joomla! sitemizin veritabanı için bir veritabanı nesnesi oluşturur. Yani JDatabase sınıfından bir nesne ister. getDBO metodu kodları factory.php içerisinde şu şekildedir;

function &getDBO()
{
static $instance;

if (!is_object($instance))
{
//get the debug configuration setting
$conf =& JFactory::getConfig();
$debug = $conf->getValue('config.debug');

$instance = JFactory::_createDBO();
$instance->debug($debug);
}

return $instance;
}


Burada dikkat edeceğiniz nokta _createDBO() fonksiyonudur. Bu fonksiyon da factory.php dosyası içerisinde olup kodlar şu şekildedir;

function &_createDBO()
{
jimport('joomla.database.database');
jimport( 'joomla.database.table' );

$conf =& JFactory::getConfig();

$host = $conf->getValue('config.host');
$user = $conf->getValue('config.user');
$password = $conf->getValue('config.password');
$database = $conf->getValue('config.db');
$prefix = $conf->getValue('config.dbprefix');
$driver = $conf->getValue('config.dbtype');
$debug = $conf->getValue('config.debug');

$options = array ( 'driver' => $driver, 'host' => $host, 'user' => $user, 'password' => $password, 'database' => $database, 'prefix' => $prefix );

$db =& JDatabase::getInstance( $options );

if ( JError::isError($db) ) {
jexit('Database Error: ' . $db->toString() );
}

if ($db->getErrorNum() > 0) {
JError::raiseError(500 , 'JDatabase::getInstance: Could not connect to database <br />' . 'joomla.library:'.$db->getErrorNum().' - '.$db->getErrorMsg() );
}

$db->debug( $debug );
return $db;
}


Bu fonksiyondaki kodları incelersek configuration.php dosyamızdaki veritabanı bilgilerini alıp bunları bir diziye (array) sokup bu diziyi de $options olarak tanımlıyor. Daha sonra da JDatabase sınıfının getInstance fonksiyonu ile veritabanına bağlanıyor.

$db =& JDatabase::getInstance( $options );


Bu özelliği (JDatabase::getInstance) kullanarak Joomla! içerisindeyken başka veritabanlarına bağlantı kurmak mümkün olabilir. Şöyle ki; elimizde başka bir veritabanı bilgileri var. Bu durumda $options için bir dizi oluşturmamız gerekiyor;

$options = array ( 'driver' => '$newdriver', 'host' => $newhost, 'user' => $newuser, 'password' => $newpassword, 'database' => $newdatabase, 'prefix' => $newprefix );


Buradaki değerleri tanımlayalım;

$newdriver = 'mysql';
$newhost = 'localhost';
$newuser = 'diğer veritabanının kullanıcısı';
$newpassword = 'diğer veritabanının parolası';
$newdatabase = 'diğer veritabanının adı';
$newprefix = 'diğer veritabanındaki tabloların ön eki';


Şimdi yeni bir veritabanı bağlantımız var. Bu bağlantı için bir nesne oluşturalım. Yazacağımız kod;

$yeniveritabanı =& JDatabase::getInstance( $options );


Artık yeni veritabanımızdan nesnemizi de aldığımıza göre yeni veritabanımızdaki tablolara işlem yaptırabiliriz.

$yeniveritabanı->setQuery("burada yeni veritabanı için sorgumuz var");
$yeniveritabanı->loadResult();


JFactory sınıfından JDatabase sınıfına geçtik. Ama bu örnekle aslında JFactory sınıfının ve factory.php dosyasının önemini de belirtmiş olduk.


ALINTI
 
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.