it-swarm.dev

Aggiorna il plug-in di ricerca da Joomla 2.5 a Joomla 3.x

Ho un plugin di ricerca, che è stato sviluppato per Joomla 2.5, il codice in search.php è il seguente:

    <?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;
    }
    ?>

Tuttavia, quando provo ad usare questo codice su Joomla 3.3, non funziona correttamente. Qualche idea su cosa sto facendo di sbagliato?

3
RustyJoomla

Le letture consigliate sono " Adattamento di un'estensione Joomla 1.5 a Joomla 2.5 " e l'articolo "Creazione di un plug-in di ricerca" su Joomla Docs .

In realtà, quel codice sembra un Joomla! Plugin di ricerca dell'era 1.5. Tuttavia, non è di forma standard ... il secondo metodo che hai plgSearchHotels() segue la convenzione di denominazione per Joomla 1.5 ma le variabili passate ad essa non corrispondono, ad es. questa è la firma di un plug-in di ricerca contenuto standard da 1.5:

plgSearchContent( $text, $phrase='', $ordering='', $areas=null )

Ovviamente il componente Hotels sta facendo qualcosa di unico.

Il regalo, re: Joomla 1.5, è il $mainframe Che è stato deprecato nella riga 1.6/2.5 e non esiste e non è richiesto in un nuovo plugin. Quindi prima devi rimuovere quella linea.

Un plugin in stile Joomla 1.6+ (di qualsiasi tipo) estende la classe di JPlugin ad esempio il plugin standard Cerca per Il contenuto in 2.5/3.x + è definito come:

class plgSearchContent extends JPlugin
{
}

Fortunatamente l'implementazione della classe non ha reso il lavoro troppo duro, e mentre i nomi delle funzioni precedenti sono cambiati in nomi di metodo per la nuova classe e sono stati rietichettati, altrimenti sarebbero abbastanza simili.

La tua function &plgSearchHotelsAreas() diventerà function onContentSearchAreas(). Quello era quello semplice ... normalmente il secondo metodo è come descritto sopra e verrebbe rinominato in onContentSearch() - senza sapere che sta succedendo non posso davvero consigliare di più su questo particolare metodo e su come lo risolverai .

Quindi, la prossima cosa è avvolgere il tuo functions rinominato nella classe appropriata, questo di solito è un portmanteu del tipo di plugin ( Cerca ) e il nome principale del componente (ovvero Hotel ), quindi andando sul tuo codice immagino che sarà:

class plgSearchHotels extends JPlugin
{
}

Questo dovrebbe iniziare ... dopo aver letto la documentazione, aggiornato il plug-in e riscontrato alcuni bug, suggerirei di aprire domande specifiche su eventuali problemi successivi.

7
Craig