samsonos / cms_search
dev-master
2015-02-10 11:57 UTC
Requires
This package is not auto-updated.
Last update: 2024-09-14 16:18:50 UTC
README
如果您想根据给定键找到一些材料,最快的方式是使用 CMSSearch 类
构造参数
在 CMSSearch 构造函数中,您必须定义至少前两个参数
- $searchKey – 必需的搜索值
- $searchFields – 必需的数组,包含用于搜索的表字段标识符
- $getParams – URL GET 参数
- $itemsOnPage – 每页对象的数量(用于 php_pager)
- $pagerPrefix – 分页链接 URL 的前缀
- $handler – 用于编辑查询的外部处理器
示例
例如,如果您想根据键 'first' 找到一些材料,并在标识符为 5、2 和 7 的字段中创建搜索,可以使用以下代码
PHP 代码
// Define fields array $fields = array(5, 2, 7); // Create search object $search = new samsonos\cms\search\CMSSearch('first', $fields, array('key'=>$search)); // Create view of founded objects $materialHTML = ''; foreach ($search->searchMaterials() as $product) { $materialHTML .= m()->view('search/item')->product($product)->output(); } $searchBlock = m()->view('search/items') ->set($search->pager) ->searchItems($materialHTML) ->output();
创建找到的项目简单预览
感谢 CMSSearch 模块,您可以使用自己的异步控制器创建简单预览,该控制器必须在搜索输入的 'preview-action' 属性中定义。要使用它,您需要将类 'samson_CMS_searchInput' 添加到您的搜索输入中。如果您想在等待 AJAX 响应时显示加载器,可以将具有类 samson_CMS_searchLoader 的块添加到您的 HTML 代码中。
预览示例
HTML 代码
<form action="<?php url_base('search') ?>" method="get"> <input class="samson_CMS_searchInput" preview-action="<?php url_base('search/preview') ?>" type="text" name="key" placeholder="Search some here"> <div class="samson_CMS_searchLoader" style="display: none"> <div id="searchLoader"> <div class="f_circleG" id="frotateG_01"> </div> <div class="f_circleG" id="frotateG_02"> </div> <div class="f_circleG" id="frotateG_03"> </div> <div class="f_circleG" id="frotateG_04"> </div> <div class="f_circleG" id="frotateG_05"> </div> <div class="f_circleG" id="frotateG_06"> </div> <div class="f_circleG" id="frotateG_07"> </div> <div class="f_circleG" id="frotateG_08"> </div> </div> </div> <button type="submit">Search</button> </form>
LESS 代码
.samson_CMS_searchLoader { top: 0; width: 100%; height: 100%; border-radius: 5px; text-align: center; background-color: rgba(0,0,0,0.45); position: absolute; } .samson_CMS_searchPreview { position: absolute; box-shadow: 0 0 10px rgba(0,0,0,0.5); width: 100%; top: 40px; border-radius: 5px; height: 300px; background: #ffffff; z-index: 90; .samson_CMS_searchPreviewItems { margin: 15px; } }
PHP 代码
/** * Async controller for rendering search preview */ function search_async_preview() { $search = new \samsonos\cms\search\CMSSearch($_GET['key'], array(85, 49), array(), 5, 'search', 'searchExternalHandler'); $response = array('status' => 1); $itemView = ''; foreach ($search->searchMaterials() as $item) { $itemView .= m()->view('search/preview_item')->item($item)->output(); } $response['html'] = $itemView; return $response; } /** * Search external handler for modifying query */ function searchExternalHandler(& $query) { $query = $query[0]; $query->cond('material.MyField', 1); }