Добавление полей страна, регион и город в SocialEngine Excalibur
2009
SocialEngine Excalibur
Мне и моему другу захотелось создать свою социальную сеть, перебрали множество движков и остановились на SocialEngine Excalibur 3.15. По нашему мнению, SocialEngine Excalibur – это отличный движок для создания своей социальной сети, множество настроек, плагинов, но самое главное – серьезно мощный и простой в понимании код скриптов. Если имеются знания в таких языках как html, php и JavaScript, можно с легкостью переписать код скриптов SocialEngine Excalibur под свои нужды.
У нас возникла проблема, когда необходимо было добавить новые поля в профиль участника: страну, регион и город. В скрипте SocialEngine Excalibur, который имеется у нас, была база с этими данными, в файлах присутствовал код, ответственен за работу с данными полями. Но возник вопрос, почему при редактировании профиля не было этих полей?
Сначала искали ответ на этот вопрос на форуме SocialEngine Excalibur, даже создали свою тему, но ответа так и не получили. Я решил, что ответ мы не получим и если получим, то не скоро. Было принято решение сделать все своими руками, применив знания программирования.
SocialEngine Excalibur
Для того чтобы поля «Страна», «Регион» и «Город» появились в SocialEngine Excalibur в разделе «Редактировать профиль» необходимо:
- Импортировать данные из файла cities.sql в Вашу базу данных, выполнив запрос SQL или импорт файла целиком в phpmyadmin.
- Открыть: user_editprofile.tpl
Найти
Подсказка: Возможно, здесь приведена не вся строка, а лишь ее часть.<div class='form_desc'>{lang_print id=$fields[field_loop].field_desc}</div>{capture assign=’current_subnet’}{lang_print id=$user->subnet_info.subnet_name}{/capture}
{if $fields[field_loop].field_id == $setting.setting_subnet_field1_id || $fields[field_loop].field_id == $setting.setting_subnet_field2_id}{lang_sprintf id=766 1=$current_subnet}{/if}
{capture assign=’field_error’}{lang_print id=$fields[field_loop].field_error}{/capture}
{if $field_error != «»}<div class=’form_error’><img src=’./images/icons/error16.gif’ border=’0′ class=’icon’> {$field_error}</div>{/if}
</td>
</tr>
{/section}
Добавить после
Подсказка: Добавьте эти строки на новой строке после ранее найденных строк.
{if $cat_id == 3}<tr>
<td class=’form1′ width=’150′>Страна</td>
<td class=’form2′>
<div><select name=’dhtmlgoodies_country’ id=’dhtmlgoodies_country’ onchange=»getRegionList(this.value);»>
<option id=’op’ value=’-1′></option>
{$country}</select>
</div>
<div id=’dhtmlgoodies_country’>
Страна, в которой Вы в текущий момент проживаете.
</div>
<div class=’form_desc’></div>
</td>
</tr>
<tr>
<tr>
<td class=’form1′ width=’150′>Регион</td>
<td class=’form2′>
<div><select name=’dhtmlgoodies_region’ id=’dhtmlgoodies_region’ onchange=»getCityList(this.value);»>
<option id=’op’ value=’-1′></option>
{$region}</select>
</div>
<div id=’dhtmlgoodies_region’>
Регион, в котором Вы в текущий момент проживаете.
</div>
<div class=’form_desc’></div>
</td>
</tr>
<tr>
<td class=’form1′ width=’150′>Город</td>
<td class=’form2′>
<div><select name=’dhtmlgoodies_city’ id=’dhtmlgoodies_city’>
<option id=’op’ value=’-1′></option>
{$city}</select>
</div>
<div id=’dhtmlgoodies_city’>
Город, в котором Вы в текущий момент проживаете.
</div>
<div class=’form_desc’></div>
</td>
</tr>
{/if}
Условие {if $cat_id == 3} отвечает за отображение полей только в подкатегории «Персональная информация», это нужно если Вы собираетесь создавать дополнительные подкатегории, как, например, у нас создана {$country}, {$region} и {$city} – данные, которые формируются php-скриптом в файле user_editprofile.php
- Открыть: header_global.tpl
Найтиvar countryCode = sel.options[sel.selectedIndex].value;Заменить
Подсказка: Произведите замену ранее найденных строк.
var countryCode = sel;Найти
var regionCode = sel.options[sel.selectedIndex].value;Заменить
Подсказка: Произведите замену ранее найденных строк.
var regionCode = sel;
Открыть: user_editprofile.php
Найти
if(isset($_POST['dhtmlgoodies_country'])) {$country=$_POST['dhtmlgoodies_country'];
$sql = «SELECT profilevalue_7 FROM cites_profilevalues WHERE profilevalue_id=$id_ex LIMIT 1″;
if(!$database->database_query($sql))
{
$query=»INSERT INTO ‘cites_profilevalues’ (‘profilevalue_id’, ‘profilevalue_7′) VALUES ($id_ex,’$country’)»;
$database->database_query($query);
}
else
{
$query=»UPDATE ‘cites_profilevalues’ SET ‘profilevalue_7′ = ‘$country’ WHERE ‘cites_profilevalues’.'profilevalue_id’ = $id_ex»;
$database->database_query($query);
}
}
if(isset($_POST['dhtmlgoodies_region'])) {
$region=$_POST['dhtmlgoodies_region'];
$sql = «SELECT profilevalue_8 FROM cites_profilevalues WHERE profilevalue_id=$id_ex LIMIT 1″;
if(!$database->database_query($sql))
{
$query=»INSERT INTO ‘cites_profilevalues’ (‘profilevalue_id’, ‘profilevalue_8′) VALUES ($id_ex,’$region’)»;
$database->database_query($query);
}
else
{
$query=»UPDATE ‘cites_profilevalues’ SET ‘profilevalue_8′ = ‘$region’ WHERE ‘cites_profilevalues’.'profilevalue_id’ = $id_ex»;
$database->database_query($query);
}
}
if(isset($_POST['dhtmlgoodies_city'])) {
$city=$_POST['dhtmlgoodies_city'];
$sql = «SELECT profilevalue_9 FROM cites_profilevalues WHERE profilevalue_id=$id_ex LIMIT 1″;
if(!$database->database_query($sql))
{
$query=»INSERT INTO ‘cites_profilevalues’ (‘profilevalue_id’, ‘profilevalue_9′) VALUES ($id_ex,’$city’)»;
$database->database_query($query);
}
else
{
$query=»UPDATE ‘cites_profilevalues’ SET ‘profilevalue_9′ = ‘$city’ WHERE ‘cites_profilevalues’.'profilevalue_id’ = $id_ex»;
$database->database_query($query);
}
}
Заменить
Подсказка: Произведите замену ранее найденных строк.
if(isset($_POST['dhtmlgoodies_country'])){
$country=$_POST['dhtmlgoodies_country'];
$country_tb = $database->database_fetch_assoc($database->database_query(«SELECT profilevalue_id FROM cites_profilevalues WHERE profilevalue_id=’».$user->user_info['user_id'].»‘ LIMIT 1″));
$country_id = $country_tb[profilevalue_id];
if($country_id <= 0)
{
$query=»INSERT INTO ‘cites_profilevalues’ (‘profilevalue_id’, ‘profilevalue_7′) VALUES ($id_ex,’$country’)»;
$database->database_query($query);
}
else
{
$query=»UPDATE ‘cites_profilevalues’ SET ‘profilevalue_7′ = ‘$country’ WHERE ‘cites_profilevalues’.'profilevalue_id’ = ‘».$user->user_info['user_id'].»‘»;
$database->database_query($query);
}
}
if(isset($_POST['dhtmlgoodies_region']))
{
$region=$_POST['dhtmlgoodies_region'];
$region_tb = $database->database_fetch_assoc($database->database_query(«SELECT profilevalue_id FROM cites_profilevalues WHERE profilevalue_id=’».$user->user_info['user_id'].»‘ LIMIT 1″));
$region_id = $region_tb[profilevalue_id];
//$sql = «SELECT profilevalue_8 FROM cites_profilevalues WHERE profilevalue_id=$id_ex LIMIT 1″;
if($region_id <= 0)
{
$query=»INSERT INTO ‘cites_profilevalues’ (‘profilevalue_id’, ‘profilevalue_8′) VALUES ($id_ex,’$region’)»;
$database->database_query($query);
}
else
{
$query=»UPDATE ‘cites_profilevalues’ SET ‘profilevalue_8′ = ‘$region’ WHERE ‘cites_profilevalues’.'profilevalue_id’ = ‘».$user->user_info['user_id'].»‘»;
$database->database_query($query);
}
}
if(isset($_POST['dhtmlgoodies_city']))
{
$city=$_POST['dhtmlgoodies_city'];
$city_tb = $database->database_fetch_assoc($database->database_query(«SELECT profilevalue_id FROM cites_profilevalues WHERE profilevalue_id=’».$user->user_info['user_id'].»‘ LIMIT 1″));
$city_id = $city_tb[profilevalue_id];
//$sql = «SELECT profilevalue_9 FROM cites_profilevalues WHERE profilevalue_id=’».$user->user_info['user_id'].»‘ LIMIT 1″;
if($city_id <= 0)
{
$query=»INSERT INTO ‘cites_profilevalues’ (‘profilevalue_id’, ‘profilevalue_9′) VALUES ($id_ex,’$city’)»;
$database->database_query($query);
}
else
{
$query=»UPDATE ‘cites_profilevalues’ SET ‘profilevalue_9′ = ‘$city’ WHERE ‘cites_profilevalues’.'profilevalue_id’ = ‘».$user->user_info['user_id'].»‘»;
$database->database_query($query);
}
}
Найти
$sql = $database->database_query ("SELECT * FROM country");$countries = array ();
while ($country = $database->database_fetch_assoc ($sql))
{
$countries[] = $country;
}
$smarty->assign(‘countries’, $countries);
Заменить
Подсказка: Произведите замену ранее найденных строк.
$country_tb = $database->database_fetch_assoc($database->database_query("SELECT profilevalue_7 FROM cites_profilevalues WHERE profilevalue_id='".$user->user_info['user_id']."' LIMIT 1"));$country_id = $country_tb[profilevalue_7];
$sql = $database->database_query («SELECT * FROM country»);
while ($country_bd = $database->database_fetch_assoc ($sql))
{
if($country_id == $country_bd[country_id])
$country_sel = » SELECTED»;
else
$country_sel = «»;
$country .= «<option value=’» . $country_bd[country_id] . «‘» . $country_sel . «>» . $country_bd[name] . «</option>\n»;
}
$region_tb = $database->database_fetch_assoc($database->database_query(«SELECT profilevalue_8 FROM cites_profilevalues WHERE profilevalue_id=’».$user->user_info['user_id'].»‘ LIMIT 1″));
$region_id = $region_tb[profilevalue_8];
if($region_id > 0)
{
$region_tb = $database->database_fetch_assoc($database->database_query(«SELECT region_id, name FROM region WHERE region_id=’».$region_id.»‘ LIMIT 1″));
$region .= «<option value=’» . $region_tb[region_id] . «‘ SELECTED>» . $region_tb[name] . «</option>\n»;
}
else
{
$sql = $database->database_query («SELECT * FROM region»);
while ($region_bd = $database->database_fetch_assoc ($sql))
{
if($region_id == $region_bd[region_id])
$region_sel = » SELECTED»;
else
$region_sel = «»;
$region .= «<option value=’» . $region_bd[region_id] . «‘» . $region_sel . «>» . $region_bd[name] . «</option>\n»;
}
}
$city_tb = $database->database_fetch_assoc($database->database_query(«SELECT profilevalue_9 FROM cites_profilevalues WHERE profilevalue_id=’».$user->user_info['user_id'].»‘ LIMIT 1″));
$city_id = $city_tb[profilevalue_9];
if($city_id > 0)
{
$city_tb = $database->database_fetch_assoc($database->database_query(«SELECT city_id, name FROM city WHERE city_id=’».$city_id.»‘ LIMIT 1″));
$city .= «<option value=’» . $city_tb[city_id] . «‘ SELECTED>» . $city_tb[name] . «</option>\n»;
}
else
{
$sql = $database->database_query («SELECT * FROM city ORDER BY name ASC«);
while ($city_bd = $database->database_fetch_assoc ($sql))
{
if($city_id == $city_bd[city_id])
$city_sel = » SELECTED»;
else
$city_sel = «»;
$city .= «<option value=’» . $city_bd[city_id] . «‘» . $city_sel . «>» . $city_bd[name] . «</option>\n»;
}
}
$smarty->assign(‘country’, $country);
$smarty->assign(‘region’, $region);
$smarty->assign(‘city’, $city);
Если Вы выполнили все действия правильно, то теперь участники Вашей социальной сети SocialEngine Excalibur могут указать в профиле страну, регион и город проживания.
Также данную статью можно скачать в формате doc.
Автор: Евтеев Евгений Александрович
Email: evteev_e2003@mail.ru