LavIgor, я не знаю, что я использовал. Совершенно не владею терминами.
Вообщем, контроллер
Код: Выделить всё
<?php
/**
*
* @package phpBB Extension - fleaMarket
* @copyright (c) 2013 phpBB Group
* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2
*
*/
namespace kimiv\fleaMarket\controller;
use Symfony\Component\HttpFoundation\Response;
class fm_register
{
protected $config;
protected $db;
protected $auth;
protected $template;
protected $user;
protected $helper;
protected $phpbb_root_path;
protected $php_ext;
public function __construct(\phpbb\config\config $config, \phpbb\request\request_interface $request, \phpbb\pagination $pagination, \phpbb\db\driver\driver_interface $db, \phpbb\auth\auth $auth, \phpbb\template\template $template, \phpbb\user $user, \phpbb\controller\helper $helper, $phpbb_root_path, $php_ext, $table_prefix)
{
$this->config = $config;
$this->request = $request;
$this->pagination = $pagination;
$this->db = $db;
$this->auth = $auth;
$this->template = $template;
$this->user = $user;
$this->helper = $helper;
$this->phpbb_root_path = $phpbb_root_path;
$this->php_ext = $php_ext;
$this->table_prefix = $table_prefix;
define(__NAMESPACE__ . '\FM_COUNTRY_TABLE', $this->table_prefix . 'fm_country');
define(__NAMESPACE__ . '\FM_USERS_TABLE', $this->table_prefix . 'fm_users');
}
public function main()
{
//$start = $this->request->variable('start', 0);
//$total_count = 0;
//$per_page = 5;
//$sql = 'SELECT COUNT(id) as total
// FROM ' . FM_USERS_TABLE . '';
//$result = $this->db->sql_query($sql);
//$row = $this->db->sql_fetchrow($result);
//$total_count = $row['total'];
//$this->db->sql_freeresult($result);
//$pagination_url = append_sid("{$this->phpbb_root_path}mytest");
//$this->pagination->generate_template_pagination($pagination_url, 'pagination', 'start', $total_count, $per_page, $start);
// Подготовка списка стран
$sql = 'SELECT *
FROM ' . FM_COUNTRY_TABLE;
$result = $this->db->sql_query($sql);
$list_country = '<option value="0">' . $this->user->lang('FM_NOT_CHOSEN') . '</option>';
while ($row = $this->db->sql_fetchrow($result))
{
$key = $row['country_id'];
$value = $row['country_name'];
$list_country .= '<option value="' . $key . '">' . $value . '</option>';
}
//Output the page
$this->template->assign_vars(array(
'S_FM_COUNTRY' => $list_country,
'FM_REGISTER' => $this->user->lang('FM_TEXT').' - '.$this->user->lang('REGISTER'),
// 'PAGE_NUMBER' => $this->pagination->on_page($total_count, $per_page, $start),
));
// Add to navlinks
$this->template->assign_block_vars_array('navlinks', array(
array(
'FORUM_NAME' => $this->user->lang('FM_TEXT'),
'U_VIEW_FORUM' => $this->helper->route('kimiv_fleaMarket_controller'),
),
array(
'FORUM_NAME' => $this->user->lang('REGISTER'),
'U_VIEW_FORUM' => $this->helper->route('kimiv_fm_register_controller'),
),
));
page_header($this->user->lang('FM_TEXT').' - '.$this->user->lang('REGISTER'));
$this->template->set_filenames(array('body' => 'fm_register.html'));
page_footer();
return new Response($this->template->return_display('body'), 200);
}
}
Шаблон
Код: Выделить всё
<!-- INCLUDE overall_header.html -->
<!-- INCLUDEJS @kimiv_fleaMarket/fm_register.js -->
<form id="register" name="register" method="post" action="{S_UCP_ACTION}"{S_FORM_ENCTYPE}>
<div class="panel">
<div class="inner">
<h2>{SITENAME} - {L_FM_TEXT} - {L_REGISTER}</h2>
<fieldset class="fields2">
<div class="column1">
<dl>
<dt><label for="fm_country">{L_FM_COUNTRY}{L_COLON}</label></dt>
<dd><select name="fm_country" id="fm_country" tabindex="1" title="{L_FM_COUNTRY}">{S_FM_COUNTRY}</select></dd>
</dl>
<dl>
<dt><label for="fm_region">{L_FM_REGION}{L_COLON}</label></dt>
<dd><select name="fm_region" id="fm_region" tabindex="2" onchange="change_fm_region(this.value); return false;" title="{L_FM_REGION}">{S_FM_REGION}</select></dd>
</dl>
<dl>
<dt><label for="fm_city">{L_FM_CITY}{L_COLON}</label><br /><span>{L_FM_OFFICIAL_NAME}</span></dt>
<dd><input name="fm_city" id="fm_city" tabindex="3" type="text" size="35" value="{FM_CITY}" class="inputbox autowidth" title="{L_FM_CITY}" /></dd>
</dl>
<dl>
<dt><label for="fm_currency_view">{L_FM_CURRENCY_VIEW}{L_COLON}</label></dt>
<dd><select name="fm_currency_view" id="fm_currency_view" tabindex="4" onchange="change_fm_currency_view(this.value); return false;" title="{L_FM_CURRENCY_VIEW}">{S_NOT_CHOSEN}</select></dd>
</dl>
<dl>
<dt><label for="fm_currency_sale">{L_FM_CURRENCY_SALE}{L_COLON}</label></dt>
<dd><select name="fm_currency_sale" id="fm_currency_sale" tabindex="5" onchange="change_fm_currency_sale(this.value); return false;" title="{L_FM_CURRENCY_SALE}">{S_NOT_CHOSEN}</select></dd>
</dl>
<dl>
<dt><label for="fm_info_seller">{L_FM_INFO_SELLER}{L_COLON}</label><br /><span>{L_FM_INFO_EXPLAIN}</span></dt>
<dd><textarea name="fm_info_seller" id="fm_info_seller" tabindex="6" cols="29" rows="4" value="{FM_INFO_SELLER}" class="inputbox autowidth" title="{L_FM_INFO_SELLER}"></textarea></dd>
</dl>
<dl>
<dt><label for="fm_info_buyer">{L_FM_INFO_BUYER}{L_COLON}</label><br /><span>{L_FM_INFO_EXPLAIN}</span></dt>
<dd><textarea name="fm_info_buyer" id="fm_info_buyer" tabindex="7" cols="29" rows="4" value="{FM_INFO_BUYER}" class="inputbox autowidth" title="{L_FM_INFO_BUYER}"></textarea></dd>
</dl>
</div>
<div class="column2">
<div class="navbar">
<div class="inner">
<div class="fm_options">
<label for="fm_options_delivery">{L_FM_OPTIONS_DELIVERY}{L_COLON}</label>
</div>
<label for="fm_pickup"><input type="checkbox" name="fm_pickup" id="fm_pickup" tabindex="8"> {L_FM_PICKUP}</label><br />
<label for="fm_meeting"><input type="checkbox" name="fm_meeting" id="fm_meeting" tabindex="9"> {L_FM_MEETING}</label><br />
<label for="fm_mailing"><input type="checkbox" name="fm_mailing" id="fm_mailing" tabindex="10"> {L_FM_MAILING}</label><br />
<label for="fm_sending_tc_self"><input type="checkbox" name="fm_sending_tc_self" id="fm_sending_tc_self" tabindex="11"> {L_FM_SENDING_TC_SELF}</label><br />
<label for="fm_sending_tc_pickup"><input type="checkbox" name="fm_sending_tc_pickup" id="fm_sending_tc_pickup" tabindex="12"> {L_FM_SENDING_TC_PICKUP}</label><br />
<label for="fm_delivery_itself"><input type="checkbox" name="fm_delivery_itself" id="fm_delivery_itself" tabindex="13"> {L_FM_DELIVERY_ITSELF}</label><br />
<label for="fm_sending_courier"><input type="checkbox" name="fm_sending_courier" id="fm_sending_courier" tabindex="14"> {L_FM_SENDING_COURIER}</label><br />
<dl>
<dt><label for="fm_add_delivery">{L_FM_ADDITIONAL_TERMS}{L_COLON}</label></dt>
<dd><textarea name="fm_add_delivery" id="fm_add_delivery" tabindex="15" cols="29" rows="2" value="{FM_ADD_DELIVERY}" class="inputbox autowidth" title="{L_FM_ADDITIONAL_TERMS}"></textarea></dd>
</dl>
</div>
</div><br>
<div class="navbar">
<div class="inner">
<div class="fm_options">
<label for="fm_options_payment">{L_FM_OPTIONS_PAYMENT}{L_COLON}</label>
</div>
<label for="fm_cash"><input type="checkbox" name="fm_cash" id="fm_cash" tabindex="16"> {L_FM_CASH}</label><br />
<label for="fm_on_mobile"><input type="checkbox" name="fm_on_mobile" id="fm_on_mobile" tabindex="17"> {L_FM_ON_MOBILE}</label><br />
<label for="fm_transfer"><input type="checkbox" name="fm_transfer" id="fm_transfer" tabindex="18"> {L_FM_TRANSFER}</label><br />
<label for="fm_transfer_card"><input type="checkbox" name="fm_transfer_card" id="fm_transfer_card" tabindex="19"> {L_FM_TRANSFER_CARD}</label><br />
<label for="fm_cashless_payment"><input type="checkbox" name="fm_cashless_payment" id="fm_cashless_payment" tabindex="20"> {L_FM_CASHLESS_PAYMENT}</label><br />
<label for="fm_imposed_payment"><input type="checkbox" name="fm_imposed_payment" id="fm_imposed_payment" tabindex="21"> {L_FM_IMPOSED_PAYMENT}</label><br />
<label for="fm_postal_transfer"><input type="checkbox" name="fm_postal_transfer" id="fm_postal_transfer" tabindex="22"> {L_FM_POSTAL_TRANSFER}</label><br />
<label for="fm_e_money"><input type="checkbox" name="fm_e_money" id="fm_e_money" tabindex="23"> {L_FM_E_MONEY}</label><br />
<dl>
<dt><label for="fm_add_payment">{L_FM_ADDITIONAL_TERMS}{L_COLON}</label></dt>
<dd><textarea name="fm_add_payment" id="fm_add_payment" tabindex="15" cols="29" rows="2" value="{FM_ADD_PAYMENT}" class="inputbox autowidth" title="{L_FM_ADDITIONAL_TERMS}"></textarea></dd>
</dl>
</div>
</div>
</div>
</fieldset>
</div>
</div>
<div class="panel">
<div class="inner">
<fieldset class="submit-buttons">
{S_HIDDEN_FIELDS}
<input type="reset" value="{L_RESET}" name="reset" class="button2" />
<input type="submit" tabindex="9" name="submit" id="submit" value="{L_SUBMIT}" class="button1 default-submit-action" />
{S_FORM_TOKEN}
</fieldset>
</div>
</div>
</form>
<!-- INCLUDE overall_footer.html -->
Скрипт
Код: Выделить всё
// При полной загрузке документа мы начинаем определять события
$(document).ready(function ()
{
// На выборе селекта страны — вешаем событие, функция будет брать значение этого селекта
// и с помощью ajax запроса получать список регионов для вставки в следующий селект
$('#fm_country').change(function ()
{
// В переменную country_id положим значение селекта (выбранная страна)
var country_id = $(this).val();
// Если значение селекта равно 0, т.е. не выбрана страна, то мы не будем ничего делать
if (country_id == '0')
{
$('#fm_region').html('<option>- выберите регион -</option>');
$('#fm_region').attr('disabled', true);
return(false);
}
// Очищаем второй селект с регионами и блокируем его через атрибут disabled
// туда мы будем класть результат запроса
$('#fm_region').attr('disabled', true);
$('#fm_region').html('<option>загрузка...</option>');
// url запроса регионов
var url = 'ext/kimiv/fleaMarket/controller/fm_Get_Regions.php';
// GET'овый AJAX запрос. Данные будем кодировать с помощью JSON
$.get(
url,
"id=" + country_id,
function (result)
{
if (result.type == 'error')
{
alert('error');
return(false);
}
else
{
// проходимся по пришедшему от бэк-энда массиву циклом
var options = '';
$(result.regions).each(function()
{
// * и добавляем в селект по региону
options += '<option value="' + $(this).attr('region_id') + '">' + $(this).attr('region_name') + '</option>';
});
$('#fm_region').html('<option value="0">- выберите регион -</option>'+options);
$('#fm_region').attr('disabled', false);
}
},
"json"
);
});
});
Серверная часть выборки региона
Код: Выделить всё
<?php
include '../../../../config.php';
$link = mysql_connect($dbhost, $dbuser, $dbpasswd);
mysql_query ("set character_set_client='utf8'");
mysql_query ("set character_set_results='utf8'");
mysql_query ("set collation_connection='utf8_general_ci'");
mysql_select_db($dbname, $link);
$country_id = @intval($_GET['id']);
$regs=mysql_query("SELECT region_name FROM ".$table_prefix."fm_region WHERE country_id=$country_id");
if ($regs)
{
$num = mysql_num_rows($regs);
$i = 0;
while ($i < $num)
{
$regions[$i] = mysql_fetch_assoc($regs);
$i++;
}
$result = array('regions'=>$regions);
}
else
{
$result = array('type'=>'error');
}
print json_encode($result);
?>
Регионы подгружаются! Всё работает, как надо!
Image 5.png
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Ты должен делать добро из зла, потому что его больше не из чего делать. Уоренн Роберт Пенн.