it-swarm-es.tech

Actualice el complemento de búsqueda de Joomla 2.5 a Joomla 3.x

Tengo un complemento de búsqueda, que fue desarrollado para Joomla 2.5, el código en search.php es el siguiente:

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

Sin embargo, cuando trato de usar este código en Joomla 3.3, no funciona correctamente. ¿Alguna idea de lo que estoy haciendo mal?

3
RustyJoomla

Las lecturas sugeridas son " Adaptando una extensión de Joomla 1.5 a Joomla 2.5 " y el artículo "Creando un complemento de búsqueda" en Joomla Docs .

En realidad, ese código parece un Joomla! Complemento de búsqueda de 1.5 era. Sin embargo, no es una forma estándar ... el segundo método que tiene plgSearchHotels() sigue la convención de nomenclatura para Joomla 1.5 pero las variables que se le pasan no coinciden, p. Ej. Esta es la firma de un complemento de búsqueda de contenido estándar de 1.5:

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

Obviamente, el componente Hotels está haciendo algo único.

El obsequio, re: Joomla 1.5, es el $mainframe Que fue desaprobado en la línea 1.6/2.5, y no existe y no se requiere en un nuevo complemento. Entonces, primero debes eliminar esa línea.

Un complemento de estilo Joomla 1.6+ (de cualquier tipo) extiende la clase de JPlugin por ejemplo, el complemento estándar Search para El contenido en 2.5/3.x + se define como:

class plgSearchContent extends JPlugin
{
}

Afortunadamente, la implementación de la clase no hizo que el trabajo fuera demasiado difícil, y aunque los nombres de las funciones anteriores cambiaron a nombres de métodos para la nueva clase y se volvieron a etiquetar, son bastante similares.

Su function &plgSearchHotelsAreas() se convertirá en function onContentSearchAreas(). Ese fue el simple ... normalmente el segundo método es como se describió anteriormente y sería renombrado a onContentSearch() - sin saber que está sucediendo otra cosa, realmente no puedo aconsejar más sobre este método en particular y cómo lo solucionará .

Entonces, lo siguiente es envolver su nombre renombrado functions en la clase apropiada, esto generalmente es un portmanteu del tipo de complemento ( Buscar ) y el nombre principal del componente (es decir, Hoteles ), así que, en su código, supongo que será:

class plgSearchHotels extends JPlugin
{
}

Eso debería ayudarlo a comenzar ... una vez que haya leído la documentación, haya actualizado el complemento y solucionado algunos errores, le sugiero que abra preguntas específicas sobre cualquier problema posterior que encuentre.

7
Craig