我的应用程序中有一个名为“Books”的模块。 此外,我还有其他几个模块,我想使用“搜索书籍”功能(重复使用搜索表单)。
我怎样才能做到这一点?
我尝试为此创建一个组件并在其他模块模板中使用它,但我不知道如何从中返回找到的书籍ID(我使用了一些ajax,但没有运气)。或许这只是一种错误的方法。
有什么建议吗? 感谢。
答案 0 :(得分:1)
组件或操作可以完美地完成工作,因为它们提供了您想要的可重用性!
这是一个非常基本的方法:
操作很简单,接受请求参数并执行搜索
/* books actions.class.php */
executeSearch($request){
// clean search term
$search = trim($request->getParameter('query'));
// perform Query (Doctrine ORM)
$books = Doctrine_Core::getTable("Books")->findByTitle($search);
// Ajax Request ?
if ($request->isXmlHttpRequest()){
return $this->renderPartial('result', array("books" => $books);
}
else {
// HTML Request
$this->setTemplate("result");
return sfView::SUCCESS;
}
}
搜索表单
/* books search.php */
<form action="<?php echo url_for('books/search') ?>">
<input type="text" name="query"></input>
<input type="submit"></input>
</form>
结果部分
/* books result.php */
<ul>
<?php foreach($books as $book): ?>
<li><?php echo $book; ?></li>
<?php endforeach; ?>
<ul>
所以这是可以重复使用的,你可以做一个jQuery.load()或任何你想要的“ajax”,另一方面你可以执行旧式的HTTP搜索(渐进式增强!)。
PS:当然你可以通过sfLucense(来自jon的帖子)或其他全文解决方案进行搜索
答案 1 :(得分:0)
除非您想将部分渲染为流程的一部分,否则您不会真正使用组件。有了这个说你可以简单地在该局部视图中返回id的字符串,或者返回一个完整的json表示或者你需要的任何其他内容。
答案 2 :(得分:0)
您是否查看了sfLucene插件?
该插件允许您索引所需的模型,并根据需要进行加权。
从搜索结果中,您可以设置要显示的路线,这样您的结果就可以指向您需要的页面。
创建包含要添加到布局的搜索表单的部分内容相当容易,因此您可以在任何年龄的搜索框中使用。