آموزش: ایجاد پلاگین   

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

مقدمه

در این مقاله، آموزش پلاگین نویسی جوملا تصمیم داریم یک پلاگین helloworld از نوع content plugin برای جوملا 2.5 ایجاد کنیم. Content Pluginها قادر به ایجاد تغییرات در محتوای مطالب هستند مطلبی که از طریق مدیریت مطالب در جوملا ایجاد می‌شوند. اکثر پلاگین‌ها از نوع content هستند. پلاگین‌ها بر اساس یک رویداد خاصی (event) اجرا می‌شوند.

انواع event‌ها در پلاگین محتوا

انواع event در پلاگین محتوا یا content plugin‌ها به شرح ذیل می‌باشند.


<source lang="php"> 1) onContentPrepare($context, &$item, &$params, $offset =0)

2) onContentAfterTitle($context, &$item, &$params, $offset=0)

3) onContentBeforeDisplay($context, &$item, &$params, $offset=0)

4) onContentAfterDisplay($context, &$item, &$params, $offset=0) </source>


item$ یک رفرنس (اشاره گر) به مطلب که در view است.

params$ یک رفرنس به آرایه مربوط به پارامترها است.

offset$ یک متغیر integer است که تعیین کننده صفحه‌ای از مطالب است که باید نمایش داده شود.

context$ یک متن است برای جایی که این رویداد (event) شروع به کار می‌کند.

(example,'com_content.article')

پلاگین‌های محتوا (content plugin) از com_content اجرا می‌شوند و نحوه اجرا شدن و فراخوانی آنها همانند دستور ذیل است:


<source lang="php"> $results = $dispatcher->trigger('onContentPrepare', array ('com_content.article', &$item, &$this->params, $offset)); </source>


شما می‌توانید کد بالا را جهت اجرای پلاگین محتوا در Root\components\com_content\views\article در فایل view.html.php و در کلاس ContentViewArticle مشاهده کنید.

ایجاد یک پلاگین

کلاس پلاگین باید همانند:

plg<PluginType><PluginName>

نام گذاری شود.

بنابراین در این مقاله ما نام پلاگین مان را plgContentHelloworldPlugin قرار می‌دهیم.

کلاس پلاگین شامل یک کانستراکتور (constructor) است که کلاس پدر کانستراکتور را فراخوانی می‌کند، کلاس پدر کانستراکتور خود نوعی از کلاس JPlugin است و همچنین کلاس پلاگین شامل یک تابع event handler است که در هنگام رویدادن event مورد نظر اجرا خواهد شد.

در این مثال ما از رویداد ()onContentPrepare استفاده می‌کنیم. که هنگام آماده شدن مطلب برای نمایش این رویداد فراخوانی می‌شود.


<source lang="php"> class plg<PluginType><PluginName> extends JPlugin { public function __construct(&$subject, $params ) { parent::__construct( $subject, $params ); } public function onContentPrepare($context, &$article, &$params, $offset = 0) { //Plugin code goes here return true; } }

</source>


برای دریافت عنوان مطالب ما از پارامتر article$ در onContentPrepare به صورت زیر استفاده می‌کنیم:


<source lang="php"> $title = &$article->title; </source>


برای دریافت متن مطالب ما از پارامتر article$ در onContentPrepare به صورت زیر استفاده می‌کنیم:


<source lang="php"> $text = &$article->text; </source>


نکته : توجه داشته باشید که در دستورات بالا از عملگر & استفاده شده است این عملگر برای گرفتن یک رفرنس یا اشاره گر است. بنابراین ما می‌توانیم article->$text; به text$ تغییر دهیم. ما در این پلاگین تصمیم داریم یک متن قبل از عنوان مطلب ‘Helloworld Before Title’ و یک متن بعد ‘Helloworld After Title’ از عنوان مطلب نمایش دهیم. با استفاده از عملگر الحاق رشته این کار را همانند دستورات زیر می‌توانیم انجام دهیم.


<source lang="php"> $title = 'Helloworld Before Title'.$title.' Helloworld After Title'; </source>


همین کار را می‌توانیم برای محتوای مطالب همانند شکل زیر انجام دهیم.


<source lang="php"> $text = 'Helloworld Before Text'.$text.' Helloworld After Text'; </source>

فایل‌های پلاگین

  1. helloworldPlugin.php این فایل, فایل اصلی پلاگین است. زمانیکه که رخداد مورد نظر اتفاق افتاد کدهای موجود در این فایل باید اجرا شوند.
  2. helloworldPlugin.xml این فایل حاوی اطلاعاتی در مورد پلاگین است و همچنین شامل اطلاعات مربوط به نصب این پلاگین نیز می‌باشد.

ایجاد فایل helloworldPlugin.php

تمام کد فایل helloworldPlugin.php شامل


<source lang="php"> <?php // no direct access defined('_JEXEC') or die; jimport( 'joomla.plugin.plugin' ); class plgContentHelloworldPlugin extends JPlugin { public function __construct(&$subject, $params ) { parent::__construct( $subject, $params ); } public function onContentPrepare($context, &$article, &$params, $offset = 0) { // Article Title $title = &$article->title; // Change Article Title $title = 'Helloworld Before Title'.$title.' Helloworld After Title'; // Article Text $text = &$article->text; // Change Article Text $text = 'Helloworld Before Text'.$text.' Helloworld After Text'; return true; } } ?> </source>


می‌باشد.

ایجاد فایل helloworldPlugin.xml

تمام کد فایل helloworldPlugin.xml شامل


<source lang="xml"> <?xml version="1.0" encoding="utf-8"?> <install version="2.5" type="plugin" group="content" method="upgrade"> <name>helloworldPlugin Content Plugin</name> <author>Joomla Farsi</author> <creationDate>92/04/20</creationDate> <copyright>Copyright (C) 2013</copyright> <authorEmail>[email protected]</authorEmail> <version>2.5.0</version> <description>helloworldPlugin Content Test description</description> <files> <filename plugin="helloworldPlugin">helloworldPlugin.php</filename> <filename>index.html</filename> </files> <config> </config> </install>

</source>


می‌باشد.

ایجاد فایل index.html

تمام کد فایل index.html شامل


<source lang="php"> <html><body bgcolor="#FFFFFF"></body></html> </source>


است. که یک صفحه خالی را نمایش می‌دهد.

ایجاد بسته نصبی

همینک باید یک فایل zip از فولدر helloworldPlugin بسازید که شامل فایل‌های زیر باشد.

  1. helloworldPlugin.php
  2. index.html
  3. helloworldPlugin.xml

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

بعد از نصب پلاگین فوق پلاگین helloworldPlugin Content Plugin در قسمت مدیریت پلاگین‌ها باید قابل مشاهده باشد.


Helloworldcontentplugin.jpg


تنها کاری که باید بکنید اینست که پلاگین فوق را فعال (enabled) کنید و نتیجه را در یک مطلب جوملا مشاهده کنید. همانطور که همانند شکل زیر مشاهده می‌کنید متن‌های article title و article text به همراه کلمه helloworld به عنوان و متن مطالب الحاق شده‌اند.


Helloworldcontentplugin res.jpg


به این شکل شما قادر خواهید بود که محتوای مطالب را با استفاده از content plugin ها تغییر دهید.


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

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