The Joomla! Community Magazine™

Issue 2011 March > Farsi

دیتابیس جوملا 1.6

Written by | Tuesday, 01 March 2011 00:00 | Published in 2011 March
ساختار دیتابیس از زمان انتشار جوملا 1 در سال 2005 تقریبا ثابت مانده بود و حال زمان آن رسیده بود تا تغییراتی در ساختار دیتابیس صورت گیرد تا برخی از کمبود ها و مشکلات حل شوند، از این رو تغییراتی در ساختار دیتابیس جوملا 1.6 داده شد. در ادامه به بررسی برخی از این تغییرات می پردازیم.

استفاده از کلاس جدید JDatabaseQuery در جوملا 1.6

در راستای گسترش امکانات و پشتیبانی جوملا از سایر پایگاه های داده مانند MongoDB, MSSQL  جوملا 1.6 اقدام به معرفی کلاس جدید پرس و جو (query)  ساز کرده است. این کلاس به شما اجازه می دهد تا پرس و جو های خود را به صورت قابل درک تری بنویسید. در زیر نمونه ای از پرس و جو در جوملا 1.5 و جوملا 1.6 را می توانید ببینید :

پرس و جو در جوملا 1.5 :

$db = JFactory::getDbo();
$db->setQuery(
'SELECT *'.
' FROM #__articles'.
' WHERE state = '.(int) $published.
'  AND catid = '.(int) $categoryId.
' ORDER BY created DESC'
);

پرس و جو در جوملا 1.6 :

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*')
->from('#__articles')
->where('state = '.(int) $published)
->where('catid = '.(int) $categoryId)
->order('created DESC');
$db->setQuery($query);

تغییرات در ساختار دیتابیس جوملا 1.6 برای نصب افزونه

یکی از مواردی که در گذشته کار گسترش دهنده های افزونه های جوملا را با مشکل مواجه می کرد ذخیره اطلاعات در تیبلهای مختلف بود. اکثر گسترش دهنده ها ازساختار بد  jos_components که کامپوننت های نصب شده را لیست می کرد آگاه بودند حال اینکه برای ماژول، قالب و سایر بخش ها حتی این لیست هم وجود نداشت.
این مشکل در جوملا 1.6 با تیبل jos_extensions  حل شد. تیبل فوق جایگزین تیبلهای jos_components و jos_plugins شده و در آن اطلاعات تمامی افزونه هایی که در جوملا نصب می شوند نگهداری می شود.
در ادامه چند پرس و جوی نمونه را برای آشنایی بیشتر شما با ساختار این تیبل بر اساس کلاس جدید JDatabaseQuery نوشته ایم:

اطلاعات در مورد کامپوننت ها
لیست همه کامپوننت های جوملا 1.6 :

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*')
->from('#__extensions')
->where('type = '.$db->quote('components'))
->order('ordering');

اطلاعات در رابطه با یک کامپوننت خاص :


$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*')
->from('#__extensions')
->where('type = '.$db->quote('components'))
->where('element = '.$db->quote('com_content'))
->order('ordering');

اطلاعات در رابطه با زبان ها
لیست همه زبان های نصب شده در جوملا 1.6 :

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*')
->from('#__extensions')
->where('type = '.$db->quote('language'))
// Use client_id = 1 for backend packs
->where('client_id = 0')
->order('ordering');

اطلاعات در رابطه با یک زبان خاص :

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*')
->from('#__extensions')
->where('type = '.$db->quote('language'))
->where('element = '.$db->quote('en-GB'))
// Use client_id = 1 for backend packs
->where('client_id = 0)
->order('ordering');

اطلاعات در رابطه با کتابخانه ها
لیست همه کتابخانه های جوملا 1.6 :

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*')
->from('#__extensions')
->where('type = '.$db->quote('library'))
->order('ordering');

اطلاعات در مورد یک کتابخانه خاص :

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*')
->from('#__extensions')
->where('type = '.$db->quote('library'))
->where('element = '.$db->quote('simplepie'))
->order('ordering');

اطلاعات در رابطه با ماژول ها
لیست همه ماژول های بخش کاربری جوملا 1.6 :

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*')
->from('#__extensions')
->where('type = '.$db->quote('modules'))
// Use client_id = 1 for backend modules.
->where('client_id = 0')
->order('ordering');

اطلاعات در رابطه با یک ماژول خاص :

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*')
->from('#__extensions')
->where('type = '.$db->quote('module'))
->where('element = '.$db->quote('mod_menu'))
// Use client_id = 1 for backend modules.
->where('client_id = 0');
->order('ordering');

اطلاعات در رابطه با پلاگین ها
لیست همه پلاگین های جوملا 1.6 :

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*')
->from('#__extensions')
->where('type = '.$db->quote('plugin'))
->where('folder = '.$db->quote('system'))
->order('ordering');

اطلاعات در رابطه با یک پلاگین خاص :


$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*')
->from('#__extensions')
->where('type = '.$db->quote('plugin'))
->where('folder = '.$db->quote('system'))
->where('element = '.$db->quote('redirect'))
->order('ordering');

اطلاعات در رابطه با قالب ها
لیست همه قالب های نصب شده بخش کاربری جوملا 1.6 :

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*')
->from('#__extensions')
->where('type = '.$db->quote('template'))
// Use client_id = 1 for backend templates.
->where('client_id = 0')
->order('ordering');

اطلاعات در مورد یک قالب خاص :

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('*')
->from('#__extensions')
->where('type = '.$db->quote('template'))
->where('element = '.$db->quote('com_content'))
// Use client_id = 1 for backend templates.
->where('client_id = 0')
->order('ordering');

تغییرات در ساختار دیتابیس جوملا 1.6 برای کاربران و گروه های کاربری


در راستای ایجاد امکان کنترل سطح دسترسی در جوملا 1.6 تغییراتی در ساختار دیتابیس صورت گرفت.
از مامبو 4.5.0 تا جوملا 1.5 این بخش بر اساس phpGACL کار می کرد. وقتی این موضوع را با عمق بیشتری  بررسی کردیم متوجه شدیم که باید روند را تغییر دهیم.
در جوملا 1.6 دسترسی "مشاهده" و "فعالیت"  را جدا کردیم. در این نسخه از تیبل های jos_assets, jos_users, jos_usergroups, jos_usergroup_map, jos_viewlevels  برای بخش جدید کنترل سطح دسترسی استفاده شده است.
برای مشاهده تغییرات در این رابطه پرس و جوی زیر را ببینید و مقایسه کنید.

گروه کاربری در جوملا 1.5 :


$db = JFactory::getDbo();
$db->setQuery(
'SELECT g.value AS group_name'.
' FROM #__core_acl_groups AS g'.
' LEFT JOIN jos_core_acl_groups_aro_map AS grpMap ON grpMap.group_id = g.id'.
' LEFT JOIN jos_core_acl_aro AS aro ON aro.id = grpMap.aro_id'.
' WHERE aro.value = '.(int) $userId
);

گروه کاربری در جوملا 1.6:

$db = JFactory::getDbo();
$query = $db->getQuery(true);
$query->select('g.title AS group_name')
->from('#__usergroups AS g')
->leftJoin('jos_user_usergroup_map AS map ON map.group_id = g.id')
->where('map.user_id = '.(int) $userId)
$db->setQuery($query);
Read 16174 times
Tagged under Farsi
Abolhassan Firoozmandan

Abolhassan Firoozmandan

Professional Joomla CMS developer in Middle East

 

به دنبال راه اندازی سایت خود با جوملا فارسی هستید ؟ آیا نیاز به طرح سوال خود در انجمن جوملا فارسی دارید ؟ آیا به دنبال قالب فارسی جوملا هستید ؟ آیا به دنبال افزونه های جوملا فارسی هستید ؟ آیا به هاستینگ جوملا فارسی نیاز دارید ؟ سایت جوملا فارسی دات کام به همه نیازهای شما پاسخ میدهد.

Language Switcher

Current Articles

JCM international articles

Grab the Joomla! Community Banners! Spread the word!

Recommend us on Google+