اضافه کردن view به کامپوننت   

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

تعاریف اولیه

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

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

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

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

ایجاد Controller

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


<source lang="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(); ?> </source>


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


<source lang="php" >

<?php

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


زمانیکه هیچ 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

کد


<source lang="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);
   }
   }
   ?>

</source>


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

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


<source lang="php" > <?php //عدم دسترسی مستقیم به فایل‌های جوملا defined('_JEXEC') or die('Restricted Access'); ?>

<?php echo $this->msg; ?>

</source>


این فایل ( 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 که باید شامل کدهای زیر باشد.


<source lang="xml" > <?xml version="1.0" encoding="utf-8"?> <install type="component" version="2.5"> <name>hello</name> <creationDate>2013-01-09</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.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"> <filename>index.html</filename> <filename>hello.php</filename> </files> </administration> </install> </source>


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


<source lang="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(); ?> </source>


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

Hello world Administrator

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


<source lang="php" > <html><body bgcolor="#FFFFFF"></body></html> </source> در داخل پوشه site در کامپوننت باید یک فایل به نام controller.php داشته باشیم که فایل مذکور باید شامل کدهای زیر باشد: <source lang="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 { } ?> </source> در داخل پوشه site\views\hello در کامپوننت باید یک فایل به نام view.html.php داشته باشیم که فایل مذکور باید شامل کدهای زیر باشد: <source lang="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); } } ?> </source>


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


<source lang="php" > <?php //No direct access to this file should be called by Joomla defined('_JEXEC') or die('Restricted Access'); ?>

<?php echo $this->msg; ?>

</source>


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

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

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

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

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


View component user view.png


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


Lastresult zip admin.jpg


جهت دانلود فایل‌های مربوط به این آموزش می‌توانید به آدرس http://upload.mambolearn.com/create_component/com_helloworld0.zip مراجعه نمایید.


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

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