استفاده از پایگاه داده ها در کامپوننت نویسی   

از دانشنامه جوملا فارسی - مامبو فارسی
پرش به: ناوبری، جستجو

مقدمه

در این مقاله آموزشی جوملا چگونگی اتصال و استفاده از پایگاه داده‌ها را در کامپوننت نویسی در جوملا 2.5 بررسی خواهیم کرد. کامپوننت‌ها معمولا محتوای خودشان را با استفاده از پایگاه داده‌ها مدیریت می‌کنند و این امکان را به شما می‌دهند که در فرآیند نصب یا حذف کامپوننت فایل‌های کوئری SQL را اجرا کنید.

توجه: اگر سری آموزش‌های ایجاد کامپوننت قبلی را دنبال کرده‌اید می‌توانید از کدهای آن استفاده نمایید و در غیر اینصورت کد مربوط به این مقاله آموزشی را می‌توانید از لینک انتهای مقاله دانلود نمایید.

استفاده از sql در هنگام نصب و حذف کامپوننت

ایجاد پایگاه داده‌ها در هنگام نصب کامپوننت دو فایل admin\sql\install.mysql.utf8.sql و admin\sql\updates\mysql\0.0.6.sql در مسیر و با نام‌های مشخص شده ایجاد کنید.


<source lang="sql"> DROP TABLE IF EXISTS `#__hello`; CREATE TABLE `#__hello` ( `id` int(11) NOT NULL AUTO_INCREMENT, `greeting` varchar(25) NOT NULL, PRIMARY KEY (`id`) );

INSERT INTO `#__hello` (`greeting`) VALUES ('DB Hello World!'), ('DB Good bye World!'); </source>


این فایل installation است و هنگام نصب کامپوننت اگر در فایل xml (در این مثال helloworld.xml) مشخص کرده باشید اجرا خواهد شد.

ویرایش فایل helloworld.xml

<source lang="xml"> <?xml version="1.0" encoding="utf-8"?> <install type="component" version="2.5"> <name>hello</name> <creationDate>2013-05-26</creationDate> <author>Shahab Matapour</author> <authorEmail>[email protected]</authorEmail> <authorUrl>http://www.joomlafarsi.com</authorUrl> <copyright>Copyright Info</copyright> <license>License Info</license> <version>1.01</version> <description>Hello World Test Component ...</description> <install> <sql> <file driver="mysql" charset="utf8">sql/install.mysql.utf8.sql</file> </sql> </install> <uninstall> <sql> <file driver="mysql" charset="utf8">sql/uninstall.mysql.utf8.sql</file> </sql> </uninstall>

<files folder="site"> <filename>index.html</filename> <filename>hello.php</filename> <filename>controller.php</filename> <folder>views</folder> <folder>models</folder> </files> <administration> <menu img="components/com_proforms/images/love.png" >کامپوننت آموزشی</menu>

<files folder="admin"> <filename>index.html</filename> <filename>hello.php</filename> <folder>sql</folder> <folder>tables</folder> <folder>models</folder> </files> </administration> </install> </source>


ایجاد فایل همانند فرآیند نصب (همانند مرحله یک)

ایجاد فایل در admin\sql\uninstall.mysql.utf8.sql که شامل کدهای زیر باشد.


<source lang="sql"> DROP TABLE IF EXISTS `#__hello`; </source>


اضافه کردن یک نوع فیلد جدید

به آدرس site\views\hello\tmpl\default.xml رفته و کدهای ذیل را در فایل default.xml کپی نمایید.


<source lang="xml"> <?xml version="1.0" encoding="utf-8"?> <metadata> <layout title="New Hello Menu Item"> <message>توضیحات موبوط به آیتم منوی کامپوننت</message> </layout> <fields name="request" addfieldpath="\administrator\components\com_hello\models\fields" > <fieldset name="request"> <field name="id" type="hello" label="Hello Field Label" description="Desc of Hello Field Label" default="1" > <option value="1">1.Hello World</option> <option value="2">2.Good Bye</option> </field> </fieldset> </fields> </metadata> </source>


این کد ضمن معرفی یک نوع فیلد جدید برای جوملا مشخص می‌کند که باید در آدرس /administrator/components/com_helloworld/models/fields به دنبال فیلد تعریف شده بگردد.

ایجاد فایل admin\models\fields\hello.php و قرار دادن کد زیر در فایل hello.php


<source lang="php"> <?php // No direct access to this file defined('_JEXEC') or die('Restricted Access'); jimport('joomla.form.helper'); JFormHelper::loadFieldClass('list'); class JFormFieldHello extends JFormFieldList { protected $type='HELLOWORLD'; protected function getOptions() { $db=JFactory::getDBO(); $query=$db->getQuery(true); $query->select('id,greeting'); $query->from('#__hello'); $db->setQuery((string)$query); $message=$db->loadObjectList(); $options=array(); if ($messages) { foreach($messages as $message) { $options[] = JHtml::_('select.option', $message->id, $message->greeting); } } $options = array_merge(parent::getOptions(), $options); return $options; } } ?> </source>


نمایش یک پیغام

کلاس hellomodelhello یک مناسب را نمایش می‌دهد این پیغام برحسب شناسه‌ها محاسبه و نمایش داده می‌شوند.

باید به آدرس site\models\hello.php رفته و فایل hello.php را به صورت زیر ویرایش کنیم.


<source lang="php"> <?php // No direct access to this file defined('_JEXEC') or die('Restricted access'); // import Joomla modelitem library jimport('joomla.application.component.modelitem'); class HelloModelHello extends JModelItem { protected $msg; public function getTable($type = 'Hello', $prefix = 'HelloTable', $config = array()) { return JTable::getInstance($type, $prefix, $config);} public function getMsg() { if(!isset($this->msg)) { $id=JRequest::getInt('id',1); // Get a HelloTableHello instance $table = $this->getTable(); // Load the message $table->load($id); // Assign the message $this->msg = $table->greeting; } return $this->msg; } } ?> </source>


به این ترتیب Model از کلاس hellotablehello می‌پرسد که چه پیغامی را تولید کند.

یک فایل در admin\tables\hello.php ایجاد کنید که شامل کدهای زیر باشد.


<source lang="php"> <?php // No direct access defined('_JEXEC') or die('Restricted access'); // import Joomla table library jimport('joomla.database.table'); /**

  • Hello Table class
  • /

class HelloTableHello extends JTable { /**

  • Constructor
  • @param object Database connector object
  • /

function __construct(&$db) { parent::__construct('#__hello', 'id', $db); } } ?> </source>


ایجاد یک بسته نصبی از کامپوننت

برای ایجاد بسته نصبی از افزونه‌های جوملا از فرمت ZIP استفاده می‌کنیم. جهت ایجاد بسته نصبی از کامپوننت‌مان باید فایل‌ها زیر را در یک فولدر خارج از جوملا آماده کنیم.

فولدر محتویات کامپوننت



helloworld.xml (فایل نصب کننده)
site\hello.php
site\index.html
site\controller.php
site\views\hello\view.html.php
site\views\hello\tmpl\default.php
site\views\hello\tmpl\default.xml
site\models\hello.php

admin\hello.php
admin\index.html
admin\sql\install.mysql.utf8.sql
admin\sql\updates\mysql\0.0.6.sql
admin\sql\uninstall.mysql.utf8.sql
admin\models\fields\hello.php
admin\tables\hello.php

در صورتی که سری آموزش‌های ایجاد کامپوننت قبلی را دنبال کرده‌اید می‌توانید از کدهای آن استفاده نمایید و در غیر اینصورت کد مربوط به این مقاله آموزشی را می‌توانید از لینک انتهای مقاله دانلود نمایید.

تا این مرحله باید یک فولدر به نام helloworld.zip داشته باشیم که شامل فایل‌های و فولدرهای بالا باشد.

سپس می‌توانیم فایل zip بسته نصبی کامپوننت را از طریق مدیریت افزونه‌ها در جوملا نصب کنیم.

بعد از نصب باید زیر منوی آموزش کامپوننت نویسی در منوی کامپوننت‌ها ایجاد شده باشد.

سپس شما می‌توانید در مرورگر آدرس http://localhost/siteRoot/index.php?option=com_hello را وارد کنید تا نتیجه کارتان را مشاهده کنید. نتیجه باید همانند شکل زیر باشد.


Usgin-database-user page.jpg


جهت دانلود فایل‌های مربوط به این آموزش می‌توانید به آدرس Coming soon مراجعه نمایید.


جمع آوری شده توسط :شهاب مطاع پور

Indent support.png
هر گونه سوال و یا مشکلی در این رابطه دارید، می‌توانید در انجمن تخصصی تیم جوملا فارسی جستجو کرده و در صورت عدم دریافت نتیجه مورد نظر، سوال جدیدی را مطرح کنید.
8.pngاستفاده از مطالب دانشنامه جوملا فارسی - مامبو فارسی با ذکر منبع ( دانشنامه جوملا فارسی ) و لینک مستقیم به http://docs.joomlafarsi.com بلامانع است.