ابوالفضل طالبی

روش ساخت پلاگین جستجو (Search) برای جوملا - اختصاصی انجمن جوملای ایران

9 پست در این موضوع

همانطور که میدانید جوملا به شما امکان جستجو در قسمتهای مختلف سایت را برای شما فراهم میکند.یکی از امکاناتی که شاید به ان دقت نکرده باشید این است که وقتی به قسمت مدیریت پلاگین ها بروید پلاگینهایی را خواهید دید که نوع (type) انها Search است .برای مثلا پلاگین Weblinks-Search و Content Search که هر کدام از اینها امکان جستجو در قسمتهای مختلف جوملا فراهم میکند.

مثلا Weblinks Search کلیه رکوردها و اطلاعات وارد شده در کامپوننت وب لینک را جستجو میکند و مقدار و نتیجه را باز میگرداند.

این توضیحات را دادم تا به این نکته برسیم که اگر افزونه ای را نصب کردیم و قصد داشتیم که امکان جستجو در اطلاعات وارد شده در همان افزونه نیز فراهم شود چه کنیم!؟

فرض بگیرید کاموننت مدیریت تبلیغات نصب کرده اید و حجم زیادی آگهی هم در آن درج شده است اکنون کاربری در ماژول جستجوی پیشفرض جوملا عبارتی را برای جستجو وارد میکند و قصد دارد که از بین آگهی های درج شده مورد خاصی را پیدا کند... متاسفانه باید بگم که جستجوی کاربر هیچ نتیجه ای نخواهد داشت چرا که افزونه مدیریت آگهی جز امکانات پیشفرض جوملا نیست تا اطلاعات وارد شده در ان مورد جستجو قرار گیرد!

راهکار چیست؟

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

نحوه ساخت پلاگین جستجو:

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

یک فایل به نام adsmanagersearch.xml ایجاد میکنیم که حاوی کدهای زیر است:


<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE install PUBLIC
   "-//Joomla! 1.5//DTD plugin 1.0//EN" "http://www.joomla.org/xml/dtd/1.5/plugin-install.dtd">
<install version="1.5" type="plugin" group="search">
<name>adsmanagersearch</name>
<creationDate>2012</creationDate>
<author>Abolfazl Talebi</author>
<authorEmail>abimanager@gmail.com</authorEmail>
<authorUrl>JoomlaForum.ir</authorUrl>
<copyright>Copyright Joomlaforum.ir</copyright>
<license>GNU/GPL</license>
<version>1.5</version>
<description>با استفاده از این پلاگین امکان جستجو در آگهی های ثبت  شده در کامپوننت مدیریت آگهی ها فراهم میشود</description>
<files>
  <filename plugin="nameofplugin">adsmanagersearch.php</filename>
</files>
<languages>
  <language tag="en-GB">language/en-GB/en-GB.plg_search_adsmanagersearch.ini</language>
  <language tag="fa-IR">language/fa-IR/fa-IR.plg_search_adsmanagersearch.ini</language>
</languages>
<params>
  <param name="paramname" type="typeofparameter" default="defaultsetting" label="title" description="description"/>
</params>
</install>

بخش دوم آموزش ساخت پلاگین را که شامل توضیحاتی در خصوص خطوط بالاست در روزهای آینده قرار خواهم داد.

Share this post


Link to post
Share on other sites
آموزش ووکامرس قالب جوملا قالب وردپرس قالب رایگان وردپرس قالب رایگان جوملا هاست نامحدود هاست جوملا هاست لاراول هاست وردپرس هاست ارزان هاست ربات تلگرام خرید دامنه آموزش ساخت ربات تلگرام با php آموزش لاراول آموزش cPanel آموزش php آموزش فرم ساز RSform آموزش ساخت ربات جذب ممبر آموزش ساخت ربات دوستیابی آموزش ساخت ربات فروشگاهی برای ووکامرس آموزش طراحی سایت داینامیک با php آموزش بخش پشتیبانی با rsticket

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

این خط ورژن و نوع کدینگ ما را که utf-8 یعنی با پشتیبانی زبان فارسی است مشخص میکند

<?xml version="1.0" encoding="utf-8"?>

این خط توضیحی ابتدایی در خصوص نوع محتوای فایل شرح میدهد

<!DOCTYPE install PUBLIC
   "-//Joomla! 1.5//DTD plugin 1.0//EN" "http://www.joomla.org/xml/dtd/1.5/plugin-install.dtd">

این خط ورژن نسخه مربوط به جوملایی که قرار است لاگین بر روی آن نصب شود را توضیح میدهد.ضمنا اگر دقت کنید در برابر عبارت group کلمه search درج شده است که به این معنی میباشد که این بپلاگین جز گروههای پلاگین های جستجوی جوملاست و به صورت اتوماتیک باعث میشود که بعد از نصب پلاگین ، پلاگین ما به هسته اصلی جستجوگر جوملا افزوده شود.

<install version="1.5" type="plugin" group="search">

نام پلاگین را اینا مشخص میکنیم

<name>adsmanagersearch</name>

تاریخ ایجاد پلاگین را اینجا مشخص میکنید

<creationDate>2012</creationDate>

نام طراح یا توسعه دهنده پلاگین را اینجا مشخص میکنید

<author>Abolfazl Talebi</author>

ایمیل طراح یا توسعه دهنده پلاگین را اینجا مشخص مینمایید

<authorEmail>abimanager@gmail.com</authorEmail>

لینک وب سایت طراح یا توسعه دهنده پلاگین را اینجا مشخص میکنید

<authorUrl>JoomlaForum.ir</authorUrl>

کپی رایت یا حق ناشر را اینجا مشخص میکنید

<copyright>Copyright Joomlaforum.ir</copyright>

لایسنس پلاگین خود را اینجا مشخص میکنید که طبق قوانین کدباز است یا خیر!

<license>GNU/GPL</license>

ورژن پلاگین خود را اینجا مشخص میکنید.ممکن است نسخه های دیگری نیز منتشر کنید که هر بار این ورژن تغییر میکند

<version>1.5</version>

توضیحاتی از عملکرد پلاگین خود را اینجا مشخص میکنید که پس از نصب پلاگین این توضیحات به در بخش مدیریت به مدیر سایت نمایش داده میشود

<description>با استفاده از این پلاگین امکان جستجو در آگهی های ثبت  شده در کامپوننت مدیریت آگهی ها فراهم میشود</description>

از این خط به پایین فایلهایی که در بسته نصبی شما وجود دارد باید مشخص شده تا فایلها در پوشه مورد نظر نصب شوند

<files>
  <filename plugin="adsmanagersearch">adsmanagersearch.php</filename>
</files>

در صورتی که پلاگین شما دارای فایل زبان باشد باید این فایل زبان طبق ساختار فایلهای زبان در قسمت زیر تعریف شوند تا در هنگام نصب پلاگین ، زبان نیز نصب شود.

<languages>
  <language tag="en-GB">language/en-GB/en-GB.plg_search_adsmanagersearch.ini</language>
  <language tag="fa-IR">language/fa-IR/fa-IR.plg_search_adsmanagersearch.ini</language>
</languages>

پارامترهای پلاگین را نیز در این قسمت تعریف میکنید .این پارامتر ها پس از نصب پلاگین در بخش مدیریت پلاگین ها ، در تنظیمات پلاگین جستجوی شما نمایش داده شده و در صورتی که نیاز به تعریف متغییر هایی داشته باشد باید برای آنها پارامتر تعریف کنید.

<params>
  <param name="paramname" type="typeofparameter" default="defaultsetting" label="title" description="description"/>
</params>
</install>

Share this post


Link to post
Share on other sites

اول معذرت میخام که پستهای دیگه رو پاک کردم چون این تاپیک قرار هست فقط آموزش طراحی پلاگین جستجو باشه و چیز اضافه نداشته باشه به همین دلیل پستهای دیگه رو با اجازه عزیزان پاک کردم.

مرحله بعدی طراحی پلاگین جستجو کدنویسی فایل اصلی ما یعنی فایل adsmanagersearch.php هست که این مرحله رو باید خوب دقت کنید و قدم به قدم انجام بدید تا مشکلی در جستجوی شما پیش نیاد.

چون قصد ما طراحی پلاگین جستجو برای کامپوننت مدیریت آگهی های adsmanager هست پس باید ساختار جداول دیتابیس این کامپوننت رو بدونیم چیه تا براحتی پلاگین جستجوی خودمون رو طراحی کنیم.به هر حال وقتی این کامپوونت را نصب میکنید قرار است که کاربران سایت شما یک سری آگهی در سایت شما توسط این کامپوننت ثبت کنند بنابراین این آگهی ها همگی در دیتابیس و در جداول و فیلدهای مربوطه ذخیره میشوند.

پلاگین جستجویی که ما طراحی میکنیم کارش اینه که از همون جداول مورد اشاره یک سری اطلاعات رو برای ما بگیره و نتایج رو نشون بده ، حالا برای اینکه این اطلاعات رو بتونه بگیره باید در پلاگین جستجو یک کوئری تعریف کنیم و بر اساس ساختار جستجوی جوملا نتایج جستجو شده توسط این کوئری رو نمایش بدیم.

در دیتابیس کامپوننت adsmanager یک جدول به نام adsmanager_ads داریم که آگهی های ما در آن به ثبت میرسند.بنابراین مکانی که باید جستجوی ما در آن انجام شود مشخص شد.جستجو ما باید بر اساس یک یا چند فیلد مهم این جدول انجام شود، من به این جدول نگاهی کردم و چند فیلد مناسب دیدم که میتونیم بر اساس اونها آگهی های خودمون رو جستجو کنیم.این فیلدها عبارت بودند از:

name
ad_kindof
ad_headline
ad_text
metadata_description
metadata_keywords

شما هم اگر برای کامپوننت خاصی بخواهید پلاگین جستجو طراحی کنید باید ابتدا جدول و فیلدهای مورد خودتون رو پیدا کنید.

حالا که فیلدهای مورد نظر خودم رو پیدا کردم میتونم برم سراغ طراحی پلاگین جستجو و فایل اصلی پلاگین به نام adsmanagersearch.php رو طراحی کنم.

کدهای زیر مربوط میشه به همین فایل که ابتدا کدها رو قرار میدم و قسمت به قسمت توضیحاتش رو میدم که بدونید هر قسمت کارش چیه:


<?php
//First start with information about the Plugin and yourself. For example:
/**
* @version        $Id: nameofplugin.php versionnumber date author
* @copyright            Copyright
* @license        License, for example GNU/GPL
* All other information you would like to add
*/

//To prevent accessing the document directly, enter this code:
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );

//Define the registerEvent and the language file. Replace 'nameofplugin' with the name of your plugin.
$mainframe->registerEvent( 'onSearch', 'plgSearchAdsmanagersearch' );
$mainframe->registerEvent( 'onSearchAreas', 'plgSearchAdsmanagersearchAreas' );

JPlugin::loadLanguage( 'plg_search_adsmanagersearch' );

//Define a function to return an array of search areas. Replace 'nameofplugin' with the name of your plugin.
function &plgSearchAdsmanagersearchAreas()
{
   static $areas = array(
       'adsmanagersearch' => 'Adsmanagersearch'
   );
   return $areas;
}

//The real function has to be created. The database connection should be made. 
//The function will be closed with an } at the end of the file.
function plgAdsmanagersearchplugin( $text, $phrase='', $ordering='', $areas=null )
{
   $db        =& JFactory::getDBO();
   $user    =& JFactory::getUser(); 

//If the array is not correct, return it:
   if (is_array( $areas )) {
       if (!array_intersect( $areas, array_keys( plgSearchAdsmanagersearchAreas() ) )) {
           return array();
       }
   }

//Define the parameters. First get the right plugin; 'search' (the group), 'nameofplugin'. 
$plugin =& JPluginHelper::getPlugin('search', 'adsmanagersearch');

//Then load the parameters of the plugin.
$pluginParams = new JParameter( $plugin->params );

//Now define the parameters like this:
$limit = $pluginParams->def( 'mahdodiat', 50 );

//Use the function trim to delete spaces in front of or at the back of the searching terms
$text = trim( $text );

//Return Array when nothing was filled in.
if ($text == '') {
       return array();
   }

//After this, you have to add the database part. This will be the most difficult part, because this changes per situation.
//In the coding examples later on you will find some of the examples used by Joomla! 1.5 core Search Plugins.
//It will look something like this.
   $wheres = array();
   switch ($phrase) {

//search exact
       case 'exact':
           $text        = $db->Quote( '%'.$db->getEscaped( $text, true ).'%', false );
           $wheres2     = array();
           $wheres2[]     = 'a.name LIKE '.$word;
           $wheres2[]     = 'a.ad_kindof LIKE '.$word;
           $wheres2[]     = 'a.ad_headline LIKE '.$word;
           $wheres2[]     = 'a.ad_text LIKE '.$word;
           $wheres2[]     = 'a.metadata_description LIKE '.$word;
           $wheres2[]     = 'a.metadata_keywords LIKE '.$word;
           $where         = '(' . implode( ') OR (', $wheres2 ) . ')';
           break;

//search all or any
       case 'all':
       case 'any':

//set default
       default:
           $words     = explode( ' ', $text );
           $wheres = array();
           foreach ($words as $word)
           {
               $word        = $db->Quote( '%'.$db->getEscaped( $word, true ).'%', false );
               $wheres2     = array();
               $wheres2[]     = 'a.name LIKE '.$word;
               $wheres2[]     = 'a.ad_kindof LIKE '.$word;
               $wheres2[]     = 'a.ad_headline LIKE '.$word;
               $wheres2[]     = 'a.ad_text LIKE '.$word;
               $wheres2[]     = 'a.metadata_description LIKE '.$word;
               $wheres2[]     = 'a.metadata_keywords LIKE '.$word;
               $wheres[]     = implode( ' OR ', $wheres2 );
           }
           $where = '(' . implode( ($phrase == 'all' ? ') AND (' : ') OR ('), $wheres ) . ')';
           break;
   }

//ordering of the results
   switch ( $ordering ) {

//alphabetic, ascending
       case 'alpha':
           $order = 'a.name ASC';
           break;

//oldest first
       case 'oldest':
           $order = 'a.date ASC';
//popular first
       case 'popular':
           $order = 'a.views DESC';
//newest first
       case 'newest':

//default setting: alphabetic, descending
       default:
           $order = 'a.date DESC';
   }

//replace nameofplugin
   $adsmanager = JText::_( 'Adsmanager' );

//the database query; differs per situation! It will look something like this:
   $query = 'SELECT a.name AS title,'
   . ' CONCAT_WS( " / ", '. $db->Quote($adsmanager) .', a.title )AS section,'
   . ' "1" AS browsernav'
   . ' FROM #__adsmanager_ads AS a'
   . ' WHERE ( '. $where .' )'
   . ' AND a.published = 1'
   . ' AND a.access <= '. (int) $user->get( 'aid' )
   . ' ORDER BY '. $order
   ;

//Set query
   $db->setQuery( $query, 0, $limit );
   $rows = $db->loadObjectList();

//The 'output' of the displayed link
   foreach($rows as $key => $row) {
       $rows[$key]->href = 'index.php?option=com_newsfeeds&view=newsfeed&catid='.$row->catslug.'&id='.$row->slug;
   }

//Return the search results in an array
return $rows;
}


Share this post


Link to post
Share on other sites

سلام مهندس جان

ممنون بابت آموزش خوبت

من پلاگين رو ساختم و نصب كردم. اما وقتي يك كلمه رو جستجو مي كنم اين Error رو ميده:

JDispatcher::register: Event handler not recognized

مشكل از كجاست؟

Share this post


Link to post
Share on other sites

اینارو براتون پیدا کردم ببینید کدام هست برای ویرچوال هست

که انگار تنظیمات اشتباه است

لینک :http://forum.virtuemart.net/index.php?topic=69808.0

جواب:

It seems that this plugin also causes a JDispatcher::register error with the VirtueMart Product Snapshot plugin. Errors occurs as follows:

VirtueMart Product Snapshot enabled and New plugin enabled - Both have JDispatcher error

VirtueMart Product Snapshot disabled and New plugin enabled - New plugin JDispatcher error

VirtueMart Product Snapshot enabled and New plugin disabled - no errors

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

و لینک :

http://forum.joomla.org/viewtopic.php?f=304&t=280629&start=0

Share this post


Link to post
Share on other sites

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری