web-dev-qa-db-fra.com

Passer les résultats (tableau) du contrôleur dans la vue et l'afficher

J'essaie de créer mon propre composant Joomla. Le composant recherche les enregistrements dans les tables de base de données, mais je ne sais pas comment les afficher.

J'ai un formulaire de recherche qui envoie la phrase de recherche au 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>

Dans le controller.php J'ai une fonction de recherche. La fonction effectue une recherche et me redirige pour afficher 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));
}

Et c'est là que commence mon problème. Je ne sais pas comment obtenir des résultats de recherche (tableau).

3
Lubos Belan

Utilisez votre contrôleur uniquement à des fins de redirection. Pour les bases de données, utilisez votre modèle de vue. Assurez-vous que votre nom de vue, nom de fichier du contrôleur et nom de fichier du modèle sont identiques.

Forme:

<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>

composants/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));
}

composants/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();
}

composants/com_regne/views/search/view.html.php dans la fonction d'affichage

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

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

$this->results contiendra l'intégralité de vos résultats de recherche.

1
user2980415

Dans la fonction display de la vue, vous devriez voir les résultats dans $this->results. Ça devrait marcher. S'il n'affiche aucune donnée, cela signifie probablement que votre $results tableau est vide. Au fait, votre boucle foreach n'a aucun effet sur $results. En fait, s’il s’agit de tout le code, il n’a aucun effet.

0
itoctopus