ساختار بانک اطلاعاتی (دیتابیس) جوملا 1.6
مقدمه
ساختار بانک اطلاعاتی از زمان انتشار جوملا 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'); ===اطلاعات در رابطه با یک پلاگین خاص=== <source lang="php"> /* (...) */ $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); /* (...) */
نویسنده: محسن فیروزمندان
|
|