Гость
Покинул форум
Сообщений всего: 125
Дата рег-ции: Апр. 2012
Помог: 0 раз(а)
|
собственно никак не могу понять как происходит выборка
PHP:
скопировать код в буфер обмена
$params['joins'][] = "JOIN {$db_prefix}metadata md on e.guid = md.entity_guid"; $params['joins'][] = "JOIN {$db_prefix}metastrings msn on md.name_id = msn.id"; $params['joins'][] = "JOIN {$db_prefix}metastrings msv on md.value_id = msv.id";
вот вся функция.
Спойлер (Отобразить)PHP:
скопировать код в буфер обмена
function search_tags_hook($hook, $type, $value, $params) { $db_prefix = elgg_get_config('dbprefix'); $valid_tag_names = elgg_get_registered_tag_metadata_names(); $query = sanitise_string($params['query']); if ($tag_names = get_input('tag_names')) { $search_tag_names = $tag_names; } else { $search_tag_names = array($tag_names); } foreach ($search_tag_names as $i => $tag_name) { if (!in_array($tag_name, $valid_tag_names)) { unset($search_tag_names[$i]); } } } else { $search_tag_names = $valid_tag_names; } if (!$search_tag_names) { return array('entities' => array(), 'count' => $count); } $params['joins'][] = "JOIN {$db_prefix}metadata md on e.guid = md.entity_guid"; $params['joins'][] = "JOIN {$db_prefix}metastrings msn on md.name_id = msn.id"; $params['joins'][] = "JOIN {$db_prefix}metastrings msv on md.value_id = msv.id"; $access = get_access_sql_suffix('md'); $sanitised_tags = array(); foreach ($search_tag_names as $tag) { $sanitised_tags[] = '"' . sanitise_string($tag) . '"'; } $tags_in = implode(',', $sanitised_tags); $params['wheres'][] = "(msn.string IN ($tags_in) AND msv.string = '$query' AND $access)"; $params['count'] = TRUE; $count = elgg_get_entities($params); if (!$count) { return array('entities' => array(), 'count' => $count); } $params['count'] = FALSE; $params['order_by'] = search_get_order_by_sql('e', null, $params['sort'], $params['order']); $entities = elgg_get_entities($params); foreach ($entities as $entity) { $matched_tags_strs = array(); foreach ($search_tag_names as $tag_name) { $tags = $entity->getTags($tag_name); $tag_name_str = elgg_echo("tag_names:$tag_name"); $matched_tags_strs[] = "$tag_name_str: " . implode(', ', $tags); } } } switch($entity->type) { case 'site': case 'user': case 'group': $title_tmp = $entity->name; break; case 'object': $title_tmp = $entity->title; break; } if (elgg_strlen($title_tmp) > 297) { $title_str = elgg_substr($title_tmp, 0, 297) . '...'; } else { $title_str = $title_tmp; } if (elgg_strlen($desc_tmp) > 297) { $desc_str = elgg_substr($desc_tmp, 0, 297) . '...'; } else { $desc_str = $desc_tmp; } $tags_str = implode('. ', $matched_tags_strs); $tags_str = search_get_highlighted_relevant_substrings($tags_str, $params['query'], 30, 300, true); $entity->setVolatileData('search_matched_title', $title_str); $entity->setVolatileData('search_matched_description', $desc_str); $entity->setVolatileData('search_matched_extra', $tags_str); } 'entities' => $entities, 'count' => $count, ); }
(Отредактировано автором: 03 Июня, 2013 - 12:38:37)
|