it-swarm-es.com

Pase los resultados (matriz) del controlador a la vista y muéstrelo

Estoy experimentando con la creación de mi propio componente de Joomla. El componente busca registros en las tablas de la base de datos, pero tengo un problema con cómo mostrarlos.

Tengo un formulario de búsqueda que envía la frase de búsqueda a controller.php.

<form action="<?php echo JRoute::_('index.php'); ?>" method="post" class="form-inline">
    <input name="company" id="form_hladat" maxlength="150" class="inputbox search-query input-medium" type="search" placeholder="hladat" />
    <input type="hidden" name="task" value="search" />
    <input type="hidden" name="option" value="com_regne" />
</form>

En el controller.php Tengo una función de búsqueda. La función realiza una búsqueda y me redirige para ver basic.

public function search() {
    // Slashes cause errors, <> get stripped anyway later on. # causes problems.
    $badchars = array('#', '>', '<', '\\');
    $searchword = trim(str_replace($badchars, '', $this->input->getString('company', null, 'post')));

    $db = JFactory::getDbo();       
    $query = $db->getQuery(true);
    $query->select($db->quoteName(array('cin','tin','vatin','name','formatted_address','street','reg_number','building_number','postal_code','municipality','country','established_on','terminated_on','vatin_paragraph','registration_office','registration_number','formatted_street','street_number','rpo_organizations_id')))
        ->from($db->quoteName('corporate_bodies'))
        ->where($db->quoteName('cin') . ' LIKE '. $db->quote($searchword) . ' OR ' . $db->quoteName('name') . ' LIKE ' . $db->quote('%'.$searchword.'%'));
    $db->setQuery($query);
    $rows = $db->loadObjectList();
    $results = $rows;
    foreach ($results as $result):
        $name = $result->name;
        $cin = $result->cin;
        $rpo_id = $result->rpo_organizations_id;
        $company_demise = $result->terminated_on;
    endforeach;

    $view = $this->getView('basic','html');
    $view->results = $results;
    $view->display();
    //$this->setRedirect(JRoute::_('index.php?option=com_regne&view=basic', false));
}

Y ahí es donde comienza mi problema. No sé cómo obtener resultados de búsqueda (matriz).

3
Lubos Belan

Use su controlador solo para fines de redireccionamiento. Para cosas de la base de datos, use su modelo de vista. Asegúrese de que el nombre de la vista, el nombre del archivo del controlador y el nombre del archivo del modelo sean los mismos.

Forma:

<form method="post" class="form-inline">
    <input name="company" id="form_hladat" maxlength="150" class="inputbox search-query input-medium" type="search" placeholder="hladat" />
    <input type="hidden" name="task" value="search.mySearch" />
    <input type="hidden" name="option" value="com_regne" />
</form>

components/com_regne/controllers/search.php

function mySearch() {
    $jinput = JFactory::getApplication()->input;
    $term = $jinput->get('company', '', 'STRING');
    $this->setRedirect(JRoute::_('index.php?option=com_regne&view=search&q=' . $term, false));
}

components/com_regne/models/search.php

function getSearch() {

    $term = JRequest::getVar('q');
    $db = JFactory::getDbo();       
    $query = $db->getQuery(true)
        ->select('*')
        ->from($db->quoteName('corporate_bodies'));

    if (!empty($term)) {
        $query->where(
            [$db->quoteName('cin') . ' = ' . $db->quote($term),
            $db->quoteName('name') . ' LIKE ' . $db->q('%' . $db->escape($term, true) . '%', false)],
            'OR');
    }

    return $db->setQuery($query)->loadObjectList();
}

components/com_regne/views/search/view.html.php en la función de visualización

$this->results = $this->get('Search');

components/com_regne/views/search/tmpl/default.php

$this->results contendrá todos los resultados de búsqueda.

1
user2980415

En la función display de la vista, debería ver los resultados en $this->results. Deberia de funcionar. Si no muestra ningún dato, significa que es muy probable que su $results array está vacío. Por cierto, tu bucle foreach no tiene ningún efecto en $results. De hecho, si este es el código completo, entonces no tiene ningún efecto.

0
itoctopus