Ejemplo n.º 1
0
 /**
  * Загрузка документов раздела в формате для индексации
  * 
  * В этом методе происходит загрукзка индексируемых полей документа 
  * + поля описания документа
  * 
  * @param array $id
  * @return array array([ID] => array('id', 'header', 'content', 'intro', ....), ...)
  */
 public function get_indexable_documents(array $id = NULL)
 {
     $result = array();
     if (!empty($this->search_intro_field)) {
         $this->search_index_fields[] = $this->search_intro_field;
     }
     $this->search_index_fields = array_unique($this->search_index_fields);
     $fields = $this->search_index_fields;
     if (!empty($this->search_index_doc_id_fields)) {
         foreach ($this->search_index_doc_id_fields as $field) {
             $fields[] = $field;
         }
     }
     $agent = DataSource_Hybrid_Agent::instance($this->id(), $this->id());
     $query = $agent->get_query_props(array_unique($fields));
     if (is_array($id) and !empty($id)) {
         $query->where('d.id', 'in', $id);
     } else {
         if (!empty($id)) {
             $query->where('d.id', '=', (int) $id);
         }
     }
     $rows = $query->execute()->as_array();
     foreach ($rows as $row) {
         $doc_id = $row['id'];
         $result[$doc_id] = array('id' => $row['id'], 'intro' => Arr::get($row, $this->search_intro_field), 'header' => $row['header']);
         $content = '';
         $params = array();
         foreach ($this->search_index_fields as $field) {
             $content .= ' ' . (string) Arr::get($row, $field);
         }
         foreach ($this->search_index_doc_id_fields as $field) {
             $field_name = DataSource_Hybrid_Field_Factory::get_field_key($field);
             if (empty($field_name)) {
                 continue;
             }
             $params[$field_name] = Arr::get($row, $field);
         }
         $result[$doc_id]['content'] = $content;
         $result[$doc_id]['params'] = $params;
     }
     return $result;
 }