示例#1
0
 /**
  * Generates output for use with autocomplete and suggest methods
  *
  * @static
  *
  * @param array $params
  * @param int $subTreeLimit
  * @param bool $hideRootTag
  * @param string $locale
  *
  * @return array
  */
 private static function generateOutput(array $params, $subTreeLimit, $hideRootTag, $locale)
 {
     $subTreeLimit = (int) $subTreeLimit;
     $hideRootTag = (bool) $hideRootTag;
     $locale = (string) $locale;
     if (empty($locale)) {
         return array('status' => 'success', 'message' => '', 'tags' => array());
     }
     // @TODO Fix synonyms not showing up in autocomplete
     // when subtree limit is defined in class attribute
     if ($subTreeLimit > 0) {
         if ($hideRootTag) {
             $params['id'] = array('<>', $subTreeLimit);
         }
         $params['path_string'] = array('like', '%/' . $subTreeLimit . '/%');
     }
     // first fetch tags that exist in selected locale
     /** @var eZTagsObject[] $tags */
     $tags = eZTagsObject::fetchList($params, null, null, false, $locale);
     if (!is_array($tags)) {
         $tags = array();
     }
     $tagsIDsToExclude = array_map(function ($tag) {
         /** @var eZTagsObject $tag */
         return (int) $tag->attribute('id');
     }, $tags);
     // then fetch the rest of tags, but exclude already fetched ones
     // fetch with main translation to be consistent with eztags attribute content
     $customConds = eZTagsObject::fetchCustomCondsSQL($params, true);
     if (!empty($tagsIDsToExclude)) {
         $customConds .= " AND " . eZDB::instance()->generateSQLINStatement($tagsIDsToExclude, 'eztags.id', true, true, 'int') . " ";
     }
     $tagsRest = eZPersistentObject::fetchObjectList(eZTagsObject::definition(), array(), $params, null, null, true, false, array('DISTINCT eztags.*', array('operation' => 'eztags_keyword.keyword', 'name' => 'keyword'), array('operation' => 'eztags_keyword.locale', 'name' => 'locale')), array('eztags_keyword'), $customConds);
     if (!is_array($tagsRest)) {
         $tagsRest = array();
     }
     // finally, return both set of tags as one list
     $tags = array_merge($tags, $tagsRest);
     $returnArray = array('status' => 'success', 'message' => '', 'tags' => array());
     foreach ($tags as $tag) {
         $returnArrayChild = array();
         $returnArrayChild['tag_parent_id'] = $tag->attribute('parent_id');
         $returnArrayChild['tag_parent_name'] = $tag->hasParent(true) ? $tag->getParent(true)->attribute('keyword') : '';
         $returnArrayChild['tag_name'] = $tag->attribute('keyword');
         $returnArrayChild['tag_id'] = $tag->attribute('id');
         $returnArrayChild['tag_locale'] = $tag->attribute('current_language');
         $returnArray['tags'][] = $returnArrayChild;
     }
     return $returnArray;
 }
示例#2
0
文件: search.php 项目: oki34/eztags
$http = eZHTTPTool::instance();
$tagsSearchResults = array();
$tagsSearchCount = 0;
$offset = isset($Params['Offset']) && (int) $Params['Offset'] > 0 ? (int) $Params['Offset'] : 0;
$limit = (int) eZINI::instance('eztags.ini')->variable('SearchSettings', 'SearchLimit');
$viewParameters = array('offset' => $offset);
$tagsSearchText = trim(urldecode($http->variable('TagsSearchText', '')));
$tagsSearchSubTree = (int) $http->variable('TagsSearchSubTree', 0);
$tagsSearchSubTree = $tagsSearchSubTree > 0 ? $tagsSearchSubTree : 0;
$tagsIncludeSynonyms = $http->hasVariable('TagsIncludeSynonyms');
if (!empty($tagsSearchText)) {
    $sorts = array('eztags_keyword.keyword' => 'asc');
    $limits = array('offset' => $offset, 'limit' => $limit);
    $params = array('eztags_keyword.keyword' => array('like', '%' . $tagsSearchText . '%'));
    $customConds = eZTagsObject::fetchCustomCondsSQL($params);
    if ($tagsSearchSubTree > 0) {
        if ($tagsIncludeSynonyms) {
            $customConds .= ' AND ( path_string LIKE "%/' . $tagsSearchSubTree . '/%" OR main_tag_id = ' . $tagsSearchSubTree . ' ) ';
        } else {
            $params['path_string'] = array('like', '%/' . $tagsSearchSubTree . '/%');
        }
    } else {
        if (!$tagsIncludeSynonyms) {
            $params['main_tag_id'] = 0;
        }
    }
    $tagsSearchResults = eZPersistentObject::fetchObjectList(eZTagsObject::definition(), array(), $params, $sorts, $limits, true, false, array('DISTINCT eztags.*', array('operation' => 'eztags_keyword.keyword', 'name' => 'keyword'), array('operation' => 'eztags_keyword.locale', 'name' => 'locale')), array('eztags_keyword'), $customConds);
    $tagsSearchCount = eZPersistentObject::fetchObjectList(eZTagsObject::definition(), array(), $params, array(), null, false, false, array(array('operation' => 'COUNT( * )', 'name' => 'row_count')), array('eztags_keyword'), $customConds);
    $tagsSearchCount = $tagsSearchCount[0]['row_count'];
}