web-dev-qa-db-pt.com

Atualizar o plug-in de pesquisa do Joomla 2.5 para o Joomla 3.x

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?

3
RustyJoomla

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.

7
Craig