Добавление полей страна, регион и город в расширенный поиск в SocialEngine Excalibur

15 августа 2009

В прошлой статье я рассказал Вам о решении проблемы с добавлением полей страна, регион и город в профиль в движок SocialEngine Excalibur, сегодня мы добавим эти поля в расширенный поиск – это тоже немало важный апгрейд. Написание этой статьи меня подтолкнул вопрос, зачем нужны поля страна, регион и город в профиле участника, если нет возможности найти участников, используя данные поля?

Для добавления данных полей необходимо выполнить пару шагов:

  1. Открыть: search_advanced.php

    Найти

    Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.

    $search_query = "SELECT se_users.user_id, se_users.user_username, se_users.user_fname, se_users.user_lname, se_users.user_photo 
    FROM se_profilevalues LEFT JOIN se_users ON se_profilevalues.profilevalue_user_id=se_users.user_id 
    LEFT JOIN se_levels ON se_levels.level_id=se_users.user_level_id 
    WHERE se_users.user_profilecat_id='{$cat_selected}' AND se_users.user_verified='1' AND se_users.user_enabled='1' AND (se_users.user_search='1' OR se_levels.level_profile_search='0')";
    
    if($user_online == 1) {
    	$search_query .= " AND user_lastactive>'".(time()-10*60)."' AND user_invisible=0";
    }
    
    if($user_withphoto == 1) {
    	$search_query .= " AND user_photo <> ''";
    }
    
    if($field->field_query != "") {
    	$search_query .= " AND ".$field->field_query;
    }

    Заменить

    Подсказка: Произведите замену ранее найденных строк.

    $search_query = "SELECT se_users.user_id, se_users.user_username, se_users.user_fname, se_users.user_lname, se_users.user_photo 
    FROM se_profilevalues LEFT JOIN se_users ON se_profilevalues.profilevalue_user_id=se_users.user_id 
    LEFT JOIN se_levels ON se_levels.level_id=se_users.user_level_id 
    LEFT JOIN cites_profilevalues ON se_profilevalues.profilevalue_user_id=cites_profilevalues.profilevalue_id 
    WHERE se_users.user_profilecat_id='{$cat_selected}' AND se_users.user_verified='1' AND se_users.user_enabled='1' AND (se_users.user_search='1' OR se_levels.level_profile_search='0')";
    
    if($user_online == 1) {
    	$search_query .= " AND user_lastactive>'".(time()-10*60)."' AND user_invisible=0";
    }
    
    if($user_withphoto == 1)
    	$search_query .= " AND user_photo <> ''";
    
    if($field->field_query != "")
    	$search_query .= " AND se_profilevalues.".$field->field_query;
    
    if(isset($_POST['dhtmlgoodies_country']) && $_POST['dhtmlgoodies_country'] > 0)
    	$search_query .= " AND cites_profilevalues.profilevalue_7 = '" . $_POST['dhtmlgoodies_country'] . "'";
    	
    if(isset($_POST['dhtmlgoodies_region']) && $_POST['dhtmlgoodies_region'] > 0)
    	$search_query .= " AND cites_profilevalues.profilevalue_8 = '" . $_POST['dhtmlgoodies_region'] . "'";
    	
    if(isset($_POST['dhtmlgoodies_city']) && $_POST['dhtmlgoodies_city'] > 0)
    	$search_query .= " AND cites_profilevalues.profilevalue_9 = '" . $_POST['dhtmlgoodies_city'] . "'";

    Найти

    Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.

    	// SET GLOBAL PAGE TITLE
    	$global_page_title[0] = 926;
    	$global_page_description[0] = 1088;
    }

    Добавить после

    Подсказка: Добавьте эти строки на новой строке после ранее найденных строк.

    // GET COUNTRY, REGION AND CITY
    $sql = $database->database_query ("SELECT * FROM country");
    while ($country_bd = $database->database_fetch_assoc ($sql))
    {
    	if(isset($_POST['dhtmlgoodies_country']) && $country_bd[country_id] == $_POST['dhtmlgoodies_country'])
    		$country_sel = " SELECTED";
    	else
    		$country_sel = "";
    
    	$country .= "<option value='" . $country_bd[country_id] . "'" . $country_sel . "'" . $country_bd[name] . "</option>\n";
    }
    
    if(isset($_POST['dhtmlgoodies_region']))
    {
    	$region_tb = $database->database_fetch_assoc($database->database_query(«SELECT region_id, name FROM region WHERE region_id=’».$_POST['dhtmlgoodies_region'].»‘ LIMIT 1?));
    	if(strlen($region_tb[name]) > 1)
    		$region .= "<option value='" . $region_tb[region_id] . "' SELECTED'" . $region_tb[name] . "</option>\n";
    }
    
    if(isset($_POST['dhtmlgoodies_city']))
    {
    	$city_tb = $database->database_fetch_assoc($database->database_query("SELECT city_id, name FROM city WHERE city_id='".$_POST['dhtmlgoodies_city']."' LIMIT 1"));
    	if(strlen($city_tb[name]) > 1)
    		$city .= "<option value='" . $city_tb[city_id] . "' SELECTED>» . $city_tb[name] . "</option>\n";
    }
    
    $smarty->assign('country', $country);
    $smarty->assign('region', $region);
    $smarty->assign('city', $city);
    // END GET COUNTRY, REGION AND CITY
  2. Открыть: search_advanced.tpl

    Найти

    </div>
    {/section}
    {/section}
    {/section}

    Добавить после
    Подсказка: Добавьте эти строки на новой строке после ранее найденных строк.

    <table cellpadding='0' cellspacing='0' style='padding-top: 5px;'>
    <tr><td>
    <div style='font-weight: bold; margin-top: 5px;'>Страна проживания</div>
    <select name='dhtmlgoodies_country' id='dhtmlgoodies_country' onchange="getRegionList(this.value);">
    <option id='op' value='-1'>[ Страна ]</option>
    {$country}</select>
    </div>
    <div style='font-weight: bold; margin-top: 5px;'>Регион проживания</div>
    <select name='dhtmlgoodies_region' id='dhtmlgoodies_region' onchange="getCityList(this.value);">
    <option id='op' value='-1'>[ Регион ]</option>
    {$region}</select>
    </div>
    <div style='font-weight: bold; margin-top: 5px;'>Город проживания</div>
    <select name='dhtmlgoodies_city' id='dhtmlgoodies_city'>
    <option id='op' value='-1'>[ Город ]</option>
    {$city}</select>
    </div>
    </td></tr>
    </table>

Все! Найти участников теперь можно по стране, региону и городу проживания.

Скачать статью в формате word (.doc)

Вы ожидали больше шагов? Извините, что все так просто. Если у Вас возникнут вопросы, пишите, разберемся.

Автор: Евтеев Евгений Александрович