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

Авг 12
2009

SocialEngine Excalibur

Мне и моему другу захотелось создать свою социальную сеть, перебрали множество движков и остановились на SocialEngine Excalibur 3.15. По нашему мнению, SocialEngine Excalibur – это отличный движок для создания своей социальной сети, множество настроек, плагинов, но самое главное – серьезно мощный и простой в понимании код скриптов. Если имеются знания в таких языках как html, php и JavaScript, можно с легкостью переписать код скриптов SocialEngine Excalibur под свои нужды.

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

Сначала искали ответ на этот вопрос на форуме SocialEngine Excalibur, даже создали свою тему, но ответа так и не получили. Я решил, что ответ мы не получим и если получим, то не скоро. Было принято решение сделать все своими руками, применив знания программирования.

SocialEngine Excalibur

Для того чтобы поля «Страна», «Регион» и «Город» появились в SocialEngine Excalibur в разделе «Редактировать профиль» необходимо:

  1. Импортировать данные из файла cities.sql в Вашу базу данных, выполнив запрос SQL или импорт файла целиком в phpmyadmin.
  2. Открыть: 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

  3. Открыть: header_global.tpl
    Найти

    var countryCode = sel.options[sel.selectedIndex].value;

    Заменить

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

    var countryCode = sel;

    Найти

    var regionCode = sel.options[sel.selectedIndex].value;

    Заменить

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

    var regionCode = sel;

  4. Открыть: 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

Комментарии закрыты.

Статистика