backend یا بخش مدیریت

backend یا بخش مدیریت

با سلام خدمت دوستان عزیز
امروز براتون توضیحات و مراحل استفاده و ساخت backend توضیح میدم
یا بهتر بگم از طریق مدیریت جوملا، اطلاعات جدول helloworld__# که از پایگاه داده واکشی می شود را نمایش دهیم.قبل هر چیز جا داره تا یک توضیح مختصر در مورد backend و frontend بدم که تا حالا خیلی از این دو واژه استفاده کردیم
بک اند(backend): همان قسمت عقبی سایت یا به عبارت دیگر قسمتی که ادمین و مدیران و نویسندگان و غیره به آن دسترسی دارند

 فرانت اند (frontend): به قسمت جلویی سایت شما اطلاق می شود ، جایی که مطالبتان برای عموم کاربران به نمایش در می آید.


 نمایش اطلاعات جدول helloworld__#

۱- در مدیریت جوملا، منوی (کامپوننت ها => hello-world) را اجرا نمایید.
مطابق شکل زیر، بعد از کلیک روی منوی بالا، فرم زیر ظاهر می شود و دو رکورد اطلاعاتی در یک جدول به همراه امکان صفحه بندی (pagination) نمایش داده می شود. توجه فرمایید که اطلاعات این لیست از پایگاه داده جوملا، واکشی شده است. (جدول helloworld__#)

ابتکار در وب (وبتکار) | طراحی سایت | آموزش طراحی سایت backend-یا-بخش-مدیریت backend یا بخش مدیریت Joomla آموزش کامپوننت نویسی جوملا


 فایل admin/helloworld.php (نقطه شروع کامپوننت سمت backend)

نقطه شروع کامپوننت سمت backend، فایل admin/helloworld.php است.

در هسته جوملا کلاسی بنام JController وجود دارد که تمام کنترلرها را مدیریت می کند.

از کلاس JController باید در کامپوننت مان استفاده نماییم. بنابراین آنرا در نقطه شروع کامپوننت، گسترش (extend) می دهیم.

در فایل admin/helloworld.php قطعه کد زیر را قرار دهید:

<?php
// No direct access to this file
defined(‘_JEXEC’) or die(‘Restricted access’);

// import joomla controller library
jimport(‘joomla.application.component.controller’);

// Get an instance of the controller prefixed by HelloWorld
$controller = JController::getInstance(‘HelloWorld’);

// Get the task
$jinput = JFactory::getApplication()->input;
$task = $jinput->get(‘task’, “”, ‘STR’ );

// Perform the Request task
$controller->execute($task);

// Redirect if set by the controller
$controller->redirect();


در جوملا با استفاده از متد ()jimport، می توانید محتویات یک فایل PHP را داخل یک فایل PHP دیگر درج کنید. بنابراین با توجه به ورودی این متد، نهایتاً کلاس JController به صفحه جاری اضافه می شود.

با استفاده از متد استاتیک ()getInstance، یک نمونه از کلاس JController با نام HelloWorldController ایجاد می شود. به طور پیش فرض جوملا کلاسی را که با پیشوند HelloWorld در فایلی به نام controller.php وجود دارد را صدا می زند.

هنگامی که هیچ taskی درخواست نشده باشد، task پیش فرض اجرا خواهد شد. task پیش فرض display است. در کلاس JController یک چنین taskی تعریف شده است.


فایل admin/controller.php (کنترلر عمومی)

حالا، ما باید در فایل controller.php کلاسی با نام HelloWorldController تعریف کنیم. کد های این فایل به صورت زیر است:


<?php
// No direct access to this file
defined(‘_JEXEC’) or die(‘Restricted access’);
// import Joomla controller library
jimport(‘joomla.application.component.controller’);
/**
* General Controller of HelloWorld component
*/
class HelloWorldController extends JController
{
/**
* display task
*
* @return void
*/
function display($cachable = false, $urlparams = false)
{
// set default view if not set
$input = JFactory::getApplication()->input;
$input->set(‘view’, $input->getCmd(‘view’, ‘HelloWorlds’));
// call parent behavior
parent::display($cachable);
}
}

این controller بصورت پیشفرض، “HelloWorlds” را بعنوان view نمایش خواهد داد.


فایل admin/views/helloworlds/view.html.php (ایجاد view)

زمانی که JController می خواهد یک view را نمایش دهد، بدنبال فایل های معین در فولدر زیر می گردد:
administrator/components/com_[component_name]/views/[name of view]/
قسمت [name of view] نام فولدر view است و نام پیش فرض، helloworlds است. یعنی بصورت زیر:
administrator/components/com_helloworld/views/helloworlds/
View، فایلی را که شامل اسم فایلی با نام view.[view_mode].php باشد را صدا می زند. در اینجا view mode پیش فرض و شاید تنها viewی که کامپوننت نیاز دارد html می باشد.
اکنون کد های فایلی به اسم view.html.php را ایجاد می کنیم:

<?php
// No direct access to this file
defined(‘_JEXEC’) or die(‘Restricted access’);
// import Joomla view library
jimport(‘joomla.application.component.view’);
/**
* HelloWorlds View
*/
class HelloWorldViewHelloWorlds extends JView
{
/**
* HelloWorlds view display method
* @return void
*/
function display($tpl = null)
{
// Get data from the model
$items = $this->get(‘Items’);
$pagination = $this->get(‘Pagination’);
// Check for errors.
if (count($errors = $this->get(‘Errors’)))
{
JError::raiseError(500, implode(‘<br />’, $errors));
return false;
}
// Assign data to the view
$this->items = $items;
$this->pagination = $pagination;
// Display the template
parent::display($tpl);
}
}

در کد فوق، متد display را که در کلاس JView تعریف شده است مجدداً برای کامپوننت جاری تعریف می کنیم.
تابع display از کلاس JView به طور پیش فرض توسط task ذکر شده در کلاس JController یعنی display صدا زده می شود.


فایل admin/views/helloworlds/tmpl/default.php

داده ها با استفاده از فایلی که در مسیر tmpl/default.php وجود دارد نمایش داده می شود.

کد های فایل default.php به صورت زیر است:

<?php
// No direct access to this file
defined(‘_JEXEC’) or die(‘Restricted Access’);
// load tooltip behavior
JHtml::_(‘behavior.tooltip’);
?>
<form action=”<?php echo JRoute::_(‘index.php?option=com_helloworld’); ?>” method=”post” name=”adminForm”>
<table class=”adminlist”>
<thead><?php echo $this->loadTemplate(‘head’);?></thead>
<tfoot><?php echo $this->loadTemplate(‘foot’);?></tfoot>
<tbody><?php echo $this->loadTemplate(‘body’);?></tbody>
</table>
</form>

این فایل، یک قالب یا layout است و توسط کلاس JView به view جاری اضافه می شود. بنابراین در اینجا، کلمه کلیدی this$ به کلاسی با نام HelloWorldViewHelloWorld اشاره می کند.
داخل این layout، چند sub-layout دیگر صدا زده می شود (head, foot , body). متناظر با هر sub-layout یک فایل php وجود دارد:

  1. default_head.php
  2. default_foot.php
  3. default_body.php

 فایل admin/views/helloworlds/tmpl/default_head.php

کد های فایل default_head.php به صورت زیر است:

<?php
// No direct access to this file
defined(‘_JEXEC’) or die(‘Restricted Access’);
?>
<tr>
<th width=”5″>
<?php echo JText::_(‘COM_HELLOWORLD_HELLOWORLD_HEADING_ID’); ?>
</th>
<th width=”20″>
<input type=”checkbox” name=”toggle” value=”” onclick=”checkAll(<?php echo count($this->items); ?>);” />
</th>
<th>
<?php echo JText::_(‘COM_HELLOWORLD_HELLOWORLD_HEADING_GREETING’); ?>
</th>
</tr>

 

COM_HELLOWORLD_HELLOWORLD_HEADING_ID و COM_HELLOWORLD_HELLOWORLD_HEADING_GREETING متغیرهایی هستند که بعداً با توجه به زبان فعال سیستم، با یک متن جایگزین می شوند.

متد _::JText، رشته ورودی را با توجه به زبان جاری، ترجمه می کند.

checkAll یک تابع JavaScript است که در هسته جوملا تعریف شده است و با استفاده از آن می توان، تمام چک باکس هایی که در این ستون قرار دارند را در حالت انتخاب قرار داد و یا از حالت انتخاب خارج کرد.


فایل admin/views/helloworlds/tmpl/default_body.php

کد های فایل default_body.php به صورت زیر است:

<?php
// No direct access to this file
defined(‘_JEXEC’) or die(‘Restricted Access’);
?>
<?php foreach($this->items as $i => $item): ?>
<tr class=”row<?php echo $i % 2; ?>”>
<td>
<?php echo $item->id; ?>
</td>
<td>
<?php echo JHtml::_(‘grid.id’, $i, $item->id); ?>
</td>
<td>
<?php echo $item->greeting; ?>
</td>
</tr>
<?php endforeach; ?>

تابع _::JHtml یک helper است و با استفاده از آن می توان انواع کنترل های HTML را نمایش داد. در این مورد برای هر ردیف، یک چک باکس نمایش داده خواهد شد.


فایل admin/views/helloworlds/tmpl/default_foot.php

کد های فایل default_foot.php به صورت زیر است:

<?php
// No direct access to this file
defined(‘_JEXEC’) or die(‘Restricted Access’);
?>
<tr>
<td colspan=”3″><?php echo $this->pagination->getListFooter(); ?></td>
</tr>

JPagination، یک کلاس در جوملا است که شما را قادر می سازد شیء pagination (صفحه بندی) را مدیریت و نمایش دهید.


فایل admin/models/helloworlds.php (ایجاد model)

viewی HelloWorlds از مدل متناظرش درخواست داده می کند، با استفاده از کلاس JModelList می توان، لیست داده را مدیریت نمود.

کلاس JModelList و تمام کلاس هایی که از آن ارث بری می کنند، تنها به یک متد و دو وضعیت (state) زیر نیاز دارند:

  • متد getListQuery که سازنده ی یک پرس و جوی SQL است.

و دو وضعیت (state):

  • list.start: برای تعیین کردن offset
  • list.limit: برای تعیین کردن طول لیست

توجه: متدهای getItems و getPagination در کلاس JModelList تعریف شده اند و نیازی به تعریف مجدد آنها در کلاس HelloWorldModelHelloWorlds نیست.

<?php
// No direct access to this file
defined(‘_JEXEC’) or die(‘Restricted access’);
// import the Joomla modellist library
jimport(‘joomla.application.component.modellist’);
/**
* HelloWorldList Model
*/
class HelloWorldModelHelloWorlds extends JModelList
{
/**
* Method to build an SQL query to load the list data.
*
* @return string An SQL query
*/
protected function getListQuery()
{
// Create a new query object.
$db = JFactory::getDBO();
$query = $db->getQuery(true);
// Select some fields
$query->select(‘id,greeting’);
// From the hello table
$query->from(‘#__helloworld’);
return $query;
}
}

بصورت پیش فرض، زمانی که توسط متد getState یک وضعیت یا state خوانده می شود، بصورت اتوماتیک متد populateState صدا زده می شود.


فایل helloworld.xml

اگر این آموزش را از ابتدا دنبال فرموده باشید، فقط کافی است تغییرات زیر را در فایل xml، اعمال نمایید:

<?xml version=”1.0″ encoding=”utf-8″?>
<!– $Id: helloworld.xml 14 2009-11-02 18:35:20Z chdemko $ –>
<extension type=”component” version=”1.6.0″ method=”upgrade”>
<name>Hello World!</name>
<!– The following elements are optional and free of formatting conttraints –>
<creationDate>November 2016</creationDate>
<author>webtekar</author>
<authorEmail>info@webtekar.ir</authorEmail>
<authorUrl>info@webtekar.ir</authorUrl>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<!– The version string is recorded in the components table –>
<version>0.0.7</version>
<!– The description is optional and defaults to the name –>
<description>آموزش کامپوننت نویسی در جوملا- info@webtekar.ir</description>
<install> <!– Runs on install –>
<sql>
<file driver=”mysql” charset=”utf8″>sql/install.mysql.utf8.sql</file>
</sql>
</install>
<uninstall> <!– Runs on uninstall –>
<sql>
<file driver=”mysql” charset=”utf8″>sql/uninstall.mysql.utf8.sql</file>
</sql>
</uninstall>
<update> <!– Runs on update; New in 1.6 –>
<schemas>
<schemapath type=”mysql”>sql/updates/mysql</schemapath>
</schemas>
</update>
<!– Site Main File Copy Section –>
<!– Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /site/ in the package –>
<files folder=”site”>
<filename>index.html</filename>
<filename>helloworld.php</filename>
<filename>controller.php</filename>
<folder>views</folder>
<folder>models</folder>
</files>
<administration>
<!– Administration Menu Section –>
<menu>Hello World!</menu>
<!– Administration Main File Copy Section –>
<!– Note the folder attribute: This attribute describes the folder
to copy FROM in the package to install therefore files copied
in this section are copied from /admin/ in the package –>
<files folder=”admin”>
<!– Admin Main File Copy Section –>
<filename>index.html</filename>
<filename>helloworld.php</filename>
<filename>controller.php</filename>
<!– SQL files section –>
<folder>sql</folder>
<!– tables files section –>
<folder>tables</folder>
<!– models files section –>
<folder>models</folder>
<!– views files section –>
<folder>views</folder>
</files>
</administration>
</extension>


اگه خوشت اومد به اشتراک بزار


اگه به اشتراک نزاشتی حداقل لایک کن:(

نظر شما در رابطه با این آموزش چیست


بالا

تمامی حقوق مادی و معنوی این وبسایت محفوظ میباشد و متعلق است به Webtekar.ir.
Google