Пример #1
0
 /**
  * 
  * @param string $keyword
  * @param boolean $only_title
  * @param string $modules
  * @param integer $limit
  * @param integer $offset
  * @param boolean $fulltextsearch
  * @return Database_Query
  */
 protected function _get_query(Database_Query $query, $keyword, $only_title = FALSE, $modules = NULL, $limit = 50, $offset = 0)
 {
     $keyword = $this->stem_query($keyword);
     if ($limit !== NULL) {
         $query->limit((int) $limit)->offset($offset);
     }
     if (is_array($modules)) {
         $query->where('search_index.module', 'in', $modules);
     } elseif ($modules !== NULL) {
         $query->where('search_index.module', '=', $modules);
     }
     if ($this->config('full_text_search') === TRUE) {
         $query->where(DB::expr('MATCH(`search_index`.`header`, `search_index`.`content`)'), 'AGAINST', DB::expr("('" . self::match_against_query($keyword) . "' IN BOOLEAN MODE)"));
     } else {
         $words = explode(' ', $keyword);
         $query->where_open();
         $query->where_open();
         foreach ($words as $word) {
             if (!empty($word)) {
                 $query->where('search_index.header', 'like', '%' . $word . '%');
             }
         }
         $query->where_close();
         if ($only_title === FALSE) {
             $query->or_where_open();
             foreach ($words as $word) {
                 if (!empty($word)) {
                     $query->where('search_index.content', 'like', '%' . $word . '%');
                 }
             }
             $query->where_close();
         }
         $query->where_close();
     }
     return $query;
 }
Пример #2
0
 /**
  * 
  * @param Database_Query $db
  * @param array $clause
  * @return type
  */
 public static function _conditions($db, array $clause)
 {
     foreach ($clause as $type => $params) {
         switch ($type) {
             case 'select':
                 foreach ($params as $param) {
                     $db->select($param);
                 }
                 break;
             case 'where':
                 foreach ($params as $param) {
                     $db->where($param[0], $param[1], $param[2]);
                 }
                 break;
             case 'or_where':
                 foreach ($params as $param) {
                     $db->or_where($param[0], $param[1], $param[2]);
                 }
                 break;
             case 'order_by':
                 foreach ($params as $param) {
                     $db->order_by($param[0], $param[1]);
                 }
                 break;
             case 'limit':
                 $db->limit((int) $params);
                 break;
             case 'offset':
                 $db->offset((int) $params);
                 break;
         }
     }
     return $db;
 }