Eu tenho um plug-in de pesquisa, desenvolvido para o Joomla 2.5, o código no search.php é o seguinte:
<?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;
}
?>
No entanto, quando tento usar esse código no Joomla 3.3, ele não está funcionando corretamente. Alguma idéia do que estou fazendo de errado?
As leituras sugeridas são " Adaptando uma extensão do Joomla 1.5 ao Joomla 2.5 " e o artigo "Criando um plug-in de pesquisa" no Joomla Docs .
Na verdade, esse código parece um Joomla! Plugin de pesquisa de 1,5 era. No entanto, não é de uma forma padrão ... o segundo método que você possui plgSearchHotels()
segue a convenção de nomenclatura para o Joomla 1.5, mas as variáveis transmitidas a ele não coincidem, por exemplo esta é a assinatura de um plug-in de pesquisa de conteúdo padrão da 1.5:
plgSearchContent( $text, $phrase='', $ordering='', $areas=null )
Obviamente, o componente Hotels
está fazendo algo único.
A distribuição, re: Joomla 1.5, é o $mainframe
Que foi descontinuado na linha 1.6/2.5 e não existe e não é necessário em um novo plugin. Então, primeiro você precisa remover essa linha.
Um plugin no estilo Joomla 1.6+ (de qualquer tipo) estende a classe de JPlugin
por exemplo, o plug-in padrão Search para O conteúdo em 2.5/3.x + é definido como:
class plgSearchContent extends JPlugin
{
}
Felizmente, a implementação da classe não tornou o trabalho muito difícil, e enquanto os nomes das funções anteriores mudaram para nomes de métodos para a nova classe e foram rotulados novamente, eles são bem parecidos.
Sua function &plgSearchHotelsAreas()
se tornará function onContentSearchAreas()
. Essa foi a mais simples… normalmente o segundo método é como descrito acima e seria renomeado para onContentSearch()
- sem saber mais nada está acontecendo, eu realmente não posso aconselhar mais sobre esse método específico e como você o corrigirá .
Portanto, a próxima coisa é agrupar seu functions
renomeado na classe apropriada, geralmente esse é um portmanteu do tipo de plugin ( Search ) e o nome principal do componente (ou seja, Hotéis ), portanto, seguindo o seu código, acho que será:
class plgSearchHotels extends JPlugin
{
}
Isso deve ajudá-lo a começar ... depois de ler a documentação, atualizar o plug-in e encontrar alguns bugs, sugiro abrir perguntas específicas sobre quaisquer problemas subseqüentes que você encontrar.