Мне и моему другу захотелось создать свою социальную сеть, перебрали множество движков и остановились на 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.
Автор: Евтеев Евгений Александрович