Функция за търсене, показваща резултати в индекса в CakePHP

как мога да покажа резултатите от моята заявка от функцията за търсене в индексния изглед? Очевидно търсенето работи добре от това, което се показва в областта на дъното на тортата по подразбиране. SELECT Movie.movie_id, Movie.title, Movie.date, Movie.description FROM cTrader.movies AS Movie WHERE Movie.date ‹= 20141118. И така, чудех се как да покажа всичките си публикации (филми) въз основа на търсенето по дата в index.ctp Благодаря предварително, Андрю

ГЛЕДКАТА:

<h1>Movies</h1>
<?php echo $this->Form->create('Movie', array('type' => 'get', 'action' => 'search'));?>
<?php echo $this->Form->input('date', array(
    'type'  => 'date',
    'label' => 'Date',
    'empty' => false,
    'dateFormat' => 'DMY',
    'minYear'=>'1990',
    'maxYear'=>date('Y'),
     ));  ?>

 <?php echo $this->Form->end(__('Submit')); ?> 
<table>
    <tr>
        <th>Title</th>
        <th>Year</th>
        <th>Description</th>
   </tr>
<?php foreach ($movies as $movie): ?>
    <tr>
        <td><?php echo $movie['Movie']['title'];?></td>
        <td><?php echo $movie['Movie']['date'];?></td>
        <td><?php echo $movie['Movie']['description'];?></td>
    </tr>
<?php endforeach; ?>
<?php unset($movie); ?>
</table>
<ul>
   <li><?php echo $this->Html->link(__('Insert a new movie'), array('controller' => 'movies', 'action' => 'add')); ?> </li>
</ul>

КОНТРОЛЬОРЪТ

<?php
class MoviesController extends AppController {

public $helpers = array('Html', 'Form');

public function index() {
$this->set('movies', $this->Movie->find('all'));
}

    public function view($movie_id = null) {

        if (!$movie_id) {
            throw new NotFoundException(__('Invalid post'));
        }
        $movie = $this->Movie->findById($movie_id);
        if (!$movie) {
            throw new NotFoundException(__('Invalid post'));
        }
        $this->set('movie', $movie);
    }


public function search() {

 if (!isset($this->request->query['date'])) {
        throw new BadRequestException();
    }
    $result = $this->request->query['date']['year'] . $this->request->query['date']['month'] .     $this->request->query['date']['day'];
    $searchdate = array(
        'Movie.date <=' => $result,
        );
    $this->set('movies', $this->Movie->find('all', array('conditions' => $searchdate )));
    $this->view = 'index';
    }
   }
 ?>

person Andrew    schedule 18.11.2014    source източник
comment
Не бих преоткривал колелото и просто бих използвал github.com/CakeDC/search - което прави точно това но по чисто СУХ начин.   -  person mark    schedule 18.11.2014
comment
Андрю, можеш ли да проучиш точния проблем, с който се сблъскваш или къде получаваш грешка??   -  person Supravat Mondal    schedule 19.11.2014
comment
Благодаря за отговора. @Supravat всъщност функцията реагира добре и нейната обработка съответно. Проблемът ми обаче възниква след първото ми търсене. Например търся първия си филм въз основа на дата и той се показва, но когато търся отново, той показва всичките ми записи и това се случва, предполагам, защото нещо трябва да се изчисти. Какво би било това? Благодаря   -  person Andrew    schedule 19.11.2014


Отговори (1)


Променете формуляра си на следния

<h1>Movies</h1>
<?php echo $this->Form->create('Movie', array('type' => 'get', 'action' => 'index'));?>
<?php echo $this->Form->input('date', array(
    'type'  => 'date',
    'label' => 'Date',
    'empty' => false,
    'dateFormat' => 'DMY',
    'minYear'=>'1990',
    'maxYear'=>date('Y'),
     ));  ?>

 <?php echo $this->Form->end(__('Submit')); ?> 
<table>
    <tr>
        <th>Title</th>
        <th>Year</th>
        <th>Description</th>
   </tr>
<?php foreach ($movies as $movie): ?>
    <tr>
        <td><?php echo $movie['Movie']['title'];?></td>
        <td><?php echo $movie['Movie']['date'];?></td>
        <td><?php echo $movie['Movie']['description'];?></td>
    </tr>
<?php endforeach; ?>
<?php unset($movie); ?>
</table>
<ul>
   <li><?php echo $this->Html->link(__('Insert a new movie'), array('controller' => 'movies', 'action' => 'add')); ?> </li>
</ul>

И вашия контролер да следвате.

<?php
   class MoviesController extends AppController {

  public $helpers = array('Html', 'Form');

  public function index() {
     if(isset($this->request->query['date']){
             $result = $this->request->query['date']['year'] . $this->request->query['date']['month'] .     $this->request->query['date']['day'];
              $searchdate = array(
             'Movie.date <=' => $result,
          );
         $this->set('movies', $this->Movie->find('all', array('conditions' => $searchdate )));
         $this->render = 'search';
     }
     else{
         $this->set('movies', $this->Movie->find('all'));
     }
  }

?>

person Nizam    schedule 20.11.2014