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