0

我尝试在我的应用程序中制作一个搜索表单,我想用一个输入搜索帖子,然后搜索标题和内容。

编辑:我使用CakePHP 搜索插件 我的控制器

public function initialize(){
    parent::initialize();
    $this->loadComponent('Search.Prg', ['actions'=>'index','lookup']);
}
public function search(){
    $query = $this->Posts
        ->find('search',['search' => $this->request->query])
        ->contain(['Users','Categories'])
        ->where(['Posts.status' => 1]);

        $this->set(compact('posts', $this->paginate($query)));
}

我的模特

use Search\Manager;
$this->addBehavior('Search.Search');
     $this->searchManager()
        ->add('q', 'Search.Like', [
            'before' => true,
            'after' => true,
            'mode' => 'or',
            'comparison' => 'LIKE',
            'wildcardAny' => '*',
            'wildcardOne' => '?',
            'field' => [$this->aliasField('name'), $this->aliasField('content')]
        ]);

在我看来

 <?= $this->Form->create();  ?>
    <?= $this->Form->input('q');  ?>
    <?= $this->Form->button('Search', ['action'=>'index']);  ?>
    <?= $this->Form->end();  ?>

现在,如何显示查询结果?

4

2 回答 2

0

要显示搜索结果,请执行以下“附加”操作:第一:在 AppController 中加载您的组件

class AppController extends Controller
{
    public function initialize()
    {
        parent::initialize();

        $this->loadComponent('RequestHandler');
        $this->loadComponent('Flash');
        $this->loadComponent('Search.Prg', [
        // This is default config. You can modify "actions" as needed to make
        // the PRG component work only for specified methods.
        'actions' => ['index', 'lookup']
        ]);
}

2nd:在搜索方法中添加以下代码:

$query = $this->SystemUsers->find('search', ['search' => $this->request->query]);
        $vari = $this->request->getQuery('q');
        if ($vari != "") {
            $posts= $this->paginate($query);

            $this->set(compact('posts'));
            $this->set('_serialize', ['posts']);
        }

第三:编辑您的 search.ctp 文件以查看结果:

<table class="table" cellpadding="0" cellspacing="0">
        <thead>
            <tr>
                <th style="width: 3%;"></th>
                <th scope="col"><?= $this->Paginator->sort('id') ?></th>
                <th scope="col"><?= $this->Paginator->sort('name') ?></th>
                <th scope="col"><?= $this->Paginator->sort('content') ?></th>
                <th scope="col"><?= $this->Paginator->sort('created') ?></th>
                <th scope="col"><?= $this->Paginator->sort('modified') ?></th>
                <th scope="col" class="actions"><?= __('Actions') ?></th>
            </tr>
        </thead>
        <tbody>
            <?php foreach ($posts as $post): ?>
            <tr>
                <td style="width: 3%;"><input type="checkbox" value=""></td>
                <td><?= $this->Number->format($post->id) ?></td>
                <td><?= h($post->name) ?></td>
                <td><?= h($post->content) ?></td>
                <td><?= h($post->created) ?></td>
                <td><?= h($post->modified) ?></td>
                <td class="actions">
                    <?= $this->Html->link(__('View'), ['action' => 'view', $post->id]) ?>
                    <?= $this->Html->link(__('Edit'), ['action' => 'edit', $post->id]) ?>
                    <?= $this->Form->postLink(__('Delete'), ['action' => 'delete', $post->id], ['confirm' => __('Are you sure you want to delete # {0}?', $post->id)]) ?>
                </td>
            </tr>
            <?php endforeach; ?>
        </tbody>
    </table>
    <div class="paginator">
        <ul class="pagination">
            <?= $this->Paginator->first('<< ' . __('first')) ?>
            <?= $this->Paginator->prev('< ' . __('previous')) ?>
            <?= $this->Paginator->numbers() ?>
            <?= $this->Paginator->next(__('next') . ' >') ?>
            <?= $this->Paginator->last(__('last') . ' >>') ?>
        </ul>
        <p><?= $this->Paginator->counter(['format' => __('Page {{page}} of {{pages}}, showing {{current}} record(s) out of {{count}} total')]) ?></p>
    </div>

在上面的视图中,根据您的表格编辑表格的实体名称。

于 2017-07-13T20:30:23.383 回答
0

您的查询应该是这样的。

$query = $this->find('all')
        ->where(['title LIKE' => '%' . $this->request->query('q') . '%'])
        ->orWhere(['content LIKE' => '%' . $this->request->query('q') . '%']);
于 2016-06-24T17:02:08.640 回答