samsonos / cms_search

dev-master 2015-02-10 11:57 UTC

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);
}