آموزش: ایجاد پلاگین: تفاوت بین نسخه‌ها   

از دانشنامه جوملا فارسی - مامبو فارسی
پرش به: ناوبری، جستجو
(صفحه‌ای جدید حاوی «=مقدمه= در این مقاله آموزش پلاگین نویسی [http://www.joomlafarsi.com جوملا] تصمیم داریم ...» ایجاد کرد)
 
 
سطر ۱: سطر ۱:
 
=مقدمه=
 
=مقدمه=
در این مقاله آموزش [[پلاگین]] نویسی [http://www.joomlafarsi.com جوملا]  تصمیم داریم یک [[پلاگین]] helloworld از نوع content plugin برای [[جوملا]] 2.5 ایجاد کنیم. Content Plugin ها قادر به ایجاد تغییرات در محتوای مطالب هستند مطلبی که از طریق مدیریت مطالب در [[جوملا]] ایجاد میشوند. اکثر [[پلاگین]] ها از نوع content هستند. پلاگین ها براساس بک رویداد خاصی (event) اجرا میشوند.  
+
 
=انواع event ها در پلاگین محتوا=
+
در این مقاله، آموزش [[پلاگین]] نویسی [http://www.joomlafarsi.com جوملا]  تصمیم داریم یک [[پلاگین]] helloworld از نوع content plugin برای [[جوملا]] 2.5 ایجاد کنیم. Content Pluginها قادر به ایجاد تغییرات در محتوای مطالب هستند مطلبی که از طریق مدیریت مطالب در [[جوملا]] ایجاد می‌شوند. اکثر [[پلاگین]]‌ها از نوع content هستند. [[پلاگین]]‌ها بر اساس یک رویداد خاصی (event) اجرا می‌شوند.  
انواع event در [[پلاگین]] محتوا یا content plugin ها به شرح ذیل میباشند.
+
 
 +
=انواع event‌ها در پلاگین محتوا=
 +
 
 +
انواع event در [[پلاگین]] محتوا یا content plugin‌ها به شرح ذیل می‌باشند.
 +
 
 +
 
 
<source lang="php">
 
<source lang="php">
 
1) onContentPrepare($context, &$item, &$params, $offset =0)
 
1) onContentPrepare($context, &$item, &$params, $offset =0)
سطر ۱۲: سطر ۱۷:
 
4) onContentAfterDisplay($context, &$item, &$params, $offset=0)
 
4) onContentAfterDisplay($context, &$item, &$params, $offset=0)
 
</source>
 
</source>
item$ یک رفرنس (اشاره گر) به مطلب که در view است.   <br/>
+
 
params$ یک رفرنس به آرایه مربوط به پارامترها است.   <br/>
+
 
offset$ یک متغیر '''integer''' است که تعیین کننده صفحه ای از مطالب است که باید نمایش داده شود.   <br/>
+
item$ یک رفرنس (اشاره گر) به مطلب که در view است.
context$ یک متن است برای جایی که این رویداد (event) شروع به کار میکند
+
 
 +
params$ یک رفرنس به آرایه مربوط به پارامترها است.
 +
 
 +
offset$ یک متغیر '''integer''' است که تعیین کننده صفحه‌ای از مطالب است که باید نمایش داده شود.
 +
 
 +
context$ یک متن است برای جایی که این رویداد (event) شروع به کار می‌کند.
 +
 
 
<div dir="ltr">
 
<div dir="ltr">
 
(example,'com_content.article')
 
(example,'com_content.article')
 
</div>
 
</div>
[[پلاگین]] های محتوا (content plugin) از com_content اجرا میشوند و نحوه اجرا شدن و فراخوانی آنها همانند دستور ذیل است
+
 
 +
[[پلاگین]]‌های محتوا (content plugin) از com_content اجرا می‌شوند و نحوه اجرا شدن و فراخوانی آنها همانند دستور ذیل است:
 +
 
 +
 
 
<source lang="php">
 
<source lang="php">
 
$results = $dispatcher->trigger('onContentPrepare', array ('com_content.article', &$item, &$this->params, $offset));
 
$results = $dispatcher->trigger('onContentPrepare', array ('com_content.article', &$item, &$this->params, $offset));
 
</source>
 
</source>
شما میتوانید کد بالا را جهت اجرای [[پلاگین]] محتوا در Root\components\com_content\views\article در فایل view.html.php و در کلاس ContentViewArticle مشاهده کنید.
+
 
 +
 
 +
شما می‌توانید کد بالا را جهت اجرای [[پلاگین]] محتوا در Root\components\com_content\views\article در فایل view.html.php و در کلاس ContentViewArticle مشاهده کنید.
 +
 
 
=ایجاد یک پلاگین=
 
=ایجاد یک پلاگین=
کلاس [[پلاگین]] باید همانند
+
 
 +
کلاس [[پلاگین]] باید همانند:
 +
 
 
<div dir="ltr">
 
<div dir="ltr">
 
plg<PluginType><PluginName>
 
plg<PluginType><PluginName>
 
</div>
 
</div>
نام گذاری شود.
+
 
بنابراین در این مقاله ما نام [[پلاگین]] مان را '''plgContentHelloworldPlugin''' قرار میدهیم.
+
نام گذاری شود.
<br/>
+
 
کلاس [[پلاگین]] شامل یک کانستراکتور (constructor) است که کلاس پدر کانستراکتور را فراخوانی میکند, کلاس پدر کانستراکتور خود نوعی از کلاس '''JPlugin''' است و همچنین کلاس [[پلاگین]] شامل یک تابع event handler است که در هنگام رویدادن event مورد نظر اجرا خواهد شد.
+
بنابراین در این مقاله ما نام [[پلاگین]] مان را '''plgContentHelloworldPlugin''' قرار می‌دهیم.
<br/>
+
 
در این مثال ما از رویداد ()onContentPrepare استفاده میکنیم. که هنگام آماده شدن مطلب برای نمایش این رویداد فراخوانی میشود.
+
کلاس [[پلاگین]] شامل یک کانستراکتور (constructor) است که کلاس پدر کانستراکتور را فراخوانی می‌کند، کلاس پدر کانستراکتور خود نوعی از کلاس '''JPlugin''' است و همچنین کلاس [[پلاگین]] شامل یک تابع event handler است که در هنگام رویدادن event مورد نظر اجرا خواهد شد.
 +
 
 +
در این مثال ما از رویداد ()onContentPrepare استفاده می‌کنیم. که هنگام آماده شدن مطلب برای نمایش این رویداد فراخوانی می‌شود.
 +
 
 +
 
 
<source lang="php">
 
<source lang="php">
 
class plg<PluginType><PluginName> extends JPlugin
 
class plg<PluginType><PluginName> extends JPlugin
سطر ۵۰: سطر ۷۳:
  
 
</source>
 
</source>
برای دریافت عنوان مطالب ما از پارامتر article$ در onContentPrepare به صورت زیر استفاده میکنیم.
+
 
 +
 
 +
برای دریافت عنوان مطالب ما از پارامتر article$ در onContentPrepare به صورت زیر استفاده می‌کنیم:
 +
 
 +
 
 
<source lang="php">
 
<source lang="php">
 
$title = &$article->title;
 
$title = &$article->title;
 
</source>
 
</source>
برای دریافت متن مطالب ما از پارامتر article$ در onContentPrepare به صورت زیر استفاده میکنیم.
+
 
 +
 
 +
برای دریافت متن مطالب ما از پارامتر article$ در onContentPrepare به صورت زیر استفاده می‌کنیم:
 +
 
 +
 
 
<source lang="php">
 
<source lang="php">
 
$text = &$article->text;  
 
$text = &$article->text;  
 
</source>
 
</source>
'''نکته :''' توجه داشته باشید که در دستورات بالا از عملگر & استفاده شده است این عملگر برای گرفتن یک رفرنس یا اشاره گر است. بنابراین ما می توانیم article->$text; به text$ تغییر دهیم. ما در این [[پلاگین]] تصمیم داریم یک متن قبل از عنوان مطلب ‘Helloworld Before Title’ و یک متن بعد ‘Helloworld After Title’ از عنوان مطلب نمایش دهیم. با استفاده از عملگر الحاق رشته این کار را همانند دستورات زیر میتوانیم انجام دهیم.
+
 
 +
 
 +
'''نکته :''' توجه داشته باشید که در دستورات بالا از عملگر & استفاده شده است این عملگر برای گرفتن یک رفرنس یا اشاره گر است. بنابراین ما می‌توانیم article->$text; به text$ تغییر دهیم. ما در این [[پلاگین]] تصمیم داریم یک متن قبل از عنوان مطلب ‘Helloworld Before Title’ و یک متن بعد ‘Helloworld After Title’ از عنوان مطلب نمایش دهیم. با استفاده از عملگر الحاق رشته این کار را همانند دستورات زیر می‌توانیم انجام دهیم.
 +
 
 +
 
 
<source lang="php">
 
<source lang="php">
 
$title = 'Helloworld Before Title'.$title.' Helloworld After Title';  
 
$title = 'Helloworld Before Title'.$title.' Helloworld After Title';  
 
</source>
 
</source>
همین کار را میتوانیم برای محتوای مطالب همانند شکل زیر انجام دهیم
+
 
 +
 
 +
همین کار را می‌توانیم برای محتوای مطالب همانند شکل زیر انجام دهیم.
 +
 
 +
 
 
<source lang="php">
 
<source lang="php">
 
$text = 'Helloworld Before Text'.$text.' Helloworld After Text';   
 
$text = 'Helloworld Before Text'.$text.' Helloworld After Text';   
 
</source>
 
</source>
=فایلهای پلاگین=
+
 
1. helloworldPlugin.php این فایل, فایل اصلی [[پلاگین]] است. زمانیکه که رخداد مورد نظر اتفاق افتاد کدهای موجود در این فایل باید اجرا شوند.  
+
=فایل‌های پلاگین=
<br/>
+
 
2. helloworldPlugin.xml این فایل حاوی اطلاعاتی در مورد [[پلاگین]] است و همچنین شامل اطلاعات مربوط به نصب این [[پلاگین]] نیز میباشد.
+
#helloworldPlugin.php این فایل, فایل اصلی [[پلاگین]] است. زمانیکه که رخداد مورد نظر اتفاق افتاد کدهای موجود در این فایل باید اجرا شوند.  
<br/>
+
#helloworldPlugin.xml این فایل حاوی اطلاعاتی در مورد [[پلاگین]] است و همچنین شامل اطلاعات مربوط به نصب این [[پلاگین]] نیز می‌باشد.
 +
 
 
==ایجاد فایل helloworldPlugin.php==
 
==ایجاد فایل helloworldPlugin.php==
 +
 
تمام کد فایل helloworldPlugin.php شامل
 
تمام کد فایل helloworldPlugin.php شامل
 +
 +
 
<source lang="php">
 
<source lang="php">
 
<?php
 
<?php
سطر ۹۹: سطر ۱۴۲:
 
?>  
 
?>  
 
</source>  
 
</source>  
میباشد.
+
 
 +
 
 +
می‌باشد.
 +
 
 
==ایجاد فایل helloworldPlugin.xml ==
 
==ایجاد فایل helloworldPlugin.xml ==
 +
 
تمام کد فایل helloworldPlugin.xml شامل  
 
تمام کد فایل helloworldPlugin.xml شامل  
 +
 +
 
<source lang="xml">
 
<source lang="xml">
 
<?xml version="1.0" encoding="utf-8"?>
 
<?xml version="1.0" encoding="utf-8"?>
سطر ۱۲۱: سطر ۱۷۰:
  
 
</source>
 
</source>
میباشد.
+
 
 +
 
 +
می‌باشد.
 +
 
 
==ایجاد فایل index.html ==
 
==ایجاد فایل index.html ==
 +
 
تمام کد فایل index.html شامل  
 
تمام کد فایل index.html شامل  
 +
 +
 
<source lang="php">
 
<source lang="php">
 
<html><body bgcolor="#FFFFFF"></body></html>
 
<html><body bgcolor="#FFFFFF"></body></html>
 
</source>
 
</source>
است. که یک صفحه خالی را نمایش میدهد.
+
 
 +
 
 +
است. که یک صفحه خالی را نمایش می‌دهد.
 +
 
 
=ایجاد بسته نصبی=
 
=ایجاد بسته نصبی=
همینک باید یک فایل '''zip''' از فولدر '''helloworldPlugin''' بسازید که شامل فایلهای زیر باشد.
 
<div dir="ltr">
 
1. helloworldPlugin.php
 
<br/>
 
  
2. index.html
+
همینک باید یک فایل '''zip''' از فولدر '''helloworldPlugin''' بسازید که شامل فایل‌های زیر باشد.
<br/>
+
  
3. helloworldPlugin.xml
+
<div dir="ltr">
 +
#helloworldPlugin.php
 +
#index.html
 +
#helloworldPlugin.xml
 
</div>
 
</div>
فایل zip ساخته شده در این مرحله میتواند از طریق مدیریت افزونه ها در [[جوملا]] نصب گردد.
+
 
<br/>
+
فایل zip ساخته شده در این مرحله می‌تواند از طریق مدیریت افزونه ها در [[جوملا]] نصب گردد.
بعد از نصب [[پلاگین]] فوق [[پلاگین]] helloworldPlugin Content Plugin در قسمت مدیریت [[پلاگین]] ها باید قابل مشاهده باشد.
+
 
 +
بعد از نصب [[پلاگین]] فوق [[پلاگین]] helloworldPlugin Content Plugin در قسمت مدیریت [[پلاگین]]‌ها باید قابل مشاهده باشد.
 +
 
 +
 
 
[[پرونده:Helloworldcontentplugin.jpg |center|frame ]]
 
[[پرونده:Helloworldcontentplugin.jpg |center|frame ]]
تنها کاری که باید بکنید اینست که [[پلاگین]] فوق را فعال (enabled) کنید و نتیجه را در یک مطلب [[جوملا]] مشاهده کنید. همانطور که همانند شکل زیر مشاهده میکنید متن های article title و article text به همراه کلمه helloworld به عنوان و متن مطالب الحاق شده اند.
+
 
 +
 
 +
تنها کاری که باید بکنید اینست که [[پلاگین]] فوق را فعال (enabled) کنید و نتیجه را در یک مطلب [[جوملا]] مشاهده کنید. همانطور که همانند شکل زیر مشاهده می‌کنید متن‌های article title و article text به همراه کلمه helloworld به عنوان و متن مطالب الحاق شده‌اند.
 +
 
 +
 
 
[[پرونده:Helloworldcontentplugin res.jpg |center|frame ]]
 
[[پرونده:Helloworldcontentplugin res.jpg |center|frame ]]
 +
 +
 
به این شکل شما قادر خواهید بود که محتوای مطالب را با استفاده از content plugin ها تغییر دهید.
 
به این شکل شما قادر خواهید بود که محتوای مطالب را با استفاده از content plugin ها تغییر دهید.
  
سطر ۱۵۷: سطر ۲۲۲:
 
{{کپی رایت}}
 
{{کپی رایت}}
  
[[رده:کامپوننت‌های جوملا 2.5]] [[رده: سوالات متداول جوملا 2.5]] [[رده: کدنویسی و گسترش جوملا 2.5]][[رده: مقالات جوملا 2.5]]
+
[[رده:پلاگین جوملا 2.5]] [[رده: سوالات متداول جوملا 2.5]] [[رده: کدنویسی و گسترش جوملا 2.5]][[رده: مقالات جوملا 2.5]]

نسخهٔ کنونی تا ‏۱۳ ژوئیهٔ ۲۰۱۳، ساعت ۰۸:۲۴

مقدمه

در این مقاله، آموزش پلاگین نویسی جوملا تصمیم داریم یک پلاگین 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 بلامانع است.