Мне и моему другу захотелось создать свою социальную сеть, перебрали множество движков и остановились на SocialEngine Excalibur 3.15. По нашему мнению, SocialEngine Excalibur — это отличный движок для создания своей социальной сети, множество настроек, плагинов, но самое главное — серьезно мощный и простой в понимании код скриптов. Если имеются знания в таких языках как html, php и JavaScript, можно с легкостью переписать код скриптов SocialEngine под свои нужды.
У нас возникла проблема, когда необходимо было добавить новые поля в профиль участника: страну, регион и город. В скрипте 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> <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];
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];
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.
Автор: Евтеев Евгений Александрович
