با سلام خدمت شما دوستان عزیز رجیرانی ، وب مسترانی های عزیز و محترم ، حال شما خوبه؟ امیدوارم که شاد و سلامت باشید و با اموزشهای امروز ما همراه  باشید میخوام درمورد اضافه کردن ویو به کامپوننت کمی اموزش داشته باشیم .با ما لطفا همراه باشید.
در این مقاله آموزشی ایجاد کامپوننت در جوملا شما خواهید آموخت که چگونه viewها را به بخش front-end اضافه کنید. کد تمام کامپوننت‌ها به سه قسمت کلی تقسیم می‌شود:

Model : مدل‌ها داده‌ها را مدیریت می‌کنند و با پایگاه داده‌ها سرو کار دارند.

Controller : آنها وظیفه اجرا کردن task‌هارا به عهده دارند. متدهای set و get وحالت‌های مختلف model و مشخص کردن خروجی قابل نمایش برای viewها را به عهده دارند.

View : viewها دقیقا وظیفه فراهم کردن خروجی قابل نمایش مطابق با نوع و Layout ای که controller برای آن فراهم کرده است را برعهده دارند.
ایجاد Controller

در جوملا یک کلاس برای مدیریت کنترلرها به نام JController وجود دارد. ما از این کلاس در کنترلر تمام کامپوننت‌های استانداردی که برای جوملا می‌نویسیم باید استفاده کنیم. جهت ایجاد کنترلر باید در فایل site\hello.php کدهای زیر را اضافه کنیم.

<?php
// عدم دسترسی مستقیم به این فایل
defined(‘_JEXEC’) or die(‘Restricted Access not allowed’);
// ایمپورت کردن کنترلر از کتابخانه جوملا
jimport(‘joomla.application.component.controller’);
// گرفتن یک اینستنس یا نمونه از کنترلر
$controller = JController::getInstance(‘Hello’);
// اجرا کردن درخواست تسک‌ها
$controller->execute(JRequest::getCmd(‘task’));
// اگر کنترلر ست شد باید ریدایرکت شود
$controller->redirect();
?>

()getInstance یک متد استاتیک از کلاس JController است که یک کنترلر ایجاد می‌کند. در واقع آن متد شی کنترلر را از کلاس HelloController معرفی می‌کنید ( Instantiate ) می‌کند. بنابراین جوملا به دنبال تعریفی از آن کلاس در فایل controller.php خواهد گشت. پس فایل controller.php را باید ایجاد کنیم و در داخل آن HelloController را معرفی کنیم. بنابراین فایل مذکور را در site\controller.php ایجاد و کدهای زیر را در آن قرار می‌دهیم.

<?php
// عدم دسترسی مستقیم به این فایل
defined(‘_JEXEC’) or die(‘Restricted Access not allowed’);
// ایمپورت کردن کنترلر از کتابخانه جوملا
jimport(‘joomla.application.component.controller’);
class HelloController extends JController
{
}
?>

زمانیکه هیچ task ای تعریف نشده باشد جوملا به طور خودکار default task را اجرا خواهد کرد. (در مورد task‌ها که یکی از ارکان مهم ایجاد کامپوننت‌ها هستند در آینده بیشتر صحبت خواهیم کرد.) در این مثال ما می‌خواهیم که Hello را از view نمایش دهیم.
ایجاد View

هنگامیکه JController بخواهد یک view را نمایش دهد ابتدا به دنبال فولدر

components\com_[component_name]\views\[name_of_view]\

خواهد گشت. نام فولدر default view همان نام کامپوننت است بنابراین ما بادر این مثال باید

components\com_hello\views\hello\

را ایجاد کنیم. نام فایل موجود در view باید

view.[view_mode].php

باید باشد. در مثال ما view mode حالت html دارد پس نام فایل view ما view.html.php خواهد بود. همینک باید کدهای زیر را در فایل view کپی کنید:

site\views\hello\view.html.php

کد

<?php
//عدم دسترسی مستقیم به فایل‌های جوملا
defined(‘_JEXEC’) or die(‘Restricted Access’);
//ایمپورت کردن کتابخانه‌های کنترلر جوملا
jimport(‘joomla.application.component.view’);
class HelloViewHello extends JView
{
//Overrite JView display method
function display($tpl = null)
{
//نسبت دادن دیتا به وی یو
$this->msg = ‘Hello World in View’;
//نمایش وی یو
parent::display($tpl);
}
}
?>

نکته : نام کلاس view باید از قواعد [Name_of_view][View][Name_of_view] پیروی کنید در مثال ما HelloViewHello است.

متد نمایش کلاس JView از کلاس نمایش task‌های JController صدا زده خواهد شد. در اینجا داده‌های فایل tmpl\default.php نمایش داده خواهد. حال باید کدهای زیر را در فایل site\views\hello\tmpl\default.php بنویسید.

<?php
//عدم دسترسی مستقیم به فایل‌های جوملا
defined(‘_JEXEC’) or die(‘Restricted Access’);
?>
<h1>
<?php
echo $this->msg;
?>
</h1>

این فایل ( default.php ) توسط کلاس JView اینکلود شده است. بنابراین متغیر $this به کلاس HellowView ارجاع ( refer ) خواهد کرد.
ایجاد یک بسته نصبی از افزونه

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

helloworld.xml (فایل نصب کننده افزونه)

site\hello.php

site\index.html

site\controller.php

site\views\hello\view.html.php

site\views\hello\tmpl\default.php

admin\hello.php

admin\index.html

فایل helloworld.xml که باید شامل کدهای زیر باشد.

<?xml version=”1.0″ encoding=”utf-8″?>
<install type=”component” version=”2.5″>
<name>hello</name>
<!– The following elements are optional and free of formatting conttraints –>
<creationDate>2013-01-09</creationDate>
<author>Shahab Matapour</author>
<authorEmail>info@joomlafarsi.com</authorEmail>
<authorUrl>http://www.joomlafarsi.com</authorUrl>
<copyright>Copyright Info</copyright>
<license>License Info</license>
<version>1.02</version>
<description>Hello World Test Component With view…</description>

<files folder=”site”>
<filename>index.html</filename>
<filename>hello.php</filename>
<filename>controller.php</filename>
<folder>views</folder>
</files>
<administration>
<files folder=”admin”>
<!– Admin Main File Copy Section –>
<filename>index.html</filename>
<filename>hello.php</filename>
<!– SQL files section –>
</files>
</administration>
</install>

در داخل پوشه site در کامپوننت باید یک فایل به نام hello.php داشته باشیم که فایل مذکور باید شامل کدهای زیر باشد:

<?php
//No direct access to the file
defined(‘_JEXEC’) or die(‘Restricted Access not allowed’);
//import joomla controller library
jimport(‘joomla.application.component.controller’);
//get an instance of the controller prefixed by HelloWorld
$controller = JController::getInstance(‘Hello’);
//perform the request task
$controller->execute(JRequest::getCmd(‘task’));
//Redirect if set by controller
$controller->redirect();
?>

در داخل پوشه admin در کامپوننت باید یک فایل به نام hello.php داشته باشیم که فایل مذکور باید شامل کدهای زیر باشد:

Hello world Administrator

سپس به یک فایل index.html با کدهای زیر نیاز داریم که در تمام فولدر‌های موجود در کامپوننت باید قرار گیرد.

<html><body bgcolor=”#FFFFFF”></body></html>

در داخل پوشه site در کامپوننت باید یک فایل به نام controller.php داشته باشیم که فایل مذکور باید شامل کدهای زیر باشد:

<?php
//No direct access to this file should be called by Joomla
defined(‘_JEXEC’) or die(‘Restricted Access’);
//import joomla controller library
jimport(‘joomla.application.component.controller’);
class HelloController extends JController
{
}
?>

در داخل پوشه site\views\hello در کامپوننت باید یک فایل به نام view.html.php داشته باشیم که فایل مذکور باید شامل کدهای زیر باشد:

<?php
//No direct access to this file should be called by Joomla
defined(‘_JEXEC’) or die(‘Restricted Access’);
//import joomla controller library
jimport(‘joomla.application.component.view’);
class HelloViewHello extends JView
{
//Overrite JView display method
function display($tpl = null)
{
//Assign data to the view
$this->msg = ‘Hello World in View’;
//Display the View
parent::display($tpl);
}
}
?>

در داخل پوشه site\views\hello\tmpl در کامپوننت باید یک فایل به نام default.php داشته باشیم که فایل مذکور باید شامل کدهای زیر باشد:

<?php
//No direct access to this file should be called by Joomla
defined(‘_JEXEC’) or die(‘Restricted Access’);
?>
<h1>
<?php
echo $this->msg;
?>
</h1>

ایجاد فایل helloworld.zip با فایل‌ها و فولدرهایی که در قسمت‌های قبل ایجاد کردیم.

نصب فایل zip شده توسط قسمت مدیریت افزونه‌های جوملا ۲٫۵

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

تاکنون باید یک زیر منو به نام comhelloworld در منوی کامپوننت‌‌ها ایجاد شده باشد.

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

همچنین شما می‌توانید خروجی کارکرد این کامپوننت را در قسمت مدیریت با وارد کردن http://localhost/sitename/administrator/index.php?option=com_hello در مرورگر یا با کلیک برروی منوی comehelloworld در منوی کامپوننت‌‌ ها چک کنید. در صورت انجام این کار شما باید نتیجه‌ای همانند تصویر زیر مشاهده کنید.