
рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦреЛрдВ рдореЗрдВ, рдореИрдВрдиреЗ Drupal рдкрд░ рдЦреЛрдЬреЛрдВ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Apache Solr рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рдереАред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдордиреЗ рдЦреЗрддреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЦреЛрдЬрдирд╛ рд╕реАрдЦрд╛ред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдлрд╝реАрд▓реНрдб рдФрд░ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛, рдЕрдЧрд░ рдорд╛рдирдХ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИрдВред
рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП, рдЬрд┐рдиреНрд╣реЛрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рднрд╛рдЧреЛрдВ рдХреЛ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИ, рдореИрдВ рдЙрдиреНрд╣реЗрдВ рд╕рд╛рдордЧреНрд░реА рдХреА рдмреЗрд╣рддрд░ рд╕рдордЭ рдХреЗ рд▓рд┐рдП рдкрдврд╝рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред
рдЦреЗрддреЛрдВ
рддреЛ, рдЪрд▓реЛ рдЦреЗрддреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдиреЛрдбреНрд╕ рдореЗрдВ рдЬрд┐рдпреЛрд▓реЛрдХреЗрд╢рди рдбреЗрдЯрд╛ рд╡рд╛рд▓реЗ рд╢рдмреНрджрдХреЛрд╢ рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реИред рдЗрд╕рдХреА рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:

рдХрд╛рд░реНрдп рдХреЗрд╡рд▓ рдкрд╣рд▓реЗ рд╕реНрддрд░ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рдирд╛ рд╣реИ, рдЕрд░реНрдерд╛рддреНред рдЬрд┐рди рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдиреЛрдб рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред рдпрджрд┐ рд╣рдо рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ, рддреЛ рд╕рднреА рд╢рд░реНрддреЛрдВ рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рднрд▓реЗ рд╣реА рдХреЛрдИ рднреА рд╕реНрддрд░ рд╣реЛред рдЗрд╕рд▓рд┐рдП, рд╣рдореЗрдВ рдЕрдкрдирд╛ рдХреНрд╖реЗрддреНрд░ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рджреЛ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрд╣рд▓рд╛ рдПрдХ рдЗрдХрд╛рдИ рд╣реИ_рдкреНрд░рдХрд╛рд░рдХ_рдЗрдиреНрдлреЛ_рд▓реНрдЯрд░ рд╣реБрдХред рдЗрд╕ рд╣реБрдХ рдореЗрдВ, рдЖрдк рдЗрдХрд╛рдИ рдХреЗ рд▓рд┐рдП рдирдП рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рдиреЛрдб рдХреЗ рд▓рд┐рдП рдПрдХ рдирдпрд╛ рдлрд╝реАрд▓реНрдб рдЬреЛрдбрд╝реЗрдВред
function test_search_entity_property_info_alter(&$info) { $info['node']['properties']['geo_first_level'] = array( 'type' => 'text', 'label' => t('Geo 1 level'), 'getter callback' => 'test_search_geo_first_level_getter_callback', ); }
рджреВрд╕рд░рд╛ рдлрд╝рдВрдХреНрд╢рди рдЧреЗрдЯреНрдЯрд░ рдХреЙрд▓рдмреИрдХ рд╣реИ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ test_search_geo_first_level_getter_callbackред рдЬрд┐рд╕ рд╕рдордп рдиреЛрдб рдЗрдВрдбреЗрдХреНрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрд╕ рд╕рдордп рдЗрд╕реЗ рд╣рдорд╛рд░реЗ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдорд╛рди рд▓реМрдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣ рдорд╛рди рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
function test_search_geo_first_level_getter_callback($item) { if ($geo = field_get_items('node', $item, 'field_geo')) { $parents = taxonomy_get_parents($geo[0]['tid']); if (empty($parents)) { if ($term = taxonomy_term_load($geo[0]['tid'])) { return $term->name; } } } return NULL; }
рдПрдХ рдЕрдиреБрдХреНрд░рдорд┐рдд рдЗрдХрд╛рдИ рдХреЛ $ рдЖрдЗрдЯрдо рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдПрдХ рдиреЛрдб рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИред рд╣рдо рдЗрд╕ рдмрд╛рдд рдХреА рдПрдХ рдЫреЛрдЯреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕ рдиреЛрдб рдореЗрдВ 1 рд╕реНрддрд░ рдХрд╛ рд╢рдмреНрдж рд╣реИ рдпрд╛ рдирд╣реАрдВ рдФрд░ рдЕрдиреБрдХреНрд░рдорд┐рдд рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рдЗрд╕ рд╢рдмреНрдж рдХрд╛ рдирд╛рдо рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рд╣реИред
рдЕрдм рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рдЬрд╛рдПрдВ рдФрд░ рдлреАрд▓реНрдбреНрд╕ рдЯреИрдм рдЪреБрдиреЗрдВред

рд╣рдорд╛рд░рд╛ рдирдпрд╛ рдХреНрд╖реЗрддреНрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдиреБрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рдЙрдкрд▓рдмреНрдз рд╣реИред рдЗрд╕реЗ рдЙрди рдлрд╝реАрд▓реНрдбреНрд╕ рдХреА рд╕реВрдЪреА рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рди рднреВрд▓реЗрдВ рдЬрд┐рдирдХреЗ рджреНрд╡рд╛рд░рд╛ рдЖрдк рджреГрд╢реНрдп рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдЦреЛрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХрднреА-рдХрднреА рдЖрдкрдХреЛ рдХрд┐рд╕реА рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдХрдИ рдорд╛рдиреЛрдВ рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, 'рдЯрд╛рдЗрдк рдХрд░реЗрдВ ='> 'рд╕реВрдЪреА' рдХреЛ Unit_property_info_alter рд╣реБрдХ рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ, рдФрд░ рдЧреЗрдЯреНрдЯрд░ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдЖрдкрдХреЛ рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рд╡рд╛рдкрд╕ рдХрд░рдиреА рд╣реЛрдЧреАред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
return array('', '-', '');
рдлрд┐рд▓реНрдЯрд░
рдЕрдм рдЖрдЗрдП рдПрдХ рдлрд╝рд┐рд▓реНрдЯрд░ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ рдЬрд┐рд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдЕрдиреБрдХреНрд░рдордг рдХреЗ рд▓рд┐рдП рдиреЛрдбреНрд╕ рдХрд╛ рдЪрдпрди рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рдлрд╝рд┐рд▓реНрдЯрд░ рдПрдХ рд╕рдорд╛рди рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛ - рдХреЗрд╡рд▓ рдЗрдВрдбреЗрдХреНрд╕ рдиреЛрдбреНрд╕ рдЬрд┐рд╕рдореЗрдВ рдЬрд┐рдпреЛ рдбрд┐рдХреНрд╢рдирд░реА рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрддрд░ рдХреЗ рд╢рдмреНрдж рдХрд╛ рд╕рдВрджрд░реНрдн рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдорд╛рд░реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ search_api_alter_callback_info рд╣реБрдХ рдореЗрдВ рдШреЛрд╖рд┐рдд рдХрд░реЗрдВред
function test_search_search_api_alter_callback_info() { $callbacks['search_api_alter_geo_level'] = array( 'name' => t('Filter by level of geo'), 'description' => t('Index only nodes with first level of term from vocabulary geo'), 'class' => 'SearchApiAlterGeoLevelFilter',
рдореИрдВрдиреЗ рдлрд╝рд╛рдЗрд▓ рдХреЛ test_search рдореЙрдбреНрдпреВрд▓ рдХреЗ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдлрд╝рд┐рд▓реНрдЯрд░ рд╡рд░реНрдЧ рдХреЗ рд╕рд╛рде рд░рдЦрд╛ред рдЕрдкрдиреЗ рдореЙрдбреНрдпреВрд▓ рдХреА .info рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдЗрд╕реЗ рд╢рд╛рдорд┐рд▓ рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:
files[] = includes/callback_geo_level.inc
рдиреАрдЪреЗ рдлрд┐рд▓реНрдЯрд░ рдХрд╛ рдХреЛрдб рд╣реИ
<?php class SearchApiAlterGeoLevelFilter extends SearchApiAbstractAlterCallback { public function alterItems(array &$items) { foreach ($items as $id => $item) { if ($geo = field_get_items('node', $item, 'field_geo')) { $parents = taxonomy_get_parents($geo[0]['tid']);
ChangeItems рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ, рд╣рдо рдХреЗрд╡рд▓ рдЙрди рддрддреНрд╡реЛрдВ рдХреЛ рдмрд╛рд╣рд░ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдЧреИрд░-рдкреНрд░рдердо-рд╕реНрддрд░реАрдп рд╢рдмреНрдж рд╣реИрдВред рдЗрди рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЕрдиреБрдХреНрд░рдорд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреИрд╢ рдХреЛ рд╕рд╛рдлрд╝ рдХрд░рдиреЗ рдФрд░ рдЗрдВрдбреЗрдХреНрд╕ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдореЗрдВ рд╡рд░реНрдХрдлрд╝реНрд▓реЛ рдЯреИрдм рдкрд░ рдЬрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдлрд┐рд░ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЕрдм рдХреЗрд╡рд▓ рд╡реЗ рдиреЛрдбреНрд╕ рдЬрд┐рдирдХреЗ рдкрд╛рд╕ рдкреНрд░рдердо-рд╕реНрддрд░реАрдп рд╢рдмреНрджрдХреЛрд╢ рд╢рдмреНрдж рд╣реИ, рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдЧрд┐рд░ рдЬрд╛рдПрдВрдЧреЗред