Joomla 2.5用に開発された検索プラグインを入手しました。search.phpのコードは次のとおりです。
<?php
//To prevent accessing the document directly, enter this code:
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
$mainframe->registerEvent( 'onSearch', 'plgSearchHotels' );
JPlugin::loadLanguage( 'plg_search_hotels' );
function &plgSearchHotelsAreas()
{
static $areas = array(
'hotels' => 'Hotels'
);
return $areas;
}
function plgSearchHotels ( $searchdate, $airport, $resort, $numadults, $numchild, $numinfants, $ordering='' )
{
$db =& JFactory::getDBO();
$user =& JFactory::getUser();
$plugin =& JPluginHelper::getPlugin('search', 'hotels');
$searchdate = trim( $searchdate );
$numpassengers = $numadults + $numchild;
if ($searchdate == '') {
return array();
}
switch ( $ordering ) {
//alphabetic, ascending
case 'alpha':
$order = 'a.name ASC';
break;
//oldest first
case 'oldest':
//popular first
case 'popular':
//newest first
case 'newest':
//default setting: alphabetic, ascending
default:
$order = 'a.name ASC';
}
$searchHotels = JText::_( 'Hotels' );
$query = 'SELECT mykey, hotelName, resortName, dep, startDate, sellingPrice FROM Availability WHERE startDate = "'.$searchdate.'" AND available = "Y"';
if($airport !== "A") $query .= ' AND dep = "'.$airport.'"';
if($resort !== "A") $query .= ' AND resortCode = "'.$resort.'"';
$query .= ' AND seats >= '.$numpassengers;
$query .= ' AND beds >= '.$numpassengers.' ORDER BY sellingPrice ASC';
$db->setQuery( $query, 0, $limit );
$rows = $db->loadObjectList();
return $rows;
}
?>
ただし、Joomla 3.3でこのコードを使用しようとすると、正しく機能しません。私が間違っていることはありますか?
推奨される読み物は、「 Joomla 2.5へのJoomla 1.5拡張機能の適応 」とJoomla Docsの "Creating A Search Plugin"記事 です。
実際、そのコードはJoomlaのように見えます! 1.5時代の検索プラグイン。ただし、これは標準形式ではありません... plgSearchHotels()
を使用する2番目のメソッドは、Joomla 1.5の命名規則に従いますが、それに渡される変数が一致しません。これは、1.5の標準コンテンツ検索プラグインのシグネチャです。
plgSearchContent( $text, $phrase='', $ordering='', $areas=null )
明らかにHotels
コンポーネントは何かユニークなことをしています。
プレゼント、re:Joomla 1.5は、1.6/2.5行で廃止された_$mainframe
_であり、存在せず、新しいプラグインでは必要ありません。したがって、最初にその行を削除する必要があります。
Joomla 1.6+スタイルのプラグイン(任意のタイプ)は、JPlugin
のクラスを拡張します。たとえば、標準のSearchプラグイン2.5/3.x +のコンテンツは次のように定義されます。
_class plgSearchContent extends JPlugin
{
}
_
幸い、クラスの実装によって作業が難しくなりませんでした。以前の関数名は新しいクラスのメソッド名に変更され、ラベルが付け直されましたが、それ以外はかなり似ています。
あなたのfunction &plgSearchHotelsAreas()
はfunction onContentSearchAreas()
になります。これは単純な方法でした。通常、2番目の方法は上記のとおりで、名前はonContentSearch()
に変更されます-他に何が起こっているかを知らずに、この特定の方法とそれを修正する方法についてこれ以上アドバイスすることはできません。
したがって、次のことは、名前を変更したfunctions
を適切なクラスでラップすることです。これは通常、プラグインタイプのポートマントです(Search )とコンポーネントのコア名(つまりHotels)なので、コードを続けると、次のようになります。
_class plgSearchHotels extends JPlugin
{
}
_
それであなたは始められるはずです...ドキュメントを読み、プラグインを更新していくつかのバグにぶつかったら、あなたがぶつかったその後の問題について特定の質問を開くことをお勧めします。