Opencart 1.5.3.1 で Web サイトを構築していますが、アフィリエイト登録ページで問題が発生します。
http://www.officexinh.com/index.php?route=affiliate/register
(言語: ベトナム語 - 地域 / 州は「Quận / Huyện:」)
ユーザーが新しいアカウントを作成すると、「アフィリエイト」登録ページの読み込みが非常に遅くなり、地域/州ボックスに値が表示されません。
しかし、私の「アカウント」登録ページにはこのバグはありません!!!
1.catalog/controller/affiliate/register.php
<?php
class ControllerAffiliateRegister extends Controller {
private $error = array();
public function index() {
if ($this->affiliate->isLogged()) {
$this->redirect($this->url->link('affiliate/account', '', 'SSL'));
}
$this->language->load('affiliate/register');
$this->document->setTitle($this->language->get('heading_title'));
$this->load->model('affiliate/affiliate');
if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
$this->model_affiliate_affiliate->addAffiliate($this->request->post);
$this->affiliate->login($this->request->post['email'], $this->request->post['password']);
$this->redirect($this->url->link('affiliate/success'));
}
$this->data['breadcrumbs'] = array();
$this->data['breadcrumbs'][] = array(
'text' => $this->language->get('text_home'),
'href' => $this->url->link('common/home'),
'separator' => false
);
$this->data['breadcrumbs'][] = array(
'text' => $this->language->get('text_account'),
'href' => $this->url->link('affiliate/account', '', 'SSL'),
'separator' => $this->language->get('text_separator')
);
$this->data['breadcrumbs'][] = array(
'text' => $this->language->get('text_register'),
'href' => $this->url->link('affiliate/register', '', 'SSL'),
'separator' => $this->language->get('text_separator')
);
$this->data['heading_title'] = $this->language->get('heading_title');
$this->data['text_select'] = $this->language->get('text_select');
$this->data['text_none'] = $this->language->get('text_none');
$this->data['text_account_already'] = sprintf($this->language->get('text_account_already'), $this->url->link('affiliate/login', '', 'SSL'));
$this->data['text_signup'] = $this->language->get('text_signup');
$this->data['text_your_details'] = $this->language->get('text_your_details');
$this->data['text_your_address'] = $this->language->get('text_your_address');
$this->data['text_payment'] = $this->language->get('text_payment');
$this->data['text_your_password'] = $this->language->get('text_your_password');
$this->data['text_cheque'] = $this->language->get('text_cheque');
$this->data['text_paypal'] = $this->language->get('text_paypal');
$this->data['text_bank'] = $this->language->get('text_bank');
$this->data['entry_lastname'] = $this->language->get('entry_lastname');
$this->data['entry_firstname'] = $this->language->get('entry_firstname');
$this->data['entry_email'] = $this->language->get('entry_email');
$this->data['entry_telephone'] = $this->language->get('entry_telephone');
$this->data['entry_fax'] = $this->language->get('entry_fax');
$this->data['entry_company'] = $this->language->get('entry_company');
$this->data['entry_website'] = $this->language->get('entry_website');
$this->data['entry_address_1'] = $this->language->get('entry_address_1');
$this->data['entry_address_2'] = $this->language->get('entry_address_2');
$this->data['entry_postcode'] = $this->language->get('entry_postcode');
$this->data['entry_city'] = $this->language->get('entry_city');
$this->data['entry_country'] = $this->language->get('entry_country');
$this->data['entry_zone'] = $this->language->get('entry_zone');
$this->data['entry_tax'] = $this->language->get('entry_tax');
$this->data['entry_payment'] = $this->language->get('entry_payment');
$this->data['entry_cheque'] = $this->language->get('entry_cheque');
$this->data['entry_paypal'] = $this->language->get('entry_paypal');
$this->data['entry_bank_name'] = $this->language->get('entry_bank_name');
$this->data['entry_bank_branch_number'] = $this->language->get('entry_bank_branch_number');
$this->data['entry_bank_swift_code'] = $this->language->get('entry_bank_swift_code');
$this->data['entry_bank_account_name'] = $this->language->get('entry_bank_account_name');
$this->data['entry_bank_account_number'] = $this->language->get('entry_bank_account_number');
$this->data['entry_password'] = $this->language->get('entry_password');
$this->data['entry_confirm'] = $this->language->get('entry_confirm');
$this->data['button_continue'] = $this->language->get('button_continue');
if (isset($this->error['warning'])) {
$this->data['error_warning'] = $this->error['warning'];
} else {
$this->data['error_warning'] = '';
}
if (isset($this->error['lastname'])) {
$this->data['error_lastname'] = $this->error['lastname'];
} else {
$this->data['error_lastname'] = '';
}
if (isset($this->error['firstname'])) {
$this->data['error_firstname'] = $this->error['firstname'];
} else {
$this->data['error_firstname'] = '';
}
if (isset($this->error['email'])) {
$this->data['error_email'] = $this->error['email'];
} else {
$this->data['error_email'] = '';
}
if (isset($this->error['telephone'])) {
$this->data['error_telephone'] = $this->error['telephone'];
} else {
$this->data['error_telephone'] = '';
}
if (isset($this->error['password'])) {
$this->data['error_password'] = $this->error['password'];
} else {
$this->data['error_password'] = '';
}
if (isset($this->error['confirm'])) {
$this->data['error_confirm'] = $this->error['confirm'];
} else {
$this->data['error_confirm'] = '';
}
if (isset($this->error['address_1'])) {
$this->data['error_address_1'] = $this->error['address_1'];
} else {
$this->data['error_address_1'] = '';
}
if (isset($this->error['city'])) {
$this->data['error_city'] = $this->error['city'];
} else {
$this->data['error_city'] = '';
}
if (isset($this->error['postcode'])) {
$this->data['error_postcode'] = $this->error['postcode'];
} else {
$this->data['error_postcode'] = '';
}
if (isset($this->error['country'])) {
$this->data['error_country'] = $this->error['country'];
} else {
$this->data['error_country'] = '';
}
if (isset($this->error['zone'])) {
$this->data['error_zone'] = $this->error['zone'];
} else {
$this->data['error_zone'] = '';
}
$this->data['action'] = $this->url->link('affiliate/register', '', 'SSL');
if (isset($this->request->post['lastname'])) {
$this->data['lastname'] = $this->request->post['lastname'];
} else {
$this->data['lastname'] = '';
}
if (isset($this->request->post['firstname'])) {
$this->data['firstname'] = $this->request->post['firstname'];
} else {
$this->data['firstname'] = '';
}
if (isset($this->request->post['email'])) {
$this->data['email'] = $this->request->post['email'];
} else {
$this->data['email'] = '';
}
if (isset($this->request->post['telephone'])) {
$this->data['telephone'] = $this->request->post['telephone'];
} else {
$this->data['telephone'] = '';
}
if (isset($this->request->post['fax'])) {
$this->data['fax'] = $this->request->post['fax'];
} else {
$this->data['fax'] = '';
}
if (isset($this->request->post['company'])) {
$this->data['company'] = $this->request->post['company'];
} else {
$this->data['company'] = '';
}
if (isset($this->request->post['website'])) {
$this->data['website'] = $this->request->post['website'];
} else {
$this->data['website'] = '';
}
if (isset($this->request->post['address_1'])) {
$this->data['address_1'] = $this->request->post['address_1'];
} else {
$this->data['address_1'] = '';
}
if (isset($this->request->post['address_2'])) {
$this->data['address_2'] = $this->request->post['address_2'];
} else {
$this->data['address_2'] = '';
}
if (isset($this->request->post['postcode'])) {
$this->data['postcode'] = $this->request->post['postcode'];
} else {
$this->data['postcode'] = '';
}
if (isset($this->request->post['city'])) {
$this->data['city'] = $this->request->post['city'];
} else {
$this->data['city'] = '';
}
if (isset($this->request->post['country_id'])) {
$this->data['country_id'] = $this->request->post['country_id'];
} else {
$this->data['country_id'] = $this->config->get('config_country_id');
}
if (isset($this->request->post['zone_id'])) {
$this->data['zone_id'] = $this->request->post['zone_id'];
} else {
$this->data['zone_id'] = '';
}
$this->load->model('localisation/country');
$this->data['countries'] = $this->model_localisation_country->getCountries();
if (isset($this->request->post['tax'])) {
$this->data['tax'] = $this->request->post['tax'];
} else {
$this->data['tax'] = '';
}
if (isset($this->request->post['payment'])) {
$this->data['payment'] = $this->request->post['payment'];
} else {
$this->data['payment'] = 'cheque';
}
if (isset($this->request->post['cheque'])) {
$this->data['cheque'] = $this->request->post['cheque'];
} else {
$this->data['cheque'] = '';
}
if (isset($this->request->post['paypal'])) {
$this->data['paypal'] = $this->request->post['paypal'];
} else {
$this->data['paypal'] = '';
}
if (isset($this->request->post['bank_name'])) {
$this->data['bank_name'] = $this->request->post['bank_name'];
} else {
$this->data['bank_name'] = '';
}
if (isset($this->request->post['bank_branch_number'])) {
$this->data['bank_branch_number'] = $this->request->post['bank_branch_number'];
} else {
$this->data['bank_branch_number'] = '';
}
if (isset($this->request->post['bank_swift_code'])) {
$this->data['bank_swift_code'] = $this->request->post['bank_swift_code'];
} else {
$this->data['bank_swift_code'] = '';
}
if (isset($this->request->post['bank_account_name'])) {
$this->data['bank_account_name'] = $this->request->post['bank_account_name'];
} else {
$this->data['bank_account_name'] = '';
}
if (isset($this->request->post['bank_account_number'])) {
$this->data['bank_account_number'] = $this->request->post['bank_account_number'];
} else {
$this->data['bank_account_number'] = '';
}
if (isset($this->request->post['password'])) {
$this->data['password'] = $this->request->post['password'];
} else {
$this->data['password'] = '';
}
if (isset($this->request->post['confirm'])) {
$this->data['confirm'] = $this->request->post['confirm'];
} else {
$this->data['confirm'] = '';
}
if ($this->config->get('config_affiliate_id')) {
$this->load->model('catalog/information');
$information_info = $this->model_catalog_information->getInformation($this->config->get('config_affiliate_id'));
if ($information_info) {
$this->data['text_agree'] = sprintf($this->language->get('text_agree'), $this->url->link('information/information/info', 'information_id=' . $this->config->get('config_affiliate_id'), 'SSL'), $information_info['title'], $information_info['title']);
} else {
$this->data['text_agree'] = '';
}
} else {
$this->data['text_agree'] = '';
}
if (isset($this->request->post['agree'])) {
$this->data['agree'] = $this->request->post['agree'];
} else {
$this->data['agree'] = false;
}
if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/affiliate/register.tpl')) {
$this->template = $this->config->get('config_template') . '/template/affiliate/register.tpl';
} else {
$this->template = 'default/template/affiliate/register.tpl';
}
$this->children = array(
'common/column_left',
'common/column_right',
'common/content_top',
'common/content_bottom',
'common/footer',
'common/header'
);
$this->response->setOutput($this->render());
}
private function validate() {
if ((utf8_strlen($this->request->post['lastname']) < 1) || (utf8_strlen($this->request->post['lastname']) > 32)) {
$this->error['lastname'] = $this->language->get('error_lastname');
}
if ((utf8_strlen($this->request->post['firstname']) < 1) || (utf8_strlen($this->request->post['firstname']) > 32)) {
$this->error['firstname'] = $this->language->get('error_firstname');
}
if ((utf8_strlen($this->request->post['email']) > 96) || !preg_match('/^[^\@]+@.*\.[a-z]{2,6}$/i', $this->request->post['email'])) {
$this->error['email'] = $this->language->get('error_email');
}
if ($this->model_affiliate_affiliate->getTotalAffiliatesByEmail($this->request->post['email'])) {
$this->error['warning'] = $this->language->get('error_exists');
}
if ((utf8_strlen($this->request->post['telephone']) < 3) || (utf8_strlen($this->request->post['telephone']) > 32)) {
$this->error['telephone'] = $this->language->get('error_telephone');
}
if ((utf8_strlen($this->request->post['address_1']) < 3) || (utf8_strlen($this->request->post['address_1']) > 128)) {
$this->error['address_1'] = $this->language->get('error_address_1');
}
if ((utf8_strlen($this->request->post['city']) < 2) || (utf8_strlen($this->request->post['city']) > 128)) {
$this->error['city'] = $this->language->get('error_city');
}
$this->load->model('localisation/country');
$country_info = $this->model_localisation_country->getCountry($this->request->post['country_id']);
if ($country_info && $country_info['postcode_required'] && (utf8_strlen($this->request->post['postcode']) < 2) || (utf8_strlen($this->request->post['postcode']) > 10)) {
$this->error['postcode'] = $this->language->get('error_postcode');
}
if ($this->request->post['country_id'] == '') {
$this->error['country'] = $this->language->get('error_country');
}
if ($this->request->post['zone_id'] == '') {
$this->error['zone'] = $this->language->get('error_zone');
}
if ((utf8_strlen($this->request->post['password']) < 4) || (utf8_strlen($this->request->post['password']) > 20)) {
$this->error['password'] = $this->language->get('error_password');
}
if ($this->request->post['confirm'] != $this->request->post['password']) {
$this->error['confirm'] = $this->language->get('error_confirm');
}
if ($this->config->get('config_affiliate_id')) {
$this->load->model('catalog/information');
$information_info = $this->model_catalog_information->getInformation($this->config->get('config_affiliate_id'));
if ($information_info && !isset($this->request->post['agree'])) {
$this->error['warning'] = sprintf($this->language->get('error_agree'), $information_info['title']);
}
}
if (!$this->error) {
return true;
} else {
return false;
}
}
public function country() {
$json = array();
$this->load->model('localisation/country');
$country_info = $this->model_localisation_country->getCountry($this->request->get['country_id']);
if ($country_info) {
$this->load->model('localisation/zone');
$json = array(
'country_id' => $country_info['country_id'],
'name' => $country_info['name'],
'iso_code_2' => $country_info['iso_code_2'],
'iso_code_3' => $country_info['iso_code_3'],
'address_format' => $country_info['address_format'],
'postcode_required' => $country_info['postcode_required'],
'zone' => $this->model_localisation_zone->getZonesByCountryId($this->request->get['country_id']),
'status' => $country_info['status']
);
}
$this->response->setOutput(json_encode($json));
}
}
?>
2.catalog/controller/affiliate/register.tpl
I cut the first part of the full code because Stackoverflow allows the posted content not over 300000 characters. However, the fist part is default in Opencart installation...
</div>
<h2><?php echo $text_your_address; ?></h2>
<div class="content">
<table class="form">
<tr>
<td><?php echo $entry_company; ?></td>
<td><input type="text" size="50" name="company" value="<?php echo $company; ?>" /></td>
</tr>
<tr>
<td><?php echo $entry_website; ?></td>
<td><input type="text" name="website" value="<?php echo $website; ?>" /></td>
</tr>
<tr>
<td><span class="required">*</span> <?php echo $entry_address_1; ?></td>
<td><input type="text" size="50" name="address_1" value="<?php echo $address_1; ?>" />
<?php if ($error_address_1) { ?>
<span class="error"><?php echo $error_address_1; ?></span>
<?php } ?></td>
</tr>
<tr>
<td><?php echo $entry_address_2; ?></td>
<td><input type="text" size="50" name="address_2" value="<?php echo $address_2; ?>" /></td>
</tr>
<tr>
<td><span class="required">*</span> <?php echo $entry_city; ?></td>
<td><input type="text" size="50" name="city" value="<?php echo $city; ?>" />
<?php if ($error_city) { ?>
<span class="error"><?php echo $error_city; ?></span>
<?php } ?></td>
</tr>
<tr>
<td><span id="postcode-required" class="required">*</span> <?php echo $entry_postcode; ?></td>
<td><input type="text" size="50" name="postcode" value="<?php echo $postcode; ?>" />
<?php if ($error_postcode) { ?>
<span class="error"><?php echo $error_postcode; ?></span>
<?php } ?></td>
</tr>
<tr>
<td><span class="required">*</span> <?php echo $entry_country; ?></td>
<td><select name="country_id" onchange="$('select[name=\'zone_id\']').load('index.php?route=account/register/zone&country_id=' + this.value + '&zone_id=<?php echo $zone_id; ?>');">
<option value="false"><?php echo $text_select; ?></option>
<?php foreach ($countries as $country) { ?>
<?php if ($country['country_id'] == $country_id) { ?>
<option value="<?php echo $country['country_id']; ?>" selected="selected"><?php echo $country['name']; ?></option>
<?php } else { ?>
<option value="<?php echo $country['country_id']; ?>"><?php echo $country['name']; ?></option>
<?php } ?>
<?php } ?>
</select>
<?php if ($error_country) { ?>
<span class="error"><?php echo $error_country; ?></span>
<?php } ?></td>
</tr>
<tr>
<td><span class="required">*</span> <?php echo $entry_zone; ?></td>
<td><select name="zone_id">
</select>
<?php if ($error_zone) { ?>
<span class="error"><?php echo $error_zone; ?></span>
<?php } ?></td>
</tr>
</table>
</div>
<h2><?php echo $text_payment; ?></h2>
<div class="content">
<table class="form">
<tbody>
<tr>
<td><?php echo $entry_tax; ?></td>
<td><input type="text" size="50" name="tax" value="<?php echo $tax; ?>" /></td>
</tr>
<tr>
<td><?php echo $entry_payment; ?></td>
<td><?php if ($payment == 'cheque') { ?>
<input type="radio" name="payment" value="cheque" id="cheque" checked="checked" />
<?php } else { ?>
<input type="radio" name="payment" value="cheque" id="cheque" />
<?php } ?>
<label for="cheque"><?php echo $text_cheque; ?></label>
<?php if ($payment == 'paypal') { ?>
<input type="radio" name="payment" value="paypal" id="paypal" checked="checked" />
<?php } else { ?>
<input type="radio" name="payment" value="paypal" id="paypal" />
<?php } ?>
<label for="paypal"><?php echo $text_paypal; ?></label>
<?php if ($payment == 'bank') { ?>
<input type="radio" name="payment" value="bank" id="bank" checked="checked" />
<?php } else { ?>
<input type="radio" name="payment" value="bank" id="bank" />
<?php } ?>
<label for="bank"><?php echo $text_bank; ?></label></td>
</tr>
</tbody>
<tbody id="payment-cheque" class="payment">
<tr>
<td><?php echo $entry_cheque; ?></td>
<td><input type="text" size="50" name="cheque" value="<?php echo $cheque; ?>" /></td>
</tr>
</tbody>
<tbody class="payment" id="payment-paypal">
<tr>
<td><?php echo $entry_paypal; ?></td>
<td><input type="text" size="50" name="paypal" value="<?php echo $paypal; ?>" /></td>
</tr>
</tbody>
<tbody id="payment-bank" class="payment">
<tr>
<td><?php echo $entry_bank_name; ?></td>
<td><input type="text" size="50" name="bank_name" value="<?php echo $bank_name; ?>" /></td>
</tr>
<tr>
<td><?php echo $entry_bank_branch_number; ?></td>
<td><input type="text" name="bank_branch_number" value="<?php echo $bank_branch_number; ?>" /></td>
</tr>
<tr>
<td><?php echo $entry_bank_swift_code; ?></td>
<td><input type="text" name="bank_swift_code" value="<?php echo $bank_swift_code; ?>" /></td>
</tr>
<tr>
<td><?php echo $entry_bank_account_name; ?></td>
<td><input type="text" size="50" name="bank_account_name" value="<?php echo $bank_account_name; ?>" /></td>
</tr>
<tr>
<td><?php echo $entry_bank_account_number; ?></td>
<td><input type="text" size="50" name="bank_account_number" value="<?php echo $bank_account_number; ?>" /></td>
</tr>
</tbody>
</table>
</div>
<h2><?php echo $text_your_password; ?></h2>
<div class="content">
<table class="form">
<tr>
<td><span class="required">*</span> <?php echo $entry_password; ?></td>
<td><input type="password" size="50" name="password" value="<?php echo $password; ?>" />
<?php if ($error_password) { ?>
<span class="error"><?php echo $error_password; ?></span>
<?php } ?></td>
</tr>
<tr>
<td><span class="required">*</span> <?php echo $entry_confirm; ?></td>
<td><input type="password" size="50" name="confirm" value="<?php echo $confirm; ?>" />
<?php if ($error_confirm) { ?>
<span class="error"><?php echo $error_confirm; ?></span>
<?php } ?></td>
</tr>
</table>
</div>
<?php if ($text_agree) { ?>
<div class="buttons">
<div class="right"><?php echo $text_agree; ?>
<?php if ($agree) { ?>
<input type="checkbox" name="agree" value="1" checked="checked" />
<?php } else { ?>
<input type="checkbox" name="agree" value="1" />
<?php } ?>
<input type="submit" value="<?php echo $button_continue; ?>" class="button" />
</div>
</div>
<?php } else { ?>
<div class="buttons">
<div class="right">
<input type="submit" value="<?php echo $button_continue; ?>" class="button" />
</div>
</div>
<?php } ?>
</form>
<?php echo $content_bottom; ?></div>
<script type="text/javascript"><!--
$('select[name=\'country_id\']').bind('change', function() {
$.ajax({
url: 'index.php?route=affiliate/register/country&country_id=' + this.value,
dataType: 'json',
beforeSend: function() {
$('select[name=\'country_id\']').after('<span class="wait"> <img src="catalog/view/theme/default/image/loading.gif" alt="" /></span>');
},
complete: function() {
$('.wait').remove();
},
success: function(json) {
if (json['postcode_required'] == '1') {
$('#postcode-required').show();
} else {
$('#postcode-required').hide();
}
html = '<option value=""><?php echo $text_select; ?></option>';
if (json['zone'] != '') {
for (i = 0; i < json['zone'].length; i++) {
html += '<option value="' + json['zone'][i]['zone_id'] + '"';
if (json['zone'][i]['zone_id'] == '<?php echo $zone_id; ?>') {
html += ' selected="selected"';
}
html += '>' + json['zone'][i]['name'] + '</option>';
}
} else {
html += '<option value="0" selected="selected"><?php echo $text_none; ?></option>';
}
$('select[name=\'zone_id\']').html(html);
},
error: function(xhr, ajaxOptions, thrownError) {
alert(thrownError + "\r\n" + xhr.statusText + "\r\n" + xhr.responseText);
}
});
});
$('select[name=\'country_id\']').trigger('change');
//--></script>
<script type="text/javascript"><!--
$('input[name=\'payment\']').bind('change', function() {
$('.payment').hide();
$('#payment-' + this.value).show();
});
$('input[name=\'payment\']:checked').trigger('change');
//--></script>
<script type="text/javascript"><!--
$('.colorbox').colorbox({
width: 640,
height: 480
});
//--></script>
<?php echo $footer; ?>