I making a practice component and i would like to try make an ajax search .
Inside my component i made 2 methods. Method search()
and searchRes()
. The first has the html form for the search bar and the second one handle the php->mysql work returning the results.
At the moment i print the results @ index.php?option=com_pelatol&task=searchRes
.
Altough i would like to implement some ajax to ouput the results below the form. Im trying for hours now achieve the correct jquery script but cant get it done. I tried do it with com_ajax but i got far more lost than without it.
This is how the script is looking at the moment:
$js = <<<JS
(function ($) {
$(document).on('click', '.srcButton', function () {
var value = $('.ajaxform').serialize(),
request = {
'option' : 'com_pelatol',
'component' : 'com_pelatol',
'data' : value,
'format' : 'raw'
};
$.ajax({
type : 'GET',
url : 'index.php?option=com_pelatol&task=searchRes'
data : request,
format : raw,
success: function (response) {
$('.theResults').html(response);
}
});
return false;
});
})(jQuery)
JS;
$doc->addScriptDeclaration($js);
Im sure this is wrong but dunno how to fix it:
'option' : 'com_pelatol',
'component' : 'com_pelatol',
Method search() (i removed the action from Form so it wont redirect)
function search() {
//action="'.$route.'" method="GET" id="ajaxform"
$route= JRoute::_( 'index.php?option=com_pelatol&task=searchRes');
$html='<div class="searchContainer">';
$html.='<h3 style="text-align:center;"> Search Area </h3>';
$html.='<p> Search By term: </p>';
$html.='<form ><div class="radio">';
$html.='<input type="hidden" name="option" value="com_pelatol" />';
$html.='<input type="hidden" name="task" value="searchRes" />';
$html.='<input id="id" type="radio" name="term" value="ID">';
$html.='<label for="id">Id</label>';
$html.='<input id="lastName" type="radio" name="term" value="LASTNAME">';
$html.='<label for="lastName">Last Name</label>';
$html.='<input id="firstName" type="radio" name="term" value="FIRSTNAME">';
$html.='<label for="firstName">First Name</label>';
$html.='<input id="email" type="radio" name="term" value="EMAIL">';
$html.='<label for="email">Email</label>';
$html.='<input id="all" type="radio" name="term" value="all">';
$html.='<label for="all">All</label>';
$html.='<br/><br/>';
$html.='<input type="text" name="query"/>';
$html.='<input class="srcButton"? type="submit" value="Search"/>';
$html.='</div></form></div>';
$html.='<div id="theResults"></div>';
echo $html;
}
and this is the SearchRes Method:
function searchRes() {
$term=$_GET['term'];
$src=$_GET['query'];
if ($term=="all") {
//will fill it later
}else {
$hq=$term;
}
$db=JFactory::getDbo();
$query='Select * from #__pelatologio where '.$hq.' LIKE "'.$src.'"';
$db->setQuery($query);
$options=$db->loadObjectList();
foreach ($options as $row) {
$query2='SELECT * from #__akinita where NAMEID='.$row->ID;
$db->setQuery($query2);
$options2=$db->loadObjectList();
echo '<div class="resContainer">';
echo '<div class="userRes">';
echo '<span>ID: </span>';
echo $row->ID;
echo '<br/><span>Last Name: </span>';
echo $row->LASTNAME;
echo '<br/><span>First Name: </span>';
echo $row->FIRSTNAME;
echo '<br/><span>Email: </span>';
echo $row->EMAIL;
echo '</div>';
echo '<br/><span>Ακίνητα Χρήστη</span>';
foreach($options2 as $akin) {
echo '<div class="akinRes">';
echo '<span>ID: </span>';
echo $akin->ID;
echo '</br><span>Είδος: </span>';
echo $akin->EIDOS;
echo '</br><span>Περιοχή: </span>';
echo $akin->PERIOXI;
echo '</br><span>Εμβαδόν: </span>';
echo $akin->EMBADON;
echo '</br><span>Δωμάτια: </span>';
echo $akin->IPNODOMATIA;
echo '</br><span>Μπάνια: </span>';
echo $akin->MPANIA;
echo '</br><span>Ετος: </span>';
echo $akin->ETOS;
echo '</br><span>Θέρμανση: </span>';
echo $akin->THERMANSI;
echo '</br><span>Διαθέσιμο: </span>';
echo $akin->DIATHESIMO;
echo '</br><span>Οδός: </span>';
echo $akin->ADDRESS;
echo '</br><span>Τιμή: </span>';
echo $akin->PRICE;
}
echo '</div>';
}
echo '<br clear="both" />';
}
Can someone enlight me more on how to do that ? I was thinking of creating a new component only for the ajax call.