ساختار دیتابیس از زمان انتشار جوملا 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); نویسنده : محسن فیروزمندان
|