Значение поля поиска заменяется выбранным номером страницы - PullRequest
0 голосов
/ 01 апреля 2020

Я пытаюсь создать поисковую систему с использованиемasticsearch и PHP. Я использую AJAX для поиска данных в реальном времени. Это работало нормально, пока я не применил нумерацию страниц. Когда я применил нумерацию страниц, мой поисковый запрос был заменен номером страницы. то есть ввод в поле поиска был заменен на номер страницы и в соответствии с документами, где были получены. Вот мой код в индексе. php file:

<div class="container">
   <br />
   <h2 align="center">Search for any course</h2><br />
   <div class="form-group">
    <div class="input-group">
     <span class="input-group-addon">Search</span>
     <input type="text" name="search_text" id="search_text" placeholder="Search here..." class="form-control" />

     <br>
    </div>
   </div>
   <br />
   <div id="result"></div>
  </div>

<script>
$(document).ready(function(){

 load_data();

 function load_data(query)
 {
  $.ajax({
   url:"fetch_nptel.php",
   method:"POST",
   data:{query:query},
   success:function(data)
   {
    $('#result').html(data);
   }
  });
 }

 $(document).on('click', '.pagination_link', function(){  
    var page = $(this).attr("id"); 
    load_data(page);  
  });

 $('#search_text').keyup(function(){
  var search = $(this).val();
  if(search != "")
  {
   load_data(search);
  }
  else
  {
   load_data();
  }
 });
});
</script>

А вот код в fetch. php:

<?php
session_start();
require_once '../vendor/autoload.php';
use Elasticsearch\ClientBuilder;
$client = ClientBuilder::create()->setHosts(['127.0.0.1:9200'])->build();

$record_per_page = 10;
$page='';
$output = '';
if(isset($_POST["page"]))  
{  
    $page = $_POST["page"];  
}  
else  
{  
    $page = 1;  
}  
$start_from = ($page - 1)*$record_per_page;  

if(isset($_POST["query"]))
{
 $link='';
 $search = $_POST["query"];
 $query = $client->search([
    'body' => [
      'query' => [
        'bool' => [
          'must' => [
            'multi_match' => [
              'fields' => ['title','University','Professor','description'],
              'query' => $search
            ]
          ]
        ]
      ],

      'from' => 0,
      'size' => 350
    ]
  ]);

 $n = count($query['hits']['hits']);

 $query = $client->search([
    'body' => [
      'query' => [
        'bool' => [
          'must' => [
            'multi_match' => [
              'fields' => ['title','University','Professor','description'],
              'query' => $search
            ]
          ]
        ]
      ],

      'from' => $start_from,
      'size' => $record_per_page
    ]
  ]);

  if($query['hits']['total']>=1){
    $results = $query['hits']['hits'];
  }

}

if(isset($results))
{
 $output .= '
  <div style="margin-bottom: 10px; margin-top: -10px;">Search results for "<b>'.$search.'</b>"</div>
  <div style="margin-bottom: 10px; margin-top: -10px;">Found '.$n.' results</div>
 ';

 /*This foreach loop is just printing output variable, you may ignore this loop*/

 foreach($results as $r)
 {

  if(isset($r["_source"]["link"])){
  $link = $r["_source"]["link"];
  $output .='
    <div class="card card-1">
    <div id="sticky_header" class="title_header">
      <div class="title"><a class="title_link" href="' . $link . '">'.$r["_source"]["title"].'</a></div>
      <div class="link"><a href="' . $link . '">'.$r["_source"]["link"].'</a></div>
      <hr style="margin-top: 10px;">
    </div>
    <div class="description" style="padding-bottom: 10px;">
    <div style="padding-bottom: 5px;"><b>Description:</b></div>
    <div>'.$r["_source"]["description"].'</div>
    </div>
    <hr style="margin-top: -5px;">
    <div class="div_university">
      <div class="professor" style="font-size: 15px; margin-top: -10px;  margin-bottom: 5px;"><b>Guided '.$r["_source"]["Professor"].'</b></div>
      <div class="university" style="font-size: 15px; margin-top: -5px; margin-bottom: 10px;"><b>Offered By: </b><em style="font-size: 15px;">'.$r["_source"]["University"].'</em></div>
    </div>
    </div>
  ';
  }

 }

 $total_pages = ceil($n/$record_per_page);  
 for($i=1; $i<=$total_pages; $i++)  
 {  
      $output .= '<span class="pagination_link" style="cursor:pointer; padding:6px; border:1px solid #ccc;" id="'.$i.'">'.$i.'</span>';  
 }  
$output .= '</div><br /><br />';
 echo $output;
}
else
{
 echo 'No data found';
}
?>

Я вижу это в моем индексе. php, мое значение запроса функции load_data () заменяется номером страницы, поэтому он принимает номер страницы в качестве входного значения. Так где я делаю ошибку? Буду очень признателен за любую помощь.

1 Ответ

1 голос
/ 01 апреля 2020

Вы вызываете load_data с номером страницы в Javascript: load_data (page) Вам нужно добавить дополнительный параметр, который я думаю, к вашим load_data.

function load_data(query, page = 0)
 {
  $.ajax({
   url:"fetch_nptel.php",
   method:"POST",
   data:{query:query, page: page},
   success:function(data)
   {
    $('#result').html(data);
   }
  });

и в обработчике кликов передайте оба параметра

$(document).on('click', '.pagination_link', function(){  
    var page = $(this).attr("id"); 
    var search = $('#search_text')
    load_data(search, page);  
  });

И, наконец, вам также необходимо обновить код PHP.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...