Compare commits

..

1 Commits

Author SHA1 Message Date
Lei OT 13528c4f85 查出OPI_DEI_SN, todo: APP组的是否忽略通知 2 years ago

@ -6,8 +6,8 @@ on:
branches: [ master ]
jobs:
gh-win-cn-deploy:
name: 🎉 Deploy InfoSys to CN
gh-win-us-deploy:
name: 🎉 Deploy InfoSys to US
runs-on: ubuntu-latest
steps:
- name: 🚚 Get latest code
@ -16,14 +16,13 @@ jobs:
- name: 📂 Sync files to CHT
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
with:
server: ${{ secrets.CN_FTP_SERVER }}
username: ${{ secrets.CN_FTP_USER }}
password: ${{ secrets.CN_FTP_PASSWORD }}
port: ${{ secrets.CN_FTP_PORT }}
server: ${{ secrets.US_FTP_SERVER }}
username: ${{ secrets.US_FTP_USER }}
password: ${{ secrets.US_FTP_PASSWORD }}
port: ${{ secrets.US_FTP_PORT }}
local-dir: ./
server-dir: /wwwroot/origin-cht.mycht.cn/
server-dir: /information-system/
# dry-run: true
# log-level: verbose
exclude: |
**/.git*
**/.git*/**
@ -37,16 +36,7 @@ jobs:
*.exe
*.docx
.ftp-deploy-sync-state.json
gh-win-us-deploy:
needs: gh-win-cn-deploy
name: 🎉 Deploy InfoSys to US
runs-on: ubuntu-latest
steps:
- name: 🚚 Get latest code
uses: actions/checkout@v3
- name: 📂 Sync files to CHT
- name: 📂 Sync files to CT
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
with:
server: ${{ secrets.US_FTP_SERVER }}
@ -54,7 +44,7 @@ jobs:
password: ${{ secrets.US_FTP_PASSWORD }}
port: ${{ secrets.US_FTP_PORT }}
local-dir: ./
server-dir: /information-system/
server-dir: /origin-ct.mycht.cn/
# dry-run: true
exclude: |
**/.git*
@ -69,16 +59,26 @@ jobs:
*.exe
*.docx
.ftp-deploy-sync-state.json
- name: 📂 Sync files to CT
gh-win-cn-deploy:
needs: gh-win-us-deploy
name: 🎉 Deploy InfoSys to CN
runs-on: ubuntu-latest
steps:
- name: 🚚 Get latest code
uses: actions/checkout@v3
- name: 📂 Sync files to CHT
uses: SamKirkland/FTP-Deploy-Action@v4.3.4
with:
server: ${{ secrets.US_FTP_SERVER }}
username: ${{ secrets.US_FTP_USER }}
password: ${{ secrets.US_FTP_PASSWORD }}
port: ${{ secrets.US_FTP_PORT }}
server: ${{ secrets.CN_FTP_SERVER }}
username: ${{ secrets.CN_FTP_USER }}
password: ${{ secrets.CN_FTP_PASSWORD }}
port: ${{ secrets.CN_FTP_PORT }}
local-dir: ./
server-dir: /origin-ct.mycht.cn/
server-dir: /wwwroot/origin-cht.mycht.cn/
# dry-run: true
# log-level: verbose
exclude: |
**/.git*
**/.git*/**
@ -93,8 +93,6 @@ jobs:
*.docx
.ftp-deploy-sync-state.json
hn-notification:
needs: gh-win-cn-deploy
name: 🔔 Send notificaiton

8
.gitignore vendored

@ -1,7 +1,6 @@
.idea
.phpintel
/info.php
.*.json.bak
.phpintel
.*.json.bak
.ftp-deploy-sync-state.json
.svn/*
*/logs/log*
@ -10,7 +9,6 @@
/kcfinder/cache/*
*/cache/*
/author/document/*
*/settlement_files/*
*/statement_files/*
*/paypal_activities/*
/author/document/*
@ -18,4 +16,4 @@
/application/config/database.php

@ -39,12 +39,9 @@ switch ($_SERVER['SERVER_NAME']) {
case 'gh-int.mycht.cn':
$base_url = 'https://int.mycht.cn';
break;
case 'int.mycht.cn': // lmr
case 'int.mycht.cn':
$base_url = 'https://int.mycht.cn';
break;
case 'gm.mycht.cn': // lmr
$base_url = 'https://gm.mycht.cn';
break;
case 'origin-gh.mycht.cn':
$base_url = 'https://gh.mycht.cn';
break;
@ -395,17 +392,11 @@ $config['site'] = array(
'cht' => array('site_code' => 'cht', 'site_id' => 14, 'site_lgc' => '1', 'site_url' => 'https://www.chinahighlights.com', 'site_image_url' => 'https://images.chinahighlights.com', 'site_authors' => array('zzy', 'spt', 'yl', 'gavin', 'sw', 'zl', 'wbl', 'yqw', 'lf', 'zhm', 'pkl'), 'site_user' => ',ycc,lmr, zyh,J,shw,B,zzy,WJJ,Tony,pcf,zxy,wst,wz,v,S,yyg,yxd,wj,sw,yl,hx,spt,wmr,zl,syt,gavin,zm,htc,yqw,bhn,lmj,wbl,yqw,LYY,zhm,si'),
'ch' => array('site_code' => 'ch', 'site_id' => 14, 'site_lgc' => '1', 'site_url' => 'https://www.chinahighlights.com', 'site_image_url' => 'https://images.chinahighlights.com', 'site_authors' => array('TDJ', 'ycc'), 'site_user' => ',ycc,'),
'gm' => array('site_code' => 'gm', 'site_id' => 22, 'site_lgc' => '4', 'site_url' => 'https://www.chinarundreisen.com', 'site_image_url' => '//bilder.chinarundreisen.com', 'site_authors' => array('DX', 'X', 'K', 'Lan', 'lmr', 'zyh', 'ZYHL', 'TDJ'), 'site_user' => ',ycc,lmr,B,zyh,DX,X,K,htc,zm,bhn,Lan,Tony,zyh,J,v,ZYHL,TDJ,LYY,shw,'),
'gh_gm' => array('site_code' => 'gh_gm', 'site_id' => 178, 'site_lgc' => '4', 'site_url' => 'https://www.globalhighlights.de', 'site_image_url' => '//www.globalhighlights.de', 'site_authors' => array('DX', 'X', 'K', 'Lan', 'lmr', 'zyh', 'ZYHL', 'TDJ'), 'site_user' => ',ycc,lmr,B,zyh,DX,X,K,htc,zm,bhn,Lan,Tony,zyh,J,v,ZYHL,TDJ,LYY,shw,'),
'vc' => array('site_code' => 'vc', 'site_id' => 30, 'site_lgc' => '5', 'site_url' => 'https://www.voyageschine.com', 'site_image_url' => '//images.voyageschine.com', 'site_authors' => array('JE', 'kq', 'lya', 'lyz', 'zyh'), 'site_user' => ',ycc,lmr, zyh,JE,htc,kq,lya,bhn,Tony,zyh,B,J,lyz,LYY,'),
'gh_vc' => array('site_code' => 'gh_vc', 'site_id' => 180, 'site_lgc' => '5', 'site_url' => 'https://www.globalhighlights.fr', 'site_image_url' => '//www.globalhighlights.fr', 'site_authors' => array('JE', 'kq', 'lya', 'lyz', 'zyh'), 'site_user' => ',ycc,lmr, zyh,JE,htc,kq,lya,bhn,Tony,zyh,B,J,lyz,LYY,'),
'jp' => array('site_code' => 'jp', 'site_id' => 88, 'site_lgc' => '3', 'site_url' => 'https://www.arachina.com', 'site_image_url' => '//images.arachina.com', 'site_authors' => array('hql', 'LLM', 'SHX', 'lmr', 'zyh', 'zb'), 'site_user' => ',ycc,lmr, zyh,hql,LLM,SHX,htc,zpl,Tony,zyh,J,B,zb,LYY,'),
'gh_jp' => array('site_code' => 'gh_jp', 'site_id' => 179, 'site_lgc' => '3', 'site_url' => 'https://www.globalhighlights.jp', 'site_image_url' => '//www.globalhighlights.jp', 'site_authors' => array('hql', 'LLM', 'SHX', 'lmr', 'zyh', 'zb'), 'site_user' => ',ycc,lmr, zyh,hql,LLM,SHX,htc,zpl,Tony,zyh,J,B,zb,LYY,'),
'vac' => array('site_code' => 'vac', 'site_id' => 95, 'site_lgc' => '6', 'site_url' => 'https://www.viaje-a-china.com', 'site_image_url' => '//imagenes.viaje-a-china.com', 'site_authors' => array('I', 'cyt', 'lmr', 'zyh', 'LLM'), 'site_user' => ',ycc,lmr, zyh,I,cyt,htc,bhn,Tony,zyh,B,J,LLM,LYY,'),
'gh_vac' => array('site_code' => 'gh_vac', 'site_id' => 181, 'site_lgc' => '6', 'site_url' => 'https://www.globalhighlights.es', 'site_image_url' => '//www.globalhighlights.es', 'site_authors' => array('I', 'cyt', 'lmr', 'zyh', 'LLM'), 'site_user' => ',ycc,lmr, zyh,I,cyt,htc,bhn,Tony,zyh,B,J,LLM,LYY,'),
'it' => array('site_code' => 'it', 'site_id' => 168, 'site_lgc' => '8', 'site_url' => 'https://www.viaggio-in-cina.it', 'site_image_url' => '//images.viaggio-in-cina.it', 'site_authors' => array('LZY', 'ZQQ', 'lmr', 'zyh'), 'site_user' => ',ycc,lmr, zyh,LZY,htc,ZQQ,Tony,zyh,B,J,LYY,'),
'gh_it' => array('site_code' => 'gh_it', 'site_id' => 183, 'site_lgc' => '8', 'site_url' => 'https://www.globalhighlights.it', 'site_image_url' => '//www.globalhighlights.it', 'site_authors' => array('LZY', 'ZQQ', 'lmr', 'zyh'), 'site_user' => ',ycc,lmr, zyh,LZY,htc,ZQQ,Tony,zyh,B,J,LYY,'),
'ru' => array('site_code' => 'ru', 'site_id' => 102, 'site_lgc' => '7', 'site_url' => 'https://www.chinahighlights.ru', 'site_image_url' => '//images.chinahighlights.ru', 'site_authors' => array('xjj', 'zyy'), 'site_user' => ',ycc,lmr, zyh,xjj,htc,DX,zyy,bhn,Tony,zyh,B,J,LYY,'),
'gh_ru' => array('site_code' => 'gh_ru', 'site_id' => 182, 'site_lgc' => '7', 'site_url' => 'https://www.globalhighlights.ru', 'site_image_url' => '//www.globalhighlights.ru', 'site_authors' => array('xjj', 'zyy'), 'site_user' => ',ycc,lmr, zyh,xjj,htc,DX,zyy,bhn,Tony,zyh,B,J,LYY,'),
'wt' => array('site_code' => 'wt', 'site_id' => 172, 'site_lgc' => '2', 'site_url' => 'https://www.iiiyooo.com', 'site_image_url' => '', 'site_authors' => array('ylh', 'lfj', 'wx', 'lzh', 'shw', 'lx'), 'site_user' => ',ycc,lmr, zyh,ylh,lfj,wx,lzh,shw,lx,bhn,B,J,'),
'tbt' => array('site_code' => 'tbt', 'site_id' => 169, 'site_lgc' => '1', 'site_url' => 'https://www.tibettravel.info', 'site_image_url' => '/images', 'site_authors' => array('wj', 'sfx'), 'site_user' => ',ycc,wj,bhn,wx,lzh,lfj,hwt,thf,sfx,J,ZP,'),
'sht' => array('site_code' => 'sht', 'site_id' => 96, 'site_lgc' => '1', 'site_url' => 'https://www.shanghaihighlights.com', 'site_image_url' => '//images.shanghaihighlights.com', 'site_authors' => array('vz', 'sfx'), 'site_user' => ',ycc,wj,bhn,wx,lzh,lfj,hwt,thf,vz,sfx,J,ZP,LYY,'),
@ -429,28 +420,12 @@ $config['site'] = array(
//静态文件生成路径
$config['cache']['jp']['cache_path'] = 'D:\wwwcache-intl\arachina.com';
$config['cache']['gm']['cache_path'] = 'D:\wwwcache-gm\chinarundreisen.com';
$config['cache']['gm']['cache_path'] = 'C:\Dropbox\wwwcache\chinarundreisen.com';
$config['cache']['vc']['cache_path'] = 'D:\wwwcache-intl\voyageschine.com';
$config['cache']['vac']['cache_path'] = 'D:\wwwcache-intl\viaje-a-china.com';
$config['cache']['ru']['cache_path'] = 'D:\wwwcache-intl\chinahighlights.ru';
$config['cache']['it']['cache_path'] = 'D:\wwwcache-intl\viaggio-in-cina.it';
$config['cache']['gh_jp']['cache_path'] = 'D:\wwwcache-intl\globalhighlights.jp';
$config['cache']['gh_gm']['cache_path'] = 'D:\wwwcache-intl\globalhighlights.de';
$config['cache']['gh_vc']['cache_path'] = 'D:\wwwcache-intl\globalhighlights.fr';
$config['cache']['gh_vac']['cache_path'] = 'D:\wwwcache-intl\globalhighlights.es';
$config['cache']['gh_ru']['cache_path'] = 'D:\wwwcache-intl\globalhighlights.ru';
$config['cache']['gh_it']['cache_path'] = 'D:\wwwcache-intl\globalhighlights.it';
/*
globalhighlights.jp
globalhighlights.de
globalhighlights.fr
globalhighlights.es
globalhighlights.ru
globalhighlights.it
*/
//静态文件站点域名
$config['cache']['jp']['site_url'] = 'https://www.arachina.com';
$config['cache']['gm']['site_url'] = 'https://www.chinarundreisen.com';
@ -459,13 +434,6 @@ $config['cache']['vac']['site_url'] = 'https://www.viaje-a-china.com';
$config['cache']['ru']['site_url'] = 'https://www.chinahighlights.ru';
$config['cache']['it']['site_url'] = 'https://www.viaggio-in-cina.it';
$config['cache']['gh_jp']['site_url'] = 'https://www.globalhighlights.jp';
$config['cache']['gh_gm']['site_url'] = 'https://www.globalhighlights.de';
$config['cache']['gh_vc']['site_url'] = 'https://www.globalhighlights.fr';
$config['cache']['gh_vac']['site_url'] = 'https://www.globalhighlights.es';
$config['cache']['gh_ru']['site_url'] = 'https://www.globalhighlights.ru';
$config['cache']['gh_it']['site_url'] = 'https://www.globalhighlights.it';
//静态文件更新接口
$config['cache']['jp']['cache_api'] = '/info.php/information/update_cache/';
$config['cache']['gm']['cache_api'] = '/info.php/information/update_cache/';
@ -474,13 +442,6 @@ $config['cache']['vac']['cache_api'] = '/info.php/information/update_cache/';
$config['cache']['ru']['cache_api'] = '/info.php/information/update_cache/';
$config['cache']['it']['cache_api'] = '/info.php/information/update_cache/';
$config['cache']['gh_jp']['cache_api'] = '/info.php/information/update_cache/';
$config['cache']['gh_gm']['cache_api'] = '/info.php/information/update_cache/';
$config['cache']['gh_vc']['cache_api'] = '/info.php/information/update_cache/';
$config['cache']['gh_vac']['cache_api'] = '/info.php/information/update_cache/';
$config['cache']['gh_ru']['cache_api'] = '/info.php/information/update_cache/';
$config['cache']['gh_it']['cache_api'] = '/info.php/information/update_cache/';
//静态文件更新接口参数
$config['cache']['jp']['cache_api_para'] = 'cache_url';
$config['cache']['gm']['cache_api_para'] = 'cache_url';
@ -489,13 +450,6 @@ $config['cache']['vac']['cache_api_para'] = 'cache_url';
$config['cache']['ru']['cache_api_para'] = 'cache_url';
$config['cache']['it']['cache_api_para'] = 'cache_url';
$config['cache']['gh_jp']['cache_api_para'] = 'cache_url';
$config['cache']['gh_gm']['cache_api_para'] = 'cache_url';
$config['cache']['gh_vc']['cache_api_para'] = 'cache_url';
$config['cache']['gh_vac']['cache_api_para'] = 'cache_url';
$config['cache']['gh_ru']['cache_api_para'] = 'cache_url';
$config['cache']['gh_it']['cache_api_para'] = 'cache_url';
//本地测试用 - lmr
if (isset($_SERVER['HTTP_HOST']) && $_SERVER['HTTP_HOST'] == '202.103.68.62:9999') {
$config['site']['jp']['site_url'] = 'http://202.103.68.62:9093';
@ -765,7 +719,7 @@ $config['css_source_ts'] = 'https://www.trainspread.com/css/bootstrap.min.css';
//静态文件生成路径
$config['cache']['jp']['cache_path'] = 'D:\wwwcache-intl\arachina.com';
$config['cache']['gm']['cache_path'] = 'D:\wwwcache-gm\chinarundreisen.com';
$config['cache']['gm']['cache_path'] = 'C:\Dropbox\wwwcache\chinarundreisen.com';
$config['cache']['vc']['cache_path'] = 'D:\wwwcache-intl\voyageschine.com';
$config['cache']['vac']['cache_path'] = 'D:\wwwcache-intl\viaje-a-china.com';
$config['cache']['ru']['cache_path'] = 'D:\wwwcache-intl\chinahighlights.ru';
@ -1073,12 +1027,6 @@ $config['templates_gm'] = array(
'空白模板' => 'none',
);
//德语信息模板
$config['templates_gh'] = array(
'通用内容模板' => 'guide_info_detail',
'带导航' => 'guide_with_nav'
);
// CHT 信息模板
$config['templates_cht'] = array(
'通用内容模板' => 'guide_info_detail',
@ -1140,13 +1088,11 @@ $config['templates_ah'] = array(
// 出境游网站模板
$config['templates_pgr'] = array(
'空白模板' => 'guide_info_detail',
'导航模板' => 'culture_info_detail_with_category',
'空白模板' => 'guide_info_detail', '导航模板' => 'culture_info_detail_with_category',
);
// 国际火车网站模板
$config['templates_ts'] = array(
'空白模板' => 'guide_info_detail',
'信息导航模板' => 'train_series_with_category',
'空白模板' => 'guide_info_detail', '信息导航模板' => 'train_series_with_category',
);
//翰特产品类型,Information控制器的get_products函数有直接调用在这里增加了信息需要去控制器写相关操作代码

@ -158,7 +158,7 @@ class Cache extends CI_Controller
$file_temp = str_replace('###', '', $file_temp);
$path_temp = str_replace($this->dir, '', $dir);
$url_temp = $this->current_domain . $path_temp . '/' . $file_temp;
$url_temp = str_replace('/index.htm', '/', $url_temp);
$url_temp = str_replace('index.htm', '', $url_temp);
$file_time[$url_temp] = date("F d Y H:i:s", filemtime("$dir/$f"));
$encode = mb_detect_encoding($url_temp, array('ASCII', 'GBK', 'ISO-8859-1', 'UTF-8'));

@ -1,291 +0,0 @@
<?php
if (!defined('BASEPATH')) {
exit('No direct script access allowed');
}
class infofix extends CI_Controller
{
public $site_code = '';
public function __construct()
{
parent::__construct();
$this->load->model('Information_model');
$this->load->model('infoContents_model');
$this->load->model('infoMetas_model');
$this->load->model('logs_model');
$this->site_code = $this->input->get('site_code') ? $this->input->get('site_code') : $this->config->item('site_code');
header('Access-Control-Allow-Origin: *');
}
/**
* 根据关键词搜索信息
*/
public function list_info_by_keys()
{
// 防止超时
set_time_limit(0);
// json参数
$site = $this->input->get_post('site');
$keys = $this->input->get_post('keys');
$key_arr = explode(',', $keys);
// 容错
if (
empty($site) ||
empty($keys) ||
mb_stripos($keys, '/') === false
) {
echo json_encode(array());
return false;
}
// 关键字信息
$rs = $this->Information_model->list_by_keywords($site, $key_arr);
// 调整数据
foreach ($rs as $info) {
$key_with_content = array();
foreach ($key_arr as $key) {
// 链接
$sub_url = mb_stripos($info->ic_url, $key) !== false ? $info->ic_url : '';
if ($sub_url) {
$sub_url = str_replace($key, '@@@' . $key . '@@@', $sub_url);
$sub_url = explode('@@@', $sub_url);
}
$limitStr = 100;
// 信息内容
$pos_content = 0;
$pos_content = mb_stripos($info->ic_content, $key);
$sub_content = array();
while ($pos_content) {
$_str = '[...' . mb_substr($info->ic_content, $pos_content - $limitStr, mb_strlen($key) + $limitStr * 2) . '...]';
$_str = str_replace($key, '@@@' . $key . '@@@', $_str);
$_str = explode('@@@', $_str);
array_push($sub_content, $_str);
$pos_content = mb_stripos($info->ic_content, $key, $pos_content + mb_strlen($key));
}
// amp_json
$sub_content2 = array();
if ($info->amp_json) {
$pos_content2 = 0;
$pos_content2 = mb_stripos($info->amp_json, $key);
while ($pos_content2) {
$_str = '[...' . mb_substr($info->amp_json, $pos_content2 - $limitStr, mb_strlen($key) + $limitStr * 2) . '...]';
$_str = str_replace($key, '@@@' . $key . '@@@', $_str);
$_str = explode('@@@', $_str);
array_push($sub_content2, $_str);
$pos_content2 = mb_stripos($info->amp_json, $key, $pos_content2 + mb_strlen($key));
}
}
// amp_body
$sub_content3 = array();
if ($info->amp_body) {
$pos_content3 = 0;
$pos_content3 = mb_stripos($info->amp_body, $key);
while ($pos_content3) {
$_str = '[...' . mb_substr($info->amp_body, $pos_content3 - $limitStr, mb_strlen($key) + $limitStr * 2) . '...]';
$_str = str_replace($key, '@@@' . $key . '@@@', $_str);
$_str = explode('@@@', $_str);
array_push($sub_content3, $_str);
$pos_content3 = mb_stripos($info->amp_body, $key, $pos_content3 + mb_strlen($key));
}
}
if ($sub_url != '' || count($sub_content) != 0 || count($sub_content2) != 0 || count($sub_content3) != 0) {
array_push(
$key_with_content,
array(
'key' => $key,
'sub_url' => $sub_url,
'sub_content' => $sub_content,
'sub_json' => $sub_content2,
'sub_body' => $sub_content3,
)
);
}
}
$info->ic_content = $key_with_content;
unset($info->amp_json);
unset($info->amp_body);
}
echo json_encode($rs);
}
/**
* 更新含有关键的信息
*/
public function update_info_by_keys()
{
// json参数
$site = $this->input->get_post('site');
$keys = $this->input->get_post('keys');
$keyArr = explode('@', $keys); // ic_id@oldurl@newurl@is_id
//sleep(2);
//echo ($keys);
//return true;
// 容错1
if (
empty($site) ||
count($keyArr) != 4 ||
mb_stripos($keys, '/') === false ||
mb_stripos($keys, 'undefined') !== false ||
mb_stripos($keys, 'null') !== false ||
mb_stripos($keys, '@@') !== false ||
mb_stripos($keys, '@ @') !== false
) {
echo json_encode(array('err' => '容错1'));
return false;
}
// 参数解析
$ic_id = $keyArr[0];
$oldStr = $keyArr[1];
$newStr = $keyArr[2];
$is_id = $keyArr[3];
// 容错2
if (
empty($ic_id) ||
empty($is_id) ||
empty($newStr) ||
empty($oldStr) ||
mb_stripos($newStr, '/') === false ||
mb_stripos($oldStr, '/') === false
) {
echo json_encode(array('err' => '容错2'));
return false;
}
// ic_content
$ic = $this->infoContents_model->get_ic_contents2($ic_id);
if (!empty($ic)) {
$ic->ic_content = str_ireplace($oldStr, $newStr, $ic->ic_content);
$this->infoContents_model->force_update($ic_id, $ic->ic_content);
$ic->ic_url = str_ireplace($oldStr, $newStr, $ic->ic_url);
$this->infoContents_model->force_update_url($ic_id, $ic->ic_url);
}
// amp_json
$meta = $this->infoMetas_model->get($ic_id, 'AMP_JSON');
if (!empty($meta)) {
$meta = str_ireplace($oldStr, $newStr, $meta);
$this->infoMetas_model->update($ic_id, 'AMP_JSON', $meta);
}
// amp_body_pc
$meta = $this->infoMetas_model->get($ic_id, 'AMP_BODY_PC');
if (!empty($meta)) {
$meta = str_ireplace($oldStr, $newStr, $meta);
$this->infoMetas_model->update($ic_id, 'AMP_BODY_PC', $meta);
}
echo json_encode($keyArr);
}
/**
* 无条件获取信息内容
* @param mixed $ic_id
*/
public function get_by_icid($ic_id)
{
$ic = $this->infoContents_model->get_ic_contents2($ic_id);
$json = json_decode($this->infoMetas_model->get($ic_id, 'AMP_JSON'));
$use = $this->infoMetas_model->get($ic_id, 'AMP_BODY_PC_STATUS');
if ($ic) {
echo json_encode(
array(
'state' => 0,
'ic_content' => $ic->ic_content,
'pc_use' => $use,
'json' => $json,
)
);
} else {
echo json_encode(
array(
'state' => -1,
'msg' => 'not content by ' . $ic_id,
)
);
}
}
/**
* 无条件更新信息内容(上线前内容)
*/
public function update_by_icid()
{
$ic_id = $this->input->get_post('ic_id');
$ic_content = $this->input->get_post('ic_content');
$this->infoContents_model->force_update($ic_id, $ic_content);
}
/**
* 列举使用旧版构建工具的信息,用于批量替换更新。
* @param mixed $site
*/
public function list_use_hb($site)
{
$rs = $this->infoContents_model->list_use_hb($site);
echo json_encode($rs);
}
/**
* 转化旧版构建工具数据(上线前的准备)
* @param mixed $ic_id
*/
public function migrate_hb($ic_id, $dev = 'prod')
{
// 本地测试参数
$api = 'https://hmk.arachina.com/beta/3733/server_render2';
if ($dev == 'dev') {
$api = 'http://127.0.0.1:3733/server_render2';
sleep(2);
}
// 请求api
$json = $this->infoMetas_model->get($ic_id, 'AMP_JSON');
if (!empty($json)) {
// 请求转化服务器
$post_data = 'json=' . urlencode($json);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $api);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
curl_setopt($ch, CURLOPT_TIMEOUT, 120);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //禁止直接显示获取的内容
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$curl_rs = curl_exec($ch);
$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
if ($curl_rs && ($httpCode == 200 || $httpCode == 201)) {
// 先备份
$is = $this->infoContents_model->get_isid_by_icid($ic_id);
$ic = $this->infoContents_model->get_ic_contents2($ic_id);
$this->logs_model->backup($is->is_id, $ic->ic_content);
// 移除外部包裹标签
$curl_rs = str_replace(array('<my_lmr_tpl>', '</my_lmr_tpl>'), '', $curl_rs);
// 强制更新信息内容
$this->infoContents_model->force_update($ic_id, $curl_rs);
echo json_encode(array('status' => 1));
} else {
echo json_encode(array('status' => -1, 'msg' => 'err1'));
}
} else {
echo json_encode(array('status' => -1, 'msg' => 'err2'));
}
}
}
//end of infofix

File diff suppressed because it is too large Load Diff

@ -77,7 +77,7 @@ function is_series_site()
{
$CI = &get_instance();
$sitecode = $CI->config->item('site_code');
if (in_array($sitecode, array('jp', 'vc', 'vac', 'ru', 'it', 'gh_jp', 'gh_vc', 'gh_vac', 'gh_ru', 'gh_it', 'gh_gm', 'gm'))) {
if ($sitecode == 'vc' || $sitecode == 'ru' || $sitecode == 'jp' || $sitecode == 'vac' || $sitecode == 'it') {
return true;
} else {
return false;
@ -103,7 +103,7 @@ function is_mobile_first()
{
$CI = &get_instance();
$sitecode = $CI->config->item('site_code');
if ($sitecode == 'ch' || $sitecode == 'ah' || $sitecode == 'chinatravel' || $sitecode == 'gh' || $sitecode == 'shanghai') {
if ($sitecode == 'ch' || $sitecode == 'ah' || $sitecode=='chinatravel' || $sitecode == 'gh' || $sitecode=='shanghai') {
return true;
} else {
return false;
@ -222,7 +222,7 @@ function get_task_count_by_status()
function get_author_photo($author_code_id = false)
{
$CI = &get_instance();
$root_url = ''; //'http://data.chtcdn.com';
$root_url = '';//'http://data.chtcdn.com';
$avatar = $root_url . '/css/images/avatar.jpg';
if ($author_code_id && is_numeric($author_code_id)) {
$CI->load->model('Infoauthors_model');
@ -237,7 +237,7 @@ function get_author_photo($author_code_id = false)
//补全图片路径
function get_photo_url($photo)
{
$root_url = ''; //'http://data.chtcdn.com';
$root_url = '';//'http://data.chtcdn.com';
if ($photo == '') {
$avatar = $root_url . '/css/images/uploadPic.jpg';
} else {
@ -275,8 +275,7 @@ function show_page($page)
}
$html = '';
if ($nowview > 1)
$befor--;
if ($nowview > 1) $befor--;
if ($pageSize <= $total) {
for ($i = $befor; $i <= $after; $i++) {
if ($i == $currentPage) {
@ -322,11 +321,11 @@ function GET_HTTP($url, $data = '', $method = 'GET')
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // 从证书中检查SSL加密算法是否存在
// if (isset($_SERVER['HTTP_USER_AGENT'])) {
// $HTTP_USER_AGENT = $_SERVER['HTTP_USER_AGENT'];
// } else {
$HTTP_USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; curl) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36';
// }
if (isset($_SERVER['HTTP_USER_AGENT'])) {
$HTTP_USER_AGENT = $_SERVER['HTTP_USER_AGENT'];
} else {
$HTTP_USER_AGENT = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36';
}
curl_setopt($curl, CURLOPT_USERAGENT, $HTTP_USER_AGENT); // 模拟用户使用的浏览器
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
@ -339,7 +338,7 @@ function GET_HTTP($url, $data = '', $method = 'GET')
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
$tmpInfo = curl_exec($curl); // 执行操作
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
if ($httpCode >= 400) { //页面状态如果大于400说明页面打不开
if ($httpCode >= 400) {//页面状态如果大于400说明页面打不开
log_message('error', " curl {$httpCode} {$url} ");
return false;
}
@ -372,8 +371,7 @@ function compress_css($buffer)
}
//把临时多媒体中心预览图片地址替换为网前地址
function replace_image_url($ic_content)
{
function replace_image_url($ic_content){
$CI = &get_instance();
return str_replace($CI->config->item('media_image_url'), $CI->config->item('site_image_url'), $ic_content);
return str_replace($CI->config->item('media_image_url'), $CI->config->item('site_image_url'),$ic_content);
}

@ -6,45 +6,41 @@ if (!defined('BASEPATH'))
* AMP的相关方法
*/
class Amplib
{
class Amplib {
var $CI;
public function __construct()
{
$this->CI = &get_instance();
public function __construct() {
$this->CI = & get_instance();
$this->CI->load->model('Information_model');
$this->CI->load->model('InfoMetas_model');
$this->CI->load->model('Logs_model');
}
public function edit($ic_id)
{
public function edit($ic_id) {
$data = array();
$data['information'] = $this->CI->Information_model->detail_by_ic_id($ic_id);
if ($data['information'] == FALSE) {
show_404();
}
//查询上一次保存记录
$amp_log = $this->CI->Logs_model->get_last_edit_amp($ic_id);
if (!empty($amp_log)) {
$data['last_edit_amp_id'] = $amp_log->log_id;
} else {
$data['last_edit_amp_id'] = '';
}
//查询上一次保存记录
$amp_log = $this->CI->Logs_model->get_last_edit_amp($ic_id);
if(!empty($amp_log)){
$data['last_edit_amp_id'] = $amp_log->log_id;
}else{
$data['last_edit_amp_id'] = '';
}
$this->CI->load->view('bootstrap3/header', $data);
$this->CI->load->view('amp_editor');
$this->CI->load->view('bootstrap3/footer');
}
public function auto_create($ic_id)
{
public function auto_create($ic_id) {
$data = array();
if (strtolower($this->CI->config->item('site_code')) == 'cht') {
$this->CI->Information_model->ic_type = "AND ic.ic_type != 'none'";
}
if(strtolower($this->CI->config->item('site_code')) == 'cht'){
$this->CI->Information_model->ic_type = "AND ic.ic_type != 'none'";
}
$data['information'] = $this->CI->Information_model->detail_by_ic_id($ic_id);
if ($data['information'] == FALSE) {
return json_encode(array('result' => 'no', 'data' => '找不到这个页面'));
@ -65,7 +61,7 @@ class Amplib
break;
case 'gm':
$websitehost = 'https://data.chinarundreisen.com';
$html_source_url = 'https://www.chinarundreisen.com/' . $data['information']->ic_url;
$html_source_url = 'http://144.76.185.44:8029' . $data['information']->ic_url;
break;
case 'ct':
$websitehost = 'https://data.chinatravel.com';
@ -79,24 +75,23 @@ class Amplib
$html_source = GET_HTTP($html_source_url);
if (!empty($html_source)) {
$post_data = array('websitehost' => $websitehost, 'template_name' => $site_code, 'create_amp' => 'true', 'htmlsource' => $html_source);
//德语站点走另外一个控制器,其他站点还是走原来的流程
if ($site_code == 'gm') {
if ($data['information']->ic_url == '/massgeschneiderte-china-reisen/') {
return json_encode(array());
} else {
return GET_HTTP(site_url('/apps/htmlcompressor/index_gm/choose_way'), $post_data, 'POST');
}
} elseif ($site_code == 'ah') {
return GET_HTTP(site_url('/apps/htmlcompressor/index_ah/choose_way'), $post_data, 'POST');
} else {
return GET_HTTP(site_url('/apps/htmlcompressor/index/optimize'), $post_data, 'POST');
}
//德语站点走另外一个控制器,其他站点还是走原来的流程
if($site_code == 'gm'){
if($data['information']->ic_url == '/massgeschneiderte-china-reisen/'){
return json_encode(array());
}else{
return GET_HTTP(site_url('/apps/htmlcompressor/index_gm/choose_way'), $post_data, 'POST');
}
}elseif($site_code == 'ah'){
return GET_HTTP(site_url('/apps/htmlcompressor/index_ah/choose_way'), $post_data, 'POST');
}else{
return GET_HTTP(site_url('/apps/htmlcompressor/index/optimize'), $post_data, 'POST');
}
}
return json_encode(array('result' => 'no', 'data' => '不知道哪里错了,看代码'));
}
public function edit_save($ic_id = false, $textarea_htmlcode = false, $amp_status = false)
{
public function edit_save($ic_id = false, $textarea_htmlcode = false, $amp_status = false) {
$data = array();
if ($ic_id === false) {
$ic_id = $this->CI->input->post('ic_id');
@ -116,8 +111,8 @@ class Amplib
//CH的页面没有canonical内容在这里帮补上
$textarea_htmlcode = str_replace('<!--@CANONICAL@-->', $this->CI->config->item('site_url') . $data['information']->ic_url, $textarea_htmlcode);
//备份修改的代码
$this->CI->Logs_model->write('backup_amp', $ic_id, $textarea_htmlcode);
//备份修改的代码
$this->CI->Logs_model->write('backup_amp', $ic_id, $textarea_htmlcode);
//AMP格式验证
if ($amp_status !== '0') {//只有发布的时候才需要验证

@ -8,7 +8,7 @@ class PrimeLinePrice_model extends CI_Model {
var $cli_grade = 7001; //(标准7001、豪华7002、经济7003
var $price_date = false; //查询价格日期区间
var $orderby = false;
// CH: 1; AH: 28; GH : 33
// AH: 28
var $DEI_SN = 28;
function __construct() {

@ -8,43 +8,41 @@ class Feedback_model extends CI_Model {
}
/**
* 返回最新反馈信息,默认 20条
* 返回最新八条反馈信息
*/
function get_feedback_newest($row_limit = 20) {
$total_limit = $row_limit * 2;
$feedback_query =
$this->HT->query("
select top ?
tad_content, tai_customerid, tai_title, tai_getdate, tai_url
from Eva_TAInfo tai
left join Eva_TADetail on TAD_TAI_SN=TAI_SN
left join Eva_TAGuidePrize tgp on tgp.TGP_TAI_SN = tai.TAI_SN
where TAD_Content is not null
and isnull(TAI_DeleteFlag,0) = 0 and isnull(tgp.TGP_CheckState, 0) = 136002
order by tai_getdate desc", $total_limit);
function get_feedback_newest() {
$feedback_result = $feedback_query->result();
$feedback_list = [];
$customer_id_list = [];
$feedback_query =
$this->HT->query("
select top 40
tad_content, tai_customerid, tai_title, tai_getdate, tai_url
from Eva_TAInfo
left join Eva_TADetail on TAD_TAI_SN=TAI_SN
where TAD_Content is not null
order by tai_getdate desc");
foreach ($feedback_result as $feedback_row) {
$createdOn = new DateTime($feedback_row->tai_getdate);
$createdOnString = $createdOn->format('M Y');
$feedback_count = COUNT($feedback_list);
if (!in_array($feedback_row->tai_customerid, $customer_id_list) && $feedback_count < $row_limit) {
$feedback = [
'title' => $feedback_row->tai_title,
'customer' => $feedback_row->tai_customerid,
'content' => $feedback_row->tad_content,
'url' => $feedback_row->tai_url,
'createdOn' => $createdOnString
];
$feedback_list[] = $feedback;
$customer_id_list[] = $feedback_row->tai_customerid;
$feedback_result = $feedback_query->result();
$feedback_list = [];
$customer_id_list = [];
foreach ($feedback_result as $feedback_row) {
$createdOn = new DateTime($feedback_row->tai_getdate);
$createdOnString = $createdOn->format('M Y');
$feedback_count = COUNT($feedback_list);
if (!in_array($feedback_row->tai_customerid, $customer_id_list) && $feedback_count < 20) {
$feedback = [
'title' => $feedback_row->tai_title,
'customer' => $feedback_row->tai_customerid,
'content' => $feedback_row->tad_content,
'url' => $feedback_row->tai_url,
'createdOn' => $createdOnString
];
$feedback_list[] = $feedback;
$customer_id_list[] = $feedback_row->tai_customerid;
}
}
}
return $feedback_list;
return $feedback_list;
}
function test_feedback_newest() {
@ -53,11 +51,9 @@ class Feedback_model extends CI_Model {
$this->HT->query("
select top 40
tad_content, tai_customerid, tai_title, tai_getdate, tai_url
from Eva_TAInfo tai
left join Eva_TADetail on TAD_TAI_SN=TAI_SN
left join Eva_TAGuidePrize tgp on tgp.TGP_TAI_SN = tai.TAI_SN
from Eva_TAInfo
left join Eva_TADetail on TAD_TAI_SN=TAI_SN
where TAD_Content is not null
and isnull(TAI_DeleteFlag,0) = 0 and isnull(tgp.TGP_CheckState, 0) = 136002
order by tai_getdate desc");
$feedback_result = $feedback_query->result();
@ -69,12 +65,12 @@ class Feedback_model extends CI_Model {
$createdOnString = $createdOn->format('M Y');
$feedback_count = COUNT($feedback_list);
if (!in_array($feedback_row->tai_customerid, $customer_id_list) && $feedback_count < 20) {
$feedback = [
'title' => $feedback_row->tai_title,
$feedback = [
// 'title' => $feedback_row->tai_title,
'customer' => $feedback_row->tai_customerid,
// 'content' => $feedback_row->tad_content,
'url' => $feedback_row->tai_url,
'createdOn' => $createdOnString
// 'url' => $feedback_row->tai_url,
// 'createdOn' => $createdOnString
];
$feedback_list[] = $feedback;
$customer_id_list[] = $feedback_row->tai_customerid;
@ -179,77 +175,22 @@ class Feedback_model extends CI_Model {
$feedback_result = $feedback_query->result();
$feedback_list = [];
$customer_id_list = [];
foreach ($feedback_result as $feedback_row) {
$createdOn = new DateTime($feedback_row->tai_getdate);
$createdOnString = $createdOn->format('M Y');
if (!in_array($feedback_row->tai_customerid, $customer_id_list)) {
$feedback = [
'title' => $feedback_row->tai_title,
'customer' => $feedback_row->tai_customerid,
'content' => $feedback_row->tad_content,
'url' => $feedback_row->tai_url,
'createdOn' => $createdOnString
];
$feedback_list[] = $feedback;
$customer_id_list[] = $feedback_row->tai_customerid;
}
$feedback_count = COUNT($feedback_list);
$feedback = [
'title' => $feedback_row->tai_title,
'customer' => $feedback_row->tai_customerid,
'content' => $feedback_row->tad_content,
'url' => $feedback_row->tai_url,
'createdOn' => $createdOnString
];
$feedback_list[] = $feedback;
}
return $feedback_list;
}
/**
* 根据顾问英文名查找反馈信息
*/
function get_feedback_by_advisor_name($advisor_name) {
$feedback_query =
$this->HT->query("
select top 3
tad.tad_content,
tai.tai_customerid,
tai.tai_title,
tai.tai_getdate,
tai.tai_url,
vci.cii2_name
from Eva_TAInfo tai
join Eva_TADetail tad on tad.TAD_TAI_SN = tai.TAI_SN
join V_CIty_Info vci on vci.cii_sn = tai.tai_cii_sn and vci.LGC_LGC = 1
where tad.TAD_SN in (
select TAD_SN
from Eva_TADetail e
join V_Operator_Info v on e.TAD_ObjList like '%,' + cast(v.OPI_SN as varchar) + ',%'
where e.TAD_ObjType = 99002
and v.LGC_LGC = 1
and v.OPI2_Name = ?
)
order by tai.tai_getdate desc;
",
array($advisor_name));
$feedback_result = $feedback_query->result();
$feedback_list = [];
$customer_id_list = [];
foreach ($feedback_result as $feedback_row) {
$createdOn = new DateTime($feedback_row->tai_getdate);
$createdOnString = $createdOn->format('M Y');
if (!in_array($feedback_row->tai_customerid, $customer_id_list)) {
$feedback = [
'title' => $feedback_row->tai_title,
'customer' => $feedback_row->tai_customerid,
'content' => $feedback_row->tad_content,
'url' => $feedback_row->tai_url,
'createdOn' => $createdOnString
];
$feedback_list[] = $feedback;
$customer_id_list[] = $feedback_row->tai_customerid;
}
}
return $feedback_list;
}
}

@ -71,116 +71,14 @@ class InfoContents_model extends CI_Model
$query = $this->HT->query(
$sql,
array(
$ic_url,
$ic_url_title,
$ic_type,
$ic_title,
str_replace(
$ic_url, $ic_url_title, $ic_type, $ic_title, str_replace(
$this->config->item('media_image_url'),
$this->config->item('site_image_url'),
$ic_content
),
$ic_summary,
$ic_seo_title,
$ic_seo_description,
$ic_seo_keywords,
$ic_show_bread_crumbs,
$ic_status,
$ic_template,
$ic_photo,
$ic_photo_width,
$ic_photo_height,
$this->config->item('site_code'),
$ic_recommend_tours,
$ic_recommend_packages,
$ic_ht_area_id,
$ic_ht_area_type,
$ic_ht_product_id,
$ic_ht_product_type,
$ic_author
)
);
$this->insert_id = $this->HT->last_id('infoContents');
return $query;
}
function Add_with_sitecode(
$ic_url,
$ic_url_title,
$ic_type,
$ic_title,
$ic_content,
$ic_summary,
$ic_seo_title,
$ic_seo_description,
$ic_seo_keywords,
$ic_show_bread_crumbs,
$ic_status,
$ic_template,
$ic_photo,
$ic_photo_width,
$ic_photo_height,
$ic_recommend_tours,
$ic_recommend_packages,
$ic_ht_area_id,
$ic_ht_area_type,
$ic_ht_product_id,
$ic_ht_product_type,
$ic_author,
$site_code = ''
) {
if (empty($site_code)) {
$site_code = $this->config->item('site_code');
}
$ic_content = str_replace('http:' . $this->config->item('site_image_url'), $this->config->item('site_image_url'), $ic_content);
$ic_content = str_replace($this->config->item('media_image_url_remote2'), $this->config->item('site_image_url'), $ic_content);
$ic_content = str_replace($this->config->item('media_image_url_org'), $this->config->item('site_image_url'), $ic_content);
$ic_content = str_replace($this->config->item('media_image_url'), $this->config->item('site_image_url'), $ic_content);
$ic_content = str_replace($this->config->item('media_image_url2'), $this->config->item('site_image_url'), $ic_content);
$ic_content = str_replace($this->config->item('media_image_url_remote'), $this->config->item('site_image_url'), $ic_content);
$ic_content = str_replace($this->config->item('media_image_url3'), $this->config->item('site_image_url'), $ic_content);
$ic_content = str_replace($this->config->item('media_image_url_org2'), $this->config->item('site_image_url'), $ic_content);
$ic_content = str_replace('#textarea#', 'textarea', $ic_content);
$ic_content = str_replace('t_e_x_t_a_r_e_a', 'textarea', $ic_content);
$sql = "INSERT INTO infoContents \n"
. " ( \n"
. " ic_url, ic_url_title, ic_type, ic_title, ic_content, ic_summary, ic_seo_title, \n"
. " ic_seo_description, ic_seo_keywords, ic_show_bread_crumbs, ic_status, \n"
. " ic_template, ic_photo,ic_photo_width,ic_photo_height, ic_sitecode, ic_recommend_tours, ic_recommend_packages, \n"
. " ic_ht_area_id, ic_ht_area_type,ic_ht_product_id,ic_ht_product_type,ic_author, ic_datetime \n"
. " ) \n"
. "VALUES \n"
. " ( N?,N?,?,N?,N?,N?,N?,N?,N?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,getdate() )";
$query = $this->HT->query(
$sql,
array(
$ic_url,
$ic_url_title,
$ic_type,
$ic_title,
str_replace(
$this->config->item('media_image_url'),
$this->config->item('site_image_url'),
$ic_content
),
$ic_summary,
$ic_seo_title,
$ic_seo_description,
$ic_seo_keywords,
$ic_show_bread_crumbs,
$ic_status,
$ic_template,
$ic_photo,
$ic_photo_width,
$ic_photo_height,
$site_code,
$ic_recommend_tours,
$ic_recommend_packages,
$ic_ht_area_id,
$ic_ht_area_type,
$ic_ht_product_id,
$ic_ht_product_type,
$ic_author
$ic_summary, $ic_seo_title, $ic_seo_description, $ic_seo_keywords, $ic_show_bread_crumbs, $ic_status,
$ic_template, $ic_photo, $ic_photo_width, $ic_photo_height, $this->config->item('site_code'), $ic_recommend_tours, $ic_recommend_packages,
$ic_ht_area_id, $ic_ht_area_type, $ic_ht_product_id, $ic_ht_product_type, $ic_author
)
);
$this->insert_id = $this->HT->last_id('infoContents');
@ -252,36 +150,16 @@ class InfoContents_model extends CI_Model
$query = $this->HT->query(
$sql,
array(
$ic_url,
$ic_url_title,
$ic_type,
$ic_title,
$ic_content,
$ic_summary,
$ic_seo_title,
$ic_seo_description,
$ic_seo_keywords,
$ic_show_bread_crumbs,
$ic_status,
$ic_template,
$ic_photo,
$ic_photo_width,
$ic_photo_height,
$ic_recommend_tours,
$ic_recommend_packages,
$ic_ht_area_id,
$ic_ht_area_type,
$ic_ht_product_id,
$ic_ht_product_type,
$ic_author,
$ic_id,
$this->config->item('site_code')
$ic_url, $ic_url_title, $ic_type, $ic_title, $ic_content, $ic_summary,
$ic_seo_title, $ic_seo_description, $ic_seo_keywords, $ic_show_bread_crumbs, $ic_status, $ic_template, $ic_photo, $ic_photo_width, $ic_photo_height,
$ic_recommend_tours, $ic_recommend_packages, $ic_ht_area_id,
$ic_ht_area_type, $ic_ht_product_id, $ic_ht_product_type, $ic_author, $ic_id, $this->config->item('site_code')
)
);
return $query;
}
//强制更新信息
//删除信息
function force_update($ic_id, $ic_content)
{
$sql = "UPDATE infoContents SET ic_content = N? WHERE ic_id = ?";
@ -289,14 +167,6 @@ class InfoContents_model extends CI_Model
return $query;
}
//强制更新信息
function force_update_url($ic_id, $ic_url)
{
$sql = "UPDATE infoContents SET ic_url = N? WHERE ic_id = ?";
$query = $this->HT->query($sql, array($ic_url, $ic_id));
return $query;
}
//删除信息
function Delete($ic_id)
{
@ -334,19 +204,7 @@ class InfoContents_model extends CI_Model
public function get_ic_contents2($ic_id)
{
$sql = "SELECT top 1 * from infoContents where ic_id=?";
$query = $this->HT->query($sql, array($ic_id));
if ($query->result()) {
$row = $query->row();
return $row;
} else {
return FALSE;
}
}
public function get_ic_contents2_gm($ic_id)
{
$sql = "SELECT top 1 * from information_gm.dbo.infoContents where ic_id=?";
$sql = "SELECT top 1 ic_id, ic_content, ic_title, ic_url, ic_photo, ic_sitecode, ic_seo_description from infoContents where ic_id=?";
$query = $this->HT->query($sql, array($ic_id));
if ($query->result()) {
$row = $query->row();
@ -369,29 +227,4 @@ class InfoContents_model extends CI_Model
return FALSE;
}
}
public function list_use_hb($site)
{
$sql = "
SELECT c.ic_id, c.ic_url
FROM infoContents c
INNER JOIN infoMetas m
ON c.ic_id = m.im_ic_id
WHERE m.im_key = 'AMP_BODY_PC_STATUS'
AND CONVERT(nvarchar(max), m.im_value) = 'yes'
AND c.ic_sitecode = ?
";
$query = $this->HT->query($sql, array($site));
return $query->result();
}
public function get_isid_by_icid($ic_id)
{
$sql = "
select is_id from infoStructures s
where s.is_ic_id=?
";
$query = $this->HT->query($sql, array($ic_id));
return $query->row();
}
}

@ -1,29 +1,25 @@
<?php
class InfoMetas_model extends CI_Model
{
class InfoMetas_model extends CI_Model {
function __construct()
{
function __construct() {
parent::__construct();
$this->HT = $this->load->database('INFORMATION', TRUE);
}
function add($im_ic_id, $im_key, $im_value)
{
function add($im_ic_id, $im_key, $im_value) {
$sql = "INSERT INTO infoMetas \n"
. " ( \n"
. " im_ic_id, im_key, im_value \n"
. " ) \n"
. "VALUES \n"
. " ( \n"
. " ?, ?, N? \n"
. " )";
return $this->HT->query($sql, array($im_ic_id, $im_key, (string) $im_value));
. " ( \n"
. " im_ic_id, im_key, im_value \n"
. " ) \n"
. "VALUES \n"
. " ( \n"
. " ?, ?, N? \n"
. " )";
return $this->HT->query($sql, array($im_ic_id, $im_key, (string)$im_value));
}
function get_list($im_ic_id, $im_key)
{
function get_list($im_ic_id, $im_key) {
$sql = "
SELECT im.im_id
,im.im_ic_id
@ -37,9 +33,8 @@ class InfoMetas_model extends CI_Model
$query = $this->HT->query($sql, array($im_ic_id, $im_key));
return $query->result();
}
function get_list_by_key($im_ic_id, $im_key)
{
function get_list_by_key($im_key) {
$sql = "
SELECT im.im_id
,im.im_ic_id
@ -55,8 +50,7 @@ class InfoMetas_model extends CI_Model
}
//列表所有含AMPmeta的信息。
public function list_amp($site_code)
{
public function list_amp($site_code) {
$sql = "
SELECT im.im_id
,im.im_ic_id
@ -80,8 +74,7 @@ class InfoMetas_model extends CI_Model
}
//列表所有不含AMPmeta的信息。
public function list_no_amp($site_code)
{
public function list_no_amp($site_code) {
$sql = "
SELECT c0.ic_id, c0.ic_url
FROM infoContents c0
@ -113,8 +106,7 @@ class InfoMetas_model extends CI_Model
}
//按节点列表信息含meta数据
function list_info_by_path_with_meta($is_path, $site_code)
{
function list_info_by_path_with_meta($is_path, $site_code) {
$sql = "SELECT is1.is_id, \n"
. " is1.is_path, \n"
. " ic.ic_id, \n"
@ -138,26 +130,11 @@ class InfoMetas_model extends CI_Model
return $query->result();
}
function get($im_ic_id, $im_key)
{
$sql = "SELECT im.im_value \n"
. "FROM infoMetas im \n"
. "WHERE im.im_ic_id = ? \n"
. " AND im.im_key = ?";
$query = $this->HT->query($sql, array($im_ic_id, $im_key));
if ($query->num_rows() > 0) {
return $query->row()->im_value;
} else {
return false;
}
}
function get_gm($im_ic_id, $im_key)
{
function get($im_ic_id, $im_key) {
$sql = "SELECT im.im_value \n"
. "FROM information_gm.dbo.infoMetas im \n"
. "WHERE im.im_ic_id = ? \n"
. " AND im.im_key = ?";
. "FROM infoMetas im \n"
. "WHERE im.im_ic_id = ? \n"
. " AND im.im_key = ?";
$query = $this->HT->query($sql, array($im_ic_id, $im_key));
if ($query->num_rows() > 0) {
return $query->row()->im_value;
@ -166,19 +143,17 @@ class InfoMetas_model extends CI_Model
}
}
function detail($im_ic_id, $im_key)
{
function detail($im_ic_id, $im_key) {
$sql = "SELECT im.im_value \n"
. "FROM infoMetas im \n"
. "WHERE im.im_ic_id = ? \n"
. " AND im.im_key = ? ORDER BY im.im_id asc";
. "FROM infoMetas im \n"
. "WHERE im.im_ic_id = ? \n"
. " AND im.im_key = ? ORDER BY im.im_id asc";
$query = $this->HT->query($sql, array($im_ic_id, $im_key));
return $query->result();
}
//获取未收录的信息
public function get_unembody_content($datetime, $top_num = 1)
{
public function get_unembody_content($datetime, $top_num = 1) {
$sql = " SELECT TOP $top_num
im_ic_id,
im_value,
@ -197,37 +172,33 @@ class InfoMetas_model extends CI_Model
return $query->result();
}
function update($im_ic_id, $im_key, $im_value)
{
function update($im_ic_id, $im_key, $im_value) {
$sql = "UPDATE infoMetas \n"
. "SET im_value = N? \n"
. "WHERE im_ic_id = ? \n"
. " AND im_key = ?";
return $this->HT->query($sql, array((string) $im_value, $im_ic_id, $im_key));
. "SET im_value = N? \n"
. "WHERE im_ic_id = ? \n"
. " AND im_key = ?";
return $this->HT->query($sql, array((string)$im_value, $im_ic_id, $im_key));
}
function delete($im_ic_id, $im_key)
{
function delete($im_ic_id, $im_key) {
$sql = "DELETE \n"
. "FROM infoMetas \n"
. "WHERE im_ic_id = ? \n"
. " AND im_key = ?";
. "FROM infoMetas \n"
. "WHERE im_ic_id = ? \n"
. " AND im_key = ?";
return $this->HT->query($sql, array($im_ic_id, $im_key));
}
function update_by_id($im_id, $im_value)
{
function update_by_id($im_id, $im_value) {
$sql = "UPDATE infoMetas \n"
. "SET im_value = N? \n"
. "WHERE im_id = ? \n";
. "SET im_value = N? \n"
. "WHERE im_id = ? \n";
return $this->HT->query($sql, array($im_value, $im_id));
}
function delete_by_id($im_id)
{
function delete_by_id($im_id) {
$sql = "DELETE \n"
. "FROM infoMetas \n"
. "WHERE im_id = ? \n";
. "FROM infoMetas \n"
. "WHERE im_id = ? \n";
return $this->HT->query($sql, array($im_id));
}

@ -37,23 +37,17 @@ class InfoSMS_model extends CI_Model
//设置已读
function readed($m_id)
{
/* 不再使用注释-lmr
$sql = "UPDATE infosms \n"
. "SET m_readed = 1 \n"
. "WHERE m_id = ?";
return $this->HT->query($sql,array($m_id));
*/
return array();
}
function readed_for_info($m_object_id,$m_object_type='info')
{
/* 不再使用注释-lmr
$sql = "UPDATE infosms \n"
. "SET m_readed = 1 \n"
. "WHERE m_object_type=? and m_object_id = ?";
return $this->HT->query($sql,array($m_object_type,$m_object_id));
*/
return array();
}
//获取未读消息

@ -16,149 +16,100 @@ class InfoStructures_model extends CI_Model
function Detail($is_id)
{
$sql = "SELECT TOP 1 is1.is_id, \n"
. " is1.is_parent_id, \n"
. " is1.is_path, \n"
. " is1.is_level, \n"
. " is1.is_sort, \n"
. " is1.is_sitecode, \n"
. " is1.is_datetime, \n"
. " is1.is_ic_id \n"
. "FROM infoStructures is1 \n"
. "WHERE is1.is_id = ?";
. " is1.is_parent_id, \n"
. " is1.is_path, \n"
. " is1.is_level, \n"
. " is1.is_sort, \n"
. " is1.is_sitecode, \n"
. " is1.is_datetime, \n"
. " is1.is_ic_id \n"
. "FROM infoStructures is1 \n"
. "WHERE is1.is_id = ?";
$query = $this->HT->query($sql, array($is_id));
//print_r($this->HT->queries);
if ($query->result()) {
if ($query->result())
{
$row = $query->row();
return $row;
} else {
return FALSE;
}
}
function Detail_gm($is_id)
{
$sql = "SELECT TOP 1 is1.is_id, \n"
. " is1.is_parent_id, \n"
. " is1.is_path, \n"
. " is1.is_level, \n"
. " is1.is_sort, \n"
. " is1.is_sitecode, \n"
. " is1.is_datetime, \n"
. " is1.is_ic_id \n"
. "FROM information_gm.dbo.infoStructures is1 \n"
. "WHERE is1.is_id = ?";
$query = $this->HT->query($sql, array($is_id));
//print_r($this->HT->queries);
if ($query->result()) {
$row = $query->row();
return $row;
} else {
else
{
return FALSE;
}
}
function Add($is_parent_id, $is_ic_id = -1, $is_sort = 999)
function Add($is_parent_id, $is_ic_id=-1,$is_sort=999)
{
if ($is_parent_id == 0) {
if ($is_parent_id == 0 )
{
$is_path = '';
$is_level = 1;
} else if ($is_parent_id == -99) {
$is_path = '';
}else if($is_parent_id == -99){
$is_path = '';
$is_level = 0;
$is_sort = 0;
} else {
$is_sort=0;
}
else
{
$infoStructure = $this->Detail($is_parent_id);
if ($infoStructure) {
if ($infoStructure)
{
$is_path = $infoStructure->is_path;
$is_level = $infoStructure->is_level + 1;
} else {
return false;
}
}
$sql = "INSERT INTO infoStructures \n"
. " ( \n"
. " is_parent_id, is_path, is_level, is_sort, is_sitecode, is_datetime, is_ic_id \n"
. " ) \n"
. "VALUES \n"
. " ( \n"
. " ?, ?, ?, ?, ?, getdate(), ? \n"
. " )";
$query = $this->HT->query($sql, array($is_parent_id, $is_path, $is_level, $is_sort, $this->config->item('site_code'), $is_ic_id));
$this->insert_id = $this->HT->last_id('infoStructures');
//把自己的ID加到path上
$set_sql = "UPDATE infoStructures \n"
. "SET is_path = is_path + CONVERT(VARCHAR(200), is_id) + ',' \n"
. "WHERE is_id = ?";
$query = $this->HT->query($set_sql, array($this->insert_id));
return $this->insert_id;
}
function Add_with_sitecode($is_parent_id, $is_ic_id = -1, $is_sort = 999, $site_code = '')
{
if (empty ($site_code)) {
$site_code = $this->config->item('site_code');
}
if ($is_parent_id == 0) {
$is_path = '';
$is_level = 1;
} else if ($is_parent_id == -99) {
$is_path = '';
$is_level = 0;
$is_sort = 0;
} else {
$infoStructure = $this->Detail($is_parent_id);
if ($infoStructure) {
$is_path = $infoStructure->is_path;
$is_level = $infoStructure->is_level + 1;
} else {
else
{
return false;
}
}
$sql = "INSERT INTO infoStructures \n"
. " ( \n"
. " is_parent_id, is_path, is_level, is_sort, is_sitecode, is_datetime, is_ic_id \n"
. " ) \n"
. "VALUES \n"
. " ( \n"
. " ?, ?, ?, ?, ?, getdate(), ? \n"
. " )";
$query = $this->HT->query($sql, array($is_parent_id, $is_path, $is_level, $is_sort, $site_code, $is_ic_id));
. " ( \n"
. " is_parent_id, is_path, is_level, is_sort, is_sitecode, is_datetime, is_ic_id \n"
. " ) \n"
. "VALUES \n"
. " ( \n"
. " ?, ?, ?, ?, ?, getdate(), ? \n"
. " )";
$query = $this->HT->query($sql, array($is_parent_id, $is_path, $is_level, $is_sort, $this->config->item('site_code'), $is_ic_id));
$this->insert_id = $this->HT->last_id('infoStructures');
//把自己的ID加到path上
$set_sql = "UPDATE infoStructures \n"
. "SET is_path = is_path + CONVERT(VARCHAR(200), is_id) + ',' \n"
. "WHERE is_id = ?";
. "SET is_path = is_path + CONVERT(VARCHAR(200), is_id) + ',' \n"
. "WHERE is_id = ?";
$query = $this->HT->query($set_sql, array($this->insert_id));
return $this->insert_id;
}
function GetParent($is_path, $level = 1)
function GetParent($is_path, $level=1)
{
if ($is_path == '') {
if ($is_path == '')
{
return false;
}
$sql = "SELECT TOP 1 is1.is_id, \n"
. " is1.is_parent_id, \n"
. " is1.is_path, \n"
. " is1.is_level, \n"
. " is1.is_sort, \n"
. " is1.is_sitecode, \n"
. " is1.is_datetime, \n"
. " is1.is_ic_id \n"
. "FROM infoStructures is1 \n"
. "WHERE is1.is_level = ? \n"
. " AND is1.is_id IN ($is_path 0) \n"
. "ORDER BY \n"
. " is1.is_id ASC";
. " is1.is_parent_id, \n"
. " is1.is_path, \n"
. " is1.is_level, \n"
. " is1.is_sort, \n"
. " is1.is_sitecode, \n"
. " is1.is_datetime, \n"
. " is1.is_ic_id \n"
. "FROM infoStructures is1 \n"
. "WHERE is1.is_level = ? \n"
. " AND is1.is_id IN ($is_path 0) \n"
. "ORDER BY \n"
. " is1.is_id ASC";
$query = $this->HT->query($sql, array($level));
// print_r($this->HT->queries);
if ($query->result()) {
if ($query->result())
{
$row = $query->row();
return $row;
} else {
}
else
{
return FALSE;
}
}
@ -168,9 +119,12 @@ class InfoStructures_model extends CI_Model
{
$detail = $this->Detail($is_id);
$root = $this->GetParent($detail->is_path, 1);
if ($root) {
if ($root)
{
return $root;
} else { //没有根节点则返回本节点
}
else
{ //没有根节点则返回本节点
return $detail;
}
}
@ -179,12 +133,15 @@ class InfoStructures_model extends CI_Model
function HasChild($is_id)
{
$sql = "SELECT TOP 1 is1.is_id \n"
. "FROM infoStructures is1 \n"
. "WHERE is1.is_parent_id = ?";
. "FROM infoStructures is1 \n"
. "WHERE is1.is_parent_id = ?";
$query = $this->HT->query($sql, array($is_id));
if ($query->result()) {
if ($query->result())
{
return true;
} else {
}
else
{
return FALSE;
}
}
@ -193,8 +150,8 @@ class InfoStructures_model extends CI_Model
function Delete($is_id)
{
$sql = "DELETE \n"
. "FROM infoStructures \n"
. "WHERE is_id = ?";
. "FROM infoStructures \n"
. "WHERE is_id = ?";
$query = $this->HT->query($sql, array($is_id));
return $query;
}
@ -203,9 +160,9 @@ class InfoStructures_model extends CI_Model
function set_sort($is_id, $sort)
{
$sql = "UPDATE infoStructures \n"
. "SET is_datetime = GETDATE(), \n"
. " is_sort = ? \n"
. "WHERE is_id = ?";
. "SET is_datetime = GETDATE(), \n"
. " is_sort = ? \n"
. "WHERE is_id = ?";
$query = $this->HT->query($sql, array($sort, $is_id));
//print_r($this->HT->queries);
return $query;
@ -216,7 +173,8 @@ class InfoStructures_model extends CI_Model
{
$structure = $this->Detail($is_id);
//如果父级相同则不需要重新设置path
if ($parent_id == $structure->is_parent_id) {
if ($parent_id == $structure->is_parent_id)
{
return true;
}
$parent = $this->Detail($parent_id);
@ -226,37 +184,39 @@ class InfoStructures_model extends CI_Model
$set_path = $parent->is_path . $is_id . ',';
$set_sql = "UPDATE infoStructures \n"
. "SET is_parent_id = ?, \n"
. " is_level = ?, \n"
. " is_path = ? \n"
. "WHERE is_id = ?";
. "SET is_parent_id = ?, \n"
. " is_level = ?, \n"
. " is_path = ? \n"
. "WHERE is_id = ?";
$this->HT->query($set_sql, array($set_parent_id, $set_level, $set_path, $is_id));
$structure = $this->Detail($is_id);
//查询当前节点的所有子节点
$sql = "SELECT is1.is_id, \n"
. " is1.is_parent_id, \n"
. " is1.is_path, \n"
. " is1.is_level, \n"
. " is1.is_sort \n"
. "FROM infoStructures is1 \n"
. "WHERE ',' + is1.is_path LIKE '%,$structure->is_id,%' \n"
. "ORDER BY \n"
. " is1.is_level ASC ";
. " is1.is_parent_id, \n"
. " is1.is_path, \n"
. " is1.is_level, \n"
. " is1.is_sort \n"
. "FROM infoStructures is1 \n"
. "WHERE ',' + is1.is_path LIKE '%,$structure->is_id,%' \n"
. "ORDER BY \n"
. " is1.is_level ASC ";
$query = $this->HT->query($sql);
foreach ($query->result() as $item) {
if ($item->is_parent_id != $structure->is_id) {
foreach ($query->result() as $item)
{
if ($item->is_parent_id != $structure->is_id)
{
$structure = $this->Detail($item->is_parent_id);
}
$set_parent_id = $structure->is_id;
$set_level = $structure->is_level + 1;
$set_path = $structure->is_path . $item->is_id . ',';
$set_sql = "UPDATE infoStructures \n"
. "SET is_parent_id = ?, \n"
. " is_level = ?, \n"
. " is_path = ? \n"
. "WHERE is_id = ?";
. "SET is_parent_id = ?, \n"
. " is_level = ?, \n"
. " is_path = ? \n"
. "WHERE is_id = ?";
$this->HT->query($set_sql, array($set_parent_id, $set_level, $set_path, $item->is_id));
}
}
@ -267,22 +227,21 @@ class InfoStructures_model extends CI_Model
* @return:
* @Date Changed:
*/
public function AddRootNote($is_ic_id)
{
public function AddRootNote($is_ic_id){
$sql = "INSERT INTO infoStructures \n"
. " ( \n"
. " is_parent_id, is_path, is_level, is_sort, is_sitecode, is_datetime, is_ic_id \n"
. " ) \n"
. "VALUES \n"
. " ( \n"
. " ?, ?, ?, ?, ?, getdate(), ? \n"
. " )";
. " ( \n"
. " is_parent_id, is_path, is_level, is_sort, is_sitecode, is_datetime, is_ic_id \n"
. " ) \n"
. "VALUES \n"
. " ( \n"
. " ?, ?, ?, ?, ?, getdate(), ? \n"
. " )";
$query = $this->HT->query($sql, array(-99, '', 0, 0, $this->config->item('site_code'), $is_ic_id));
$this->insert_id = $this->HT->last_id('infoStructures');
//把自己的ID加到path上
$set_sql = "UPDATE infoStructures \n"
. "SET is_path = is_path + CONVERT(VARCHAR(200), is_id) + ',' \n"
. "WHERE is_id = ?";
. "SET is_path = is_path + CONVERT(VARCHAR(200), is_id) + ',' \n"
. "WHERE is_id = ?";
$query = $this->HT->query($set_sql, array($this->insert_id));
return $this->insert_id;

File diff suppressed because it is too large Load Diff

@ -14,66 +14,77 @@ class Operator_model extends CI_Model
function check_login($user_code, $password)
{
$sql = "SELECT TOP 1 1 \n"
. "FROM tourmanager.dbo.OperatorInfo oi \n"
. "WHERE oi.OPI_Code = N? \n"
. " AND CONVERT(VARCHAR(100), oi.OPI_Password) = N? ";
. "FROM tourmanager.dbo.OperatorInfo oi \n"
. "WHERE oi.OPI_Code = N? \n"
. " AND CONVERT(VARCHAR(100), oi.OPI_Password) = N? ";
$query = $this->HT->query($sql, array($user_code, $password));
//print_r($this->HT->queries);
if ($query->num_rows() > 0) {
if ($query->num_rows() > 0)
{
return 1;
} else {
}
else
{
$author_sql = "SELECT TOP 1 1 FROM tourmanager.dbo.infoAuthors WHERE a_email=? AND a_password=?";
$author_query = $this->HT->query($author_sql, array($user_code, $password));
if ($author_query->num_rows() > 0) {
if ($author_query->num_rows() > 0)
{
return 2;
} else {
}
else{
return FALSE;
}
}
}
function get_password($user_code)
{
function get_password($user_code)
{
$sql = "SELECT TOP 1 oi.OPI_Password \n"
. "FROM tourmanager.dbo.OperatorInfo oi \n"
. "WHERE oi.OPI_Code = N?";
. "FROM tourmanager.dbo.OperatorInfo oi \n"
. "WHERE oi.OPI_Code = N?";
$query = $this->HT->query($sql, array($user_code));
//print_r($this->HT->queries);
if ($query->num_rows() > 0) {
if ($query->num_rows() > 0)
{
$row = $query->row_array();
return $row;
} else {
return FALSE;
}
}
else
{
return FALSE;
}
}
//获取登录用户详细信息
function get_user($user_code)
{
if (empty($user_code)) {
return false;
}
if(empty($user_code))
{
return false;
}
$sql = "SELECT TOP 1 oi.OPI_SN, \n"
. " oi.OPI_Name, \n"
. " oi.OPI_Email, \n"
. " oi.OPI_FirstName, \n"
. " oi.OPI_Code \n"
. "FROM tourmanager.dbo.OperatorInfo oi \n"
. "WHERE oi.OPI_Code = N?";
. " oi.OPI_Name, \n"
. " oi.OPI_Email, \n"
. " oi.OPI_FirstName, \n"
. " oi.OPI_Code \n"
. "FROM tourmanager.dbo.OperatorInfo oi \n"
. "WHERE oi.OPI_Code = N?";
$query = $this->HT->query($sql, array($user_code));
//print_r($this->HT->queries);
if ($query->num_rows() > 0) {
if ($query->num_rows() > 0)
{
$row = $query->row_array();
return $row;
} else {
return FALSE;
}
else
{
return FALSE;
}
}
//获取作者平台的作者信息
public function get_author_user($a_email)
{
public function get_author_user($a_email){
$sql = "SELECT TOP 1
a_id as OPI_SN,
a_email as OPI_Email,
@ -83,39 +94,42 @@ class Operator_model extends CI_Model
FROM tourmanager.dbo.infoAuthors
WHERE a_email=? AND a_active=1";
$query = $this->HT->query($sql, array($a_email));
if ($query->num_rows() > 0) {
if ($query->num_rows() > 0)
{
$row = $query->row_array();
return $row;
} else {
return FALSE;
}
else
{
return FALSE;
}
}
//获取作者信息
function get_author($user_code = array())
//获取作者信息
function get_author($user_code=array())
{
$user_code_str = '';
foreach ($user_code as $user_item) {
$user_code_str .= "'" . $user_item . "',";
}
$user_code_str .= "'0'";
$user_code_str='';
foreach($user_code as $user_item)
{
$user_code_str.="'".$user_item."',";
}
$user_code_str.="'0'";
$sql = "SELECT oi.OPI_SN, \n"
. " oi.OPI_Name, \n"
. " oi.OPI_Email, \n"
. " oi.OPI_FirstName, \n"
. " oi.OPI_Code \n"
. "FROM tourmanager.dbo.OperatorInfo oi \n"
. "WHERE oi.OPI_Code IN ( $user_code_str )";
. " oi.OPI_Name, \n"
. " oi.OPI_Email, \n"
. " oi.OPI_FirstName, \n"
. " oi.OPI_Code \n"
. "FROM tourmanager.dbo.OperatorInfo oi \n"
. "WHERE oi.OPI_Code IN ( $user_code_str )";
$query = $this->HT->query($sql);
//print_r($this->HT->queries);
return $query->result();
return $query->result();
}
//获取作者的昵称
function get_author_nikename($user_code)
{
$sql = "
function get_author_nikename($user_code){
$sql="
SELECT top 1 isnull(uio.NickName,'') as NickName,uio.customPic, uio.userid, uio.sex, uio.Email,uio.intro
,OPI_SN,OPI_Name,OPI_Email,OPI_FirstName,OPI_Code
FROM tourmanager.dbo.OperatorInfo left JOIN
@ -131,26 +145,25 @@ class Operator_model extends CI_Model
return FALSE;
}
}
//HT中所有账号
function all()
{
//HT中所有账号
function all()
{
$sql = "SELECT oi.OPI_SN, \n"
. " oi.OPI_Name, \n"
. " oi.OPI_Email, \n"
. " oi.OPI_FirstName, \n"
. " oi.OPI_Code \n"
. "FROM tourmanager.dbo.OperatorInfo oi \n"
. "WHERE oi.deleteFlag=0 \n"
. "ORDER BY OPI_Code ASC ";
. " oi.OPI_Name, \n"
. " oi.OPI_Email, \n"
. " oi.OPI_FirstName, \n"
. " oi.OPI_Code \n"
. "FROM tourmanager.dbo.OperatorInfo oi \n"
. "WHERE oi.deleteFlag=0 \n"
. "ORDER BY OPI_Code ASC ";
$query = $this->HT->query($sql);
//print_r($this->HT->queries);
return $query->result();
}
return $query->result();
}
//获取当前站点的作者
public function get_site_user($site_code)
{
public function get_site_user($site_code){
$sql = "SELECT oi.OPI_SN,
oi.OPI_Name,
oi.OPI_Email,
@ -158,7 +171,7 @@ class Operator_model extends CI_Model
oi.OPI_Code
FROM tourmanager.dbo.OperatorInfo oi INNER JOIN infoaccessownsite i ON oi.OPI_Code=i.iao_author AND i.iao_other='editor'
WHERE i.iao_site=?";
$query = $this->HT->query($sql, $site_code);
$query = $this->HT->query($sql,$site_code);
return $query->result();
}
}

@ -8,7 +8,6 @@ class Trippest_model extends CI_Model {
{
parent::__construct();
$this->HT = $this->load->database('HT', TRUE);
//$this->HT = $this->load->database('TOURMANAGER_LOCAL', TRUE);
}

@ -1,164 +0,0 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class TrainDMS extends CI_Controller {
public function __construct(){
parent::__construct();
$this->load->model("dms_model");
}
/**
* @description: 接口总汇,根据接受数据,调用不同接口,返回数据
* @return {*}
* @Date Changed:
*/
public function dmsCallback(){
$back_json = file_get_contents('php://input');
$dms_backdata = json_decode($back_json);
if(!empty($dms_backdata)){
//判断接口调用是否合法
$TimeStamp = $dms_backdata->authentication->timeStamp;
$serviceName = $dms_backdata->authentication->serviceName; //每个接口都有自己名称
$companyId = "haina";
$key = "dms001";
$strSign = $TimeStamp.$serviceName.$companyId.$key; //加密前的令牌
$Sign = md5($strSign);
$messageIdentity = $dms_backdata->authentication->messageIdentity;
$ResultNoticeResponse = new stdClass();
if ($Sign == $messageIdentity){
$ResultNoticeResponse->returnCode = 1;
$ResultNoticeResponse->returnMsg = "success";
//这里正常处理各种接口调用
if ($serviceName=="dms.login"){ //登录
$username = $dms_backdata->loginInfo->username;
$password = $dms_backdata->loginInfo->password;
$ResultNoticeResponse->loginInfo = new stdClass();
$LoginInfo = $this->dms_model->Login($username,$password);
if (empty($LoginInfo)){
$ResultNoticeResponse->loginInfo->status = 0; //账号密码错误。
$ResultNoticeResponse->loginInfo->dt_username = '';
$ResultNoticeResponse->loginInfo->dt_payrule = "";
$ResultNoticeResponse->loginInfo->dt_usertype = "";
$ResultNoticeResponse->loginInfo->dt_HtId = "";
$ResultNoticeResponse->loginInfo->dt_id = "";
}else{
$ResultNoticeResponse->loginInfo->status = 1; //账号密码是否正常。
$ResultNoticeResponse->loginInfo->dt_username = $LoginInfo->dt_username;
$ResultNoticeResponse->loginInfo->dt_payrule = $LoginInfo->dt_payrule;
$ResultNoticeResponse->loginInfo->dt_usertype = $LoginInfo->dt_usertype;
$ResultNoticeResponse->loginInfo->dt_HtId = $LoginInfo->dt_HtId;
$ResultNoticeResponse->loginInfo->dt_id = $LoginInfo->dt_id;
}
}else if($serviceName=="dms.dmlist"){ //分销商列表
$arrKeyword = new stdClass();
$arrKeyword = $dms_backdata->arrKeyword;
$dmlist = $this->dms_model->get_DmList($arrKeyword);
$resultData = $dmlist["data"];
$total = $dmlist["total"];
$ResultNoticeResponse->dmlist = new stdClass();
$ResultNoticeResponse->dmlist->data=$resultData;
$ResultNoticeResponse->dmlist->total = $total;
// "arrKeyword": {
// "s_username": "ssss",
// "s_ename": "vvv",
// "page": false,
// "per_page": 20
// }
}else if($serviceName=="dms.getpayrule"){ //获取支付规则列表数据
$getpayrule = $this->dms_model->get_payrule();
$ResultNoticeResponse->getpayrule = $getpayrule;
}else if ($serviceName=="dms.addsave"){ //添加供应商操作
$formData = new stdClass() ;
$formData = $dms_backdata->formInfo;
$rStatus = $this->dms_model->addsave($formData);
$ResultNoticeResponse->addsave = $rStatus;
}else if ($serviceName=="dms.getDmsDetail") { //修改分销商详细页
$id = $dms_backdata->DmsDetail->dtid;
$dmsDetail = $this->dms_model->getDmsDetail($id);
$ResultNoticeResponse->DmsDetail = $dmsDetail;
}else if ($serviceName=="dms.editsave"){ //修改分销商保存
$formData = new stdClass() ;
$formData = $dms_backdata->formInfo;
$rStatus = $this->dms_model->editsave($formData);
$ResultNoticeResponse->editsave = $rStatus;
}else if ($serviceName=="dms.delete"){ //删除分销商
$id = $dms_backdata->DmsDetail->dtid;
$rStatus = $this->dms_model->dmdDelete($id);
$ResultNoticeResponse->dmsdelete = $rStatus;
}else if ($serviceName == "dms.payrecord"){ //支付记录
$arrKeyword = new stdClass();
$arrKeyword = $dms_backdata->arrKeyword;
$payrecord = $this->dms_model->payrecord($arrKeyword);
$resultData = $payrecord["data"];
$total = $payrecord["total"];
$ResultNoticeResponse->payrecord = new stdClass();
$ResultNoticeResponse->payrecord->data=$resultData;
$ResultNoticeResponse->payrecord->total = $total;
}else if ($serviceName=="dms.payrecord_addsave"){ //支付记录添加
$formData = new stdClass() ;
$formData = $dms_backdata->formInfo;
$rStatus = $this->dms_model->payrecord_addsave($formData);
$ResultNoticeResponse->addsave = $rStatus;
}else if ($serviceName=="dms.payrecord_delete"){ //支付记录删除
$id = $dms_backdata->payrecord->dp_id;
$htid = $dms_backdata->payrecord->dp_HtId;
$rStatus = $this->dms_model->payrecord_delete($id,$htid);
$ResultNoticeResponse->dmsdelete = $rStatus;
}else if ($serviceName=="dms.trainorder"){ //订单列表-火车
$arrKeyword = new stdClass();
$arrKeyword = $dms_backdata->arrKeyword;
$trainorder = $this->dms_model->trainorder($arrKeyword);
$resultData = $trainorder["data"];
$total = $trainorder["total"];
$ResultNoticeResponse->trainorder = new stdClass();
$ResultNoticeResponse->trainorder->data=$resultData;
$ResultNoticeResponse->trainorder->total = $total;
}else if ($serviceName == "dms.dmslisteasy"){ //所有分销商数据,下拉框使用
$getdmseasy = $this->dms_model->get_dmseasy();
$ResultNoticeResponse->getpayrule = $getdmseasy;
}else if ($serviceName=="dms.getpaydetail"){ //获取某一个分销商的所有财务信息
$id = $dms_backdata->htid;
$getpaydetail = $this->dms_model->get_paydetail($id);
$ResultNoticeResponse->getpaydetail = $getpaydetail;
}
}else{
$ResultNoticeResponse->returnCode = 0;
$ResultNoticeResponse->returnMsg = "messageIdentity is error!";
}
echo json_encode($ResultNoticeResponse);
}
}
/**
* @description:
* @return {*}
* @Date Changed:
*/
public function index()
{
}
public function login (){
}
public function addUser(){
}
}
/* End of file TrainDMS.php */

@ -1,59 +0,0 @@
<?php
class Des
{
function encrypt($string,$key)
{
$size = mcrypt_get_block_size('des','ecb');
//$string = mb_convert_encoding($string, 'GBK', 'UTF-8');
$string = $this->pkcs5_pad($string, $size);
$td = mcrypt_module_open('des', '', 'ecb', '');
$iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
@mcrypt_generic_init($td, $key, $iv);
$data = mcrypt_generic($td, $string);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
$data = base64_encode($data);
return $data;
}
function decrypt($string,$key)
{
$string = base64_decode($string);
$td = mcrypt_module_open('des', '', 'ecb', '');
//使用MCRYPT_DES算法,cbc模式
$iv = @mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
$ks = mcrypt_enc_get_key_size($td);
@mcrypt_generic_init($td, $key, $iv);
//初始处理
$decrypted = mdecrypt_generic($td, $string);
//解密
mcrypt_generic_deinit($td);
//结束
mcrypt_module_close($td);
$result = $this->pkcs5_unpad($decrypted);
//$result = mb_convert_encoding($result, 'UTF-8', 'GBK');
return $result;
}
function pkcs5_pad($text, $blocksize)
{
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
function pkcs5_unpad($text)
{
$pad = ord($text{strlen($text) - 1});
if ($pad > strlen($text)) {
return false;
}
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) {
return false;
}
return substr($text, 0, -1 * $pad);
}
}
?>

@ -93,7 +93,7 @@ class Api_model extends CI_Model {
$reust = "";
//'新的GP没有设置以前的2-5人等价格导致读不出价格。把Gp价格放前面计算
$sql = "select top 1 CLI_SN,CLI_PackageClass from CustomerLineInfo
where CLI_NO=? and ( CLI_State = 1005003 or CLI_State=1005004) and CLI_Grade=7001
where CLI_NO=? and CLI_State=1005004
AND (CLI_DEI_SN= ? )";
$query = $this->HT->query($sql,array($cli_no,$this->dei_sn));
if (!$query->num_rows()>0){
@ -137,7 +137,7 @@ class Api_model extends CI_Model {
CustomerLinePrice ON CustomerLineInfo.CLI_SN = CustomerLinePrice.CLP_CLI_SN INNER JOIN
CustomerLineInfo2 ON CustomerLineInfo.CLI_SN = CustomerLineInfo2.CLI2_CLI_SN
where CLI_SN= ? and CLI2_LGC=? and (CLP_Area=1 or CLP_Area=2)
and (CLI_State = 1005004 or CLI_State = 1005003) ORDER BY CLP_TwoToFiveAdultPrice";
and CLI_State = 1005004 ORDER BY CLP_TwoToFiveAdultPrice";
$query = $this->HT->query($sql,array($CLI_SN,$this->CTLGC));
if ($query->num_rows()>0){
$reust = $query->row()->CLP_TwoToFiveAdultPrice;

@ -1,402 +0,0 @@
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Dms_model extends CI_Model {
function __construct() {
parent::__construct();
$this->HT = $this->load->database('TOURMANAGER_LOCAL', TRUE);
$this->INFO = $this->load->database('INFORMATION_LOCAL', TRUE);
}
/**
* @description:
* @return {*}
* @Date Changed:
*/
function Login($username,$password){
$sql = "select top 1 dt_id,dt_username,dt_payrule,dt_usertype,dt_HtId from DMS_Distributor ";
$sql .= " where dt_status=1 and dt_username=? and dt_password=? ";
$query = $this->INFO->query($sql,array($username,$password));
if ($query->num_rows() > 0) {
return $query->row();
}else{
return null;
}
}
/**
* 订单列表
*/
function trainorder($arrKeyword){
$htid = $arrKeyword->htid ==false?-1:$arrKeyword->htid;
$page = $arrKeyword->page ==false?0:$arrKeyword->page;
$pagesize = $arrKeyword->per_page>0 ? $arrKeyword->per_page :20;
if ($page < 1) {
$page = 1;
}
$sql = " SELECT * from (
select row_number() over (order by COLI_ApplyDate desc) as rownumber, COLI_SN,COLI_ID,COLI_ApplyDate,COLI_servicetype,COLI_State,COLI_sourcetype,COLI_GUT_SN
,GUT_Title,GUT_FirstName,GUT_LastName
,tb2.*
from BIZ_ConfirmLineInfo bci
inner join BIZ_Guest bg on bci.COLI_GUT_SN = bg.GUT_SN
outer apply ( select top 1 COLD_COLI_SN,FlightsNo,DepartureCity,ArrivalCity from BIZ_ConfirmLineDetail inner join BIZ_FlightsOrderInfo
on FOI_COLD_SN=COLD_SN where COLD_COLI_SN=bci.COLI_SN) tb2
where COLI_State in(8,9,61,62)
AND COLI_servicetype='2'
and isnull(DeleteFlag,0)<>1 ";
if ($htid == 32083 || $htid==32084){
$sql .= " and COLI_sourcetype in(32083,32084) ";
}else {
$sql .= " and COLI_sourcetype ='".$htid."'";
}
$sql .= " )t ";
$sql2 = $sql." Where t.rownumber > ? And t.rownumber <= ?";
$begin = ($page - 1) * $pagesize;
$end = $begin + $pagesize;
$qurey = $this->HT->query($sql);
$count = $qurey->num_rows(); //总记录数
$qurey2 = $this->HT->query($sql2, array($begin, $end));
//return 数据和总数
return array('data' => $qurey2->result(), 'total' => $count);
}
/**
* @description:
* @param {*} $arrKeyword
* @return {*}
* @Date Changed:
*/
function get_DmList($arrKeyword){
$s_username = $arrKeyword->s_username ==false?"": trim($arrKeyword->s_username);
$s_ename = $arrKeyword->s_ename ==false?"": trim($arrKeyword->s_ename);
$page = $arrKeyword->page ==false?0:$arrKeyword->page;
$pagesize = $arrKeyword->per_page>0 ? $arrKeyword->per_page :20;
if ($page < 1) {
$page = 1;
}
$sql = "SELECT * from (
SELECT row_number() over (order by dt_id desc) as rownumber,dt_id,dt_username,dt_password,dt_HTid,dt_payrule,dt_usertype,isnull(dt_status,1) as dt_status
,(select dpr_rule from dms_payrule where dpr_id = dt_payrule) as dpr_rule
,(select syc2_CodeDiscribe FROM tourmanager.dbo.V_System_Code where SYC_Type=32 AND LGC_LGC=2 AND SYC_SN=dt_HtId) as dmsName
,isnull((select SUM(dp_paymoney) from DMS_PayRecord where dp_HtId=dt_HtId and dp_status>0),0) as TrainPaySum
from DMS_Distributor
)t where 1=1 ";
if ($s_username!=""){
$sql .= " and dt_username like '%".$s_username."%' ";
}
if ($s_ename!=""){
$sql .= " and dmsName like '%".$s_ename."%' ";
}
$sql2 = $sql . " and t.rownumber > ? And t.rownumber <= ? order by dt_id desc";
$begin = ($page - 1) * $pagesize;
$end = $begin + $pagesize;
$qurey = $this->INFO->query($sql);
$count = $qurey->num_rows(); //总记录数
$qurey2 = $this->INFO->query($sql2, array($begin, $end));
//计算订单总额
$returndata = $qurey2->result();
foreach ($returndata as $item) {
$paydetail = $this->get_paydetail($item->dt_HTid);
$trainOrderCount = $paydetail->count;
$trainOrderTotal = $paydetail->total;
$item->trainOrderCount = $trainOrderCount;
$item->trainOrderTotal = $trainOrderTotal;
}
//return 数据和总数
return array('data' => $returndata, 'total' => $count);
}
/**
* 获取支付规则列表数据
*/
function get_payrule(){
$sql = "select * from dms_payrule ";
$query = $this->INFO->query($sql);
return $query->result();
}
function get_dmseasy(){
$sql = " select * from DMS_Distributor where dt_usertype='distributor'
order by dt_username ";
$query = $this->INFO->query($sql);
return $query->result();
}
/**
* 获取某一个分销商的所有财务信息
*/
function get_paydetail($id){
$sql = "select count(*) as oCount from BIZ_ConfirmLineInfo where COLI_State in(8,9,61,62) AND COLI_servicetype='2' and isnull(DeleteFlag,0)<>1 ";
if ($id == 32083 || $id==32084){
$sql .= " and COLI_sourcetype in(32083,32084) ";
}else{
$sql .= " and COLI_sourcetype ='".$id."' ";
}
$query = $this->HT->query($sql);
if ($query->num_rows()>0){
$count = $query->row()->oCount;
}else{
$count = 0;
}
//付款规则
$sql = "select top 1 dt_payrule from DMS_Distributor where dt_htid='".$id."'";
$query = $this->INFO->query($sql);
if ($query->num_rows()>0){
$rule = $query->row()->dt_payrule;
}else{
$rule = 0;
}
if ($rule == 1){
$total = $count * 1;
}else if ($rule == 2 ){
$total = $count * 2;
}
else if ($rule == 3 ){
//按人数来算 ,1美元/人
$rSql = "select isnull(sum(COLD_PersonNum),0) as sumP from BIZ_ConfirmLineDetail
inner join BIZ_FlightsOrderInfo on FOI_COLD_SN=COLD_SN
where COLD_COLI_SN in( select COLI_SN from BIZ_ConfirmLineInfo where COLI_sourcetype='".$id."' and COLI_State in(8,9,61,62)
AND COLI_servicetype='2' and isnull(DeleteFlag,0)<>1)";
$queryR = $this->HT->query($rSql);
if ($queryR->num_rows()>0){
$total = $queryR->row()->sumP;
}else{
$total = 0 ;
}
}else {
$total = 0;
}
//已支付
$sql = "select isnull(SUM(dp_paymoney),0) as osum from DMS_PayRecord where dp_HtId= '".$id."'";
$query = $this->INFO->query($sql);
if ($query->num_rows()>0){
$sum = $query->row()->osum;
}else{
$sum = 0;
}
$result = new stdClass();
$result->count = $count;
$result->total = round($total,2);
$result->sum = round($sum,2);
return $result;
}
function addsave($formData){
$username = isset($formData->username)?$formData->username:"";
$password = isset($formData->password)?$formData->password:"";
$Htid = isset($formData->HtId)?$formData->HtId:0;
$payrule = isset($formData->payrule)?$formData->payrule:1;
$usertype = isset($formData->usertype)?$formData->usertype:"";
$result = new stdClass;
if ($usertype!=""){ //用户类型不为空才能进行添加
//先判断htid是否重复重复的话不允许添加.管理员不需要判断
$sql = "select * from DMS_Distributor where dt_HtId=? and dt_usertype='distributor'";
$query = $this->INFO->query($sql, array($Htid));
if ($query->num_rows() > 0) {
$result->status = 0;
$result->msg = "翰特编码重复,不允许添加!";
}else{
$sql = "insert into DMS_Distributor (dt_username,dt_password,dt_HtId,dt_payrule,dt_usertype) values (?,?,?,?,?)";
$query = $this->INFO->query($sql ,array($username,$password,$Htid,$payrule,$usertype));
if ($query === true){
$result->status = 1;
$result->msg = "数据添加成功!";
}else{
$result->status = 0;
$result->msg = "数据插入数据库失败,请联系管理员!";
}
}
}else{
$result->status = 0;
$result->msg = "用户类型错误!";
}
return $result;
}
/**
* 保存修改
*/
function editsave($formData){
$username = isset($formData->username)?$formData->username:"";
$password = isset($formData->password)?$formData->password:"";
$Htid = isset($formData->HtId)?$formData->HtId:0;
$payrule = isset($formData->payrule)?$formData->payrule:1;
$usertype = isset($formData->usertype)?$formData->usertype:"";
$id = isset($formData->id)?$formData->id:0;
$result = new stdClass;
if ($usertype!=""){ //用户类型不为空才能进行添加
//先判断htid是否重复重复的话不允许添加.管理员不需要判断
$sql = "select * from DMS_Distributor where dt_HtId=? and dt_usertype='distributor' and dt_id<>?";
$query = $this->INFO->query($sql, array($Htid,$id));
if ($query->num_rows() > 0) {
$result->status = 0;
$result->msg = "翰特编码重复,不允许修改!";
}else{
$sql = "update DMS_Distributor set dt_username=?,dt_password=?,dt_HtId=?,dt_payrule=?,dt_usertype=? where dt_id = ?";
$query = $this->INFO->query($sql ,array($username,$password,$Htid,$payrule,$usertype,$id));
if ($query === true){
$result->status = 1;
$result->msg = "数据修改成功!";
}else{
$result->status = 0;
$result->msg = "修改数据库失败,请联系管理员!";
}
}
}else{
$result->status = 0;
$result->msg = "用户类型错误!";
}
return $result;
}
/**
* @description: 获取供应商详细信息
* @param {*} $id
* @return {*}
* @Date Changed:
*/
function getDmsDetail($id){
$sql = "select top 1 * from DMS_Distributor where dt_id = ? ";
$query = $this->INFO->query($sql ,array($id));
return $query->result();
}
/**
* @description: 删除分销商
* @param {*} $id
* @return {*}
* @Date Changed:
*/
function dmdDelete($id){
$sql = " delete from DMS_Distributor where dt_id = ? ";
$qurey = $this->INFO->query($sql ,array($id));
$result = new stdClass;
if ($qurey){
$result->status = 1;
$result->msg = "数据删除成功!";
}else{
$result->status = 0;
$result->msg = "数据删除失败,请联系管理员!";
}
return $result;
}
/**
* 支付记录
*/
function payRecord($arrKeyword){
$htid = $arrKeyword->htid ==false?0:$arrKeyword->htid;
$page = $arrKeyword->page ==false?0:$arrKeyword->page;
$pagesize = $arrKeyword->per_page>0 ? $arrKeyword->per_page :20;
if ($page < 1) {
$page = 1;
}
$sql = " SELECT * from (
SELECT row_number() over (order by dp_id desc) as rownumber,*
,(select syc2_CodeDiscribe FROM tourmanager.dbo.V_System_Code where SYC_Type=32 AND LGC_LGC=2 AND SYC_SN=dp_HtId) as dmsName
from DMS_PayRecord
where dp_HtId=?
)t ";
$sql2 = $sql." Where t.rownumber > ? And t.rownumber <= ?";
$begin = ($page - 1) * $pagesize;
$end = $begin + $pagesize;
$qurey = $this->INFO->query($sql,array($htid));
$count = $qurey->num_rows(); //总记录数
$qurey2 = $this->INFO->query($sql2, array($htid,$begin, $end));
//return 数据和总数
return array('data' => $qurey2->result(), 'total' => $count);
}
/**
* @description:
* @return {*}
* @Date Changed:
*/
function payrecord_addsave($formData){
$paymoney = isset($formData->paymoney)?$formData->paymoney:0;
$currency = isset($formData->currency)?$formData->currency:"USD";
$HtId = isset($formData->HtId)?$formData->HtId:0;
$paytype = isset($formData->paytype)?$formData->paytype:"Train";
$filluser = isset($formData->filluser)?$formData->filluser:0;
$result = new stdClass;
if ($HtId!=0){ //必须有翰特ID才能进行添加
$sql = " insert into DMS_PayRecord (dp_HtId,dp_paymoney,dp_currency,dp_paytype,dp_addtime,dp_filluser,dp_status) values(?,?,?,?,GETDATE(),?,1)";
$query = $this->INFO->query($sql ,array($HtId,$paymoney,$currency,$paytype,$filluser));
if ($query === true){
$result->status = 1;
$result->msg = "数据添加成功!";
}else{
$result->status = 0;
$result->msg = "数据插入数据库失败,请联系管理员!";
}
}else{
$result->status = 0;
$result->msg = "企业的翰特ID有错误";
}
return $result;
}
/***
*
*/
function payrecord_delete($id,$htid){
$sql = " update DMS_PayRecord set dp_status = 0 where dp_id=? and dp_HtId=? ";
$qurey = $this->INFO->query($sql ,array($id,$htid));
$result = new stdClass;
if ($qurey){
$result->status = 1;
$result->msg = "数据删除成功!";
}else{
$result->status = 0;
$result->msg = "数据删除失败,请联系管理员!";
}
return $result;
}
}

@ -80,11 +80,10 @@ class Confirm extends CI_Controller {
$passport = $this->input->post('passport');
$expiration_date = $this->input->post('passport_expiration_date');
$nationality = $this->input->post('nationality');
$occupation=$this->input->post('occupation');
$country_code = $this->input->post('country_code');
$contact_phone = $country_code . ' ' . $this->input->post('mobile');
$contact_phone = '座机:' . $this->input->post('landline') . '/手机:' . $this->input->post('mobile');
$COLI_SN = $this->input->post('COLI_SN');
$visitor_link = $this->input->post('visitor_link');
$COLI_ID = $this->input->post('COLI_ID');
@ -98,7 +97,7 @@ class Confirm extends CI_Controller {
//已经确认过
$had_save = $this->Order_model->get_visitor_link($COLI_SN, $visitor_link);
if (!empty($had_save)) {
echo json_encode(array('status' => 'ok'));
return;
@ -131,10 +130,6 @@ class Confirm extends CI_Controller {
$birthday_tmp = date('Y-m-d H:i:s', strtotime($birthday[$key]));
$expiration_date_tmp = date('Y-m-d H:i:s', strtotime($expiration_date[$key]));
// 现在表单只用填写第一个客人的手机,所以其他客人
if ($key > 0) {
$contact_phone = '';
}
$MEI_SN = $this->Order_model->add_customer_info($occupation[$key],$gender[$key], $nationality[$key], $MEI_FirstName, $MEI_LastName, $passport[$key], $expiration_date_tmp, $birthday_tmp, $MEI_Memo, $MEI_Street, '', $contact_phone, 0, $COLI_SN, $visitor_link,$MEI_ArrivalFlightNo,$MEI_ArrivalTime,$MEI_DepartureFlightNo,$MEI_DepartureTime);
}
}
@ -163,7 +158,7 @@ class Confirm extends CI_Controller {
echo json_encode(array('status' => 'no'));
}
}
function review() {
header('Content-type: application/json;charset=utf-8');
$data = array();

@ -1,4 +1,3 @@
<!DOCTYPE html>
<html>
@ -7,8 +6,8 @@
<title>
Passport Information for All the Group Members
</title>
<meta content="width=device-width,minimum-scale=1,initial-scale=1" name="viewport">
<link href="https://data.chinahighlights.com/css/min.php?f=/css/customer_center_data/bootstrap.min.css&v=202405161016" rel="stylesheet">
<meta content="width=device-width,minimum-scale=1,initial-scale=1" name="viewport">
<link href="https://data.chinahighlights.com/css/min.php?f=/css/customer_center_data/bootstrap.min.css,/css/customer_center_data/bootstrap-datetimepicker.min.css&v=202302061045" rel="stylesheet">
<style>
body {
margin: 0;
@ -116,14 +115,14 @@
.inputTerm input {
width: 100%;
margin: 0;
font-size: 20px;
font-size: 22px;
border: 1px solid #d1d1d1;
height: 60px;
padding: 15px 15px 0 20px;
border-radius: 4px;
color: #000
}
.inputTerm input.number { width: 51%; height: 57px;}
button#tmsubmit {
background: #ad1818;
text-align: center;
@ -139,13 +138,12 @@
}
button.add_traveler_button {
font-size: 20px;
color: #ad1818;
padding: 5px 30px;
border: 1px solid #d1d1d1;
border-radius: 4px;
margin-top: 30px;
margin-right: 10px;
font-size: 21px;
color: #ad1818;
padding: 8px;
border: 1px solid #d1d1d1;
border-radius: 4px;
width: 300px;
}
@ -228,18 +226,7 @@ input.arrivalDate {height: 50px; width: 347px; font-size: 19px; padding: 5px 15p
width: 100%;
margin-top: 15px;
}
select.code {
font-size: 18px;
color: #000;
height: 57px;
padding-left: 10px;
background: #fff;
border-radius: 4px;
border: 1px solid #d1d1d1;
width: auto;
position: relative;
top: -8px;
}
p.top_info {
width: 860px;
margin: 0 auto;
@ -316,7 +303,7 @@ input.arrivalDate {height: 50px; width: 347px; font-size: 19px; padding: 5px 15p
}
select.country_code,
.selectionBlock, input.arrivalDate, .inputTerm input.number, select.code {
.selectionBlock, input.arrivalDate {
width: 100%;
}
@ -410,8 +397,9 @@ select.gender_pick {border: 1px solid #d1d1d1;
information to book all your hotels, transportation, and activities. If the information you
provide is incorrect, you would not be able to board your flight or trains, and therefore
reissuing of tickets would be at your expense!</p>
<div class="traveler_info">
<h3 data-header>Primary contact</h3>
<h3 data-header>Traveler 1</h3>
<div class="selectionBlock">
<select name="gender[]" class="gender_pick">
<option value="100001">Mr.</option>
@ -436,16 +424,15 @@ select.gender_pick {border: 1px solid #d1d1d1;
<div id="name_error_msg" class="hidden">Please enter your name.</div>
<div class="inputTerm">
<input type="text" name="passport[]" required="" class="number" style="width:100%;">
<input type="text" name="passport[]" required="" class="number">
<label>
Passport No.
</label>
</div>
<div id="passport_error_msg" class="hidden">Please enter your passport number.</div>
<select class="country_code" name="nationality[]">
<option value="" disabled="" selected="">Select your nationality</option>
<option value="18">Australia</option>
<select class="country_code" name="nationality[]">
<option value="18">Australia</option>
<option value="5">Canada</option>
<option value="1">China</option>
<option value="8">France</option>
@ -454,7 +441,7 @@ select.gender_pick {border: 1px solid #d1d1d1;
<option value="19">Malaysia</option>
<option value="27">Singapore</option>
<option value="7">United Kingdom</option>
<option value="3">United States</option>
<option value="3" selected="selected">United States</option>
<option value="458">Afghanistan</option>
<option value="459">Albania</option>
<option value="460">Algeria</option>
@ -682,280 +669,20 @@ select.gender_pick {border: 1px solid #d1d1d1;
<option value="664">Zaire</option>
<option value="665">Zambia</option>
<option value="666">Zimbabwe</option>
<option value="678">Serbia</option>
</select>
<div class="inputTerm" id='phoneNumberDiv'>
<select class="code" name="country_code" id="country_code">
<option value="" disabled selected>Please select your country code</option>
<option style="font-weight: 600;" value="United States +1">United States&nbsp; &nbsp;+1</option>
<option style="font-weight: 600;" value="United Kingdom +44">United Kingdom&nbsp; &nbsp;+44</option>
<option style="font-weight: 600;" value="Australia +61">Australia&nbsp; &nbsp;+61</option>
<option style="font-weight: 600;" value="Canada +1">Canada&nbsp; &nbsp;+1</option>
<option style="font-weight: 600;" value="France +33">France&nbsp; &nbsp;+33</option>
<option style="font-weight: 600;" value="Germany +49">Germany&nbsp; &nbsp;+49</option>
<option style="font-weight: 600; " value="Italy +39">Italy&nbsp; &nbsp;+39</option>
<option style="font-weight: 600; " value="Mexico +52">Mexico&nbsp; &nbsp;+52</option>
<option style="font-weight: 600; " value="Netherlands +31">Netherlands&nbsp; &nbsp;+31</option>
<option style="font-weight: 600; " value="Singapore +65">Singapore&nbsp; &nbsp;+65</option>
<option value="Afghanistan +93">Afghanistan &nbsp; &nbsp;+93</option>
<option value="Albania +355">Albania &nbsp; &nbsp;+355</option>
<option value="Algeria +213">Algeria&nbsp; &nbsp;+213</option>
<option value="American Samoa +1">American Samoa&nbsp; &nbsp;+1684</option>
<option value="Andorra +376">Andorra&nbsp; &nbsp;+376</option>
<option value="Angola +244">Angola&nbsp; &nbsp;+244</option>
<option value="Anguilla +1">Anguilla&nbsp; &nbsp;+1264</option>
<option value="Australia +61">Australia&nbsp; &nbsp;+61</option>
<option value="Antigua and Barbuda +1">Antigua and Barbuda&nbsp; &nbsp;+1268</option>
<option value="Argentina +54">Argentina&nbsp; &nbsp;+54</option>
<option value="Armenia +374">Armenia &nbsp; &nbsp;+374</option>
<option value="Aruba +297">Aruba&nbsp; &nbsp;+297</option>
<option value="Ascension Island +247">Ascension Island&nbsp; &nbsp;+247</option>
<option value="Austria +43">Austria&nbsp; &nbsp;+43</option>
<option value="Azerbaijan +994">Azerbaijan&nbsp; &nbsp;+994</option>
<option value="Bahamas +1">Bahamas&nbsp; &nbsp;+1242</option>
<option value="Bahrain +973">Bahrain&nbsp; &nbsp;+973</option>
<option value="Bangladesh +880">Bangladesh&nbsp; &nbsp;+880</option>
<option value="Barbados +1">Barbados&nbsp; &nbsp;+1246</option>
<option value="Belarus +375">Belarus&nbsp; &nbsp;+375</option>
<option value="Belgium +32">Belgium&nbsp; &nbsp;+32</option>
<option value="Belize +501">Belize&nbsp; &nbsp;+501</option>
<option value="Benin +229">Benin&nbsp; &nbsp;+229</option>
<option value="Bermuda +1">Bermuda&nbsp; &nbsp;+1441</option>
<option value="Bhutan +975">Bhutan&nbsp; &nbsp;+975</option>
<option value="Bolivia +591">Bolivia&nbsp; &nbsp;+591</option>
<option value="Bosnia and Herzegovina +387">Bosnia and Herzegovina&nbsp; &nbsp;+387</option>
<option value="Botswana +267">Botswana&nbsp; &nbsp;+267</option>
<option value="Brazil +55">Brazil&nbsp; &nbsp;+55</option>
<option value="British Indian Ocean Territory +246">British Indian Ocean Territory&nbsp; &nbsp;+246
</option>
<option value="British Virgin Islands +1">British Virgin Islands&nbsp; &nbsp;+1284</option>
<option value="Brunei +673">Brunei&nbsp; &nbsp;+673</option>
<option value="Bulgaria +359">Bulgaria &nbsp; &nbsp;+359</option>
<option value="Burkina Faso +226">Burkina Faso&nbsp; &nbsp;+226</option>
<option value="Burundi +257">Burundi&nbsp; &nbsp;+257</option>
<option value="Cambodia +855">Cambodia&nbsp; &nbsp;+855</option>
<option value="Cameroon +237">Cameroon&nbsp; &nbsp;+237</option>
<option value="Canada +1">Canada&nbsp; &nbsp;+1</option>
<option value="Cape Verde +238">Cape Verde&nbsp; &nbsp;+238</option>
<option value="Caribbean Netherlands +599">Caribbean Netherlands&nbsp; &nbsp;+599</option>
<option value="Cayman Islands +1">Cayman Islands&nbsp; &nbsp;+1345</option>
<option value="Central African Republic +236">Central African Republic&nbsp; &nbsp;+236</option>
<option value="Chad +235">Chad&nbsp; &nbsp;+235</option>
<option value="Chile +56">Chile&nbsp; &nbsp;+56</option>
<option value="China +86">China&nbsp; &nbsp;+86</option>
<option value="Christmas Island +61">Christmas Island&nbsp; &nbsp;+6189164</option>
<option value="Cocos Islands +61">Cocos Islands&nbsp; &nbsp;+6189162</option>
<option value="Colombia +57">Colombia&nbsp; &nbsp;+57</option>
<option value="Comoros +269">Comoros&nbsp; &nbsp;+269</option>
<option value="Congo +243">Congo (DRC)&nbsp; &nbsp;+243</option>
<option value="Congo +242">Congo (Republic)&nbsp; &nbsp;+242</option>
<option value="Cook Islands +682">Cook Islands&nbsp; &nbsp;+682</option>
<option value="Costa Rica +506">Costa Rica&nbsp; &nbsp;+506</option>
<option value="Côte d'Ivoire +225">Côte d'Ivoire&nbsp; &nbsp;+225</option>
<option value="Croatia +385">Croatia&nbsp; &nbsp;+385</option>
<option value="Cuba +53">Cuba&nbsp; &nbsp;+53</option>
<option value="Curaçao +599">Curaçao&nbsp; &nbsp;+599</option>
<option value="Cyprus +357">Cyprus&nbsp; &nbsp;+357</option>
<option value="Czech Republic +420">Czech Republic&nbsp; &nbsp;+420</option>
<option value="Denmark +45">Denmark&nbsp; &nbsp;+45</option>
<option value="Djibouti +253">Djibouti&nbsp; &nbsp;+253</option>
<option value="Dominica +1">Dominica&nbsp; &nbsp;+1767</option>
<option value="Dominican Republic +1">Dominican Republic&nbsp; &nbsp;+1809</option>
<option value="Ecuador +593">Ecuador&nbsp; &nbsp;+593</option>
<option value="Egypt +20">Egypt&nbsp; &nbsp;+20</option>
<option value="El Salvador +503">El Salvador&nbsp; &nbsp;+503</option>
<option value="Equatorial Guinea +240">Equatorial Guinea&nbsp; &nbsp;+240</option>
<option value="Eritrea +291">Eritrea&nbsp; &nbsp;+291</option>
<option value="Estonia +372">Estonia&nbsp; &nbsp;+372</option>
<option value="Eswatini +268">Eswatini&nbsp; &nbsp;+268</option>
<option value="Ethiopia +251">Ethiopia&nbsp; &nbsp;+251</option>
<option value="Falkland Islands +500">Falkland Islands&nbsp; &nbsp;+500</option>
<option value="Faroe Islands +298">Faroe Islands&nbsp; &nbsp;+298</option>
<option value="Fiji +679">Fiji&nbsp; &nbsp;+679</option>
<option value="Finland +358">Finland&nbsp; &nbsp;+358</option>
<option value="France +33">France&nbsp; &nbsp;+33</option>
<option value="French Guiana +594">French Guiana&nbsp; &nbsp;+594</option>
<option value="French Polynesia +689">French Polynesia&nbsp; &nbsp;+689</option>
<option value="Gabon +241">Gabon&nbsp; &nbsp;+241</option>
<option value="Gambia +220">Gambia&nbsp; &nbsp;+220</option>
<option value="Georgia +995">Georgia&nbsp; &nbsp;+995</option>
<option value="Germany +49">Germany&nbsp; &nbsp;+49</option>
<option value="Ghana +233">Ghana&nbsp; &nbsp;+233</option>
<option value="Gibraltar +350">Gibraltar&nbsp; &nbsp;+350</option>
<option value="Greece +30">Greece&nbsp; &nbsp;+30</option>
<option value="Greenland +299">Greenland&nbsp; &nbsp;+299</option>
<option value="Grenada +1">Grenada&nbsp; &nbsp;+1473</option>
<option value="Guadeloupe +590">Guadeloupe&nbsp; &nbsp;+590</option>
<option value="Guam +1">Guam&nbsp; &nbsp;+1671</option>
<option value="Guatemala +502">Guatemala&nbsp; &nbsp;+502</option>
<option value="Guernsey +44">Guernsey&nbsp; &nbsp;+441481</option>
<option value="Guinea +224">Guinea&nbsp; &nbsp;+224</option>
<option value="Guinea-Bissau +245">Guinea-Bissau&nbsp; &nbsp;+245</option>
<option value="Guyana +592">Guyana&nbsp; &nbsp;+592</option>
<option value="Haiti +509">Haiti&nbsp; &nbsp;+509</option>
<option value="Honduras +504">Honduras&nbsp; &nbsp;+504</option>
<option value="Hong Kong +852">Hong Kong&nbsp; &nbsp;+852</option>
<option value="Hungary +36">Hungary&nbsp; &nbsp;+36</option>
<option value="Iceland +354">Iceland&nbsp; &nbsp;+354</option>
<option value="India +91">India&nbsp; &nbsp;+91</option>
<option value="Indonesia +62">Indonesia&nbsp; &nbsp;+62</option>
<option value="Iran +98">Iran&nbsp; &nbsp;+98</option>
<option value="Iraq +964">Iraq&nbsp; &nbsp;+964</option>
<option value="Ireland +353">Ireland&nbsp; &nbsp;+353</option>
<option value="Isle of Man +44">Isle of Man&nbsp; &nbsp;+44</option>
<option value="Israel +972">Israel&nbsp; &nbsp;+972</option>
<option value="Italy +39">Italy&nbsp; &nbsp;+39</option>
<option value="Jamaica +1">Jamaica&nbsp; &nbsp;+1876</option>
<option value="Japan +81">Japan&nbsp; &nbsp;+81</option>
<option value="Jersey +44">Jersey&nbsp; &nbsp;+44</option>
<option value="Jordan +962">Jordan&nbsp; &nbsp;+962</option>
<option value="Kazakhstan +7">Kazakhstan &nbsp; &nbsp;+7</option>
<option value="Kenya +254">Kenya&nbsp; &nbsp;+254</option>
<option value="Kiribati +686">Kiribati&nbsp; &nbsp;+686</option>
<option value="Kosovo +383">Kosovo&nbsp; &nbsp;+383</option>
<option value="Kuwait +965">Kuwait&nbsp; &nbsp;+965</option>
<option value="Kyrgyzstan +996">Kyrgyzstan &nbsp; &nbsp;+996</option>
<option value="Laos +856">Laos&nbsp; &nbsp;+856</option>
<option value="Latvia +371">Latvia &nbsp; &nbsp;+371</option>
<option value="Lebanon +961">Lebanon&nbsp; &nbsp;+961</option>
<option value="Lesotho +266">Lesotho&nbsp; &nbsp;+266</option>
<option value="Liberia +231">Liberia&nbsp; &nbsp;+231</option>
<option value="Libya +218">Libya&nbsp; &nbsp;+218</option>
<option value="Liechtenstein +423">Liechtenstein&nbsp; &nbsp;+423</option>
<option value="Lithuania +370">Lithuania&nbsp; &nbsp;+370</option>
<option value="Luxembourg +352">Luxembourg&nbsp; &nbsp;+352</option>
<option value="Macau +853">Macau&nbsp; &nbsp;+853</option>
<option value="Macedonia +389">Macedonia&nbsp; &nbsp;+389</option>
<option value="Madagascar +261">Madagascar&nbsp; &nbsp;+261</option>
<option value="Malawi +265">Malawi&nbsp; &nbsp;+265</option>
<option value="Malaysia +60">Malaysia&nbsp; &nbsp;+60</option>
<option value="Maldives +960">Maldives&nbsp; &nbsp;+960</option>
<option value="Mali +223">Mali&nbsp; &nbsp;+223</option>
<option value="Malta +356">Malta&nbsp; &nbsp;+356</option>
<option value="Marshall +692">Marshall Islands&nbsp; &nbsp;+692</option>
<option value="Martinique +596">Martinique&nbsp; &nbsp;+596</option>
<option value="Mauritania +222">Mauritania&nbsp; &nbsp;+222</option>
<option value="Mauritius +230">Mauritius&nbsp; &nbsp;+230</option>
<option value="Mayotte +262">Mayotte&nbsp; &nbsp;+262</option>
<option value="Micronesia +691">Micronesia&nbsp; &nbsp;+691</option>
<option value="Moldova +373">Moldova&nbsp; &nbsp;+373</option>
<option value="Monaco +377">Monaco&nbsp; &nbsp;+377</option>
<option value="Mongolia +976">Mongolia&nbsp; &nbsp;+976</option>
<option value="Montenegro +382">Montenegro&nbsp; &nbsp;+382</option>
<option value="Montserrat +1">Montserrat&nbsp; &nbsp;+1664</option>
<option value="Morocco +212">Morocco&nbsp; &nbsp;+212</option>
<option value="Mozambique +258">Mozambique&nbsp; &nbsp;+258</option>
<option value="Myanmar +95">Myanmar &nbsp; &nbsp;+95</option>
<option value="Namibia +264">Namibia&nbsp; &nbsp;+264</option>
<option value="Nauru +674">Nauru&nbsp; &nbsp;+674</option>
<option value="Nepal +977">Nepal&nbsp; &nbsp;+977</option>
<option value="New Caledonia +687">New Caledonia&nbsp; &nbsp;+687</option>
<option value="New Zealand +64">New Zealand&nbsp; &nbsp;+64</option>
<option value="Nicaragua +505">Nicaragua&nbsp; &nbsp;+505</option>
<option value="Niger +227">Niger&nbsp; &nbsp;+227</option>
<option value="Nigeria +234">Nigeria&nbsp; &nbsp;+234</option>
<option value="Niue +683">Niue&nbsp; &nbsp;+683</option>
<option value="Norfolk Island +672">Norfolk Island&nbsp; &nbsp;+6723</option>
<option value="North Korea +850">North Korea&nbsp; &nbsp;+850</option>
<option value="Northern Mariana Islands +1">Northern Mariana Islands&nbsp; &nbsp;+1670</option>
<option value="Norway +47">Norway&nbsp; &nbsp;+47</option>
<option value="Oman +968">Oman&nbsp; &nbsp;+968</option>
<option value="Pakistan +92">Pakistan&nbsp; &nbsp;+92</option>
<option value="Palau +680">Palau&nbsp; &nbsp;+680</option>
<option value="Palestine +970">Palestine &nbsp; &nbsp;+970</option>
<option value="Panama +507">Panama &nbsp; &nbsp;+507</option>
<option value="Papua New Guinea 675">Papua New Guinea&nbsp; &nbsp;+675</option>
<option value="Paraguay +595">Paraguay&nbsp; &nbsp;+595</option>
<option value="Peru +51">Peru &nbsp; &nbsp;+51</option>
<option value="Philippines +63">Philippines&nbsp; &nbsp;+63</option>
<option value="Poland +48">Poland&nbsp; &nbsp;+48</option>
<option value="Portugal +351">Portugal&nbsp; &nbsp;+351</option>
<option value="Puerto Rico +1">Puerto Rico&nbsp; &nbsp;+1787</option>
<option value="Qatar +974">Qatar&nbsp; &nbsp;+974</option>
<option value="Réunion +262">Réunion&nbsp; &nbsp;+262</option>
<option value="Romania +40">Romania&nbsp; &nbsp;+40</option>
<option value="Russia +7">Russia&nbsp; &nbsp;+7</option>
<option value="Rwanda +250">Rwanda&nbsp; &nbsp;+250</option>
<option value="Saint Barthélemy +590">Saint Barthélemy&nbsp; &nbsp;+590</option>
<option value="Saint Helena +290">Saint Helena&nbsp; &nbsp;+290</option>
<option value="Saint Kitts and Nevis +1">Saint Kitts and Nevis&nbsp; &nbsp;+1869</option>
<option value="Saint Lucia +1">Saint Lucia&nbsp; &nbsp;+1758</option>
<option value="Saint Martin +590">Saint Martin&nbsp; &nbsp;+590</option>
<option value="Saint Pierre and Miquelon +508">Saint Pierre and Miquelon&nbsp; &nbsp;+508</option>
<option value="Saint Vincent and the Grenadines +1">Saint Vincent and the Grenadines&nbsp; &nbsp;+1784
</option>
<option value="Samoa +685">Samoa&nbsp; &nbsp;+685</option>
<option value="San Marino +378">San Marino&nbsp; &nbsp;+378</option>
<option value="São Tomé and Príncipe +239">São Tomé and Príncipe&nbsp; &nbsp;+239</option>
<option value="Saudi Arabia +966">Saudi Arabia &nbsp; &nbsp;+966</option>
<option value="Senegal +221">Senegal &nbsp; &nbsp;+221</option>
<option value="Serbia +381">Serbia&nbsp; &nbsp;+381</option>
<option value="Seychelles +248">Seychelles&nbsp; &nbsp;+248</option>
<option value="Sierra Leone +232">Sierra Leone&nbsp; &nbsp;+232</option>
<option value="Sint Maarten +1">Sint Maarten&nbsp; &nbsp;+1721</option>
<option value="Slovakia +421">Slovakia&nbsp; &nbsp;+421</option>
<option value="Slovenia +386">Slovenia&nbsp; &nbsp;+386</option>
<option value="Solomon Islands +677">Solomon Islands&nbsp; &nbsp;+677</option>
<option value="Somalia +252">Somalia&nbsp; &nbsp;+252</option>
<option value="South Africa +27">South Africa&nbsp; &nbsp;+27</option>
<option value="South Korea +82">South Korea&nbsp; &nbsp;+82</option>
<option value="South Sudan +211">South Sudan&nbsp; &nbsp;+211</option>
<option value="Spain +34">Spain&nbsp; &nbsp;+34</option>
<option value="Sri Lanka +94">Sri Lanka &nbsp; &nbsp;+94</option>
<option value="Sudan +249">Sudan&nbsp; &nbsp;+249</option>
<option value="Suriname">Suriname&nbsp; &nbsp;+597</option>
<option value="Svalbard and Jan Mayen +47">Svalbard and Jan Mayen&nbsp; &nbsp;+47</option>
<option value="Sweden +46">Sweden&nbsp; &nbsp;+46</option>
<option value="Switzerland +41">Switzerland&nbsp; &nbsp;+41</option>
<option value="Syria +963">Syria &nbsp; &nbsp;+963</option>
<option value="Taiwan +886">Taiwan&nbsp; &nbsp;+886</option>
<option value="Tajikistan +992">Tajikistan&nbsp; &nbsp;+992</option>
<option value="Tanzania +255">Tanzania&nbsp; &nbsp;+255</option>
<option value="Thailand +66">Thailand&nbsp; &nbsp;+66</option>
<option value="Timor-Leste +670">Timor-Leste&nbsp; &nbsp;+670</option>
<option value="Togo +228">Togo&nbsp; &nbsp;+228</option>
<option value="Tokelau +690">Tokelau&nbsp; &nbsp;+690</option>
<option value="Tonga +676">Tonga&nbsp; &nbsp;+676</option>
<option value="Trinidad and Tobago +1">Trinidad and Tobago&nbsp; &nbsp;+1868</option>
<option value="Tunisia +216">Tunisia&nbsp; &nbsp;+216</option>
<option value="Turkey +90">Turkey&nbsp; &nbsp;+90</option>
<option value="Turkmenistan +993">Turkmenistan&nbsp; &nbsp;+993</option>
<option value="Turks and Caicos Islands +1">Turks and Caicos Islands&nbsp; &nbsp;+1649</option>
<option value="Tuvalu +688">Tuvalu&nbsp; &nbsp;+688</option>
<option value="U.S. Virgin Islands +1">U.S. Virgin Islands&nbsp; &nbsp;+1340</option>
<option value="Uganda +256">Uganda&nbsp; &nbsp;+256</option>
<option value="Ukraine +380">Ukraine&nbsp; &nbsp;+380</option>
<option value="United Arab Emirates +971">United Arab Emirates &nbsp; &nbsp;+971</option>
<option value="United Kingdom +44">United Kingdom&nbsp; &nbsp;+44</option>
<option value="United States +1">United States&nbsp; &nbsp;+1</option>
<option value="Uruguay +598">Uruguay&nbsp; &nbsp;+598</option>
<option value="Uzbekistan +998">Uzbekistan&nbsp; &nbsp;+998</option>
<option value="Vanuatu +678">Vanuatu&nbsp; &nbsp;+678</option>
<option value="Vatican City +39">Vatican City&nbsp; &nbsp;+379</option>
<option value="Venezuela +58">Venezuela&nbsp; &nbsp;+58</option>
<option value="Vietnam +84">Vietnam&nbsp; &nbsp;+84</option>
<option value="Wallis and Futuna +681">Wallis and Futuna&nbsp; &nbsp;+681</option>
<option value="Western Sahara +212">Western Sahara &nbsp; &nbsp;+21228</option>
<option value="Yemen +967">Yemen&nbsp; &nbsp;+967</option>
<option value="Zambia +260">Zambia&nbsp; &nbsp;+260</option>
<option value="Zimbabwe +263">Zimbabwe&nbsp; &nbsp;+263</option>
<option value="Åland Islands +385">Åland Islands&nbsp; &nbsp;+35818</option>
</select>
<input type="text" name="mobile" required="" class="number" placeholder="Phone number">
</div>
<div class="selectionBlock">
<p> Date of birth</p>
<input type="date" class="arrivalDate datepicker"
name="birthday[]" value="" placeholder="mm/dd/yyyy" autocomplete="off" min="1753-01-01" max="9999-12-31">
name="birthday[]" value="" placeholder="mm/dd/yyyy" autocomplete="off">
</div>
<div class="selectionBlock">
<p> Date of expiration </p>
<input type="date" class="arrivalDate datepicker"
name="passport_expiration_date[]" value="" placeholder="mm/dd/yyyy" autocomplete="off" min="1753-01-01" max="9999-12-31">
name="passport_expiration_date[]" value="" placeholder="mm/dd/yyyy" autocomplete="off">
</div>
<div id="birth_error_msg" class="hidden">Please select your date of birth.</div>
@ -972,23 +699,67 @@ select.gender_pick {border: 1px solid #d1d1d1;
<option value="Self-emloyed person">Self-emloyed person</option>
<option value="Others">Others</option>
</select>
<button class="add_traveler_button" id="add_traveler_button" type="button">+ Add a traveler</button>
</div>
<button class="add_traveler_button" id="add_traveler_button" type="button">+ Add a traveler</button>
</div>
<div id="inquiryBox">
<h2>Your contact information (optional)</h2>
<p>Having a phone number, especially with WhatsApp/iMessage capability will help us contact you in
case of emergency.</p>
<p>Phone No.</p>
<div class="inputTerm">
<input type="text" name="mobile" required="" class="number">
<label>
including country code and area code
</label>
</div>
<div class="selectionBlock">
<p>Home address</p>
<div class="inputTerm">
<input type="text" name="address_street" required="">
<label>
Street
</label>
</div>
</div>
<div class="selectionBlock">
<div class="inputTerm">
<input type="text" name="address_city" required="">
<label>
City
</label>
</div>
</div>
<div class="selectionBlock">
<div class="inputTerm">
<input type="text" name="address_state" required="">
<label>
State
</label>
</div>
</div>
<div class="selectionBlock">
<div class="inputTerm">
<input type="text" name="address_country" required="">
<label>
Country
</label>
</div>
</div>
</div>
<div id="inquiryBox">
<h2>Your Flight Information</h2>
<h2>Your Flight Information (optional)</h2>
<p>Your flight information will be forwarded to your guide/driver for airport pick up and drop off.
Please ensure the details you provide are correct. You can skip this if your don't need airport
transfer service.</p>
<p>If you are not yet purchase your airline and insurance, please fill in the TBC in the link and provide those information to your consultant or keep update after you confirm them.</p>
<div class="selectionBlock" style="width: 100%;">
<div class="inputTerm">
<input type="text" name="MEI_ArrivalFlightNo">
<input type="text" name="MEI_ArrivalFlightNo" required="">
<label>
Arrival flight No.
</label>
@ -997,18 +768,18 @@ select.gender_pick {border: 1px solid #d1d1d1;
<div class="selectionBlock">
<p>Arrival date</p>
<div class="inputTerm">
<input type="date" name="MEI_ArrivalDate" min="1753-01-01" max="9999-12-31">
<input type="date" name="MEI_ArrivalDate" required="">
</div>
</div>
<div class="selectionBlock">
<div class="inputTerm">
<input type="time" name="MEI_ArrivalTime">
</div>
</div>
<div class="selectionBlock" style="width: 100%;">
<div class="inputTerm">
<input type="text" name="MEI_DepartureFlightNo">
<input type="text" name="MEI_DepartureFlightNo" required="">
<label>
Departure Flight No.
</label>
@ -1017,21 +788,25 @@ select.gender_pick {border: 1px solid #d1d1d1;
<div class="selectionBlock">
<p>Departure date</p>
<div class="inputTerm">
<input type="date" name="MEI_DepartureDate" min="1753-01-01" max="9999-12-31">
<input type="date" name="MEI_DepartureDate" required="">
</div>
</div>
<div class="selectionBlock">
<div class="inputTerm">
<input type="time" name="MEI_DepartureTime">
</div>
</div>
</div>
<div id="inquiryBox">
<h2>Your Special Request (optional)</h2>
<p></p>
<textarea id="special_request" name="special_request" style="resize:none;"></textarea>
</div>
<div id="inquiryBox">
<h2>Emergency Contact Information</h2>
<h2>Emergency Contact Information (optional)</h2>
<div class="emergency_title">(in case an unlikely event happens when you are travelling)</div>
<div class="selectionBlock">
<div class="inputTerm">
@ -1068,18 +843,17 @@ select.gender_pick {border: 1px solid #d1d1d1;
</div>
</div>
</div>
<div id="inquiryBox">
<h2>Your Insurance Information and Special Request (optional)</h2>
<textarea id="special_request" name="special_request" style="resize:none;"></textarea>
<div id="inquiryBox">
<h2>Your Insurance Information (Optional)</h2>
<textarea id="insurance_information" name="insurance_information" style="resize:none;"></textarea>
</div>
<div class="inquiryBtn">
<div class="inquiryBtn">
<input type="hidden" name="toname" value="<?php echo $userinfo[0]->OPI_FirstName; ?>">
<input type="hidden" name="tomail" value="<?php echo $userinfo[0]->OPI_Email; ?>">
<input type="hidden" name="customer_username" value="<?php echo $username; ?>">
<input type="hidden" name="customer_usermail" value="<?php echo $usermail; ?>">
<input type="hidden" name="tomail" value="<?php echo $userinfo[0]->OPI_Email; ?>">
<input type="hidden" name="customer_username" value="<?php echo $username; ?>">
<input type="hidden" name="customer_usermail" value="<?php echo $usermail; ?>">
<input type="hidden" name="COLI_ID" value="<?php echo $userinfo[0]->COLI_ID; ?>">
<input type="hidden" name="COLI_SN" value="<?php echo $userinfo[0]->COLI_SN; ?>">
<input type="hidden" name="visitor_link" value="<?php echo $visitor_link; ?>">
@ -1108,8 +882,8 @@ select.gender_pick {border: 1px solid #d1d1d1;
</div>
</div>
</div>
<!-- reviewModal end-->
<script src="https://data.chinahighlights.com/js/min.php?f=/js/customer_center_data/jquery.min.js,/js/customer_center_data/bootstrap.min.js,/js/customer_center_data/jquery-ui.min.js&v=202405161016"></script>
<!-- reviewModal end-->
<script src="https://data.chinahighlights.com/js/min.php?f=/js/customer_center_data/jquery.min.js,/js/customer_center_data/bootstrap.min.js,/js/customer_center_data/jquery-ui.min.js,/js/customer_center_data/jquery-ui-timepicker-addon.js&v=2019092401"></script>
<script>
function submit_info_form () {
var $btn = $("#btn-add-userinfo").button('loading');
@ -1172,29 +946,18 @@ select.gender_pick {border: 1px solid #d1d1d1;
}
});
}
$(function() {
var $travelerTemplate = $(".traveler_info:first").clone();
//添加客户
$("#add_traveler_button").click(function () {addTraveler()});
function addTraveler() {
var travelerCount = $(".traveler_info").length + 1;
var travelerId = 'traveler' + travelerCount;
$("#add_traveler_button").click(function() {
var $addTraveler = $travelerTemplate.clone();
$addTraveler.attr('id', travelerId);
$addTraveler.find('#phoneNumberDiv').remove();
var travelerCount = $(".traveler_info").length + 1;
$addTraveler.find('[data-header]').text('Traveler ' + travelerCount);
$addTravelerButton = $addTraveler.find('#add_traveler_button');
$addTravelerButton.attr('id', 'add_traveler_button' + travelerCount);
$addTravelerButton.click(function(){addTraveler()});
$deleteTravelerButton = $('<button class="add_traveler_button" type="button">- Delete Traveler ' + travelerCount + '</button>');
$deleteTravelerButton.click(function(){$('#'+travelerId).remove();});
$addTraveler.append($deleteTravelerButton);
$(".traveler_info:last").after($addTraveler);
}
$('#add_traveler_button').before($addTraveler);
});
});
</script>
</body>
</html>

@ -6,8 +6,8 @@
<title>
Passport Information for All the Group Members
</title>
<meta content="width=device-width,minimum-scale=1,initial-scale=1" name="viewport">
<link href="https://data.chinahighlights.com/css/min.php?f=/css/customer_center_data/bootstrap.min.css&v=202405161016" rel="stylesheet">
<meta content="width=device-width,minimum-scale=1,initial-scale=1" name="viewport">
<link href="https://data.chinahighlights.com/css/min.php?f=/css/customer_center_data/bootstrap.min.css,/css/customer_center_data/bootstrap-datetimepicker.min.css&v=202302061045" rel="stylesheet">
<style>
body {
margin: 0;
@ -35,7 +35,7 @@
.wholeWrap2 {
background: #555;
background: #000;
width: 100%;
display: inline-block;
margin-bottom: -4px;
@ -115,14 +115,14 @@
.inputTerm input {
width: 100%;
margin: 0;
font-size: 20px;
font-size: 22px;
border: 1px solid #d1d1d1;
height: 60px;
padding: 15px 15px 0 20px;
border-radius: 4px;
color: #000
}
.inputTerm input.number { width: 51%; height: 57px;}
button#tmsubmit {
background: #ad1818;
text-align: center;
@ -138,13 +138,12 @@
}
button.add_traveler_button {
font-size: 20px;
color: #ad1818;
padding: 5px 30px;
border: 1px solid #d1d1d1;
border-radius: 4px;
margin-top: 30px;
margin-right: 10px;
font-size: 21px;
color: #ad1818;
padding: 8px;
border: 1px solid #d1d1d1;
border-radius: 4px;
width: 300px;
}
@ -228,18 +227,7 @@ input.arrivalDate {height: 50px; width: 347px; font-size: 19px; padding: 5px 15p
width: 100%;
margin-top: 15px;
}
select.code {
font-size: 18px;
color: #000;
height: 57px;
padding-left: 10px;
background: #fff;
border-radius: 4px;
border: 1px solid #d1d1d1;
width: auto;
position: relative;
top: -8px;
}
p.top_info {
width: 860px;
margin: 0 auto;
@ -254,7 +242,7 @@ input.arrivalDate {height: 50px; width: 347px; font-size: 19px; padding: 5px 15p
.traveler_info {
border-bottom: 3px dashed #d1d1d1;
padding-bottom: 50px;
margin-bottom: 20px;
margin-bottom: 50px;
}
.emergency_title {
@ -316,7 +304,7 @@ input.arrivalDate {height: 50px; width: 347px; font-size: 19px; padding: 5px 15p
}
select.country_code,
.selectionBlock, input.arrivalDate, .inputTerm input.number, select.code {
.selectionBlock, input.arrivalDate {
width: 100%;
}
@ -412,8 +400,8 @@ select.gender_pick {border: 1px solid #d1d1d1;
reissuing of tickets would be at your expense!</p>
<div class="traveler_info">
<h3 data-header>Primary contact</h3>
<h3 data-header>Traveler 1</h3>
<div class="selectionBlock">
<select name="gender[]" class="gender_pick">
<option value="100001">Mr.</option>
@ -438,7 +426,7 @@ select.gender_pick {border: 1px solid #d1d1d1;
<div id="name_error_msg" class="hidden">Please enter your name.</div>
<div class="inputTerm">
<input type="text" name="passport[]" required="" class="number" style="width: 100%;">
<input type="text" name="passport[]" required="" class="number">
<label>
Passport No.
</label>
@ -446,8 +434,7 @@ select.gender_pick {border: 1px solid #d1d1d1;
<div id="passport_error_msg" class="hidden">Please enter your passport number.</div>
<select class="country_code" name="nationality[]">
<option value="" disabled="" selected="">Select your nationality</option>
<option value="18">Australia</option>
<option value="18">Australia</option>
<option value="5">Canada</option>
<option value="1">China</option>
<option value="8">France</option>
@ -456,7 +443,7 @@ select.gender_pick {border: 1px solid #d1d1d1;
<option value="19">Malaysia</option>
<option value="27">Singapore</option>
<option value="7">United Kingdom</option>
<option value="3">United States</option>
<option value="3" selected="selected">United States</option>
<option value="458">Afghanistan</option>
<option value="459">Albania</option>
<option value="460">Algeria</option>
@ -684,279 +671,20 @@ select.gender_pick {border: 1px solid #d1d1d1;
<option value="664">Zaire</option>
<option value="665">Zambia</option>
<option value="666">Zimbabwe</option>
<option value="678">Serbia</option>
</select>
<div class="inputTerm" id='phoneNumberDiv'>
<select class="code" name="country_code" id="country_code">
<option value="" disabled selected>Please select your country code</option>
<option style="font-weight: 600;" value="United States +1">United States&nbsp; &nbsp;+1</option>
<option style="font-weight: 600;" value="United Kingdom +44">United Kingdom&nbsp; &nbsp;+44</option>
<option style="font-weight: 600;" value="Australia +61">Australia&nbsp; &nbsp;+61</option>
<option style="font-weight: 600;" value="Canada +1">Canada&nbsp; &nbsp;+1</option>
<option style="font-weight: 600;" value="France +33">France&nbsp; &nbsp;+33</option>
<option style="font-weight: 600;" value="Germany +49">Germany&nbsp; &nbsp;+49</option>
<option style="font-weight: 600; " value="Italy +39">Italy&nbsp; &nbsp;+39</option>
<option style="font-weight: 600; " value="Mexico +52">Mexico&nbsp; &nbsp;+52</option>
<option style="font-weight: 600; " value="Netherlands +31">Netherlands&nbsp; &nbsp;+31</option>
<option style="font-weight: 600; " value="Singapore +65">Singapore&nbsp; &nbsp;+65</option>
<option value="Afghanistan +93">Afghanistan &nbsp; &nbsp;+93</option>
<option value="Albania +355">Albania &nbsp; &nbsp;+355</option>
<option value="Algeria +213">Algeria&nbsp; &nbsp;+213</option>
<option value="American Samoa +1">American Samoa&nbsp; &nbsp;+1684</option>
<option value="Andorra +376">Andorra&nbsp; &nbsp;+376</option>
<option value="Angola +244">Angola&nbsp; &nbsp;+244</option>
<option value="Anguilla +1">Anguilla&nbsp; &nbsp;+1264</option>
<option value="Australia +61">Australia&nbsp; &nbsp;+61</option>
<option value="Antigua and Barbuda +1">Antigua and Barbuda&nbsp; &nbsp;+1268</option>
<option value="Argentina +54">Argentina&nbsp; &nbsp;+54</option>
<option value="Armenia +374">Armenia &nbsp; &nbsp;+374</option>
<option value="Aruba +297">Aruba&nbsp; &nbsp;+297</option>
<option value="Ascension Island +247">Ascension Island&nbsp; &nbsp;+247</option>
<option value="Austria +43">Austria&nbsp; &nbsp;+43</option>
<option value="Azerbaijan +994">Azerbaijan&nbsp; &nbsp;+994</option>
<option value="Bahamas +1">Bahamas&nbsp; &nbsp;+1242</option>
<option value="Bahrain +973">Bahrain&nbsp; &nbsp;+973</option>
<option value="Bangladesh +880">Bangladesh&nbsp; &nbsp;+880</option>
<option value="Barbados +1">Barbados&nbsp; &nbsp;+1246</option>
<option value="Belarus +375">Belarus&nbsp; &nbsp;+375</option>
<option value="Belgium +32">Belgium&nbsp; &nbsp;+32</option>
<option value="Belize +501">Belize&nbsp; &nbsp;+501</option>
<option value="Benin +229">Benin&nbsp; &nbsp;+229</option>
<option value="Bermuda +1">Bermuda&nbsp; &nbsp;+1441</option>
<option value="Bhutan +975">Bhutan&nbsp; &nbsp;+975</option>
<option value="Bolivia +591">Bolivia&nbsp; &nbsp;+591</option>
<option value="Bosnia and Herzegovina +387">Bosnia and Herzegovina&nbsp; &nbsp;+387</option>
<option value="Botswana +267">Botswana&nbsp; &nbsp;+267</option>
<option value="Brazil +55">Brazil&nbsp; &nbsp;+55</option>
<option value="British Indian Ocean Territory +246">British Indian Ocean Territory&nbsp; &nbsp;+246
</option>
<option value="British Virgin Islands +1">British Virgin Islands&nbsp; &nbsp;+1284</option>
<option value="Brunei +673">Brunei&nbsp; &nbsp;+673</option>
<option value="Bulgaria +359">Bulgaria &nbsp; &nbsp;+359</option>
<option value="Burkina Faso +226">Burkina Faso&nbsp; &nbsp;+226</option>
<option value="Burundi +257">Burundi&nbsp; &nbsp;+257</option>
<option value="Cambodia +855">Cambodia&nbsp; &nbsp;+855</option>
<option value="Cameroon +237">Cameroon&nbsp; &nbsp;+237</option>
<option value="Canada +1">Canada&nbsp; &nbsp;+1</option>
<option value="Cape Verde +238">Cape Verde&nbsp; &nbsp;+238</option>
<option value="Caribbean Netherlands +599">Caribbean Netherlands&nbsp; &nbsp;+599</option>
<option value="Cayman Islands +1">Cayman Islands&nbsp; &nbsp;+1345</option>
<option value="Central African Republic +236">Central African Republic&nbsp; &nbsp;+236</option>
<option value="Chad +235">Chad&nbsp; &nbsp;+235</option>
<option value="Chile +56">Chile&nbsp; &nbsp;+56</option>
<option value="China +86">China&nbsp; &nbsp;+86</option>
<option value="Christmas Island +61">Christmas Island&nbsp; &nbsp;+6189164</option>
<option value="Cocos Islands +61">Cocos Islands&nbsp; &nbsp;+6189162</option>
<option value="Colombia +57">Colombia&nbsp; &nbsp;+57</option>
<option value="Comoros +269">Comoros&nbsp; &nbsp;+269</option>
<option value="Congo +243">Congo (DRC)&nbsp; &nbsp;+243</option>
<option value="Congo +242">Congo (Republic)&nbsp; &nbsp;+242</option>
<option value="Cook Islands +682">Cook Islands&nbsp; &nbsp;+682</option>
<option value="Costa Rica +506">Costa Rica&nbsp; &nbsp;+506</option>
<option value="Côte d'Ivoire +225">Côte d'Ivoire&nbsp; &nbsp;+225</option>
<option value="Croatia +385">Croatia&nbsp; &nbsp;+385</option>
<option value="Cuba +53">Cuba&nbsp; &nbsp;+53</option>
<option value="Curaçao +599">Curaçao&nbsp; &nbsp;+599</option>
<option value="Cyprus +357">Cyprus&nbsp; &nbsp;+357</option>
<option value="Czech Republic +420">Czech Republic&nbsp; &nbsp;+420</option>
<option value="Denmark +45">Denmark&nbsp; &nbsp;+45</option>
<option value="Djibouti +253">Djibouti&nbsp; &nbsp;+253</option>
<option value="Dominica +1">Dominica&nbsp; &nbsp;+1767</option>
<option value="Dominican Republic +1">Dominican Republic&nbsp; &nbsp;+1809</option>
<option value="Ecuador +593">Ecuador&nbsp; &nbsp;+593</option>
<option value="Egypt +20">Egypt&nbsp; &nbsp;+20</option>
<option value="El Salvador +503">El Salvador&nbsp; &nbsp;+503</option>
<option value="Equatorial Guinea +240">Equatorial Guinea&nbsp; &nbsp;+240</option>
<option value="Eritrea +291">Eritrea&nbsp; &nbsp;+291</option>
<option value="Estonia +372">Estonia&nbsp; &nbsp;+372</option>
<option value="Eswatini +268">Eswatini&nbsp; &nbsp;+268</option>
<option value="Ethiopia +251">Ethiopia&nbsp; &nbsp;+251</option>
<option value="Falkland Islands +500">Falkland Islands&nbsp; &nbsp;+500</option>
<option value="Faroe Islands +298">Faroe Islands&nbsp; &nbsp;+298</option>
<option value="Fiji +679">Fiji&nbsp; &nbsp;+679</option>
<option value="Finland +358">Finland&nbsp; &nbsp;+358</option>
<option value="France +33">France&nbsp; &nbsp;+33</option>
<option value="French Guiana +594">French Guiana&nbsp; &nbsp;+594</option>
<option value="French Polynesia +689">French Polynesia&nbsp; &nbsp;+689</option>
<option value="Gabon +241">Gabon&nbsp; &nbsp;+241</option>
<option value="Gambia +220">Gambia&nbsp; &nbsp;+220</option>
<option value="Georgia +995">Georgia&nbsp; &nbsp;+995</option>
<option value="Germany +49">Germany&nbsp; &nbsp;+49</option>
<option value="Ghana +233">Ghana&nbsp; &nbsp;+233</option>
<option value="Gibraltar +350">Gibraltar&nbsp; &nbsp;+350</option>
<option value="Greece +30">Greece&nbsp; &nbsp;+30</option>
<option value="Greenland +299">Greenland&nbsp; &nbsp;+299</option>
<option value="Grenada +1">Grenada&nbsp; &nbsp;+1473</option>
<option value="Guadeloupe +590">Guadeloupe&nbsp; &nbsp;+590</option>
<option value="Guam +1">Guam&nbsp; &nbsp;+1671</option>
<option value="Guatemala +502">Guatemala&nbsp; &nbsp;+502</option>
<option value="Guernsey +44">Guernsey&nbsp; &nbsp;+441481</option>
<option value="Guinea +224">Guinea&nbsp; &nbsp;+224</option>
<option value="Guinea-Bissau +245">Guinea-Bissau&nbsp; &nbsp;+245</option>
<option value="Guyana +592">Guyana&nbsp; &nbsp;+592</option>
<option value="Haiti +509">Haiti&nbsp; &nbsp;+509</option>
<option value="Honduras +504">Honduras&nbsp; &nbsp;+504</option>
<option value="Hong Kong +852">Hong Kong&nbsp; &nbsp;+852</option>
<option value="Hungary +36">Hungary&nbsp; &nbsp;+36</option>
<option value="Iceland +354">Iceland&nbsp; &nbsp;+354</option>
<option value="India +91">India&nbsp; &nbsp;+91</option>
<option value="Indonesia +62">Indonesia&nbsp; &nbsp;+62</option>
<option value="Iran +98">Iran&nbsp; &nbsp;+98</option>
<option value="Iraq +964">Iraq&nbsp; &nbsp;+964</option>
<option value="Ireland +353">Ireland&nbsp; &nbsp;+353</option>
<option value="Isle of Man +44">Isle of Man&nbsp; &nbsp;+44</option>
<option value="Israel +972">Israel&nbsp; &nbsp;+972</option>
<option value="Italy +39">Italy&nbsp; &nbsp;+39</option>
<option value="Jamaica +1">Jamaica&nbsp; &nbsp;+1876</option>
<option value="Japan +81">Japan&nbsp; &nbsp;+81</option>
<option value="Jersey +44">Jersey&nbsp; &nbsp;+44</option>
<option value="Jordan +962">Jordan&nbsp; &nbsp;+962</option>
<option value="Kazakhstan +7">Kazakhstan &nbsp; &nbsp;+7</option>
<option value="Kenya +254">Kenya&nbsp; &nbsp;+254</option>
<option value="Kiribati +686">Kiribati&nbsp; &nbsp;+686</option>
<option value="Kosovo +383">Kosovo&nbsp; &nbsp;+383</option>
<option value="Kuwait +965">Kuwait&nbsp; &nbsp;+965</option>
<option value="Kyrgyzstan +996">Kyrgyzstan &nbsp; &nbsp;+996</option>
<option value="Laos +856">Laos&nbsp; &nbsp;+856</option>
<option value="Latvia +371">Latvia &nbsp; &nbsp;+371</option>
<option value="Lebanon +961">Lebanon&nbsp; &nbsp;+961</option>
<option value="Lesotho +266">Lesotho&nbsp; &nbsp;+266</option>
<option value="Liberia +231">Liberia&nbsp; &nbsp;+231</option>
<option value="Libya +218">Libya&nbsp; &nbsp;+218</option>
<option value="Liechtenstein +423">Liechtenstein&nbsp; &nbsp;+423</option>
<option value="Lithuania +370">Lithuania&nbsp; &nbsp;+370</option>
<option value="Luxembourg +352">Luxembourg&nbsp; &nbsp;+352</option>
<option value="Macau +853">Macau&nbsp; &nbsp;+853</option>
<option value="Macedonia +389">Macedonia&nbsp; &nbsp;+389</option>
<option value="Madagascar +261">Madagascar&nbsp; &nbsp;+261</option>
<option value="Malawi +265">Malawi&nbsp; &nbsp;+265</option>
<option value="Malaysia +60">Malaysia&nbsp; &nbsp;+60</option>
<option value="Maldives +960">Maldives&nbsp; &nbsp;+960</option>
<option value="Mali +223">Mali&nbsp; &nbsp;+223</option>
<option value="Malta +356">Malta&nbsp; &nbsp;+356</option>
<option value="Marshall +692">Marshall Islands&nbsp; &nbsp;+692</option>
<option value="Martinique +596">Martinique&nbsp; &nbsp;+596</option>
<option value="Mauritania +222">Mauritania&nbsp; &nbsp;+222</option>
<option value="Mauritius +230">Mauritius&nbsp; &nbsp;+230</option>
<option value="Mayotte +262">Mayotte&nbsp; &nbsp;+262</option>
<option value="Micronesia +691">Micronesia&nbsp; &nbsp;+691</option>
<option value="Moldova +373">Moldova&nbsp; &nbsp;+373</option>
<option value="Monaco +377">Monaco&nbsp; &nbsp;+377</option>
<option value="Mongolia +976">Mongolia&nbsp; &nbsp;+976</option>
<option value="Montenegro +382">Montenegro&nbsp; &nbsp;+382</option>
<option value="Montserrat +1">Montserrat&nbsp; &nbsp;+1664</option>
<option value="Morocco +212">Morocco&nbsp; &nbsp;+212</option>
<option value="Mozambique +258">Mozambique&nbsp; &nbsp;+258</option>
<option value="Myanmar +95">Myanmar &nbsp; &nbsp;+95</option>
<option value="Namibia +264">Namibia&nbsp; &nbsp;+264</option>
<option value="Nauru +674">Nauru&nbsp; &nbsp;+674</option>
<option value="Nepal +977">Nepal&nbsp; &nbsp;+977</option>
<option value="New Caledonia +687">New Caledonia&nbsp; &nbsp;+687</option>
<option value="New Zealand +64">New Zealand&nbsp; &nbsp;+64</option>
<option value="Nicaragua +505">Nicaragua&nbsp; &nbsp;+505</option>
<option value="Niger +227">Niger&nbsp; &nbsp;+227</option>
<option value="Nigeria +234">Nigeria&nbsp; &nbsp;+234</option>
<option value="Niue +683">Niue&nbsp; &nbsp;+683</option>
<option value="Norfolk Island +672">Norfolk Island&nbsp; &nbsp;+6723</option>
<option value="North Korea +850">North Korea&nbsp; &nbsp;+850</option>
<option value="Northern Mariana Islands +1">Northern Mariana Islands&nbsp; &nbsp;+1670</option>
<option value="Norway +47">Norway&nbsp; &nbsp;+47</option>
<option value="Oman +968">Oman&nbsp; &nbsp;+968</option>
<option value="Pakistan +92">Pakistan&nbsp; &nbsp;+92</option>
<option value="Palau +680">Palau&nbsp; &nbsp;+680</option>
<option value="Palestine +970">Palestine &nbsp; &nbsp;+970</option>
<option value="Panama +507">Panama &nbsp; &nbsp;+507</option>
<option value="Papua New Guinea 675">Papua New Guinea&nbsp; &nbsp;+675</option>
<option value="Paraguay +595">Paraguay&nbsp; &nbsp;+595</option>
<option value="Peru +51">Peru &nbsp; &nbsp;+51</option>
<option value="Philippines +63">Philippines&nbsp; &nbsp;+63</option>
<option value="Poland +48">Poland&nbsp; &nbsp;+48</option>
<option value="Portugal +351">Portugal&nbsp; &nbsp;+351</option>
<option value="Puerto Rico +1">Puerto Rico&nbsp; &nbsp;+1787</option>
<option value="Qatar +974">Qatar&nbsp; &nbsp;+974</option>
<option value="Réunion +262">Réunion&nbsp; &nbsp;+262</option>
<option value="Romania +40">Romania&nbsp; &nbsp;+40</option>
<option value="Russia +7">Russia&nbsp; &nbsp;+7</option>
<option value="Rwanda +250">Rwanda&nbsp; &nbsp;+250</option>
<option value="Saint Barthélemy +590">Saint Barthélemy&nbsp; &nbsp;+590</option>
<option value="Saint Helena +290">Saint Helena&nbsp; &nbsp;+290</option>
<option value="Saint Kitts and Nevis +1">Saint Kitts and Nevis&nbsp; &nbsp;+1869</option>
<option value="Saint Lucia +1">Saint Lucia&nbsp; &nbsp;+1758</option>
<option value="Saint Martin +590">Saint Martin&nbsp; &nbsp;+590</option>
<option value="Saint Pierre and Miquelon +508">Saint Pierre and Miquelon&nbsp; &nbsp;+508</option>
<option value="Saint Vincent and the Grenadines +1">Saint Vincent and the Grenadines&nbsp; &nbsp;+1784
</option>
<option value="Samoa +685">Samoa&nbsp; &nbsp;+685</option>
<option value="San Marino +378">San Marino&nbsp; &nbsp;+378</option>
<option value="São Tomé and Príncipe +239">São Tomé and Príncipe&nbsp; &nbsp;+239</option>
<option value="Saudi Arabia +966">Saudi Arabia &nbsp; &nbsp;+966</option>
<option value="Senegal +221">Senegal &nbsp; &nbsp;+221</option>
<option value="Serbia +381">Serbia&nbsp; &nbsp;+381</option>
<option value="Seychelles +248">Seychelles&nbsp; &nbsp;+248</option>
<option value="Sierra Leone +232">Sierra Leone&nbsp; &nbsp;+232</option>
<option value="Sint Maarten +1">Sint Maarten&nbsp; &nbsp;+1721</option>
<option value="Slovakia +421">Slovakia&nbsp; &nbsp;+421</option>
<option value="Slovenia +386">Slovenia&nbsp; &nbsp;+386</option>
<option value="Solomon Islands +677">Solomon Islands&nbsp; &nbsp;+677</option>
<option value="Somalia +252">Somalia&nbsp; &nbsp;+252</option>
<option value="South Africa +27">South Africa&nbsp; &nbsp;+27</option>
<option value="South Korea +82">South Korea&nbsp; &nbsp;+82</option>
<option value="South Sudan +211">South Sudan&nbsp; &nbsp;+211</option>
<option value="Spain +34">Spain&nbsp; &nbsp;+34</option>
<option value="Sri Lanka +94">Sri Lanka &nbsp; &nbsp;+94</option>
<option value="Sudan +249">Sudan&nbsp; &nbsp;+249</option>
<option value="Suriname">Suriname&nbsp; &nbsp;+597</option>
<option value="Svalbard and Jan Mayen +47">Svalbard and Jan Mayen&nbsp; &nbsp;+47</option>
<option value="Sweden +46">Sweden&nbsp; &nbsp;+46</option>
<option value="Switzerland +41">Switzerland&nbsp; &nbsp;+41</option>
<option value="Syria +963">Syria &nbsp; &nbsp;+963</option>
<option value="Taiwan +886">Taiwan&nbsp; &nbsp;+886</option>
<option value="Tajikistan +992">Tajikistan&nbsp; &nbsp;+992</option>
<option value="Tanzania +255">Tanzania&nbsp; &nbsp;+255</option>
<option value="Thailand +66">Thailand&nbsp; &nbsp;+66</option>
<option value="Timor-Leste +670">Timor-Leste&nbsp; &nbsp;+670</option>
<option value="Togo +228">Togo&nbsp; &nbsp;+228</option>
<option value="Tokelau +690">Tokelau&nbsp; &nbsp;+690</option>
<option value="Tonga +676">Tonga&nbsp; &nbsp;+676</option>
<option value="Trinidad and Tobago +1">Trinidad and Tobago&nbsp; &nbsp;+1868</option>
<option value="Tunisia +216">Tunisia&nbsp; &nbsp;+216</option>
<option value="Turkey +90">Turkey&nbsp; &nbsp;+90</option>
<option value="Turkmenistan +993">Turkmenistan&nbsp; &nbsp;+993</option>
<option value="Turks and Caicos Islands +1">Turks and Caicos Islands&nbsp; &nbsp;+1649</option>
<option value="Tuvalu +688">Tuvalu&nbsp; &nbsp;+688</option>
<option value="U.S. Virgin Islands +1">U.S. Virgin Islands&nbsp; &nbsp;+1340</option>
<option value="Uganda +256">Uganda&nbsp; &nbsp;+256</option>
<option value="Ukraine +380">Ukraine&nbsp; &nbsp;+380</option>
<option value="United Arab Emirates +971">United Arab Emirates &nbsp; &nbsp;+971</option>
<option value="United Kingdom +44">United Kingdom&nbsp; &nbsp;+44</option>
<option value="United States +1">United States&nbsp; &nbsp;+1</option>
<option value="Uruguay +598">Uruguay&nbsp; &nbsp;+598</option>
<option value="Uzbekistan +998">Uzbekistan&nbsp; &nbsp;+998</option>
<option value="Vanuatu +678">Vanuatu&nbsp; &nbsp;+678</option>
<option value="Vatican City +39">Vatican City&nbsp; &nbsp;+379</option>
<option value="Venezuela +58">Venezuela&nbsp; &nbsp;+58</option>
<option value="Vietnam +84">Vietnam&nbsp; &nbsp;+84</option>
<option value="Wallis and Futuna +681">Wallis and Futuna&nbsp; &nbsp;+681</option>
<option value="Western Sahara +212">Western Sahara &nbsp; &nbsp;+21228</option>
<option value="Yemen +967">Yemen&nbsp; &nbsp;+967</option>
<option value="Zambia +260">Zambia&nbsp; &nbsp;+260</option>
<option value="Zimbabwe +263">Zimbabwe&nbsp; &nbsp;+263</option>
<option value="Åland Islands +385">Åland Islands&nbsp; &nbsp;+35818</option>
</select>
<input type="text" name="mobile" required="" class="number" placeholder="Phone number">
</div>
<div class="selectionBlock">
<p> Date of birth</p>
<input type="date" class="arrivalDate datepicker"
name="birthday[]" value="" placeholder="mm/dd/yyyy" autocomplete="off" min="1753-01-01" max="9999-12-31">
name="birthday[]" value="" placeholder="mm/dd/yyyy" autocomplete="off">
</div>
<div class="selectionBlock">
<p> Date of expiration </p>
<input type="date" class="arrivalDate datepicker"
name="passport_expiration_date[]" value="" placeholder="mm/dd/yyyy" autocomplete="off" min="1753-01-01" max="9999-12-31">
name="passport_expiration_date[]" value="" placeholder="mm/dd/yyyy" autocomplete="off">
</div>
<div id="birth_error_msg" class="hidden">Please select your date of birth.</div>
@ -973,22 +701,67 @@ select.gender_pick {border: 1px solid #d1d1d1;
<option value="Self-emloyed person">Self-emloyed person</option>
<option value="Others">Others</option>
</select>
<button class="add_traveler_button" id="add_traveler_button" type="button">+ Add a traveler</button>
</div>
<button class="add_traveler_button" id="add_traveler_button" type="button">+ Add a traveler</button>
</div>
<div id="inquiryBox">
<h2>Your contact information (optional)</h2>
<p>Having a phone number, especially with WhatsApp/iMessage capability will help us contact you in
case of emergency.</p>
<p>Phone No.</p>
<div class="inputTerm">
<input type="text" name="mobile" required="" class="number">
<label>
including country code and area code
</label>
</div>
<div class="selectionBlock">
<p>Home address</p>
<div class="inputTerm">
<input type="text" name="address_street" required="">
<label>
Street
</label>
</div>
</div>
<div class="selectionBlock">
<div class="inputTerm">
<input type="text" name="address_city" required="">
<label>
City
</label>
</div>
</div>
<div class="selectionBlock">
<div class="inputTerm">
<input type="text" name="address_state" required="">
<label>
State
</label>
</div>
</div>
<div class="selectionBlock">
<div class="inputTerm">
<input type="text" name="address_country" required="">
<label>
Country
</label>
</div>
</div>
</div>
<div id="inquiryBox">
<h2>Your Flight Information</h2>
<h2>Your Flight Information (optional)</h2>
<p>Your flight information will be forwarded to your guide/driver for airport pick up and drop off.
Please ensure the details you provide are correct. You can skip this if your don't need airport
transfer service.</p>
<p>If you are not yet purchase your airline and insurance, please fill in the TBC in the link and provide those information to your consultant or keep update after you confirm them.</p>
<div class="selectionBlock" style="width: 100%;">
<div class="inputTerm">
<input type="text" name="MEI_ArrivalFlightNo">
<input type="text" name="MEI_ArrivalFlightNo" required="">
<label>
Arrival flight No.
</label>
@ -997,13 +770,13 @@ select.gender_pick {border: 1px solid #d1d1d1;
<div class="selectionBlock" style="width: 100%;">
<p>Arrival time</p>
<div class="inputTerm">
<input type="datetime-local" name="MEI_ArrivalTime" min="1753-01-01T00:00" max="9999-12-31T00:00">
<input type="datetime-local" name="MEI_ArrivalTime" required="">
</div>
</div>
<div class="selectionBlock" style="width: 100%;">
<div class="inputTerm">
<input type="text" name="MEI_DepartureFlightNo">
<input type="text" name="MEI_DepartureFlightNo" required="">
<label>
Departure Flight No.
</label>
@ -1012,12 +785,20 @@ select.gender_pick {border: 1px solid #d1d1d1;
<div class="selectionBlock" style="width: 100%;">
<p>Departure time</p>
<div class="inputTerm">
<input type="datetime-local" name="MEI_DepartureTime" min="1753-01-01T00:00" max="9999-12-31T00:00">
<input type="datetime-local" name="MEI_DepartureTime" required="">
</div>
</div>
</div>
<div id="inquiryBox">
<h2>Your Special Request (optional)</h2>
<p></p>
<textarea id="special_request" name="special_request" style="resize:none;"></textarea>
</div>
<div id="inquiryBox">
<h2>Emergency Contact Information</h2>
<h2>Emergency Contact Information (optional)</h2>
<div class="emergency_title">(in case an unlikely event happens when you are travelling)</div>
<div class="selectionBlock">
<div class="inputTerm">
@ -1054,16 +835,17 @@ select.gender_pick {border: 1px solid #d1d1d1;
</div>
</div>
</div>
<div id="inquiryBox">
<h2>Your Insurance Information and Other Special Request (optional)</h2>
<textarea id="special_request" name="special_request" style="resize:none;"></textarea>
<div id="inquiryBox">
<h2>Your Insurance Information (Optional)</h2>
<textarea id="insurance_information" name="insurance_information" style="resize:none;"></textarea>
</div>
<div class="inquiryBtn">
<div class="inquiryBtn">
<input type="hidden" name="toname" value="<?php echo $userinfo[0]->OPI_FirstName; ?>">
<input type="hidden" name="tomail" value="<?php echo $userinfo[0]->OPI_Email; ?>">
<input type="hidden" name="customer_username" value="<?php echo $username; ?>">
<input type="hidden" name="customer_usermail" value="<?php echo $usermail; ?>">
<input type="hidden" name="tomail" value="<?php echo $userinfo[0]->OPI_Email; ?>">
<input type="hidden" name="customer_username" value="<?php echo $username; ?>">
<input type="hidden" name="customer_usermail" value="<?php echo $usermail; ?>">
<input type="hidden" name="COLI_ID" value="<?php echo $userinfo[0]->COLI_ID; ?>">
<input type="hidden" name="COLI_SN" value="<?php echo $userinfo[0]->COLI_SN; ?>">
<input type="hidden" name="visitor_link" value="<?php echo $visitor_link; ?>">
@ -1092,8 +874,8 @@ select.gender_pick {border: 1px solid #d1d1d1;
</div>
</div>
</div>
<!-- reviewModal end-->
<script src="https://data.chinahighlights.com/js/min.php?f=/js/customer_center_data/jquery.min.js,/js/customer_center_data/bootstrap.min.js,/js/customer_center_data/jquery-ui.min.js&v=202405161016"></script>
<!-- reviewModal end-->
<script src="https://data.chinahighlights.com/js/min.php?f=/js/customer_center_data/jquery.min.js,/js/customer_center_data/bootstrap.min.js,/js/customer_center_data/jquery-ui.min.js,/js/customer_center_data/jquery-ui-timepicker-addon.js&v=2019092401"></script>
<script>
function submit_info_form () {
var $btn = $("#btn-add-userinfo").button('loading');
@ -1156,29 +938,16 @@ select.gender_pick {border: 1px solid #d1d1d1;
}
});
}
$(function() {
var $travelerTemplate = $(".traveler_info:first").clone();
//添加客户
$("#add_traveler_button").click(function () {addTraveler()});
function addTraveler() {
var travelerCount = $(".traveler_info").length + 1;
var travelerId = 'traveler' + travelerCount;
$("#add_traveler_button").click(function() {
var $addTraveler = $travelerTemplate.clone();
$addTraveler.attr('id', travelerId);
$addTraveler.find('#phoneNumberDiv').remove();
var travelerCount = $(".traveler_info").length + 1;
$addTraveler.find('[data-header]').text('Traveler ' + travelerCount);
$addTravelerButton = $addTraveler.find('#add_traveler_button');
$addTravelerButton.attr('id', 'add_traveler_button' + travelerCount);
$addTravelerButton.click(function(){addTraveler()});
$deleteTravelerButton = $('<button class="add_traveler_button" type="button">- Delete Traveler ' + travelerCount + '</button>');
$deleteTravelerButton.click(function(){$('#'+travelerId).remove();});
$addTraveler.append($deleteTravelerButton);
$(".traveler_info:last").after($addTraveler);
}
$('#add_traveler_button').before($addTraveler);
});
});
</script>
</body>

@ -1,4 +1,3 @@
<!DOCTYPE html>
<html>
@ -7,8 +6,8 @@
<title>
Passport Information for All the Group Members
</title>
<meta content="width=device-width,minimum-scale=1,initial-scale=1" name="viewport">
<link href="https://data.chinahighlights.com/css/min.php?f=/css/customer_center_data/bootstrap.min.css&v=202405161016" rel="stylesheet">
<meta content="width=device-width,minimum-scale=1,initial-scale=1" name="viewport">
<link href="https://data.chinahighlights.com/css/min.php?f=/css/customer_center_data/bootstrap.min.css,/css/customer_center_data/bootstrap-datetimepicker.min.css&v=202302061045" rel="stylesheet">
<style>
body {
margin: 0;
@ -116,14 +115,14 @@
.inputTerm input {
width: 100%;
margin: 0;
font-size: 20px;
font-size: 22px;
border: 1px solid #d1d1d1;
height: 60px;
padding: 15px 15px 0 20px;
border-radius: 4px;
color: #000
}
.inputTerm input.number { width: 51%; height: 57px;}
button#tmsubmit {
background: #ad1818;
text-align: center;
@ -139,15 +138,15 @@
}
button.add_traveler_button {
font-size: 20px;
color: #ad1818;
padding: 5px 30px;
border: 1px solid #d1d1d1;
border-radius: 4px;
margin-top: 30px;
margin-right: 10px;
font-size: 21px;
color: #ad1818;
padding: 8px;
border: 1px solid #d1d1d1;
border-radius: 4px;
width: 300px;
}
#Date_Start {
width: 310px;
font-size: 19px;
@ -227,18 +226,7 @@ input.arrivalDate {height: 50px; width: 347px; font-size: 19px; padding: 5px 15p
width: 100%;
margin-top: 15px;
}
select.code {
font-size: 18px;
color: #000;
height: 57px;
padding-left: 10px;
background: #fff;
border-radius: 4px;
border: 1px solid #d1d1d1;
width: auto;
position: relative;
top: -8px;
}
p.top_info {
width: 860px;
margin: 0 auto;
@ -315,7 +303,7 @@ input.arrivalDate {height: 50px; width: 347px; font-size: 19px; padding: 5px 15p
}
select.country_code,
.selectionBlock, input.arrivalDate, .inputTerm input.number, select.code {
.selectionBlock, input.arrivalDate {
width: 100%;
}
@ -412,7 +400,7 @@ select.gender_pick {border: 1px solid #d1d1d1;
reissuing of tickets would be at your expense!</p>
<div class="traveler_info">
<h3 data-header>Primary contact</h3>
<h3 data-header>Traveler 1</h3>
<div class="selectionBlock">
<select name="gender[]" class="gender_pick">
@ -438,7 +426,7 @@ select.gender_pick {border: 1px solid #d1d1d1;
<div id="name_error_msg" class="hidden">Please enter your name.</div>
<div class="inputTerm">
<input type="text" name="passport[]" required="" class="number" style="width:100%;">
<input type="text" name="passport[]" required="" class="number">
<label>
Passport No.
</label>
@ -446,8 +434,7 @@ select.gender_pick {border: 1px solid #d1d1d1;
<div id="passport_error_msg" class="hidden">Please enter your passport number.</div>
<select class="country_code" name="nationality[]">
<option value="" disabled="" selected="">Select your nationality</option>
<option value="18">Australia</option>
<option value="18">Australia</option>
<option value="5">Canada</option>
<option value="1">China</option>
<option value="8">France</option>
@ -456,7 +443,7 @@ select.gender_pick {border: 1px solid #d1d1d1;
<option value="19">Malaysia</option>
<option value="27">Singapore</option>
<option value="7">United Kingdom</option>
<option value="3" >United States</option>
<option value="3" selected="selected">United States</option>
<option value="458">Afghanistan</option>
<option value="459">Albania</option>
<option value="460">Algeria</option>
@ -684,279 +671,20 @@ select.gender_pick {border: 1px solid #d1d1d1;
<option value="664">Zaire</option>
<option value="665">Zambia</option>
<option value="666">Zimbabwe</option>
<option value="678">Serbia</option>
</select>
<div class="inputTerm" id='phoneNumberDiv'>
<select class="code" name="country_code" id="country_code">
<option value="" disabled selected>Please select your country code</option>
<option style="font-weight: 600;" value="United States +1">United States&nbsp; &nbsp;+1</option>
<option style="font-weight: 600;" value="United Kingdom +44">United Kingdom&nbsp; &nbsp;+44</option>
<option style="font-weight: 600;" value="Australia +61">Australia&nbsp; &nbsp;+61</option>
<option style="font-weight: 600;" value="Canada +1">Canada&nbsp; &nbsp;+1</option>
<option style="font-weight: 600;" value="France +33">France&nbsp; &nbsp;+33</option>
<option style="font-weight: 600;" value="Germany +49">Germany&nbsp; &nbsp;+49</option>
<option style="font-weight: 600; " value="Italy +39">Italy&nbsp; &nbsp;+39</option>
<option style="font-weight: 600; " value="Mexico +52">Mexico&nbsp; &nbsp;+52</option>
<option style="font-weight: 600; " value="Netherlands +31">Netherlands&nbsp; &nbsp;+31</option>
<option style="font-weight: 600; " value="Singapore +65">Singapore&nbsp; &nbsp;+65</option>
<option value="Afghanistan +93">Afghanistan &nbsp; &nbsp;+93</option>
<option value="Albania +355">Albania &nbsp; &nbsp;+355</option>
<option value="Algeria +213">Algeria&nbsp; &nbsp;+213</option>
<option value="American Samoa +1">American Samoa&nbsp; &nbsp;+1684</option>
<option value="Andorra +376">Andorra&nbsp; &nbsp;+376</option>
<option value="Angola +244">Angola&nbsp; &nbsp;+244</option>
<option value="Anguilla +1">Anguilla&nbsp; &nbsp;+1264</option>
<option value="Australia +61">Australia&nbsp; &nbsp;+61</option>
<option value="Antigua and Barbuda +1">Antigua and Barbuda&nbsp; &nbsp;+1268</option>
<option value="Argentina +54">Argentina&nbsp; &nbsp;+54</option>
<option value="Armenia +374">Armenia &nbsp; &nbsp;+374</option>
<option value="Aruba +297">Aruba&nbsp; &nbsp;+297</option>
<option value="Ascension Island +247">Ascension Island&nbsp; &nbsp;+247</option>
<option value="Austria +43">Austria&nbsp; &nbsp;+43</option>
<option value="Azerbaijan +994">Azerbaijan&nbsp; &nbsp;+994</option>
<option value="Bahamas +1">Bahamas&nbsp; &nbsp;+1242</option>
<option value="Bahrain +973">Bahrain&nbsp; &nbsp;+973</option>
<option value="Bangladesh +880">Bangladesh&nbsp; &nbsp;+880</option>
<option value="Barbados +1">Barbados&nbsp; &nbsp;+1246</option>
<option value="Belarus +375">Belarus&nbsp; &nbsp;+375</option>
<option value="Belgium +32">Belgium&nbsp; &nbsp;+32</option>
<option value="Belize +501">Belize&nbsp; &nbsp;+501</option>
<option value="Benin +229">Benin&nbsp; &nbsp;+229</option>
<option value="Bermuda +1">Bermuda&nbsp; &nbsp;+1441</option>
<option value="Bhutan +975">Bhutan&nbsp; &nbsp;+975</option>
<option value="Bolivia +591">Bolivia&nbsp; &nbsp;+591</option>
<option value="Bosnia and Herzegovina +387">Bosnia and Herzegovina&nbsp; &nbsp;+387</option>
<option value="Botswana +267">Botswana&nbsp; &nbsp;+267</option>
<option value="Brazil +55">Brazil&nbsp; &nbsp;+55</option>
<option value="British Indian Ocean Territory +246">British Indian Ocean Territory&nbsp; &nbsp;+246
</option>
<option value="British Virgin Islands +1">British Virgin Islands&nbsp; &nbsp;+1284</option>
<option value="Brunei +673">Brunei&nbsp; &nbsp;+673</option>
<option value="Bulgaria +359">Bulgaria &nbsp; &nbsp;+359</option>
<option value="Burkina Faso +226">Burkina Faso&nbsp; &nbsp;+226</option>
<option value="Burundi +257">Burundi&nbsp; &nbsp;+257</option>
<option value="Cambodia +855">Cambodia&nbsp; &nbsp;+855</option>
<option value="Cameroon +237">Cameroon&nbsp; &nbsp;+237</option>
<option value="Canada +1">Canada&nbsp; &nbsp;+1</option>
<option value="Cape Verde +238">Cape Verde&nbsp; &nbsp;+238</option>
<option value="Caribbean Netherlands +599">Caribbean Netherlands&nbsp; &nbsp;+599</option>
<option value="Cayman Islands +1">Cayman Islands&nbsp; &nbsp;+1345</option>
<option value="Central African Republic +236">Central African Republic&nbsp; &nbsp;+236</option>
<option value="Chad +235">Chad&nbsp; &nbsp;+235</option>
<option value="Chile +56">Chile&nbsp; &nbsp;+56</option>
<option value="China +86">China&nbsp; &nbsp;+86</option>
<option value="Christmas Island +61">Christmas Island&nbsp; &nbsp;+6189164</option>
<option value="Cocos Islands +61">Cocos Islands&nbsp; &nbsp;+6189162</option>
<option value="Colombia +57">Colombia&nbsp; &nbsp;+57</option>
<option value="Comoros +269">Comoros&nbsp; &nbsp;+269</option>
<option value="Congo +243">Congo (DRC)&nbsp; &nbsp;+243</option>
<option value="Congo +242">Congo (Republic)&nbsp; &nbsp;+242</option>
<option value="Cook Islands +682">Cook Islands&nbsp; &nbsp;+682</option>
<option value="Costa Rica +506">Costa Rica&nbsp; &nbsp;+506</option>
<option value="Côte d'Ivoire +225">Côte d'Ivoire&nbsp; &nbsp;+225</option>
<option value="Croatia +385">Croatia&nbsp; &nbsp;+385</option>
<option value="Cuba +53">Cuba&nbsp; &nbsp;+53</option>
<option value="Curaçao +599">Curaçao&nbsp; &nbsp;+599</option>
<option value="Cyprus +357">Cyprus&nbsp; &nbsp;+357</option>
<option value="Czech Republic +420">Czech Republic&nbsp; &nbsp;+420</option>
<option value="Denmark +45">Denmark&nbsp; &nbsp;+45</option>
<option value="Djibouti +253">Djibouti&nbsp; &nbsp;+253</option>
<option value="Dominica +1">Dominica&nbsp; &nbsp;+1767</option>
<option value="Dominican Republic +1">Dominican Republic&nbsp; &nbsp;+1809</option>
<option value="Ecuador +593">Ecuador&nbsp; &nbsp;+593</option>
<option value="Egypt +20">Egypt&nbsp; &nbsp;+20</option>
<option value="El Salvador +503">El Salvador&nbsp; &nbsp;+503</option>
<option value="Equatorial Guinea +240">Equatorial Guinea&nbsp; &nbsp;+240</option>
<option value="Eritrea +291">Eritrea&nbsp; &nbsp;+291</option>
<option value="Estonia +372">Estonia&nbsp; &nbsp;+372</option>
<option value="Eswatini +268">Eswatini&nbsp; &nbsp;+268</option>
<option value="Ethiopia +251">Ethiopia&nbsp; &nbsp;+251</option>
<option value="Falkland Islands +500">Falkland Islands&nbsp; &nbsp;+500</option>
<option value="Faroe Islands +298">Faroe Islands&nbsp; &nbsp;+298</option>
<option value="Fiji +679">Fiji&nbsp; &nbsp;+679</option>
<option value="Finland +358">Finland&nbsp; &nbsp;+358</option>
<option value="France +33">France&nbsp; &nbsp;+33</option>
<option value="French Guiana +594">French Guiana&nbsp; &nbsp;+594</option>
<option value="French Polynesia +689">French Polynesia&nbsp; &nbsp;+689</option>
<option value="Gabon +241">Gabon&nbsp; &nbsp;+241</option>
<option value="Gambia +220">Gambia&nbsp; &nbsp;+220</option>
<option value="Georgia +995">Georgia&nbsp; &nbsp;+995</option>
<option value="Germany +49">Germany&nbsp; &nbsp;+49</option>
<option value="Ghana +233">Ghana&nbsp; &nbsp;+233</option>
<option value="Gibraltar +350">Gibraltar&nbsp; &nbsp;+350</option>
<option value="Greece +30">Greece&nbsp; &nbsp;+30</option>
<option value="Greenland +299">Greenland&nbsp; &nbsp;+299</option>
<option value="Grenada +1">Grenada&nbsp; &nbsp;+1473</option>
<option value="Guadeloupe +590">Guadeloupe&nbsp; &nbsp;+590</option>
<option value="Guam +1">Guam&nbsp; &nbsp;+1671</option>
<option value="Guatemala +502">Guatemala&nbsp; &nbsp;+502</option>
<option value="Guernsey +44">Guernsey&nbsp; &nbsp;+441481</option>
<option value="Guinea +224">Guinea&nbsp; &nbsp;+224</option>
<option value="Guinea-Bissau +245">Guinea-Bissau&nbsp; &nbsp;+245</option>
<option value="Guyana +592">Guyana&nbsp; &nbsp;+592</option>
<option value="Haiti +509">Haiti&nbsp; &nbsp;+509</option>
<option value="Honduras +504">Honduras&nbsp; &nbsp;+504</option>
<option value="Hong Kong +852">Hong Kong&nbsp; &nbsp;+852</option>
<option value="Hungary +36">Hungary&nbsp; &nbsp;+36</option>
<option value="Iceland +354">Iceland&nbsp; &nbsp;+354</option>
<option value="India +91">India&nbsp; &nbsp;+91</option>
<option value="Indonesia +62">Indonesia&nbsp; &nbsp;+62</option>
<option value="Iran +98">Iran&nbsp; &nbsp;+98</option>
<option value="Iraq +964">Iraq&nbsp; &nbsp;+964</option>
<option value="Ireland +353">Ireland&nbsp; &nbsp;+353</option>
<option value="Isle of Man +44">Isle of Man&nbsp; &nbsp;+44</option>
<option value="Israel +972">Israel&nbsp; &nbsp;+972</option>
<option value="Italy +39">Italy&nbsp; &nbsp;+39</option>
<option value="Jamaica +1">Jamaica&nbsp; &nbsp;+1876</option>
<option value="Japan +81">Japan&nbsp; &nbsp;+81</option>
<option value="Jersey +44">Jersey&nbsp; &nbsp;+44</option>
<option value="Jordan +962">Jordan&nbsp; &nbsp;+962</option>
<option value="Kazakhstan +7">Kazakhstan &nbsp; &nbsp;+7</option>
<option value="Kenya +254">Kenya&nbsp; &nbsp;+254</option>
<option value="Kiribati +686">Kiribati&nbsp; &nbsp;+686</option>
<option value="Kosovo +383">Kosovo&nbsp; &nbsp;+383</option>
<option value="Kuwait +965">Kuwait&nbsp; &nbsp;+965</option>
<option value="Kyrgyzstan +996">Kyrgyzstan &nbsp; &nbsp;+996</option>
<option value="Laos +856">Laos&nbsp; &nbsp;+856</option>
<option value="Latvia +371">Latvia &nbsp; &nbsp;+371</option>
<option value="Lebanon +961">Lebanon&nbsp; &nbsp;+961</option>
<option value="Lesotho +266">Lesotho&nbsp; &nbsp;+266</option>
<option value="Liberia +231">Liberia&nbsp; &nbsp;+231</option>
<option value="Libya +218">Libya&nbsp; &nbsp;+218</option>
<option value="Liechtenstein +423">Liechtenstein&nbsp; &nbsp;+423</option>
<option value="Lithuania +370">Lithuania&nbsp; &nbsp;+370</option>
<option value="Luxembourg +352">Luxembourg&nbsp; &nbsp;+352</option>
<option value="Macau +853">Macau&nbsp; &nbsp;+853</option>
<option value="Macedonia +389">Macedonia&nbsp; &nbsp;+389</option>
<option value="Madagascar +261">Madagascar&nbsp; &nbsp;+261</option>
<option value="Malawi +265">Malawi&nbsp; &nbsp;+265</option>
<option value="Malaysia +60">Malaysia&nbsp; &nbsp;+60</option>
<option value="Maldives +960">Maldives&nbsp; &nbsp;+960</option>
<option value="Mali +223">Mali&nbsp; &nbsp;+223</option>
<option value="Malta +356">Malta&nbsp; &nbsp;+356</option>
<option value="Marshall +692">Marshall Islands&nbsp; &nbsp;+692</option>
<option value="Martinique +596">Martinique&nbsp; &nbsp;+596</option>
<option value="Mauritania +222">Mauritania&nbsp; &nbsp;+222</option>
<option value="Mauritius +230">Mauritius&nbsp; &nbsp;+230</option>
<option value="Mayotte +262">Mayotte&nbsp; &nbsp;+262</option>
<option value="Micronesia +691">Micronesia&nbsp; &nbsp;+691</option>
<option value="Moldova +373">Moldova&nbsp; &nbsp;+373</option>
<option value="Monaco +377">Monaco&nbsp; &nbsp;+377</option>
<option value="Mongolia +976">Mongolia&nbsp; &nbsp;+976</option>
<option value="Montenegro +382">Montenegro&nbsp; &nbsp;+382</option>
<option value="Montserrat +1">Montserrat&nbsp; &nbsp;+1664</option>
<option value="Morocco +212">Morocco&nbsp; &nbsp;+212</option>
<option value="Mozambique +258">Mozambique&nbsp; &nbsp;+258</option>
<option value="Myanmar +95">Myanmar &nbsp; &nbsp;+95</option>
<option value="Namibia +264">Namibia&nbsp; &nbsp;+264</option>
<option value="Nauru +674">Nauru&nbsp; &nbsp;+674</option>
<option value="Nepal +977">Nepal&nbsp; &nbsp;+977</option>
<option value="New Caledonia +687">New Caledonia&nbsp; &nbsp;+687</option>
<option value="New Zealand +64">New Zealand&nbsp; &nbsp;+64</option>
<option value="Nicaragua +505">Nicaragua&nbsp; &nbsp;+505</option>
<option value="Niger +227">Niger&nbsp; &nbsp;+227</option>
<option value="Nigeria +234">Nigeria&nbsp; &nbsp;+234</option>
<option value="Niue +683">Niue&nbsp; &nbsp;+683</option>
<option value="Norfolk Island +672">Norfolk Island&nbsp; &nbsp;+6723</option>
<option value="North Korea +850">North Korea&nbsp; &nbsp;+850</option>
<option value="Northern Mariana Islands +1">Northern Mariana Islands&nbsp; &nbsp;+1670</option>
<option value="Norway +47">Norway&nbsp; &nbsp;+47</option>
<option value="Oman +968">Oman&nbsp; &nbsp;+968</option>
<option value="Pakistan +92">Pakistan&nbsp; &nbsp;+92</option>
<option value="Palau +680">Palau&nbsp; &nbsp;+680</option>
<option value="Palestine +970">Palestine &nbsp; &nbsp;+970</option>
<option value="Panama +507">Panama &nbsp; &nbsp;+507</option>
<option value="Papua New Guinea 675">Papua New Guinea&nbsp; &nbsp;+675</option>
<option value="Paraguay +595">Paraguay&nbsp; &nbsp;+595</option>
<option value="Peru +51">Peru &nbsp; &nbsp;+51</option>
<option value="Philippines +63">Philippines&nbsp; &nbsp;+63</option>
<option value="Poland +48">Poland&nbsp; &nbsp;+48</option>
<option value="Portugal +351">Portugal&nbsp; &nbsp;+351</option>
<option value="Puerto Rico +1">Puerto Rico&nbsp; &nbsp;+1787</option>
<option value="Qatar +974">Qatar&nbsp; &nbsp;+974</option>
<option value="Réunion +262">Réunion&nbsp; &nbsp;+262</option>
<option value="Romania +40">Romania&nbsp; &nbsp;+40</option>
<option value="Russia +7">Russia&nbsp; &nbsp;+7</option>
<option value="Rwanda +250">Rwanda&nbsp; &nbsp;+250</option>
<option value="Saint Barthélemy +590">Saint Barthélemy&nbsp; &nbsp;+590</option>
<option value="Saint Helena +290">Saint Helena&nbsp; &nbsp;+290</option>
<option value="Saint Kitts and Nevis +1">Saint Kitts and Nevis&nbsp; &nbsp;+1869</option>
<option value="Saint Lucia +1">Saint Lucia&nbsp; &nbsp;+1758</option>
<option value="Saint Martin +590">Saint Martin&nbsp; &nbsp;+590</option>
<option value="Saint Pierre and Miquelon +508">Saint Pierre and Miquelon&nbsp; &nbsp;+508</option>
<option value="Saint Vincent and the Grenadines +1">Saint Vincent and the Grenadines&nbsp; &nbsp;+1784
</option>
<option value="Samoa +685">Samoa&nbsp; &nbsp;+685</option>
<option value="San Marino +378">San Marino&nbsp; &nbsp;+378</option>
<option value="São Tomé and Príncipe +239">São Tomé and Príncipe&nbsp; &nbsp;+239</option>
<option value="Saudi Arabia +966">Saudi Arabia &nbsp; &nbsp;+966</option>
<option value="Senegal +221">Senegal &nbsp; &nbsp;+221</option>
<option value="Serbia +381">Serbia&nbsp; &nbsp;+381</option>
<option value="Seychelles +248">Seychelles&nbsp; &nbsp;+248</option>
<option value="Sierra Leone +232">Sierra Leone&nbsp; &nbsp;+232</option>
<option value="Sint Maarten +1">Sint Maarten&nbsp; &nbsp;+1721</option>
<option value="Slovakia +421">Slovakia&nbsp; &nbsp;+421</option>
<option value="Slovenia +386">Slovenia&nbsp; &nbsp;+386</option>
<option value="Solomon Islands +677">Solomon Islands&nbsp; &nbsp;+677</option>
<option value="Somalia +252">Somalia&nbsp; &nbsp;+252</option>
<option value="South Africa +27">South Africa&nbsp; &nbsp;+27</option>
<option value="South Korea +82">South Korea&nbsp; &nbsp;+82</option>
<option value="South Sudan +211">South Sudan&nbsp; &nbsp;+211</option>
<option value="Spain +34">Spain&nbsp; &nbsp;+34</option>
<option value="Sri Lanka +94">Sri Lanka &nbsp; &nbsp;+94</option>
<option value="Sudan +249">Sudan&nbsp; &nbsp;+249</option>
<option value="Suriname">Suriname&nbsp; &nbsp;+597</option>
<option value="Svalbard and Jan Mayen +47">Svalbard and Jan Mayen&nbsp; &nbsp;+47</option>
<option value="Sweden +46">Sweden&nbsp; &nbsp;+46</option>
<option value="Switzerland +41">Switzerland&nbsp; &nbsp;+41</option>
<option value="Syria +963">Syria &nbsp; &nbsp;+963</option>
<option value="Taiwan +886">Taiwan&nbsp; &nbsp;+886</option>
<option value="Tajikistan +992">Tajikistan&nbsp; &nbsp;+992</option>
<option value="Tanzania +255">Tanzania&nbsp; &nbsp;+255</option>
<option value="Thailand +66">Thailand&nbsp; &nbsp;+66</option>
<option value="Timor-Leste +670">Timor-Leste&nbsp; &nbsp;+670</option>
<option value="Togo +228">Togo&nbsp; &nbsp;+228</option>
<option value="Tokelau +690">Tokelau&nbsp; &nbsp;+690</option>
<option value="Tonga +676">Tonga&nbsp; &nbsp;+676</option>
<option value="Trinidad and Tobago +1">Trinidad and Tobago&nbsp; &nbsp;+1868</option>
<option value="Tunisia +216">Tunisia&nbsp; &nbsp;+216</option>
<option value="Turkey +90">Turkey&nbsp; &nbsp;+90</option>
<option value="Turkmenistan +993">Turkmenistan&nbsp; &nbsp;+993</option>
<option value="Turks and Caicos Islands +1">Turks and Caicos Islands&nbsp; &nbsp;+1649</option>
<option value="Tuvalu +688">Tuvalu&nbsp; &nbsp;+688</option>
<option value="U.S. Virgin Islands +1">U.S. Virgin Islands&nbsp; &nbsp;+1340</option>
<option value="Uganda +256">Uganda&nbsp; &nbsp;+256</option>
<option value="Ukraine +380">Ukraine&nbsp; &nbsp;+380</option>
<option value="United Arab Emirates +971">United Arab Emirates &nbsp; &nbsp;+971</option>
<option value="United Kingdom +44">United Kingdom&nbsp; &nbsp;+44</option>
<option value="United States +1">United States&nbsp; &nbsp;+1</option>
<option value="Uruguay +598">Uruguay&nbsp; &nbsp;+598</option>
<option value="Uzbekistan +998">Uzbekistan&nbsp; &nbsp;+998</option>
<option value="Vanuatu +678">Vanuatu&nbsp; &nbsp;+678</option>
<option value="Vatican City +39">Vatican City&nbsp; &nbsp;+379</option>
<option value="Venezuela +58">Venezuela&nbsp; &nbsp;+58</option>
<option value="Vietnam +84">Vietnam&nbsp; &nbsp;+84</option>
<option value="Wallis and Futuna +681">Wallis and Futuna&nbsp; &nbsp;+681</option>
<option value="Western Sahara +212">Western Sahara &nbsp; &nbsp;+21228</option>
<option value="Yemen +967">Yemen&nbsp; &nbsp;+967</option>
<option value="Zambia +260">Zambia&nbsp; &nbsp;+260</option>
<option value="Zimbabwe +263">Zimbabwe&nbsp; &nbsp;+263</option>
<option value="Åland Islands +385">Åland Islands&nbsp; &nbsp;+35818</option>
</select>
<input type="text" name="mobile" required="" class="number" placeholder="Phone number">
</div>
<div class="selectionBlock">
<p> Date of birth</p>
<input type="date" class="arrivalDate datepicker"
name="birthday[]" value="" placeholder="mm/dd/yyyy" autocomplete="off" min="1753-01-01" max="9999-12-31">
name="birthday[]" value="" placeholder="mm/dd/yyyy" autocomplete="off">
</div>
<div class="selectionBlock">
<p> Date of expiration </p>
<input type="date" class="arrivalDate datepicker"
name="passport_expiration_date[]" value="" placeholder="mm/dd/yyyy" autocomplete="off" min="1753-01-01" max="9999-12-31">
name="passport_expiration_date[]" value="" placeholder="mm/dd/yyyy" autocomplete="off">
</div>
<div id="birth_error_msg" class="hidden">Please select your date of birth.</div>
@ -973,22 +701,67 @@ select.gender_pick {border: 1px solid #d1d1d1;
<option value="Self-emloyed person">Self-emloyed person</option>
<option value="Others">Others</option>
</select>
<button class="add_traveler_button" id="add_traveler_button" type="button">+ Add a traveler</button>
</div>
<button class="add_traveler_button" id="add_traveler_button" type="button">+ Add a traveler</button>
</div>
<div id="inquiryBox">
<h2>Your contact information (optional)</h2>
<p>Having a phone number, especially with WhatsApp/iMessage capability will help us contact you in
case of emergency.</p>
<p>Phone No.</p>
<div class="inputTerm">
<input type="text" name="mobile" required="" class="number">
<label>
including country code and area code
</label>
</div>
<div class="selectionBlock">
<p>Home address</p>
<div class="inputTerm">
<input type="text" name="address_street" required="">
<label>
Street
</label>
</div>
</div>
<div class="selectionBlock">
<div class="inputTerm">
<input type="text" name="address_city" required="">
<label>
City
</label>
</div>
</div>
<div class="selectionBlock">
<div class="inputTerm">
<input type="text" name="address_state" required="">
<label>
State
</label>
</div>
</div>
<div class="selectionBlock">
<div class="inputTerm">
<input type="text" name="address_country" required="">
<label>
Country
</label>
</div>
</div>
</div>
<div id="inquiryBox">
<h2>Your Flight Information</h2>
<h2>Your Flight Information (optional)</h2>
<p>Your flight information will be forwarded to your guide/driver for airport pick up and drop off.
Please ensure the details you provide are correct. You can skip this if your don't need airport
transfer service.</p>
<p>If you are not yet purchase your airline and insurance, please fill in the TBC in the link and provide those information to your consultant or keep update after you confirm them.</p>
<div class="selectionBlock">
<div class="inputTerm">
<input type="text" name="MEI_ArrivalFlightNo">
<input type="text" name="MEI_ArrivalFlightNo" required="">
<label>
Arrival flight No.
</label>
@ -996,7 +769,7 @@ select.gender_pick {border: 1px solid #d1d1d1;
</div>
<div class="selectionBlock">
<div class="inputTerm">
<input type="datetime-local" name="MEI_ArrivalTime" min="1753-01-01T00:00" max="9999-12-31T00:00">
<input type="datetime-local" name="MEI_ArrivalTime" required="">
<label>
Arrival time
</label>
@ -1004,7 +777,7 @@ select.gender_pick {border: 1px solid #d1d1d1;
</div>
<div class="selectionBlock">
<div class="inputTerm">
<input type="text" name="MEI_DepartureFlightNo">
<input type="text" name="MEI_DepartureFlightNo" required="">
<label>
Departure Flight No.
</label>
@ -1012,7 +785,7 @@ select.gender_pick {border: 1px solid #d1d1d1;
</div>
<div class="selectionBlock">
<div class="inputTerm">
<input type="datetime-local" name="MEI_DepartureTime" min="1753-01-01T00:00" max="9999-12-31T00:00">
<input type="datetime-local" name="MEI_DepartureTime" required="">
<label>
Departure time
</label>
@ -1020,10 +793,14 @@ select.gender_pick {border: 1px solid #d1d1d1;
</div>
</div>
<div id="inquiryBox">
<h2>Your Special Request (optional)</h2>
<p></p>
<textarea id="special_request" name="special_request" style="resize:none;"></textarea>
</div>
<div id="inquiryBox">
<h2>Emergency Contact Information</h2>
<h2>Emergency Contact Information (optional)</h2>
<div class="emergency_title">(in case an unlikely event happens when you are travelling)</div>
<div class="selectionBlock">
<div class="inputTerm">
@ -1060,17 +837,17 @@ select.gender_pick {border: 1px solid #d1d1d1;
</div>
</div>
</div>
<div id="inquiryBox">
<h2>Your Insurance Information and Special Request (optional)</h2>
<textarea id="special_request" name="special_request" style="resize:none;"></textarea>
<div id="inquiryBox">
<h2>Your Insurance Information (Optional)</h2>
<textarea id="insurance_information" name="insurance_information" style="resize:none;"></textarea>
</div>
<div class="inquiryBtn">
<div class="inquiryBtn">
<input type="hidden" name="toname" value="<?php echo $userinfo[0]->OPI_FirstName; ?>">
<input type="hidden" name="tomail" value="<?php echo $userinfo[0]->OPI_Email; ?>">
<input type="hidden" name="customer_username" value="<?php echo $username; ?>">
<input type="hidden" name="customer_usermail" value="<?php echo $usermail; ?>">
<input type="hidden" name="tomail" value="<?php echo $userinfo[0]->OPI_Email; ?>">
<input type="hidden" name="customer_username" value="<?php echo $username; ?>">
<input type="hidden" name="customer_usermail" value="<?php echo $usermail; ?>">
<input type="hidden" name="COLI_ID" value="<?php echo $userinfo[0]->COLI_ID; ?>">
<input type="hidden" name="COLI_SN" value="<?php echo $userinfo[0]->COLI_SN; ?>">
<input type="hidden" name="visitor_link" value="<?php echo $visitor_link; ?>">
@ -1099,8 +876,8 @@ select.gender_pick {border: 1px solid #d1d1d1;
</div>
</div>
</div>
<!-- reviewModal end-->
<script src="https://data.chinahighlights.com/js/min.php?f=/js/customer_center_data/jquery.min.js,/js/customer_center_data/bootstrap.min.js,/js/customer_center_data/jquery-ui.min.js&v=202405161016"></script>
<!-- reviewModal end-->
<script src="https://data.chinahighlights.com/js/min.php?f=/js/customer_center_data/jquery.min.js,/js/customer_center_data/bootstrap.min.js,/js/customer_center_data/jquery-ui.min.js,/js/customer_center_data/jquery-ui-timepicker-addon.js&v=2019092401"></script>
<script>
function submit_info_form () {
var $btn = $("#btn-add-userinfo").button('loading');
@ -1163,30 +940,18 @@ select.gender_pick {border: 1px solid #d1d1d1;
}
});
}
$(function() {
var $travelerTemplate = $(".traveler_info:first").clone();
//添加客户
$("#add_traveler_button").click(function () {addTraveler()});
function addTraveler() {
var travelerCount = $(".traveler_info").length + 1;
var travelerId = 'traveler' + travelerCount;
$("#add_traveler_button").click(function() {
var $addTraveler = $travelerTemplate.clone();
$addTraveler.attr('id', travelerId);
$addTraveler.find('#phoneNumberDiv').remove();
var travelerCount = $(".traveler_info").length + 1;
$addTraveler.find('[data-header]').text('Traveler ' + travelerCount);
$addTravelerButton = $addTraveler.find('#add_traveler_button');
$addTravelerButton.attr('id', 'add_traveler_button' + travelerCount);
$addTravelerButton.click(function(){addTraveler()});
$deleteTravelerButton = $('<button class="add_traveler_button" type="button">- Delete Traveler ' + travelerCount + '</button>');
$deleteTravelerButton.click(function(){$('#'+travelerId).remove();});
$addTraveler.append($deleteTravelerButton);
$(".traveler_info:last").after($addTraveler);
}
$('#add_traveler_button').before($addTraveler);
});
});
</script>
</body>
</html>

@ -29,12 +29,12 @@
<h4 class="text-red" style="box-sizing:border-box;font-family:'Helvetica Neue', Helvetica, Arial, sans-serif;font-weight:500;line-height:1.1;color:#AA2E2D;margin-top:10px;margin-bottom:15px;font-size:24px;padding:12px 0 12px 0;border-bottom:1px solid #dddddd;border-top:1px solid #dddddd;white-space:normal;background-color:#FFFFFF;">
Flight Information
</h4>
<p style="margin:0;">Arrival Flight No.:<?php if (isset($postdata['MEI_ArrivalFlightNo'])) echo $postdata['MEI_ArrivalFlightNo']; ?></p>
<p style="margin:0;">Arrival China Flight No.:<?php if (isset($postdata['MEI_ArrivalFlightNo'])) echo $postdata['MEI_ArrivalFlightNo']; ?></p>
<p style="margin:0;">
Arrival time:<?php if (isset($postdata['MEI_ArrivalTime'])) echo $postdata['MEI_ArrivalTime']; ?>
</p>
<p style="margin:0;">
Departure Flight no.:<?php if (isset($postdata['MEI_DepartureFlightNo'])) echo $postdata['MEI_DepartureFlightNo']; ?>
Departure China Flight no.:<?php if (isset($postdata['MEI_DepartureFlightNo'])) echo $postdata['MEI_DepartureFlightNo']; ?>
</p>
<p style="margin:0;">
Departure time:<?php if (isset($postdata['MEI_DepartureTime'])) echo $postdata['MEI_DepartureTime']; ?>

@ -27,20 +27,6 @@ class Index extends CI_Controller
$this->load->view('bootstrap3/footer');
}
public function search()
{
$keywords = $this->input->post('keywords');
$byWhat = $this->input->post('byWhat');
$data = array();
$data['groupList'] = $this->Information_model->group_list();
$data['tipsList'] = $this->infoTips_model->search($keywords, $byWhat);
$data['lastKeyword'] = $keywords;
$this->load->view('bootstrap3/header', $data);
$this->load->view('welcome');
$this->load->view('bootstrap3/footer');
}
//节点绑定信息推荐或者广告
public function bind($is_id)
{

@ -56,25 +56,6 @@ class infoTips_model extends CI_Model
}
}
public function search($keywords, $byWhat) {
$whereCodition = '';
if ($byWhat == 'byTitle') {
$whereCodition .= " and it.it_title like '%" . $this->HT->escape_str($keywords) . "%'";
} else if ($byWhat == 'byLabel') {
$whereCodition .= " and it.it_code like '%" . $this->HT->escape_str($keywords) . "%'";
} else if ($byWhat == 'byContent') {
$whereCodition .= " and it.it_content like '%" . $this->HT->escape_str($keywords) . "%'";
}
$searchText =
"select it.it_id ,it.it_title,it.it_expires,it.it_code,it.it_content,it.it_sitecode,it.it_datetime
from infoTips it
where it.it_sitecode=?"
. $whereCodition
. " order by it_expires ASC";
$query = $this->HT->query($searchText, array($this->config->item('site_code')));
return $query->result();
}
public function add($table, $data)
{

@ -1,56 +1,35 @@
<!--<h3>CH文中信息广告代码</h3>
<div class="righttour"><a href="/beijing/"><img alt="Beijing trip" class="img-responsive" height="500" src="https://images.chinahighlights.com/allpicture/2015/10/0737277da892436db2906dd5_cut_800x500_10.jpg" style="width: 100%;" width="800" /></a>
<h1>请修改图片尺寸/ 改完请删除此标题 </h1>
<div class="rightinfo" style="min-width: 260px;">
<div class="rightname" style="font-size: 25px;"><a href="/beijing/">Beijing Travel Guide</a></div>
<span class="rightdestination">All things you need to know</span> <span class="tourbutton"> <a href="/beijing/">view more </a></span></div>
</div>
-->
<h3>CH文中tour广告代码</h3>
<h3>文中tour广告代码</h3>
<div class="info_reco_tours"><em>Recommended</em> Itinerary</div>
<div class="info_ad"><a href="/japan/tours/classic-japan" rel="nofollow" id="infopage-"><img alt="11-Day Classic Japan Tour" class="img-responsive" src="https://data.asiahighlights.com/image/travel-guide/japan/shirakawa-go-village.jpg" /> </a>
<div class="info_ad"><a href="/japan/tours/classic-japan" rel="nofollow"><img alt="11-Day Classic Japan Tour" class="img-responsive" height="720" src="https://data.asiahighlights.com/image/travel-guide/japan/shirakawa-go-village.jpg" width="1903" /> </a>
<div class="info_ad_content">
<div class="info_ad_name"><a href="/japan/tours/classic-japan" id="infopage-"><strong>11-Day Classic Japan Tour</strong> Tokyo - Takayama - Shirakawa - Kanazawa - Kyoto </a></div>
<div class="info_ad_name"><a href="/japan/tours/classic-japan"><strong>11-Day Classic Japan Tour</strong> Tokyo - Takayama - Shirakawa - Kanazawa - Kyoto </a></div>
<div class="info_ad_button"><a href="/japan/tours/classic-japan" rel="nofollow" id="infopage-"><i aria-hidden="true" class="fa fa-angle-right"></i></a></div>
<div class="info_ad_button"><a href="/japan/tours/classic-japan" rel="nofollow"><i aria-hidden="true" class="fa fa-angle-right"></i></a></div>
</div>
</div>
<h3>CH 完整的右侧广告代码:</h3>
<div class="expatstour" style="margin: 30px 0; width:auto;">
<div class="expatstour" style="
margin: 30px 0; width:auto;
">
<div class="tour_img_title"><a href="/tour/zhangjiajietour/hun-3/" rel="nofollow"><img alt="most classic china tour" class="img-responsive" height="415" src="https://images.chinahighlights.com/allpicture/2015/03/e47d1ba34f204510962a6c89_cut_600x550_251.jpg" width="600" /><span class="citytourname">Classic Wonders</span></a></div>
<div class="tourdetailinfo"><span class="expatstourname"><a href="/tour/zhangjiajietour/hun-3/">11-Day Beijing Xi'an Guilin/Yangshuo Shanghai Tour</a></span>
<div class="tourbutton"><a href="/tour/zhangjiajietour/hun-3/" rel="nofollow">View More</a></div>
</div>
</div>
<h3>AH GH 线路卡片 代码:</h3>
<div class="ah_index_tour">
<a href="/india/tours/diwali-festival" rel="nofollow"><img alt="8-Day Diwali Festival in India Golden Triangle Tour 2024" class="img-responsive" src="https://images.asiahighlights.com/allpicture/2020/01/1ce7cfa94db040dcaa147143_cut_2560x800_296.jpg" ><img alt="" class="img-responsive tour_list_map" src="https://data.asiahighlights.com/image/tour/india/map/ah-in-70-map.jpg"></a>
<div class="ah_index_tour_bg">
<h3><a href="/india/tours/diwali-festival">8-Day Diwali Festival in India Golden Triangle Tour 2024</a></h3>
<div class="tour_list_subtitle">Discover Colorful India during the Diwali Festival</div>
<div class="ah_index_tour_button">
<div class="tour_list_price"><strong>Private tour from:</strong> US$1,719</div>
<a href="/india/tours/diwali-festival" rel="nofollow">View More </a></div>
</div>
</div>
<h3>CH 线路卡片 代码:</h3>
<div class="expatstour">
<div class="tour_img_title"><a href="/tour/cht-ft-02/" rel="nofollow"><img alt="China family travel" class="img-responsive" src="https://images.chinahighlights.com/allpicture/2021/10/5405ded6c1a642e8a04f1b45_cut_600x550_251.jpg" ><span class="citytourname">Family Happiness</span></a></div>
<div class="tourdetailinfo"><span class="expatstourname"><a href="/tour/cht-ft-02/" rel="nofollow">11-Day Beijing - Xi'an - Guilin - Shanghai Family Tour</a></span>
<ul class="infolist">
<li>Top <strong>family itinerary</strong></li>
<li>Experience China's countryside life together</li>
</ul>
<div class="tourbutton"><a href="/tour/cht-ft-02/" rel="nofollow">View More</a></div>
</div>
</div>
</div>

@ -5,46 +5,13 @@
</div>
<div class="col-md-9">
<h4>广告管理 <small><a href="<?php echo site_url('thirdparty/recommend/tips/add'); ?>">添加广告</a></small></h4>
<form id="searchForm" method="post" action="<?php echo site_url('thirdparty/recommend/index/search'); ?>" class="navbar-form navbar-left">
<div class="input-group">
<input type="text" class="form-control input-sm" name="keywords" id="keywords" value="<?php if (!empty($lastKeyword)) {echo $lastKeyword;} ?>" style="min-width:450px;">
<input type="hidden" name="byWhat" id="byWhatInput" >
</div>
<span class="input-group-btn">
<button class="btn btn-default btn-sm" id="searchByTitleBtn" type="button">搜索标题</button>
<button class="btn btn-default btn-sm" id="searchByLabelBtn" type="button">搜索标签</button>
<button class="btn btn-default btn-sm" id="searchByContentBtn" type="button">搜索内容</button>
</span>
</form>
<script>
var searchForm = document.getElementById('searchForm');
var searchByTitleBtn = document.getElementById('searchByTitleBtn');
var searchByLabelBtn = document.getElementById('searchByLabelBtn');
var searchByContentBtn = document.getElementById('searchByContentBtn');
var byWhatInput = document.getElementById('byWhatInput');
function submitSearch(byWhat) {
byWhatInput.value = byWhat;
searchForm.submit();
}
searchByTitleBtn.addEventListener('click', function(event) {
submitSearch('byTitle');
});
searchByLabelBtn.addEventListener('click', function(event) {
submitSearch('byLabel');
});
searchByContentBtn.addEventListener('click', function(event) {
submitSearch('byContent');
});
</script>
<table class="table table-striped">
<thead>
<tr>
<th class="col-md-2">#</th>
<th class="col-md-9">标题</th>
<th class="col-md-9">标签</th>
<th class="col-md-9">代码</th>
<th class="col-md-4">过期时间</th>
</tr>
</thead>

@ -1,292 +0,0 @@
<?php
if (!defined('BASEPATH'))
exit('No direct script access allowed');
class searchnew extends CI_Controller{
public function __construct(){
parent::__construct();
$this->load->model("BIZ_train_model");//加载模型
}
//查询聚合余票接口,对返回的数据进行处理
public function index($train_date=null,$fromStation=null,$toStation=null){
//定义一些变量
$cache = 'no';
$flag = true;
$juheTrainInfo = '';
set_time_limit(0);
//判断数据是否合法
if(!$train_date || !$fromStation || !$toStation){
exit('传参不能为空!');
}else{
if(strlen($fromStation) != 3){
exit('fromStation:参数错误!');
}
if(strlen($toStation) != 3){
exit('toStation:参数错误!');
}
$this->train_date = $train_date;
$now_time = time();
$differ_time = (strtotime($train_date) - $now_time) / 86400;
if($differ_time <= 29){
//调用聚合搜索模块
$juheTrainInfo = $this->juheSearch($train_date,$fromStation,$toStation);
if(empty($juheTrainInfo)){
$flag = 'error';
}
}else{
$flag = 'cache';
}
//调用数据处理模块。
$returnJson = $this->dataOperate($juheTrainInfo,$flag,$fromStation,$toStation);
//调用拼接处理模块
$trainjson = $this->createTrainJson($returnJson);
print_r($trainjson);
die();
}
}
//搜索模块
function juheSearch($train_date,$fromStation,$toStation){
$url = 'http://139.129.246.118:12309/trainTickets/ticketsAvailable?key='.JUHE_TRAIN_API_KEY.'&train_date='.$train_date.'&from_station='.$fromStation.'&to_station='.$toStation;
$this->url = $url;
$juheTrainInfo = $this->get_http($url);
if($this->validateJuhe($juheTrainInfo)){
return $juheTrainInfo;
}else{
return null;
}
}
//缓存处理模块(包含缓存处理)
function dataOperate($trainInfo,$flag,$fromStation,$toStation){
if($flag == 'error'){
$research = $this->juheSearch($this->train_date,$fromStation,$toStation);
if($this->validateJuhe($research)){
$trainInfo = $research;
}else{
$flag = 'cache';
}
}
if($flag == 'cache'){
$cacheTrainInfo = $this->BIZ_train_model->get_train_info($fromStation,$toStation);
if(empty($cacheTrainInfo)){
return null;
}else{
$cache_time = $cacheTrainInfo->tpc_datetime;
$now_time = time();
$differ_time = ($now_time - strtotime($cache_time)) / 86400;
if($differ_time >= 7){
$this->delete_traincache($fromStation,$toStation);
$research = $this->juheSearch(strtotime('+7day'),$fromStation,$toStation);
if($this->validateJuhe($research)){
$trainInfo = $research;
}else{
return null;
}
}
}
}
$this->BIZ_train_model->addOrUpdate($fromStation,$toStation,$trainInfo);
return $trainInfo;
}
//字符串拼接模块
function createTrainJson($returnJson){
if(empty($returnJson)){
}else{
$return_data = new stdClass();
$return_data->data = new stdClass();
$return_data->httpstatus = 200;
//$return_data->reason = $reason;
//$return_data->cache = $cache;
$return_data->data->result = array();
$return_data->data->map = new stdClass();
$obj = array();
$i = 0;
$pricestr = '';
//print_r(json_decode($returnJson));
//die();
if(!empty(json_decode($returnJson)->result->list)){
foreach (json_decode($returnJson)->result->list as $value){
$obj[$value->from_station_code] = $value->from_station_name;
$obj[$value->to_station_code] = $value->to_station_name;
$seat_type = '';
if(isset($value->gjrw_price)){
if($value->gjrw_price > 0){
$gjrwPrice = $value->gjrw_price * 10;
$seat_type .= '"6":"'.$gjrwPrice.'","A6":"¥'.$value->gjrw_price.'",';
}
}
if(isset($value->qtxb_price)){
if($value->qtxb_price > 0){
$seat_type .= '"H":"¥'.$value->qtxb_price.'",';
}
}
if(isset($value->rw_price)){
if($value->rw_price > 0){
$rwPrice = $value->rw_price * 10;
$seat_type .= '"4":"'.$rwPrice.'","A4":"¥'.$value->rw_price.'",';
}
}
if(isset($value->rz_price)){
if($value->rz_price > 0){
$rzPrice = $value->rz_price * 10;
$seat_type .= '"2":"'.$rzPrice.'","A2":"¥'.$value->rz_price.'",';
}
}
if(isset($value->tdz_price)){
if($value->tdz_price > 0){
$seat_type .= '"P":"¥'.$value->tdz_price.'",';
}
}
if(isset($value->wz_price)){
if($value->wz_price > 0){
$wzPrice = $value->wz_price * 10;
$seat_type .= '"WZ":"¥'.$value->wz_price.'",';
}
}
if(isset($value->yw_price)){
if($value->yw_price > 0){
$ywPrice = $value->yw_price * 10;
$seat_type .= '"3":"'.$ywPrice.'","A3":"¥'.$value->yw_price.'",';
}
}
if(isset($value->yz_price)){
if($value->yz_price > 0){
$yzPrice = $value->yz_price * 10;
$seat_type .= '"1":"'.$yzPrice.'","A1":"¥'.$value->yz_price.'",';
}
}
if(isset($value->edz_price)){
if($value->edz_price > 0){
$seat_type .= '"O":"¥'.$value->edz_price.'",';
}
}
if(isset($value->ydz_price)){
if($value->ydz_price > 0){
$seat_type .= '"M":"¥'.$value->ydz_price.'",';
}
}
if(isset($value->swz_price)){
if($value->swz_price > 0){
$swzPrice = $value->swz_price * 10;
$seat_type .= '"9":"'.$swzPrice.'","A9":"¥'.$value->swz_price.'",';
}
}
if(isset($value->dw_price)){
if($value->dw_price > 0){
$seat_type .= '"F":"¥'.$value->dw_price.'",';
}
}
$pricestr = $seat_type.'"train_no":'.'"'.$value->train_no.'"';
//余票字符串
$return_data->data->result[$i] = '|预定|'.$value->train_no.'|'.$value->train_code.'|'.$value->from_station_name.'|'.$value->to_station_name.'|'.$value->from_station_code.'|'.$value->to_station_code.'|'.$value->start_time.'|'.$value->arrive_time.'|'.$value->run_time.'|'.$value->can_buy_now.'||'.$value->train_start_date.'||||||||'.$this->ticket_exchange($value->gjrw_num).'|'.$this->ticket_exchange($value->qtxb_num).'|'.$this->ticket_exchange($value->rw_num).'|'.$this->ticket_exchange($value->rz_num).'|'.$this->ticket_exchange($value->tdz_num).'|'.$this->ticket_exchange($value->wz_num).'||'.$this->ticket_exchange($value->yw_num).'|'.$this->ticket_exchange($value->yz_num).'|'.$this->ticket_exchange($value->edz_num).'|'.$this->ticket_exchange($value->ydz_num).'|'.$this->ticket_exchange($value->swz_num).'|'.$this->ticket_exchange($value->dw_num).'||';
$data = '{"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{'.$pricestr.'},"messages":[],"validateMessages":{}}';
$return_data->data->price[$i] = $data;
$i++;
}
}
$return_data->data->map = (object)$obj;
print_r($return_data);
}
}
//获取价格(废弃)
/*
fromStationCode出发站三字码
toStationCode:终点站三字码
trainCode:车次号
*/
public function get_price($fromStationCode=null,$toStationCode=null,$trainCode=null){
if(!$fromStationCode || !$toStationCode || !$trainCode){
exit('传参错误!');
}else{
$return_data = $this->BIZ_train_model->get_price($fromStationCode,$toStationCode,$trainCode);
if(!empty($return_data)){
print_r(json_decode($return_data->TPL_Price));
}else{
print_r('没有数据返回');
}
}
}
//验证聚合返回的信息是否正确
function validateJuhe($trainInfo){
if(!empty($trainInfo) && !empty(json_decode($trainInfo)->result)){
return true;
}else{
return false;
}
}
//余票转换
function ticket_exchange($num){
if(isset($this->cache)){
$time = strtotime($this->train_date) - time();
$day = $time / 86400;
if($day > 15){
return '有';
}else{
return $num;
}
}else{
if(is_numeric($num)){
if($num == 0){
return '无';
}elseif($num >= 99){
return '有';
}else{
return $num;
}
}else{
if($num == '--'){
return '';
}
}
}
}
//发送请求
function get_http($url, $data = '', $method = 'GET') {
$curl = curl_init(); // 启动一个CURL会话
curl_setopt($curl, CURLOPT_URL, $url); // 要访问的地址
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0); // 对认证证书来源的检查
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); // 从证书中检查SSL加密算法是否存在
curl_setopt($curl, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); // 模拟用户使用的浏览器
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1); // 使用自动跳转
curl_setopt($curl, CURLOPT_AUTOREFERER, 1); // 自动设置Referer
if ($method == 'POST' && !empty($data)) {
curl_setopt($curl, CURLOPT_POST, 1); // 发送一个常规的Post请求
curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // Post提交的数据包
}
curl_setopt($curl, CURLOPT_TIMEOUT, 45); // 设置超时限制防止死循环
curl_setopt($curl, CURLOPT_HEADER, 0); // 显示返回的Header区域内容
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); // 获取的信息以文件流的形式返回
$tmpInfo = curl_exec($curl); // 执行操作
$errno = curl_errno($curl);
if ($errno !== 0) {
return false;
$error_message = $errno . ' ' . curl_error($curl); //记录错误日志
log_message('error', "third_party/train_app/index/get_http curl {$error_message}");
}
curl_close($curl); //关闭CURL会话
return $tmpInfo; //返回数据
}
}
?>

@ -60,15 +60,6 @@ define("JUHE_TRAIN_EXPORT_API","http://op.juhe.cn/trainTickets/exportAccountChan
//http://op.juhe.cn/trainTickets/exportAccountChange?key=79f03107b921ef31310bd40a1415c1cb&since=2016-10-01 00:00&before=2016-10-30 00:00
// //澜海接口(测试)
// define("LANHAI_appId","3649601564");
// define("LANHAI_KEY","999c1DtJJ4pEbcxeEqJBKw==");
// define("LANHAI_URL","http://ctriptest.lhticket.com/");
//澜海接口(正式)
define("LANHAI_appId","9082253783");
define("LANHAI_KEY","YZ6yrAbv0Qn8CsZwHtZExA==");
define("LANHAI_URL","http://ctrip.lhticket.com/");
//订单状态说明
$config["train_order_status_msg"]=array(

@ -39,7 +39,7 @@ class addorders extends CI_Controller{
}
}
//自动出票,2024-1-30改用新方法
//自动出票
public function auto_pay_ticket(){
//log_message('error','auto ticket');
date_default_timezone_set('Asia/Shanghai');
@ -165,146 +165,6 @@ class addorders extends CI_Controller{
}
print_r('<table border="1">'.$string.'</table>');
}
//自动出票2.0 2024-1-30 zp
public function auto_pay_ticket_2(){
date_default_timezone_set('Asia/Shanghai');
set_time_limit(180);
//筛选出能自动出票的订单
$auto_pool = $this->BIZ_train_model->auto_check_ticket_2();
// $DepartureDate = strtotime(date('Y-m-d',strtotime("2024-5-9"))); //只取日期部分
// $now = strtotime(date('Y-m-d'));
// $depart_diff = ($DepartureDate - $now) / 86400;
// $saletime = strtotime("17:00");
// $sale_diff = (time() - $saletime) / 3600;
//创建一个不允许自动出票的国际火车票数组
$nation_train = array('K19', 'K23', 'Z8701', 'Z8702', 'Z97', 'Z98', 'Z99', 'Z100', 'K9795','D87');
//创建黑名单
$black_list = $this->config->item('black_list');
$string = '';
foreach($auto_pool as $item){
$this->isauto = 1;
$bpe_sn = '';
$back_message = '';
$cold_sn = $item->COLD_SN;
$coli_id = $item->coli_id;
$auto_flag = 1;
$people_arr = $this->BIZ_train_model->biz_people($cold_sn);
$train_info = $this->BIZ_train_model->biz_order_detail($cold_sn);
//乘客人数大于10人不出票
if(count($people_arr) > 10){
$auto_flag = 0;
$back_message .= '-乘客人数大于10不自动出票';
}
//护照号如果在黑名单的就不自动出票
foreach($people_arr as $people_info){
if(in_array($people_info->BPE_Passport,$black_list)){
$auto_flag = 0;
$back_message .= '-此用户为黑名单用户,不自动出票';
}
if(strlen($people_info->BPE_Passport) >= 18){
$auto_flag = 0;
$back_message .= '-护照位数大于18不自动出票';
}
$bpe_sn .= $people_info->BPE_SN.',';
}
$bpe_sn = substr($bpe_sn,0,strlen($bpe_sn)-1);
//不是已付款状态的票价高于5000不出票以防意外
if($item->COLI_State != '8'){
if($train_info->adultcost > 5000){
$auto_flag = 0;
$back_message .= '-没支付单价大于5000不自动出票';
}
}
//如果为国际火车票就不出票
if(in_array($train_info->FlightsNo, $nation_train) || strlen($train_info->DepartAirport)>3 || strlen($train_info->ArrivalAirport)>3){
$auto_flag = 0;
$back_message .= '-国际火车票不自动出票';
}
//无座的订单不做出票
if($train_info->Aircraft == 'WZ'){
$auto_flag = 0;
$back_message .= '-无座不自动出票';
}
$DepartureDate = strtotime(date('Y-m-d',strtotime($train_info->DepartureDate))); //只取日期部分
$now = strtotime(date('Y-m-d'));
$depart_diff = ($DepartureDate - $now) / 86400;
//如果刚好是第15天的订单(12306的15天预售是算当天的所以时间差是14天)
if($depart_diff==14){
//$this->isauto = 1;
$time_obj = $this->BIZ_train_model->get_saletime($train_info->DepartAirport_cn);
//print_r($time_obj);
if(!empty($time_obj)){
$saletime = strtotime($time_obj->TST_saletime);
}else{
$saletime = strtotime("12:00"); //如果没有设置预售时间默认8点
}
//echo $saletime;
$sale_diff = (time() - $saletime) / 3600;
if($sale_diff > 12){
$auto_flag = 0;
$back_message .= '-超过抢票时间';
}else if($sale_diff <0){
$auto_flag = 0;
$back_message .= '-未到抢票时间';
}
//$time = strtotime(time());
// $autolasttime = $item->ts_autolasttime;
// if(($timestamp = strtotime($autolasttime)) !== false) {
// $time_diff = ($time - strtotime($autolasttime)) / 3600;
// if ($time_diff < 1){
// $auto_flag = 0;
// $back_message .= '-预售期每小时只能提交一次';
// }
// }
}
//只能3次抢票
if ($item->ts_autotimes > 3){
$auto_flag = 0;
$back_message .= '-抢票次数已到3次';
}
if($auto_flag == 0){
$string .= '<tr><td>汉特订单号:'.$coli_id.'('.$cold_sn.')'.$back_message.'</td></tr>';
if($depart_diff==14){
}else{
log_message('error','自动出票错误信息:'.'<table border="1">'.$string.'</table>');
}
}else{
//单个订单提交
//echo $cold_sn.'<br>';
log_message('error','自动出票提交:'.$coli_id.'('.$cold_sn.')');
$this->booktickets($cold_sn,$bpe_sn,'','ctrip'); //调用出票
//$string .= '<tr><td>汉特订单号:'.$coli_id.'('.$cold_sn.')可以自动出票</td></tr>';
}
}
print_r('<table border="1">'.$string.'</table>');
}
//创建一个方法用于接收所有的出票请求
public function booktickets($cold_sn=null,$bpe_sn=null,$selectseat=null,$type=null){
@ -396,9 +256,6 @@ class addorders extends CI_Controller{
case 'ctrip':
$this->ctripModel($data,$selectseat,$cold_sn);
break;
case 'lanhai':
$this->lanhaiModel($data,$selectseat,$cold_sn,$bpe_sn); //澜海多传用户SN列表
break;
}
}
@ -690,8 +547,8 @@ class addorders extends CI_Controller{
$reback["order"] = $orderId;
$reback["mes"] = "订单提交成功,等待回调";
}else{
// $reback["mes"] = $confirm_back_json;
// $add_data->status = "e";
$reback["mes"] = $confirm_back_json;
$add_data->status = "e";
}
//本地订单入库
@ -828,23 +685,8 @@ class addorders extends CI_Controller{
$passagersdata[$i]->countryCode = "";
$passagersdata[$i]->contactMobile = "";
$passagersdata[$i]->contactEmail = "";
if (!empty($PassagerInfo->BPE_Nationality)){
$regionCode = $PassagerInfo->BPE_Nationality;
if ($regionCode =="TW" || $regionCode=="HK" || $regionCode=="MO"){
$passagersdata[$i]->regionCode = "CN";
}
else if ($regionCode=="UK" || $regionCode=="GB"){
$passagersdata[$i]->regionCode = "GB"; //英国传GB
}else{
$passagersdata[$i]->regionCode = $regionCode; //国家简码 美国us ,中国cn
}
}
$i++;
}
//乘客人信息
$PostData->trainOrderInfo->orderInfo->ticketList['0']->passengerList = $passagersdata;
$PostData->trainOrderInfo->orderInfo->frontSeatFlag = 0;
@ -882,16 +724,9 @@ class addorders extends CI_Controller{
$add_data->runtime = (strtotime($data['train']->ArrivalTime) - strtotime($data['train']->DepartureTime)) / 60;
$add_data->channel = 'ctrip';
$add_data->isauto = $this->isauto;
//出票次数
$countAuto = $this->train_system_model->get_autotimes($cold_sn);
$add_data->ts_autotimes = $countAuto->countauto + 1; //出票次数+1
$add_data->lanhaiData = ""; //途牛默认澜海数据为空
//存储到数据库
$this->train_system_model->add_orders($add_data);
// print_r(json_encode($PostData));
// die();
$this->train_system_model->add_orders($add_data);
$ResponseJson = GetPost_http($url,json_encode($PostData,JSON_UNESCAPED_UNICODE),'json');
$ResponseData = json_decode($ResponseJson);
@ -921,8 +756,6 @@ class addorders extends CI_Controller{
}else{
//log_message('error','下单失败提交数据记录:'.json_encode($PostData,JSON_UNESCAPED_UNICODE));
$reback["mes"] = $ResponseJson;
$add_data->status = "e";
@ -932,7 +765,6 @@ class addorders extends CI_Controller{
$msgData->OrderStatus = "1";
$msgData->ErrorMsg = $ResponseData->returnMessage;
$msgData->ordernumber = $OrderNumber;
$msgData->addOrderData = json_encode($PostData,JSON_UNESCAPED_UNICODE); //失败了记录提交的订单数据
$this->train_system_model->update_orders_msg($msgData);
}
@ -1007,97 +839,6 @@ class addorders extends CI_Controller{
//print_r($ResponseData);
//支付同步回调信息 {"Status":"SUCCESS","PartnerName":"guilintravel","OrderNumber":"guilintravel1546071576","OperationDateTime":"2018-12-29 16:19:37","RetCode":0,"ResponseStatus":{"Timestamp":"\/Date(1546071577236+0800)\/","Ack":"Success","Errors":[],"Extension":[]}}
}
//澜海请求出票
function lanhaiModel($data,$selectseat,$cold_sn,$bpe_sn){
$microtime = get_microtime();
$OrderNumber = SHUNTU_ORDERUSER.$microtime; //自生成订单号
//生成接口请求头参数
$mainOrderId = $OrderNumber;
$timestamp = $microtime;
$appId = LANHAI_appId;
$url = LANHAI_URL."api/open/push/order";
//拼接发送的报文
$PostData = new stdClass();
$PostData->mainOrderId = $mainOrderId;
$PostData->timestamp = $timestamp;
$PostData->appId = $appId;
//本地添加记录
$add_data = new stdClass();
$add_data->cold_sn = $cold_sn;
$add_data->ordernumber = $OrderNumber;
$add_data->returncode = '';
$add_data->status = '2';
$add_data->errormsg = '预定中';
$add_data->checi = $data['train']->FlightsNo;
$add_data->fromstationame = $data['train']->DepartAirport_cn;
$add_data->fromstationcode = $data['train']->DepartAirport;
$add_data->tostationame = $data['train']->ArrivalAirport_cn;
$add_data->tostationcode = $data['train']->ArrivalAirport;
$add_data->startdate = date('Y-m-d',strtotime($data['train']->DepartureDate));
$add_data->startime = date('H:i',strtotime($data['train']->DepartureTime));
$add_data->endtime = date('H:i',strtotime($data['train']->ArrivalTime));
$add_data->runtime = (strtotime($data['train']->ArrivalTime) - strtotime($data['train']->DepartureTime)) / 60;
$add_data->channel = 'lanhai';
$add_data->isauto = $this->isauto;
//出票次数
$countAuto = $this->train_system_model->get_autotimes($cold_sn);
$add_data->ts_autotimes = $countAuto->countauto + 1; //出票次数+1
//澜海数据
$lanhaiData = new stdClass();
$lanhaiData->selectseat = $selectseat;
$lanhaiData->bpe_sn = $bpe_sn;
$add_data->lanhaiData = json_encode($lanhaiData,JSON_UNESCAPED_UNICODE);
//存储到数据库
$this->train_system_model->add_orders($add_data);
//print_r(json_encode($PostData));
//die();
$ResponseJson = GetPost_http($url,json_encode($PostData,JSON_UNESCAPED_UNICODE),'json');
$ResponseData = json_decode($ResponseJson);
// print_r($ResponseJson);
// die();
//预定请求成功后执行支付
if($ResponseData->code == 0 && $ResponseData->success){
$reback["status"] = 1;
$reback["order"] = $OrderNumber;
$reback["mes"] = "订单提交成功,请等待澜海出票。在出票信息返回之前,千万不要改动汉特里面的订单数据,以免照成出票数据和订单数据不一致!!!!!".$ResponseData->msg ;
}else{
$reback["status"] = 0;
$reback["order"] = $OrderNumber;
$reback["mes"] = "订单提交失败,".$ResponseData->msg."。订单发送数据:".json_encode($PostData) ;
$add_data->status = "e";
//更新订单
$msgData = new stdClass();
$msgData->bookcallback = $ResponseJson;
$msgData->OrderStatus = "1";
if (isset($ResponseData->returnMessage)){
$msg = $ResponseData->returnMessage;
}else{
$msg = "没有错误信息!";
}
$msgData->ErrorMsg = $msg;
$msgData->ordernumber = $OrderNumber;
$msgData->addOrderData = json_encode($PostData,JSON_UNESCAPED_UNICODE); //失败了记录提交的订单数据
$this->train_system_model->update_orders_msg($msgData);
}
echo json_encode($reback,JSON_UNESCAPED_UNICODE);
}
}

@ -413,115 +413,6 @@ class api extends CI_Controller{
}
}
//澜海账单导出api
public function lanhai_export_excel(){
set_time_limit(0);
//参数
$from_date = $this->input->post("from_date");
$to_date = $this->input->post("to_date");
$examine = $this->input->post("examine");
$importht = $this->input->post("importht");
$reback=array();//返回的数据
$reback["from_date"] = $from_date;
$reback["to_date"] = $to_date;
$reback["examine"] = $examine;
$reback["importht"] = $importht;
if(!empty($from_date) && !empty($to_date)){
//拼接发送的报文
$PostData = new stdClass();
$bodyInfo = new stdclass();
$bodyInfo->startTime = $from_date." 00:00:00";
$bodyInfo->endTime = $to_date." 23:59:59";
$bodyInfo->pageNum = 1;
$bodyInfo->pageSize = 20000;
$authentication = new stdClass(); //需加密的数据
$authentication->appId = LANHAI_appId;
//加密
$this->load->library("aesLanhai");
$aesUnit = new Security();
$resultData = $aesUnit->encryptData(json_encode($bodyInfo));
$PostData->bodyInfo = $resultData;
$PostData->authentication = $authentication;
//echo (json_encode($PostData));
$url = LANHAI_URL."api/open/bill";
$ResponseJson = GetPost_http($url,json_encode($PostData,JSON_UNESCAPED_UNICODE),'json');
$ResponseData = json_decode($ResponseJson);
if($ResponseData->code == 0 && $ResponseData->success){
$string_r = "";//输出
$arr = array();//整合完成的数组,写进excel表的数据
//账单导入到汉特。 先删除同一编码的数据,防止重复
if (!empty($importht)){
$BillSn = date('Ymd',strtotime($from_date)).date('Ymd',strtotime($to_date)); //这是获取开始结束日期作为编码,一定要和下面获取代码一样。
$this->BIZ_train_model->del_lanhai_bill($BillSn);
}
foreach ($ResponseData->data->records as $record) {
# code...
$arrRecord = array();
$arrRecord["saveDay"] = $record->saveDay;
$arrRecord["type"] = $record->type; //类型 包括:出票、低改高、出票退票、改签退票、退票
$arrRecord["mainOrderId"] = $record->mainOrderId; //订单号
$arrRecord["passengerName"] = $record->passengerName; //乘车人
$arrRecord["price"] = $record->price ;//金额,整数是支付票款,负数是退回金额
$arrRecord["wl"] = ""; //外联
$arrRecord["griName"]=""; //团号
$orderData = $this->train_system_model->get_OPIName($record->mainOrderId);
if (!empty($orderData)){
$arrRecord["wl"] = $orderData->OPIName;
$arrRecord["griName"] = $orderData->griName;
}
$arr[] = $arrRecord;
//账单导入到汉特。
if (!empty($importht)){
$AddHt_data = new stdClass(); //账单保存到汉特
$AddHt_data->BillSn = date('Ymd',strtotime($from_date)).date('Ymd',strtotime($to_date));
$AddHt_data->BillDate = $record->saveDay;
$AddHt_data->OrderId = $record->mainOrderId;
$AddHt_data->VEIName = LANHAI_appId;
$AddHt_data->From = "桂林海纳国际旅行社有限公司";
$AddHt_data->BillType = $record->type;
$AddHt_data->OrderType = null;
$AddHt_data->Cost = -($record->price);
$AddHt_data->Memo = $record->handleTime;
//入库
$this->BIZ_train_model->add_lanhai_bill($AddHt_data);
}
}
//print_r($arr);
if(empty($examine)){
//写入excel模板
header("Content-type:application/vnd.ms-excel;charset=utf-8");
header("Content-Disposition:attachment;filename=lanhai_train.xls");
$string_r= $this->load->view("lanhai_transaction_excel",array("arr"=>$arr),TRUE);
echo $string_r;die;
}else{
krsort($arr);//数组倒序
$reback["data"]=$arr;
$this->load->view('header');
$this->load->view('export_lanhai',$reback);
$this->load->view('footer');
}
}
}
}
//订单同步到trainsystem
public function sync_orders(){

@ -304,7 +304,6 @@ class callback extends CI_Controller{
}
$data_passager->seatdetail = $SeatNo;
$data_passager->longtrainno = $tItems->longElecNo;
$data_passager->lanhaiData = ""; //对应澜海那边的数据,这边设置为空
//入库
$this->train_system_model->add_passagers($data_passager);

@ -41,9 +41,6 @@ class innerTrainSearch extends CI_Controller{
case 'ctrip':
$this->NewCtripApi($date,$from,$to);
break;
case 'lanhai':
$this->LanHaiApi($date,$from,$to);
break;
default :
$this->NewCtripApi($date,$from,$to);
break;
@ -433,224 +430,6 @@ class innerTrainSearch extends CI_Controller{
}
}
/**
* @description: 三亚澜海商务的火车票查询接口
* @param {*} $data
* @param {*} $from
* @param {*} $to
* @param {*} $return
* @return {*}
* @Date Changed:
*/
public function LanHaiApi($date=null,$from=null,$to=null,$return=false){
if(!$date || !$from || !$to){
header("HTTP/1.1 404 Not Found");
exit('{"httpstatus":404,"data":{"seven":false,"cache":false,"result":[],"map":{}}}');
}else{
$isCache = false;
$iseven = false;
$cachedata = false;
$now_time = time();
$differ = (strtotime($date) - $now_time) / 86400;
//屏蔽掉超过预售期的搜索,提高速度,2021-7-5 zp修改预售期为15天不再是30天
if($differ > 14){
$date = date('Y-m-d',strtotime('+7day'));
$iseven = true;
}
//生成请求链接
$url = "http://ctrip.lhticket.com/api/open/query/train";
//构建接口参数POST方式JSON格式
$post_data = new stdClass();
$post_data->date = $date;
$post_data->fromStationCode = $from;
$post_data->toStationCode = $to;
$api_start_time = microtime(true);
// //获取数据
// echo ($url . "<hr/>");
// echo(json_encode($post_data) . "<hr/>");
$ResponseJson = GetPost_http($url,json_encode($post_data),'json');
$api_end_time = microtime(true);
$ResponseData = json_decode($ResponseJson);
// // 获取 microtime
// $microtime = microtime(true);
// // 将时间戳转换为毫秒
// $timestampInMilliseconds = round($microtime * 1000);
// echo $timestampInMilliseconds;
// echo($ResponseJson);
// die();
$api_responsive_time = $api_end_time - $api_start_time;
if(empty($ResponseData->data)){
log_message('error','lanhai_train|status:trains is empty |相应时间:'.$api_responsive_time);
}else{
log_message('error','lanhai_train|status:'.$ResponseData->success.'|相应时间:'.$api_responsive_time);
}
//定义返回的json
$ReturnData = new stdClass();
$ReturnData->httpstatus = 200;
$ReturnData->data = new stdClass();
$ReturnData->data->seven = $iseven;
$ReturnData->data->cache = $isCache;
$ReturnData->data->supplier = 'lanhai';
$ReturnData->data->result = array();
$ReturnData->data->map = new stdClass();
$obj = array();
$i = 0;
$PriceStr = '';
//数据解析
if(!empty($ResponseData->data)){
foreach ($ResponseData->data as $TrainInfo){
$obj[$TrainInfo->fromStationCode] = $TrainInfo->fromStationName;
$obj[$TrainInfo->toStationCode] = $TrainInfo->toStationName;
$SeaType = '';
//余数初始化为空
$gjrwNum = $rwNum = $rzNum = $tdzNum = $wzNum = $yzNum = $edzNum = $ydzNum = $swzNum = $ywNum = $dwNum = $ydwNum = $edzNum = null;
foreach($TrainInfo->seats as $Seats){
$ticketLeft = 0 ; //澜海余票会传有和无的中文
if ($Seats->count == "有"){
$ticketLeft = 99;
}else if ($Seats->count == "无"){
$ticketLeft = 0;
}else {
$ticketLeft = $Seats->count;
}
//从香港出发的 D/G 火车加价3%
if($from == 'XJA'){
if(stripos($TrainInfo->trainCode, "G") !== false || stripos($TrainInfo->trainCode, "D") !== false){
$Seats->ticketPrice = $Seats->ticketPrice * 1.03;
}
}
if(strstr($Seats->seatTypeName,'高级软卧')){
$gjrwXiaPrice = $Seats->ticketPrice * 10;
$SeaType .= '"6":"'.$gjrwXiaPrice.'","A6":"¥'.$Seats->ticketPrice.'",';
$gjrwNum = $ticketLeft;
}
if(strstr($Seats->seatTypeName,'软卧') ){
$rwPrice = $Seats->ticketPrice * 10;
$SeaType .= '"4":"'.$rwPrice.'","A4":"¥'.$Seats->ticketPrice.'",';
$rwNum = $ticketLeft;
}
if(strstr($Seats->seatTypeName,'一等卧')){
$SeaType .= '"YDW":"¥'.$Seats->ticketPrice.'",';
$ydwNum = $ticketLeft;
}
if($Seats->seatTypeName == '软座'){
$rzPrice = $Seats->ticketPrice * 10;
$SeaType .= '"2":"'.$rzPrice.'","A2":"¥'.$Seats->ticketPrice.'",';
$rzNum = $ticketLeft;
}
if($Seats->seatTypeName == '特等座'){
$SeaType .= '"P":"¥'.$Seats->ticketPrice.'",';
$tdzNum = $ticketLeft;
}
if($Seats->seatTypeName == '无座'){
$SeaType .= '"WZ":"¥'.$Seats->ticketPrice.'",';
$wzNum = $ticketLeft;
}
if($Seats->seatTypeName == '硬座'){
$yzPrice = $Seats->ticketPrice * 10;
$SeaType .= '"1":"'.$yzPrice.'","A1":"¥'.$Seats->ticketPrice.'",';
$yzNum = $ticketLeft;
}
if($Seats->seatTypeName == '二等座'){
$SeaType .= '"O":"¥'.$Seats->ticketPrice.'",';
$edzNum = $ticketLeft;
}
if($Seats->seatTypeName == '一等座'){
$SeaType .= '"M":"¥'.$Seats->ticketPrice.'",';
$ydzNum = $ticketLeft;
}
if($Seats->seatTypeName == '商务座'){
$swzPrice = $Seats->ticketPrice * 10;
$SeaType .= '"9":"'.$swzPrice.'","A9":"¥'.$Seats->ticketPrice.'",';
$swzNum = $ticketLeft;
}
if(strstr($Seats->seatTypeName,'硬卧')){
$ywPrice = $Seats->ticketPrice * 10;
$SeaType .= '"3":"'.$ywPrice.'","A3":"¥'.$Seats->ticketPrice.'",';
$ywNum = $ticketLeft;
}
if(strstr($Seats->seatTypeName, '二等卧')){
$SeaType .= '"EDW":"¥'.$Seats->ticketPrice.'",';
$erwNum = $ticketLeft;
}
if(strstr($Seats->seatTypeName,'动卧')){
$SeaType .= '"F":"¥'.$Seats->ticketPrice.'",';
$dwNum = $ticketLeft;
}
$PriceStr = $SeaType.'"train_no":'.'"'.$TrainInfo->trainCode.'"';
}
//对返回的数据进行容错处理
$gjrwNum = isset($gjrwNum) ? ticket_exchange($Seats->ticketPrice,$gjrwNum,$iseven) : '';
$rwNum = isset($rwNum) ? ticket_exchange($Seats->ticketPrice,$rwNum,$iseven) : '';
$rzNum = isset($rzNum) ? ticket_exchange($Seats->ticketPrice,$rzNum,$iseven) : '';
$tdzNum = isset($tdzNum) ? ticket_exchange($Seats->ticketPrice,$tdzNum,$iseven) : '';
$wzNum = isset($wzNum) ? ticket_exchange($Seats->ticketPrice,$wzNum,$iseven) : '';
$ywNum = isset($ywNum) ? ticket_exchange($Seats->ticketPrice,$ywNum,$iseven) : '';
$yzNum = isset($yzNum) ? ticket_exchange($Seats->ticketPrice,$yzNum,$iseven) : '';
$edzNum = isset($edzNum) ? ticket_exchange($Seats->ticketPrice,$edzNum,$iseven) : '';
$ydzNum = isset($ydzNum) ? ticket_exchange($Seats->ticketPrice,$ydzNum,$iseven) : '';
$swzNum = isset($swzNum) ? ticket_exchange($Seats->ticketPrice,$swzNum,$iseven) : '';
$dwNum = isset($dwNum) ? ticket_exchange($Seats->ticketPrice,$dwNum,$iseven) : '';
$ydwNum = isset($ydwNum) ? ticket_exchange($Seats->ticketPrice,$ydwNum,$iseven) : '';
$erwNum = isset($erwNum) ? ticket_exchange($Seats->ticketPrice,$erwNum,$iseven) : '';
//时间处理
$startTime = date("H:i", strtotime($TrainInfo->startTime));;
$arrivalTime = date("H:i", strtotime($TrainInfo->arrivalTime));;
$runMin = $TrainInfo->travelTime % 60;
$runHour = ($TrainInfo->travelTime - $runMin) / 60;
$ReturnData->data->result[$i] = '|预定|'.$TrainInfo->trainNo.'|'.$TrainInfo->trainCode.'|'.$TrainInfo->fromStationName.'|'.$TrainInfo->toStationName.'|'.$TrainInfo->fromStationCode.'|'.$TrainInfo->toStationCode.'|'.$startTime.'|'.$arrivalTime.'|'.$runHour.':'.$runMin.'|Y||'.date('Ymd',strtotime($date)).'||||||||'.$gjrwNum.'||'.$rwNum.'|'.$rzNum.'|'.$tdzNum.'|'.$wzNum.'||'.$ywNum.'|'.$yzNum.'|'.$edzNum.'|'.$ydzNum.'|'.$swzNum.'|'.$dwNum.'|||'.$ydwNum.'|'.$erwNum;
$data = '{"validateMessagesShowId":"_validatorMessage","status":true,"httpstatus":200,"data":{'.$PriceStr.'},"messages":[],"validateMessages":{}}';
$ReturnData->data->price[$i] = $data;
$i++;
}
}
//print_r($ResponseData);die();
$ReturnData->data->map = (object)$obj;
if($return){
return json_encode($ReturnData);
}else{
echo json_encode($ReturnData);
}
}
}
//App项目组的接口 暂时不用
public function appGroupApi($train_date=null,$fromStation=null,$toStation=null,$return=false){
set_time_limit(0);
@ -897,8 +676,8 @@ class innerTrainSearch extends CI_Controller{
exit('传参错误!');
}
//$back_json = $this->NewCtripApi($train_date,$fromStation,$toStation,true);
$back_json = $this->LanHaiApi($train_date,$fromStation,$toStation,true);
$back_json = $this->NewCtripApi($train_date,$fromStation,$toStation,true);
$train_info = new stdClass();
$train_info = json_decode($back_json);

@ -1,703 +0,0 @@
<?php
use League\CLImate\TerminalObject\Basic\Json;
defined('BASEPATH') or exit('No direct script access allowed');
class LanHaiTicket extends CI_Controller
{
public function __construct()
{
parent::__construct();
$this->load->model("BIZ_train_model");
$this->load->model("train_system_model");
$this->load->helper('train');
$this->db_train_zw = $this->config->item('db_train_zw');
$this->train_zw = $this->config->item('train_zw');
$this->black_list = $this->config->item('black_list');
$this->load->library("lanhaidata");
$this->train_certificateType = $this->config->item('train_certificateType');
$this->train_refundType = $this->config->item('train_refundType');
}
public function index()
{
//出票锁单接口: https://www.mycht.cn/info.php/apps/trainsystem/lanhaiticket/pushorderdetail?mainOrderId=HN1720670129499
//出票回调接口https://www.mycht.cn/info.php/apps/trainsystem/lanhaiticket/pushorderresult/
//退票锁单接口: https://www.mycht.cn/info.php/apps/trainsystem/lanhaiticket/refundorderdetail?dataId=82033
//退票回调接口: https://www.mycht.cn/info.php/apps/trainsystem/lanhaiticket/refundorderresult/
//退款回调接口https://www.mycht.cn/info.php/apps/trainsystem/lanhaiticket/refundpriceresult/
//http://ct.tms.lhticket.com 账号: GLhaina 密码123456
}
/**
* @description: 澜海获取锁单接口通过get方式获取参数mainOrderId订单号
* @return {*}
* @Date Changed:
* 网前地址https://www.mycht.cn/info.php/apps/trainsystem/lanhaiticket/pushorderdetail?mainOrderId=HN1720670129499
*/
public function pushOrderDetail()
{
//获取订单号
$mainOrderId = $this->input->get_post("mainOrderId");
$aes = $this->input->get_post("aes");
if (strpos($mainOrderId, 'HN') !== false) { //由于我们的订单号是HN开头的所以这里做下判断
//根据mainOrderId获取火车票的信息
$ticketfrom = $this->train_system_model->ticketfrom($mainOrderId);
if (!empty($ticketfrom)) {
$cold_sn = $ticketfrom->ts_cold_sn;
$lanhaiRecord = json_decode($ticketfrom->ts_lanhaiData); //澜海特殊数据字段保存了选择的出票人员Id
$data['train'] = $this->BIZ_train_model->biz_order_detail($cold_sn);
$coli_id = $this->BIZ_train_model->cold_sn_get_coli_id($cold_sn)['0']->COLI_ID;
if (empty($this->BIZ_train_model->get_operatorInfo($coli_id))) {
$data['email'] = 'vivi@hainatravel.com';
} else {
$data['email'] = $this->BIZ_train_model->get_operatorInfo($coli_id)['0']->OPI_Email;
}
//乘客信息
$bpe_sn = '';
if (!empty($lanhaiRecord)) {
$bpe_sn = $lanhaiRecord->bpe_sn;
}
if (!empty($bpe_sn)) {
$data['people_list'] = $this->BIZ_train_model->in_bpesn_people_info($bpe_sn);
} else {
//没有找到选择的人员列表,就查询整个订单的人员列表
$people_arr = $this->BIZ_train_model->biz_people($cold_sn);
//护照号如果在黑名单的就不自动出票
foreach ($people_arr as $people_info) {
$bpe_sn .= $people_info->BPE_SN . ',';
}
$bpe_sn = substr($bpe_sn, 0, strlen($bpe_sn) - 1);
$data['people_list'] = $this->BIZ_train_model->in_bpesn_people_info($bpe_sn);
}
$AdultNum = 0;
$ChildNum = 0;
$i = 0;
$lanhaiData = new lanhaiData();
$lanhaiCountryData = json_decode($lanhaiData->CountryData); //国家三字码基础信息
$passagersdata = array();
foreach ($data['people_list'] as $PassagerInfo) {
//乘客类型
switch ($PassagerInfo->BPE_GuestType) {
case 1:
$PiaoType = 1;
$PiaoTypeName = "成人票";
$AdultNum++;
break;
case 2:
$PiaoType = 2;
$PiaoTypeName = "儿童票";
$ChildNum++;
break;
default: //外国人应该就两种票吧
$PiaoType = 1;
$PiaoTypeName = "成人票";
break;
}
//证件类型
switch ($PassagerInfo->BPE_PassportType) {
case 'Chinese ID':
$PassportTypeseId = 1;
$PassportTypeseidName = "二代身份证";
break;
case 'MainlandTravel Permit from Hong Kong and Macau':
$PassportTypeseId = 7;
$PassportTypeseidName = "回乡证";
break;
case 'Travel Permit from Hong Kong / Macau':
$PassportTypeseId = 7;
$PassportTypeseidName = "回乡证";
break;
case 'Travel Permit from Taiwan':
$PassportTypeseId = 8;
$PassportTypeseidName = "台胞证";
break;
default:
$PassportTypeseId = 2;
$PassportTypeseidName = "护照";
break;
}
$passagersdata[$i] = new stdClass();
$passagersdata[$i]->passengerName = chk_sp_name($PassagerInfo->BPE_FirstName . $PassagerInfo->BPE_MiddleName . $PassagerInfo->BPE_LastName);
$passagersdata[$i]->passengerType = $PiaoType; //乘客类型1 成人票2 儿童票
$passagersdata[$i]->passportType = $PassportTypeseId; //证件类型,身份证 1护照 2回乡证 7台胞证 8外国人永久居留身份证 9港澳通行证 10台湾通行证 22港澳台居民居住证 23
$passagersdata[$i]->passportNumber = $PassagerInfo->BPE_Passport; //护照号
$passagersdata[$i]->passengerId = $PassagerInfo->BPE_SN; //乘客ID
$regionCode = "";
$countryName = "";
if (!empty($PassagerInfo->BPE_Nationality)) {
$htCode = $PassagerInfo->BPE_Nationality;
if ($htCode == "TW" || $htCode == "HK" || $htCode == "MO") {
$regionCode = "CHN";
$countryName = "中国";
} else {
foreach ($lanhaiCountryData as $cItem) {
if ($cItem->code == $htCode) {
$regionCode = $cItem->standCode;
$countryName = $cItem->name;
break;
}
}
}
}
$passagersdata[$i]->regionCode = $regionCode; //国家简码 美国USA ,中国CHN
$passagersdata[$i]->countryName = $countryName; //国家名称 中文名称
$passagersdata[$i]->passportExpireDate = date('Y-m-d', strtotime($PassagerInfo->BPE_PassExpdate)); //证件到期
$passagersdata[$i]->birthday = date('Y-m-d', strtotime($PassagerInfo->BPE_BirthDate)); //出生日期
$i++;
}
//拼接发送的报文
$PostData = new stdClass();
$PostData->mainOrderId = $mainOrderId;
$currentTime = date("Y-m-d H:i:s");
$PostData->expireTime = date("Y-m-d H:i:s", strtotime($currentTime . ' +30 minutes'));
$PostData->currentTime = $currentTime;
$PostData->agentCode = LANHAI_appId;
$PostData->contactMobile = "18877331805";
$PostData->extendParams = "";
$PostData->ticketsItems = array();
$PostData->ticketsItems['0'] = new stdClass();
$PostData->ticketsItems['0']->deliveryTicketId = $cold_sn; //行程id,cold_sn
$PostData->ticketsItems['0']->fromStationName = $data['train']->DepartAirport_cn;
$PostData->ticketsItems['0']->toStationName = $data['train']->ArrivalAirport_cn;
$PostData->ticketsItems['0']->trainNumber = $data['train']->FlightsNo; //车次
$PostData->ticketsItems['0']->departTime = date('Y-m-d H:i', strtotime($data['train']->DepartureTime)); //发车时间
$PostData->ticketsItems['0']->arrivalTime = date('Y-m-d H:i', strtotime($data['train']->ArrivalTime)); //到达时间
$PostData->ticketsItems['0']->ticketCount = count($data["people_list"]);
$PostData->ticketsItems['0']->ticketPrice = $data['train']->adultcost; //车票单价,单位(元)
$seatName = $this->train_zw[$this->db_train_zw[$data['train']->Aircraft]]; //座位名称,中文
$PostData->ticketsItems['0']->seatName = $seatName;
$PostData->ticketsItems['0']->acceptSeats = array(); //坐席选项
$lanhaiSeatTypes = json_decode($lanhaiData->seatTypes); //座位选项
foreach ($lanhaiSeatTypes as $seatItem) {
if ($seatItem->seatName == $seatName) {
$PostData->ticketsItems['0']->acceptSeats = $seatItem->seatItems;
break;
}
}
$acceptSeatRemark = "优先出【同排ABCDF座】无法满足可出任意座位不接受站票";
if (($AdultNum + $ChildNum) > 1) {
//多人时
if (strstr($seatName, "卧")) {
$acceptSeatRemark = "客人想要2张下铺最好在同一房间。下铺不足时至少保证在同一房间否则不要出票";
}
} else {
//单人时
}
$PostData->ticketsItems['0']->acceptSeatRemark = $acceptSeatRemark; //行程坐席要求
$PostData->ticketsItems['0']->ticketType = 1;
$PostData->ticketsItems['0']->passengerInfos = $passagersdata;
$total_price = $AdultNum * $data['train']->adultcost + $ChildNum * $data['train']->childcost; //总价
$PostData->orderPrice = $total_price; //订单总价,单位(元)
//加密方式显示
$this->load->library("aesLanhai");
$aesUnit = new Security();
$resultData = $aesUnit->encryptData(json_encode($PostData));
//$resultData = $aesUnit->decryptData($resultData); //测试加解密是否正常。
if ($aes == "false") {
//加个明文显示判断,用来检查数据
$resultData = json_encode($PostData, JSON_UNESCAPED_UNICODE);
}
echo $resultData;
} else {
$ResultNoticeResponse = new stdClass();
$ResultNoticeResponse->returnCode = -1;
$ResultNoticeResponse->success = false;
$ResultNoticeResponse->returnMsg = "mainOrderId错误";
echo json_encode($ResultNoticeResponse);
}
}
}
/**
* 出票结果回调信息
* 网前URLhttps://www.mycht.cn/info.php/apps/trainsystem/lanhaiticket/pushorderresult/
*/
public function pushOrderResult()
{
$back_json = file_get_contents('php://input');
log_message('error', '澜海出票回调信息:' . $back_json);
$lanhai_backdata = json_decode($back_json);
if (!empty($lanhai_backdata)) {
//判断回调信息是否正确,主要判断是否是本企业的回调信息
$companyId = LANHAI_appId;
$messageIdentity = $lanhai_backdata->authentication->appId; //传递的企业ID
$ResultNoticeResponse = new stdClass();
if ($companyId == $messageIdentity) {
$ResultNoticeResponse->retCode = 0;
$ResultNoticeResponse->success = true;
$ResultNoticeResponse->message = "处理成功!";
} else {
$ResultNoticeResponse->returnCode = -1;
$ResultNoticeResponse->success = false;
$ResultNoticeResponse->returnMsg = "appId错误";
}
echo json_encode($ResultNoticeResponse);
//处理回调的内容,保存到本地及翰特
$update_data = new stdClass();
$update_data->ServiceName = "lanhai.ticketresult";
$update_data->ordernumber = '';
$update_data->seatsinfo = '';
$update_data->TicketCheck = '';
$update_data->bookcallback = '';
$update_data->confirmcallback = '';
$update_data->returncallback = '';
$update_data->OrderTotleFee = 0;
$update_data->ElectronicOrderNumber = '';
$update_data->reschedulecallback = '';
$update_data->OrderTicketTime = '';
$update_data->operateTradeNo = "";
if (!empty($lanhai_backdata->bodyInfo)) {
// //需要解密
$this->load->library("aesLanhai");
$aesUnit = new Security();
$bodyINfo = json_decode($aesUnit->decryptData($lanhai_backdata->bodyInfo));
if ($bodyINfo->failCode == 0) {
$update_data->OrderStatus = '4';
if (isset($bodyINfo->resultMsg)) {
$update_data->ErrorMsg = $bodyINfo->resultMsg;
} else {
$update_data->ErrorMsg = '出票成功';
}
} else {
$update_data->OrderStatus = '5';
if (isset($bodyINfo->resultMsg)) {
$update_data->ErrorMsg = $bodyINfo->resultMsg;
} else {
$update_data->ErrorMsg = '出票失败';
}
}
$update_data->ordernumber = $lanhai_backdata->authentication->mainOrderId;
if (isset($bodyINfo->orderPrice)) {
$update_data->OrderTotleFee = $bodyINfo->orderPrice; //总价
}
if (isset($bodyINfo->payTradeNumber)) {
$update_data->operateTradeNo = $bodyINfo->payTradeNumber; ////支付宝流水
}
$update_data->ticketresultcallback = json_encode($bodyINfo);
//$update_data->OrderTicketTime = $lanhai_backdata->TrainOrderService->OrderInfo->TicketInfo->OrderTicketTime;
//新接口数据,不一定保存到数据库里面,原订单已有,做个记录
if (isset($bodyINfo->ticketSuccessTime)) {
$update_data->ticketSuccTime = $bodyINfo->ticketSuccessTime; //出票成功时间
}
// $update_data->orderType = $lanhai_backdata->ticketResult->orderMasterInfo->orderType; //订单类型 0电子票 1配送票 2人工客票 3抢票订单
// $update_data->contactName = $lanhai_backdata->ticketResult->orderMasterInfo->contactName; //联系人
// $update_data->mobileNo = des_decrypt($lanhai_backdata->ticketResult->orderMasterInfo->mobileNo,$key); //联系电话 (DES加密
//人员及车票
if (isset($bodyINfo->eOrderNumber)) {
$elecNo = $bodyINfo->eOrderNumber; //电子订单号即12306取票号
$update_data->ElectronicOrderNumber = $elecNo;
}
if (isset($bodyINfo->ticketList)) { //如果订票成功,需要保存的数据
$data_passager = new stdClass();
foreach ($bodyINfo->ticketList as $tItems) {
if (isset($tItems->ticketCheck)) {
$checkWindow = $tItems->ticketCheck; //检票口
$update_data->TicketCheck = $checkWindow;
}
$update_data->trainNo = $tItems->trainNumber; //车次
$update_data->departTime = $tItems->departTime; //车次出发时间
foreach ($tItems->passengerList as $pItems) {
$data_passager->ordernumber = $update_data->ordernumber;
//人员列表
$data_passager->status = '4';
$certificateType = $this->train_certificateType[$pItems->passportType]; //证件类型,身份证 1护照 2回乡证 7台胞证 8外国人永久居留身份证 9港澳通行证 10台湾通行证 22港澳台居民居住证 23
$data_passager->identitytype = $certificateType;
$data_passager->realname = $pItems->passengerName;
$data_passager->numberid = $pItems->passportNumber; //证件号码
//$data_passager->birthday = $pItems->birthday;
if ($pItems->passengerType == 2) {
$passengerType = "儿童";
} else {
$passengerType = "成人";
}
$data_passager->ticketype = $passengerType; //乘客类型 1成人 2儿童
$data_passager->seatype = $pItems->seatName; //坐席类型
$data_passager->ticketprice = $pItems->realTicketPrice; //实际单价(元)
$SeatNo = "";
if (isset($pItems->carriageNo)) {
$SeatNo .= $pItems->carriageNo . "车厢";
}
if (isset($pItems->seatNo)) {
$SeatNo .= $pItems->seatNo; ////坐席号
}
$data_passager->seatdetail = $SeatNo;
$passengerId = $pItems->passengerId; // //乘客id
$data_passager->longtrainno = $passengerId;
$jsonLanhaiData = new stdClass(); //澜海退票需要传递一些数据,尽量保存到这个里面。这样不用从翰特里面读取了。
$jsonLanhaiData->eOrderNumber = $update_data->ElectronicOrderNumber; //取票号
$data_passager->lanhaiData = json_encode($jsonLanhaiData);
//入库
$this->train_system_model->add_passagers($data_passager);
}
/****************************************************************************************/
//添加支付记录
$add_train_payment_data = new stdClass();
$add_train_payment_data->TOC_Memo = $update_data->ordernumber . '出票费';
$add_train_payment_data->TOC_VEI_SN = "33653";
//根据订单号获取cold_sn
$order_info = $this->train_system_model->get_order_info($update_data->ordernumber);
$cold_sn = $order_info->ts_cold_sn;
$add_train_payment_data->TOC_COLD_SN = $cold_sn;
$add_train_payment_data->TOC_TrainNumber = $update_data->trainNo;
$add_train_payment_data->TOC_DepartureDate = date('Y-m-d', strtotime($update_data->departTime));
$add_train_payment_data->TOC_TicketCost = $update_data->OrderTotleFee;
$passengerNum = $tItems->ticketCount; //车票数
if ($passengerNum>0){
$poundage = $passengerNum*10;
}else{
$poundage = 0;
}
$add_train_payment_data->poundage = $poundage; //手续费
$add_train_payment_data->FOI_TrainNetOrderNo = $update_data->ElectronicOrderNumber; //电子票号
//print_r($add_train_order_data);die();
$this->BIZ_train_model->add_train_payment($add_train_payment_data);
//记录供应商(瀚特)
$this->BIZ_train_model->update_cold_planvei_sn($cold_sn, '33653');
}
}
}
//更新订单信息(出票系统)
$this->train_system_model->update_orders($update_data);
}
}
/**
* 澜海退票锁单接口通过get方式获取前参数dataId
* 网前地址https://www.mycht.cn/info.php/apps/trainsystem/lanhaiticket/refundorderdetail?dataId=82033
*/
public function refundOrderDetail()
{
//获取客人ID
$dataId = $this->input->get_post("dataId");
$aes = $this->input->get_post("aes");
//根据客人ID获取退票数据
$passenger_data = $this->train_system_model->get_passenger_byId($dataId);
if (!empty($passenger_data)) {
//拼接发送的报文
$PostData = new stdClass();
$PostData->id = $passenger_data->tst_id; //dataId
$PostData->mainOrderId = $passenger_data->tst_ordernumber; //出票订单id如产生过线上改签成功则使用改签的dataId
$PostData->priority = 1; //0紧急退票1非紧急退票 默认1
//获取出票是保存的lanhaiData
if (!empty($passenger_data->tst_lanhaiData)){
$lanhaiData = json_decode($passenger_data->tst_lanhaiData);
}
$eOrderNumber = "";
if (isset($lanhaiData->eOrderNumber)){
$eOrderNumber = $lanhaiData->eOrderNumber; //取票号
}
$PostData->eOrderNumber = $eOrderNumber; //取票号
$PostData->passengerType = $passenger_data->tst_ticketype."票"; //票种
$PostData->passportType = $passenger_data->tst_identitytype; //"身份证"; //证件类型
$PostData->passportName = $passenger_data->tst_realname; //姓名
$PostData->passportNumber = $passenger_data->tst_numberid; //证件号
$PostData->departStation = $passenger_data->ts_fromstationame; //发站
$PostData->arriveStation = $passenger_data->ts_tostationame; //到站
$rPrice = $passenger_data->tst_ticketprice;
$PostData->ticketPrice = $rPrice; //票价(元)
$PostData->preRefundPrice = $rPrice; //原票价(元)
$PostData->percent = 100; //比例 默认100,我只取返回记录的价格。不管汉特的价格
$PostData->trainNo = $passenger_data->ts_checi ; //车次
//车厢及座位分解
$tst_seatdetail = $passenger_data->tst_seatdetail;
$carriageNo = "";
$seatNo = "";
if (strpos($tst_seatdetail,"车厢")!=false){
$arrSeat = explode("车厢",$tst_seatdetail);
$carriageNo = $arrSeat[0];
$seatNo = $arrSeat[1];
}
$PostData->carriageNo = $carriageNo; //车厢
$PostData->seatName = $passenger_data->tst_seatstype; //席别
$PostData->seatNo = $seatNo; //席位号
$strDt = $passenger_data->ts_startdate." ".$passenger_data->ts_startime;
$DepartureTime = date('Y-m-d H:i', strtotime($strDt));
// 出发时间前三十分钟的时间
$thirtyMinutesAgo = strtotime('-30 minutes', strtotime($DepartureTime));
$dealine = date('Y-m-d H:i', $thirtyMinutesAgo);
$PostData->ticketTime = $DepartureTime; //发车时间
$PostData->createTime = ""; //可空
$PostData->deadline = $dealine; //处理截止时间 建议最晚处理时间设置为发车前30分钟
$PostData->refundTime = ""; //可空
$PostData->getTicketTime = ""; //可空
$PostData->refundPrice = 0; //可空
$PostData->firstImage = null; //可空
$PostData->secondImage = null; //可空
$PostData->lockStatus = 0; //可空
$PostData->lockUser = ""; //可空
$PostData->status = 0; //可空
$PostData->longEOrderNumber = ""; //可空
$PostData->extendParams = ""; //拓展json对象
//加密方式显示
$this->load->library("aesLanhai");
$aesUnit = new Security();
$resultData = $aesUnit->encryptData(json_encode($PostData));
//$resultData = $aesUnit->decryptData($resultData); //测试加解密是否正常。
if ($aes == "false") {
//加个明文显示判断,用来检查数据
$resultData = json_encode($PostData, JSON_UNESCAPED_UNICODE);
}
echo $resultData;
} else {
$ResultNoticeResponse = new stdClass();
$ResultNoticeResponse->returnCode = -1;
$ResultNoticeResponse->success = false;
$ResultNoticeResponse->returnMsg = "dataId错误";
echo json_encode($ResultNoticeResponse);
}
}
/**
* 澜海退票返回信息
* 网前URLhttps://www.mycht.cn/info.php/apps/trainsystem/lanhaiticket/refundorderresult/
*/
public function refundOrderResult()
{
$back_json = file_get_contents('php://input');
log_message('error', '澜海退票回调信息:' . $back_json);
$lanhai_backdata = json_decode($back_json);
if (!empty($lanhai_backdata)) {
$dataId = $lanhai_backdata->id;
//根据客人ID获取退票数据
$passenger_data = $this->train_system_model->get_passenger_byId($dataId);
$ResultNoticeResponse = new stdClass();
if (!empty($passenger_data)) {
$ResultNoticeResponse->retCode = 0;
$ResultNoticeResponse->success = true;
$ResultNoticeResponse->message = "处理成功!";
echo json_encode($ResultNoticeResponse);
//处理回调的内容,保存到本地及翰特
$update_data = new stdClass();
$update_data->ServiceName = '';
$update_data->ordernumber = '';
$update_data->seatsinfo = '';
$update_data->TicketCheck = '';
$update_data->bookcallback = '';
$update_data->confirmcallback = '';
$update_data->returncallback = '';
$update_data->OrderTotleFee = 0;
$update_data->ElectronicOrderNumber = '';
$update_data->reschedulecallback = '';
$update_data->OrderTicketTime = '';
//新字段
$update_data->operateTradeNo ="";
$update_data->ordernumber = $passenger_data->tst_ordernumber;
$passpager_info = new stdClass();
$passpager_info->returncallback = $back_json;
$passpager_info->ordernumber = $passenger_data->tst_ordernumber;
$passpager_info->tst_id = $dataId; //乘客ID用来更新
//回调的数据正确,开始判断成功还是失败。
if (isset($lanhai_backdata->refundPrice)){ //如果有退款金额,说明退票成功
//退票成功
$update_data->OrderStatus = '7';
//退票时还需要单独对对每个乘客存储回调信息
$passpager_info->status = '7';
$refundPrice = $lanhai_backdata->refundPrice; //退款金额
$update_data->ErrorMsg = "退票成功,"."退票金额:".$refundPrice;
//退票手续费保存到数据库
//翰特添加退款记录
$returnticket = new stdClass();
$return_order = $update_data->ordernumber;
$returnticket->TOC_VEI_SN = "33653";
//根据订单号获取cold_sn
$cold_sn = $passenger_data->ts_cold_sn;
$returnSuccTime = date("Y-m-d H:i:s");
$memo = $return_order.'_退票成功_' . $dataId; //退票集合信息 ,用$dataId是为了标识唯一性
$returnticket->TOC_Memo = $memo;
$returnticket->TOC_COLD_SN = $cold_sn;
$returnticket->TOC_TrainNumber = $passenger_data->ts_checi;
$returnticket->TOC_DepartureDate = $passenger_data->ts_startdate;
$returnticket->TOC_TicketCost = -15;
//print_r($add_train_payment_data);die();
$this->BIZ_train_model->returnticket_train($returnticket);
}else{
//退票失败
$update_data->OrderStatus = '8';
//失败也保存下信息
$passpager_info->status = '8';
$update_data->ErrorMsg = "退票失败:".$lanhai_backdata->failReason;
}
$this->train_system_model->return_update_passager_lanhai($passpager_info);
$update_data->returncallback = $back_json;
//更新订单信息(出票系统)
$this->train_system_model->update_orders($update_data);
} else {
$ResultNoticeResponse->returnCode = -1;
$ResultNoticeResponse->success = false;
$ResultNoticeResponse->returnMsg = "退票订单数据没找到!";
echo json_encode($ResultNoticeResponse);
}
}
}
/**
* 澜海退款回调信息
* 网前URLhttps://www.mycht.cn/info.php/apps/trainsystem/lanhaiticket/refundpriceresult/
*/
public function refundPriceResult(){
$back_json = file_get_contents('php://input');
log_message('error', '澜海退款回调信息:' . $back_json);
$lanhai_backdata = json_decode($back_json);
if (!empty($lanhai_backdata))
{
$id = $lanhai_backdata->id; //线上低改高后的订单为dataId其他情况为出票的mainOrderId
//先判断是否是低改高的订单,目前我们没有改签。
if (1==2){
//这里是改签的操作,目前没有
}else{
//这里的ID是mainOrderId 出票订单ID
$order_info = $this->train_system_model->get_order_info($id);
if (!empty($order_info)){
$ResultNoticeResponse = new stdClass();
$ResultNoticeResponse->retCode = 0;
$ResultNoticeResponse->success = true;
$ResultNoticeResponse->message = "处理成功!";
echo json_encode($ResultNoticeResponse); //找到订单 对应数据就返回处理成功的结果,后面的错误不关澜海那边的事。
//处理回调的内容,保存到本地及翰特
$update_data = new stdClass();
$update_data->ServiceName = '';
$update_data->ordernumber = '';
$update_data->seatsinfo = '';
$update_data->TicketCheck = '';
$update_data->bookcallback = '';
$update_data->confirmcallback = '';
$update_data->returncallback = '';
$update_data->OrderTotleFee = 0;
$update_data->ElectronicOrderNumber = '';
$update_data->reschedulecallback = '';
$update_data->OrderTicketTime = '';
//新字段
$update_data->operateTradeNo ="";
$isOnline = $lanhai_backdata->isOnline; //1线上退款0线下退款
if ($isOnline==1){
$refundType = "线上退款";
}else{
$refundType = "线下退款";
}
$refundTime = date("Y-m-d H:i:s"); //退款时间
$return_money = $lanhai_backdata->refundPrice; //退款金额,单位元
$refundId = $lanhai_backdata->refundId; //退款唯一id(幂等性)
$update_data->ordernumber = $order_info->ts_ordernumber;
$update_data->OrderStatus = '11'; //11是订单退款
$update_data->ErrorMsg = '退款:'.$refundType." 金额:".$return_money." time:". $refundTime;
$update_data->refundcallback = $back_json;
//翰特添加退款记录
$refund_train_payment = new stdClass();
$return_order = $order_info->ts_ordernumber;
$refund_train_payment->TOC_VEI_SN = "33653";
$cold_sn = $order_info->ts_cold_sn;
//print_r($order_info);
$memo = $return_order.'_'.$refundType. '_' . $refundId; //退款集合信息
$refund_train_payment->TOC_Memo = $memo;
$refund_train_payment->TOC_COLD_SN = $cold_sn;
$refund_train_payment->TOC_TrainNumber = $order_info->ts_checi;
$refund_train_payment->TOC_DepartureDate = $order_info->ts_startdate;
$refund_train_payment->TOC_TicketCost = -$return_money;
//print_r($add_train_payment_data);die();
$this->BIZ_train_model->refund_train_payment($refund_train_payment);
//更新订单信息(出票系统)
$this->train_system_model->update_orders($update_data);
}else{
$ResultNoticeResponse = new stdClass();
$ResultNoticeResponse->returnCode = -1;
$ResultNoticeResponse->success = false;
$ResultNoticeResponse->returnMsg = "订单对应数据没找到!";
echo json_encode($ResultNoticeResponse);
}
}
}
}
}
/* End of file lanhaiticket.php */

@ -55,15 +55,14 @@ class pages extends CI_Controller{
$list->cols_id=$cols_id;
}
// //查询聚合余额
// $back_data = GetPost_http("http://op.juhe.cn/trainTickets/balance.php?key=79f03107b921ef31310bd40a1415c1cb");
// $back_data = json_decode($back_data);
// if(!empty($back_data->result)){
// $list->balance = $back_data->result;
// }else{
// $list->balance = "NULL";
// }
$list->balance = "NULL";
//查询聚合余额
$back_data = GetPost_http("http://op.juhe.cn/trainTickets/balance.php?key=79f03107b921ef31310bd40a1415c1cb");
$back_data = json_decode($back_data);
if(!empty($back_data->result)){
$list->balance = $back_data->result;
}else{
$list->balance = "NULL";
}
// print_r(json_encode($list));
$this->load->view('common/header');
$this->load->view('homepage',$list);
@ -80,7 +79,6 @@ class pages extends CI_Controller{
$page = $this->input->get("page");
$order = $this->input->get("order");
$web_code = $this->input->get("web_code");
$channel = $this->input->get("channel");
$where = "1=1";//搜索条件
$page_parameter = "";//返回的分页条件参数
if(empty($page) or !is_numeric($page)){
@ -96,11 +94,6 @@ class pages extends CI_Controller{
$where = "BIZ_ConfirmLineInfo.COLI_WebCode='{$web_code}'";
$page_parameter = "web_code=".$web_code;
}
if (!empty($channel)){
$where = " InfoManager.dbo.trainsystem.ts_channel='{$channel}' ";
$page_parameter = " channel=".$channel;
}
//获取订单数据
$data = $this->train_system_model->get_order($page_size,$page,$where);
@ -245,237 +238,11 @@ class pages extends CI_Controller{
//账单导出页面
public function export(){
// if(get_cookie('dingname') == '' && get_cookie('dingunionid') == ''){
// redirect('/apps/dinglogin/login/?returnurl=/apps/trainsystem/pages/');
// }
if(get_cookie('dingname') == '' && get_cookie('dingunionid') == ''){
redirect('/apps/dinglogin/login/?returnurl=/apps/trainsystem/pages/');
}
$this->load->view('header');
$this->load->view('export');
$this->load->view('footer');
}
//澜海账单导出页面
public function lanhaiExport(){
$this->load->view('header');
$this->load->view('export_lanhai');
$this->load->view('footer');
}
//预售时间列表
public function presale_list(){
$page_size = 10;
$page = $this->input->get("page");
$stationcn = $this->input->get("stationcn");
$web_code = $this->input->get("web_code");
$where = "1=1";//搜索条件
$page_parameter = "";//返回的分页条件参数
if(empty($page) or !is_numeric($page)){
$page=0;
}
if(!empty($stationcn)){
$where = " TST_station_cn like '%{$stationcn}%' ";
$list["stationcn"] = $stationcn;
$page_parameter = "stationcn=".$stationcn;
}
//获取订单数据
$data = $this->BIZ_train_model->get_presale_list($page_size,$page,$where);
// print_r(json_encode($data));die();
$list["data"]=$data->list;
$this->load->library('pagination');
$config['base_url'] = site_url("/apps/trainsystem/pages/presale_list?{$page_parameter}");
$config['total_rows'] = $data->count;
$config['per_page'] = $page_size;
$config['page_query_string']=TRUE;
$config['query_string_segment']="page";
$config['cur_tag_open'] = '<li class="active"><a href="#">';
$config['cur_tag_close'] = '</a></li>';
$config['first_tag_open']=$config['last_tag_open']=$config['next_tag_open']=$config['prev_tag_open']=$config['num_tag_open']="<li>";
$config['first_tag_close']=$config['lasbt_tag_close']=$config['next_tag_close']=$config['prev_tag_close']=$config['num_tag_close']="</li>";
$this->pagination->initialize($config);
$list["page_link"]=$this->pagination->create_links();
$this->load->view('header');
$this->load->view('presale_list',$list);
$this->load->view('footer');
}
//预售时间编辑
public function presale_edit(){
$ordernumber = $tstid=$this->input->get("tstid");
if(empty($tstid)){
exit('参数错误');
}
//根据ID号查询信息
$saletime_detail = $this->BIZ_train_model->get_saletime_detail($tstid);
$data["info"] = $saletime_detail;
$this->load->view('header');
$this->load->view('presale_edit',$data);
$this->load->view('footer');
}
//预售时间编辑保存
public function presale_editsave(){
$TST_id = $this->input->get_post("TST_id");
$TST_station_cn = trim($this->input->get_post("TST_station_cn"));
$TST_saletime = trim($this->input->get_post("TST_saletime"));
$TST_station_code = trim($this->input->get_post("TST_station_code"));
$data = new stdClass();
$data->TST_id = $TST_id;
$data->TST_station_cn = $TST_station_cn;
$data->TST_saletime = $TST_saletime;
$data->TST_station_code = $TST_station_code;
$this->BIZ_train_model->update_saletime($data);
$rUrl = '<script type="text/javascript">';
$rUrl.= 'alert("修改完成,请查看修改后的信息!!"); window.location.href="/info.php/apps/trainsystem/pages/presale_list";'; // 弹出提示框
//$rUrl.= 'window.location.href="/info.php/apps/trainsystem/pages/presale_edit?tstid='+$TST_id+'";'; // 跳转到目标页面
$rUrl.= '</script>';
echo $rUrl;
}
//澜海查询信息
public function lanhaiMsg(){
$order = $this->input->get_post("order"); //订单号
$type = $this->input->get_post("type"); //出票,退票,账单等类型
$microtime = get_microtime(); //时间戳
//生成接口请求头参数
$timestamp = $microtime;
$appId = LANHAI_appId;
if ($type == "orderticket"){
$url = LANHAI_URL."api/open/get/orderDetails";
}else if ($type == "returnticket"){
$url = LANHAI_URL."api/open/get/orderRefundDetails";
}
//拼接发送的报文
$PostData = new stdClass();
$PostData->mainOrderId = $order;
$PostData->timestamp = $timestamp;
$PostData->appId = $appId;
$ResponseJson = GetPost_http($url,json_encode($PostData),'json');
//log_message('error','澜海出票详细信息:'.$ResponseJson);
$ResponseData = json_decode($ResponseJson);
if (isset($ResponseData->data)){
// //需要解密
$this->load->library("aesLanhai");
$aesUnit = new Security();
$data = json_decode($aesUnit->decryptData($ResponseData->data));
$result = array();
$this->handle_array($data,$type,$result);
$formattedJson = json_encode($result, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
echo "<pre>$formattedJson</pre>";
}else{
$ResultNoticeResponse = new stdClass();
$ResultNoticeResponse->returnCode = -1;
$ResultNoticeResponse->success = false;
$ResultNoticeResponse->returnMsg = "找不到订单数据!";
$formattedJson = json_encode($ResultNoticeResponse, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE);
echo $formattedJson;
}
}
//循环展示JSON
private function handle_array($arr,$type,&$array_to_fill){
foreach($arr as $key => $value){
if(is_array($value) || is_object($value)){
$array_to_fill[$key] = array();
$this->handle_array($value,$type, $array_to_fill[$key]);
}else{
if ($type=="orderticket"){ //出票特殊显示
if ($key == "passengerType"){
if ($value==0){
$value = "成人";
}else if($value == 1){
$value = "儿童";
}
}
if ($key == "certificateType"){
if ($value==1){
$value = "身份证";
}else if ($value == 2) {
$value = "护照";
}else if ($value == 7){
$value = "回乡证";
}else if ($value == 8 ){
$value = "台胞证";
}
}
if ($key == "status"){
switch ($value) {
case 0:
$value = "待出票";
break;
case 1:
$value = "锁定订单";
break;
case 2:
$value = "已出票";
break;
case 3:
$value = "超时订单";
break;
case 4:
$value = "已驳回";
break;
case 6:
$value = "出票超时";
break;
case 12:
$value = "锁单失败";
break;
default:
# code...
break;
}
}
}
$array_to_fill[$key] = $value;
}
}
}
public function presale_add(){
$this->load->view('header');
$this->load->view('presale_add');
$this->load->view('footer');
}
public function presale_addsave(){
$TST_station_cn = trim($this->input->get_post("TST_station_cn"));
$TST_saletime = trim($this->input->get_post("TST_saletime"));
$TST_station_code = trim($this->input->get_post("TST_station_code"));
$data = new stdClass();
$data->TST_station_cn = $TST_station_cn;
$data->TST_saletime = $TST_saletime;
$data->TST_station_code = $TST_station_code;
$this->BIZ_train_model->add_saletime($data);
$rUrl = '<script type="text/javascript">';
$rUrl.= 'alert("添加完成!!"); window.location.href="/info.php/apps/trainsystem/pages/presale_list";'; // 弹出提示框
$rUrl.= '</script>';
echo $rUrl;
}
}

@ -59,9 +59,6 @@ class returnorders extends CI_Controller{
case 'ctrip':
$this->ctripModel($ticket_data,$passenger_data);
break;
case 'lanhai':
$this->lanhaiModel($ticket_data,$passenger_data);
break;
}
}
@ -188,51 +185,6 @@ class returnorders extends CI_Controller{
echo '{"reason":"退票失败","status":"404"}';
}
}
/**
* 澜海退票,这里只是提交退票提交。没有具体退票信息
*/
function lanhaiModel($ticket_data,$passenger_data){
$microtime = get_microtime();
//生成接口请求头参数
$dataId = $passenger_data->tst_id;
$mainOrderId = $passenger_data->tst_ordernumber;
$timestamp = $microtime;
$appId = LANHAI_appId;
$url = LANHAI_URL."api/open/refund/order";
//拼接发送的报文
$PostData = new stdClass();
$PostData->dataId = $dataId;
$PostData->mainOrderId = $mainOrderId;
$PostData->timestamp = $timestamp;
$PostData->appId = $appId;
// print_r(json_encode($PostData));
// die();
$ResponseJson = GetPost_http($url,json_encode($PostData),'json');
log_message('error','澜海退票请求返回信息:'.$ResponseJson);
$ResponseData = json_decode($ResponseJson);
// print_r($ResponseData);
// die();
//退票请求成功后执行支付
if($ResponseData->code == 0 && $ResponseData->success){
echo '{"reason":"退票提交成功","status":"200"}';
}else{
if (isset($ResponseData->msg)){
$errMsg = $ResponseData->msg;
}else{
$errMsg = "";
}
header("HTTP/1.1 404 Not Found");
echo '{"reason":"退票提交失败"'.$errMsg.',"status":"404"}';
}
}
//改签退票
public function returnreschedule(){

@ -421,4 +421,8 @@ function pkcs5_unpad($text) {
?>

@ -1,51 +0,0 @@
<?php
class aesLanhai{}
/**
* 使用旧的mcrypt来写澜海加解密类
*/
class Security {
private $key;
public function __construct() {
$CI =& get_instance();
$CI->load->config();
$this->key = LANHAI_KEY;
//$this->key = "999c1DtJJ4pEbcxeEqJBKw==";
}
public function encryptData($input) {
$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
$input = Security::pkcs5_pad($input, $size);
$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
mcrypt_generic_init($td, $this->key, $iv);
$data = mcrypt_generic($td, $input);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
$data = base64_encode($data);
return $data;
}
private static function pkcs5_pad ($text, $blocksize) {
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}
public function decryptData($sStr) {
$decrypted= mcrypt_decrypt(
MCRYPT_RIJNDAEL_128,
$this->key,
base64_decode($sStr),
MCRYPT_MODE_ECB
);
$dec_s = strlen($decrypted);
$padding = ord($decrypted[$dec_s-1]);
$decrypted = substr($decrypted, 0, -$padding);
return $decrypted;
}
}

@ -23,7 +23,6 @@ class BIZ_train_model extends CI_Model {
,(case ISDATE(BPE_PassExpdate)
when 1 then CONVERT(VARCHAR(10),CONVERT(datetime,BPE_PassExpdate,120),120)
else null end) as BPE_PassExpdate
,(select top 1 COI_Code from COuntryInfo where COI_SN=bbp.BPE_Nationality) as BPE_Nationality
FROM BIZ_BookPeople bbp
WHERE BPE_SN in(".$bpe_sn.")
";
@ -56,8 +55,6 @@ class BIZ_train_model extends CI_Model {
,(case ISDATE(BPE_PassExpdate)
when 1 then CONVERT(VARCHAR(10),CONVERT(datetime,BPE_PassExpdate,120),120)
else null end) as BPE_PassExpdate
,(select top 1 COI_Code from COuntryInfo where COI_SN=bbp.BPE_Nationality) as BPE_Nationality
,(select top 1 COI_ID from COuntryInfo where COI_SN=bbp.BPE_Nationality) as Nationality
FROM BIZ_BookPeople bbp
WHERE EXISTS(
SELECT TOP 1 1
@ -326,104 +323,13 @@ class BIZ_train_model extends CI_Model {
$query = $this->HT->query($sql);
return $query->result();
}
//获取能够自动出票的订单列表2.0版本 20240130 zp (coli_state 11 我的订单 8 已收款 63 出票中 13 新订单(已支付))
function auto_check_ticket_2(){
$sql = "SELECT top 10 COLD_SN ,coli_id,COLD_SPFS,COLI_State,(SELECT TOP 1 GAI_Type FROM BIZ_GroupAccountInfo WHERE GAI_COLI_SN=bcli.COLI_SN AND ISNULL(DeleteFlag,0)=0) as GAI_Type
,cold_startdate
,isnull((select top 1 ts_autotimes from InfoManager.dbo.trainsystem where ts_cold_sn= bcld.cold_sn order by ts_id desc),0) as ts_autotimes
,(select top 1 ts_autolasttime from InfoManager.dbo.trainsystem where ts_cold_sn= bcld.cold_sn order by ts_id desc) as ts_autolasttime
FROM BIZ_ConfirmLineInfo bcli
inner join BIZ_ConfirmLineDetail bcld on COLD_COLI_SN=COLI_SN
INNER JOIN dbo.OperatorInfo ON OPI_SN=COLI_OPI_ID and OPI_DEI_SN=10 AND ISNULL(dbo.OperatorInfo.DeleteFlag,0)=0
WHERE bcli.COLI_ServiceType = '2'
AND bcli.COLI_State in ('13','63')
AND EXISTS(SELECT sum(GAI_SQJE) FROM BIZ_GroupAccountInfo WHERE GAI_COLI_SN=bcli.COLI_SN AND isnull(DeleteFlag,0) = 0 having (bcli.COLI_Price - Sum(GAI_SQJE)) <= 20 AND (Sum(GAI_SQJE) - bcli.COLI_Price) >= -20 )
AND isnull(bcli.DeleteFlag,0) = 0
AND isnull(bcld.DeleteFlag,0) = 0
AND COLD_SPFS < 2
AND ( NOT EXISTS (
SELECT TOP 1 1
FROM InfoManager.dbo.trainsystem
WHERE ts_cold_sn = COLD_SN
) or EXISTS(select Top 1 1 from InfoManager.dbo.trainsystem WHERE ts_cold_sn = COLD_SN
and (ts_status = '5' or ts_status='11')
and ts_cold_sn not in (select ts_cold_sn from InfoManager.dbo.trainsystem
where (ts_status='4' or ts_status='3' or ts_status='2' or ts_status='10') and ts_cold_sn = COLD_SN) ))
AND COLD_SN NOT IN ( select FOI_COLD_SN from BIZ_FlightsOrderInfo where FOI_COLD_SN=COLD_SN and FOI_TrainNetOrderNo>'')
and (COLD_StartDate between GETDATE() and CONVERT(varchar(100),GETDATE()+14,23)+' 23:59')
and isnull((select top 1 ts_autotimes from InfoManager.dbo.trainsystem where ts_cold_sn= bcld.cold_sn order by ts_id desc),0)<4
order by CONVERT(date,cold_startdate),ISNULL(CAST((select TOP 1 TST_saletime from TrainSaleTime where TST_station_cn = (
SELECT TOP 1 TRS_StationCN
FROM TrainStation
WHERE TRS_Code = (select top 1 DepartAirport from BIZ_FlightsOrderInfo where FOI_COLD_SN = cold_sn)
and ISNULL(TRS_StationCN,'')<>''
)) as Time),'18:00')
";
$query = $this->HT->query($sql);
return $query->result();
}
public function get_saletime($station){
$sql = 'select TST_saletime from TrainSaleTime where TST_station_cn = ?';
$query = $this->HT->query($sql,$station);
return $query->row();
}
//预售时间列表
public function get_presale_list($pagesize=10,$page=0,$where="1=1"){
$data=new StdClass();
//获取总条数
$sql="SELECT COUNT(*) AS count FROM TrainSaleTime
WHERE
{$where}
";
$query = $this->HT->query($sql);
$count=$query->result();
$data->count=$count[0]->count;
$sql="SELECT TOP {$pagesize} TST_id,TST_station_cn,TST_station_code,TST_saletime,TST_updatetime from TrainSaleTime
WHERE
TST_id not in ( select top {$page} TST_id from TrainSaleTime where {$where} Order by isnull(TST_updatetime,0) desc,TST_id desc)
AND
{$where}
ORDER BY isnull(TST_updatetime,0) desc,TST_id desc ";
$query = $this->HT->query($sql);
$data->list=$query->result();
return $data;
}
//预售时间详细
public function get_saletime_detail($tstid){
$sql = 'select * from TrainSaleTime where TST_id = ?';
$query = $this->HT->query($sql,$tstid);
return $query->row();
}
//更新预售时间
public function update_saletime($data){
$sql = "update TrainSaleTime
set
TST_station_cn = '{$data->TST_station_cn}',
TST_saletime = '{$data->TST_saletime}',
TST_station_code = '{$data->TST_station_code}',
TST_updatetime = getdate()
where TST_id = '{$data->TST_id}' ";
$query = $this->HT->query($sql);
}
//添加预售时间
public function add_saletime($data){
$sql = " insert into TrainSaleTime (TST_station_cn,TST_saletime,TST_station_code,TST_updatetime)
values (?,?,?,getdate()) ";
$query = $this->HT->query($sql ,array($data->TST_station_cn,$data->TST_saletime,$data->TST_station_code));
}
//筛选符合发送邮件的订单
public function auto_sendmail(){
$time = date('Y-m-d',time());
@ -665,32 +571,4 @@ class BIZ_train_model extends CI_Model {
$sql = "delete from trainsystem where ts_id = '860'";
$query = $this->INFO->query($sql);
}
//添加澜海账单到汉特
function add_lanhai_bill($data){
//2.添加
$sql2 = "insert into BIZ_Platform_BookingInfo_XC (
XC_BillSN,XC_BillDate,XC_OrderID,XC_VEIName,XC_From,XC_BillType,XC_Cost,XC_Memo,XC_Creator,XC_CreateDate
) values (
'{$data->BillSn}',
'{$data->BillDate}',
'{$data->OrderId}',
'{$data->VEIName}',
'{$data->From}',
'{$data->BillType}',
'{$data->Cost}',
'{$data->Memo}',
'29',
getdate()
)";
$query = $this->HT->query($sql2);
}
//删除重复数据
function del_lanhai_bill($BillSn){
//1.删除数据 ,防止重复,根据 XC_BillSn
$sql = "delete from BIZ_Platform_BookingInfo_XC where XC_BillSn = '{$BillSn}' and XC_VEIName='9082253783' ";
$query=$this->HT->query($sql);
}
}

@ -38,10 +38,8 @@ class train_system_model extends CI_Model {
InfoManager.dbo.trainsystem.ts_sendmail,
InfoManager.dbo.trainsystem.ts_m_sn,
InfoManager.dbo.trainsystem.ts_channel,
InfoManager.dbo.trainsystem.ts_autotimes,
BIZ_ConfirmLineInfo.COLI_ID,
BIZ_ConfirmLineInfo.COLI_WebCode
,(select top 1 OPI2_Name from OperatorInfo2 where OPI2_OPI_SN = coli_opi_id and OPI2_LGC=2) as OPIName
FROM
InfoManager.dbo.trainsystem
LEFT JOIN
@ -63,9 +61,7 @@ class train_system_model extends CI_Model {
AND
{$where}
ORDER BY InfoManager.dbo.trainsystem.ts_subtime DESC";
// echo($sql);
// die();
$query = $this->HT->query($sql);
$data->list=$query->result();
return $data;
@ -99,10 +95,7 @@ class train_system_model extends CI_Model {
ts_runtime,
ts_checi,
ts_channel,
ts_isauto,
ts_autotimes,
ts_autolasttime,
ts_lanhaiData
ts_isauto
)
VALUES(
'{$data->cold_sn}',
@ -121,10 +114,7 @@ class train_system_model extends CI_Model {
'{$data->runtime}',
'{$data->checi}',
'{$data->channel}',
'{$data->isauto}',
'{$data->ts_autotimes}',
getdate(),
'{$data->lanhaiData}'
'{$data->isauto}'
)
";
//echo $sql;
@ -132,7 +122,7 @@ class train_system_model extends CI_Model {
}
public function ticketfrom($ts_ordernumber){
$sql = "select ts_channel,ts_cold_sn,ts_ordernumber,ts_lanhaiData from trainsystem where ts_ordernumber = ?";
$sql = "select ts_channel,ts_cold_sn,ts_ordernumber from trainsystem where ts_ordernumber = ?";
$query = $this->INFO->query($sql,array($ts_ordernumber));
return $query->row();
}
@ -156,8 +146,7 @@ class train_system_model extends CI_Model {
tst_seatstype = '{$data->seatype}',
tst_seatdetail = '{$data->seatdetail}',
tst_status = '{$data->status}',
tst_LongTrainNo = '{$data->longtrainno}',
tst_lanhaiData = '{$data->lanhaiData}'
tst_LongTrainNo = '{$data->longtrainno}'
where
tst_ordernumber = '{$data->ordernumber}'
and
@ -175,8 +164,7 @@ class train_system_model extends CI_Model {
tst_ticketprice,
tst_seatstype,
tst_seatdetail,
tst_LongTrainNo,
tst_lanhaiData
tst_LongTrainNo
)VALUES(
'{$data->ordernumber}',
'{$data->status}',
@ -187,8 +175,7 @@ class train_system_model extends CI_Model {
'{$data->ticketprice}',
'{$data->seatype}',
'{$data->seatdetail}',
'{$data->longtrainno}',
'{$data->lanhaiData}'
'{$data->longtrainno}'
)
";
$query =$this->INFO->query($sql);
@ -246,11 +233,6 @@ class train_system_model extends CI_Model {
$where .= "ts_reschedulecallback = '{$data->reschedulecallback}',";
}
if (!empty($data->addOrderData)) {
//失败了保存提交的订单数据
$where .= " ts_addOrderData = '{$data->addOrderData}',";
}
$sql ="
update trainsystem
set
@ -264,7 +246,6 @@ class train_system_model extends CI_Model {
$query = $this->INFO->query($sql);
}
//更新乘客表信息
public function update_passpager_info($data){
@ -301,23 +282,6 @@ class train_system_model extends CI_Model {
$query = $this->INFO->query($sql);
}
/**
* 更新退票后的乘客信息澜海退票返回乘客的ID其它信息没有。
*/
public function return_update_passager_lanhai($data){
$sql = "update
trainsystem_tickets
set
tst_status = '{$data->status}',
tst_returncallback = '{$data->returncallback}',
tst_lasteditdate = getdate()
where
tst_id = '{$data->tst_id}'
";
$query = $this->INFO->query($sql);
}
//获取订单出票状态
public function get_tickets_info($cold_sn){
$sql = "select top 1 ts_status,ts_ordernumber,ts_elecnumber,ts_seatsinfo from trainsystem where ts_cold_sn = ? and ts_status in ('4','7') order by ts_subtime desc";
@ -363,43 +327,4 @@ class train_system_model extends CI_Model {
return false;
}
}
//获取出票次数,不管是自动还是手动。
public function get_autotimes($cold_sn){
$sql = "select COUNT(*) as countauto from InfoManager.dbo.trainsystem where ts_cold_sn = ? and ts_status=5";
$query = $this->INFO->query($sql, $cold_sn);
return $query->row();
}
/**
* 根据客人ID获取客人信息及出票信息
*/
public function get_passenger_byId($tst_id){
$sql = "select top 1 * from trainsystem_tickets inner join trainsystem on tst_ordernumber=ts_ordernumber and tst_id = ?";
$query = $this->INFO->query($sql,array($tst_id));
return $query->row();
}
//根据订单号获取外联名称
public function get_OPIName($orderNumber){
$sql = "select top 1
(SELECT TOP 1 OPI2_Name
FROM OperatorInfo2
WHERE OPI2_OPI_SN = coli_opi_id
AND OPI2_LGC = 2
) AS OPIName,
(select top 1 Gri_No from GRoupInfo where GRI_SN=BIZ_ConfirmLineInfo.COLI_GRI_SN) as griName
FROM InfoManager.dbo.trainsystem
INNER JOIN BIZ_ConfirmLineInfo ON BIZ_ConfirmLineInfo.COLI_SN = (
SELECT COLD_COLI_SN
FROM BIZ_ConfirmLineDetail
WHERE COLD_SN = InfoManager.dbo.trainsystem.ts_cold_sn
)
where ts_ordernumber=?
";
$query = $this->HT->query($sql,array($orderNumber));
return $query->row();
}
}

@ -5,8 +5,8 @@
</div>
<div class="panel-body">
<form style="width: 80%;" action="http://www.mycht.cn/info.php/apps/trainsystem/api/export_excel/" method="post">
<input type="text" name="from_date" class="date" value="<?php echo empty($from_date)?"":$from_date;?>" autocomplete="off" placeholder="开始日期">&nbsp;&nbsp;&nbsp;&nbsp;
<input type="text" name="to_date" class="date" value="<?php echo empty($to_date)?"":$to_date;?>" autocomplete="off" placeholder="结束日期">
<input type="text" name="from_date" class="date" value="<?php echo empty($from_date)?"":$from_date;?>" autocomplete="off">
<input type="text" name="to_date" class="date" value="<?php echo empty($to_date)?"":$to_date;?>" autocomplete="off">
审核状态:<input type="checkbox" <?php echo empty($examine)?"":"checked";?> name="examine" />&nbsp;&nbsp;&nbsp;
<button type="submit" id="sub" class="btn btn-warning btn-sm"><span class="glyphicon glyphicon-download-alt"></span> Download</button>
</form>

@ -1,81 +0,0 @@
<div style="width:90%;margin:30px auto;">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">交易记录导出&nbsp;<a style="margin-left:50px;" target='_blank' href="<?php echo site_url('apps/train/index/ht_order_list');?>">订单列表>></a> </h3>
</div>
<div class="panel-body">
<form style="width: 80%;" action="/info.php/apps/trainsystem/api/lanhai_export_excel/" method="post">
<input type="text" name="from_date" class="date" value="<?php echo empty($from_date)?"":$from_date;?>" autocomplete="off" placeholder="开始日期">&nbsp;&nbsp;&nbsp;&nbsp;
<input type="text" name="to_date" class="date" value="<?php echo empty($to_date)?"":$to_date;?>" autocomplete="off" placeholder="结束日期">
显示列表:<input type="checkbox" <?php echo empty($examine)?"":"checked";?> name="examine" />&nbsp;&nbsp;|&nbsp;&nbsp;
导入汉特:<input type="checkbox" <?php echo empty($importht)?"":"checked";?> name="importht" />&nbsp; <a href="javascript:void(0);" title="勾选此项后,会以开始时间和结束时间为编码把数据导入汉特。&#10 注意:为了防止重复 请不要有同一时间段的导入。比如8月1日到30日导入然后8月1日到29日又导入一次。"><i
class="text-muted glyphicon glyphicon-question-sign"></i></a>&nbsp;&nbsp;&nbsp;
<button type="submit" id="sub" class="btn btn-warning btn-sm"><span class="glyphicon glyphicon-download-alt"></span> Download</button>
&nbsp;<a href="javascript:void(0);" title="什么都不选点击此按钮下载EXCEL账单选择显示列表就只显示数据。&#10 选择导入汉特后会单独另外进行一个导入的操作。"><i
class="text-muted glyphicon glyphicon-question-sign"></i></a>
</form>
<p style="margin: 0 0 10px; width: 200px; float: left; line-height: 30px;">
<!-- <table class="table table-hover" >
<thead>
<tr><th>时间</th><th>信息</th><th>变化值</th><th>团名</th><th>外联</th></tr>
</thead>
<tbody>
<tr data-id="161130252" title="Popover title" data-container="body" data-toggle="popover" data-placement="top" data-content="顶部的 Popover 中的一些内容">
<td>2016-12-01 11:18:28</td>
<td> 票款(有充值)</td>
<td>-1106.00</td>
<td>R161228-BYW161130252</td>
<td>李毅文</td>
</tr>
</tbody>
</table> -->
<div class="row <?php echo empty($examine)?"hidden":"";?>" style="width:90%;margin:0 auto;">
<div class="">
<table class="table table-hover" id="list_table">
<thead>
<tr><th>日期</th><th>类型</th><th>金额</th><th>订单号</th><th>外联</th><th>团号</th><th>乘客</th></tr>
</thead>
<tbody>
<?php $total=0; $count=0; foreach ($data as $key => $value) {?>
<tr data-id="<?php echo $value["mainOrderId"];?>" title="Popover title" data-container="body" data-toggle="popover" data-placement="top" data-content="顶部的 Popover 中的一些内容">
<td><?php echo $value["saveDay"];?></td><td><?php echo $value["type"];?></td><td><?php echo $value["price"];?></td><td><?php echo $value["mainOrderId"];?></td>
<td><?php echo $value["wl"];?></td><td><?php echo $value["griName"];?></td><td><?php echo $value["passengerName"];?></td>
</tr>
<?php $total += $value["price"]; $count+=1; }?>
<tr><td colspan="2">总额:</td><td colspan="2"><?php echo($total) ?></td><td>记录数:</td><td colspan="2"><?php echo($count) ?></td></tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</div>
<div class="popover fade top in" role="tooltip" id="popover" style="width:auto;max-width: 100% !important;top: 139.6px; left: 50%; display: none;">
<div class="arrow"></div>
<h3 class="popover-title">我的支付</h3>
<div class="popover-content">
<table class="table" id="my_pay_data">
<thead>
<tr>
<td>序号</td><td>车次</td><td>出发日期</td><td>价格</td><td>备注</td>
</tr>
</thead>
<tbody>
</tbody>
</table>
</div>
</div>
<script>
$(function(){
$(".date").datepicker({
'dateFormat': 'yy-mm-dd',
'autoclose': true
});
})
</script>

@ -77,8 +77,7 @@ function selseat(seat){
<div style="width:90%;margin:30px auto;">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">翰特订单号&nbsp;<a style="margin-left:50px;" target='_blank' href="<?php echo site_url('apps/trainsystem/pages/order_list');?>">订单列表>></a><a style="margin-left:50px;" target='_blank' href="<?php echo site_url('apps/trainsystem/pages/presale_list');?>">预售时间维护>></a> <a style="margin-left:50px;" target='_blank' href="<?php echo site_url('apps/trainsystem/pages/lanhaiExport');?>">澜海导出账单>></a><span style="margin-left:200px;">版本V2.0</span><!--<span class="pull-right">聚合余额(RMB)<?php echo $balance;?></span> --></h3>
<!-- <a style="margin-left:50px;" target='_blank' href="<?php echo site_url('apps/trainsystem/pages/reschedule');?>">携程改签>></a> -->
<h3 class="panel-title">翰特订单号&nbsp;<a style="margin-left:50px;" target='_blank' href="<?php echo site_url('apps/trainsystem/pages/order_list');?>">订单列表>></a><a style="margin-left:50px;" target='_blank' href="<?php echo site_url('apps/trainsystem/pages/reschedule');?>">携程改签>></a><a style="margin-left:50px;" target='_blank' href="<?php echo site_url('apps/trainsystem/pages/export');?>">导出交易记录>></a> <span style="margin-left:200px;">版本V2.0</span><span class="pull-right">聚合余额(RMB)<?php echo $balance;?></span></h3>
</div>
<div class="panel-body">
<form style="width: 300px;float: left;" action="/info.php/apps/trainsystem/pages/index/" method="post">
@ -138,7 +137,6 @@ function selseat(seat){
<th style="text-align:center;">年龄类型</th>
<th style="text-align:center;">出生年月</th>
<th style="text-align:center;">证件有效期</th>
<th style="text-align:center;">国籍</th>
</tr>
</thead>
<tbody>
@ -155,7 +153,6 @@ function selseat(seat){
<td><?php echo $p->BPE_GuestType==1?"成人":($p->BPE_GuestType==2?"儿童":"婴儿");?></td>
<td><?php echo $p->BPE_BirthDate;?></td>
<td><?php echo $p->BPE_PassExpdate;?></td>
<td><?php echo $p->Nationality . "(".$p->BPE_Nationality .")"; ?></td>
</tr>
<?php endforeach;?>
<tr style="text-align:;">
@ -299,7 +296,7 @@ function selseat(seat){
</tr>
<tr style="text-align:;">
<td>
<button type="button" class="btn btn-success checked_pay" data-order="<?php echo $v->train->FOI_COLD_SN;?>">澜海订票</button>
<button type="button" class="btn btn-success checked_pay" data-order="<?php echo $v->train->FOI_COLD_SN;?>">聚合订票</button>
</td>
<td colspan="4" class="biaoqian"><span class="back_mes" style="color:red;line-height: 30px;"></span>
</td>
@ -411,7 +408,7 @@ function selseat(seat){
var cold_sn = $(this).attr('data-order');
var istanding = $('input[name="istanding_'+cold_sn+'"]').is(':checked');
url2+=$(this).attr("data-order")+"&people="+people_sn+"&selectseat="+selectseat+"&type=lanhai&istanding="+istanding;
url2+=$(this).attr("data-order")+"&people="+people_sn+"&selectseat="+selectseat+"&type=juhe&istanding="+istanding;
var THIS=$(this);
THIS.parent().parent().find(".back_mes").html(" ");//清空提示
@ -423,7 +420,7 @@ function selseat(seat){
},
success:function(data){
THIS.removeAttr("disabled");
THIS.html("澜海订票");
THIS.html("聚合订票");
var str = "<a href='http://www.mycht.cn/info.php/apps/trainsystem/pages/order?order="+data.order+"' target='_blank'>"+data.mes+"</a>";
THIS.parent().parent().find(".back_mes").html(str);

@ -1,181 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<?mso-application progid="Excel.Sheet"?>
<Workbook xmlns="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:o="urn:schemas-microsoft-com:office:office"
xmlns:x="urn:schemas-microsoft-com:office:excel"
xmlns:ss="urn:schemas-microsoft-com:office:spreadsheet"
xmlns:html="http://www.w3.org/TR/REC-html40">
<DocumentProperties xmlns="urn:schemas-microsoft-com:office:office">
<Author>c21</Author>
<LastAuthor>c21</LastAuthor>
<Created>2024-08-07T01:21:46Z</Created>
<LastSaved>2024-08-07T01:38:10Z</LastSaved>
<Version>1.00</Version>
</DocumentProperties>
<ExcelWorkbook xmlns="urn:schemas-microsoft-com:office:excel">
<WindowHeight>9630</WindowHeight>
<WindowWidth>21555</WindowWidth>
<WindowTopX>0</WindowTopX>
<WindowTopY>90</WindowTopY>
<ProtectStructure>False</ProtectStructure>
<ProtectWindows>False</ProtectWindows>
</ExcelWorkbook>
<Styles>
<Style ss:ID="Default" ss:Name="Normal">
<Alignment ss:Vertical="Center"/>
<Borders/>
<Font ss:FontName="宋体" x:CharSet="134" ss:Size="11" ss:Color="#000000"/>
<Interior/>
<NumberFormat/>
<Protection/>
</Style>
<Style ss:ID="m58993952">
<Alignment ss:Horizontal="Right" ss:Vertical="Center" ss:WrapText="1"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="微软雅黑" x:CharSet="134" x:Family="Swiss" ss:Size="11"
ss:Color="#000000"/>
</Style>
<Style ss:ID="m58993972">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="微软雅黑" x:CharSet="134" x:Family="Swiss" ss:Size="20"
ss:Color="#000000" ss:Bold="1"/>
</Style>
<Style ss:ID="m58993992">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="微软雅黑" x:CharSet="134" x:Family="Swiss" ss:Size="11"
ss:Color="#000000"/>
</Style>
<Style ss:ID="s78">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="微软雅黑" x:CharSet="134" x:Family="Swiss" ss:Color="#000000"/>
</Style>
<Style ss:ID="s79">
<Alignment ss:Horizontal="Center" ss:Vertical="Center"/>
<Borders>
<Border ss:Position="Bottom" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Left" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Right" ss:LineStyle="Continuous" ss:Weight="1"/>
<Border ss:Position="Top" ss:LineStyle="Continuous" ss:Weight="1"/>
</Borders>
<Font ss:FontName="微软雅黑" x:CharSet="134" x:Family="Swiss" ss:Color="#000000"/>
<NumberFormat ss:Format="General Date"/>
</Style>
</Styles>
<Worksheet ss:Name="Sheet1">
<?php $num=count($arr);?>
<Table ss:ExpandedColumnCount="7" ss:ExpandedRowCount="<?php echo $num+7;?>" x:FullColumns="1"
x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="13.5">
<Column ss:AutoFitWidth="0" ss:Width="115.5"/>
<Column ss:AutoFitWidth="0" ss:Width="111"/>
<Column ss:AutoFitWidth="0" ss:Width="111"/>
<Column ss:AutoFitWidth="0" ss:Width="100.5"/>
<Column ss:AutoFitWidth="0" ss:Width="62.25"/>
<Column ss:AutoFitWidth="0" ss:Width="100.5"/>
<Column ss:AutoFitWidth="0" ss:Width="203.25"/>
<Row ss:AutoFitHeight="0">
<Cell ss:MergeAcross="6" ss:MergeDown="1" ss:StyleID="m58993952"><Data
ss:Type="String">三亚澜海商旅服务有限公司&#10;地址海南省三亚市崖州区崖州湾科技城雅布伦产业园5号楼3楼310室&#10;开户银行:三亚惠民村镇银行&#10;银行账号2019 0379 3100 12&#10;</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="99.75"/>
<Row ss:AutoFitHeight="0" ss:Height="42">
<Cell ss:MergeAcross="6" ss:StyleID="m58993972"><Data ss:Type="String">桂林海纳国际旅行社有限公司火车票对账文件</Data></Cell>
</Row>
<Row ss:AutoFitHeight="0" ss:Height="16.5">
<Cell ss:StyleID="s78"><Data ss:Type="String">账单日期</Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String">账单类型</Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String">结算金额</Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String">订单号</Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String">外联</Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String">团号</Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String">乘客</Data></Cell>
</Row>
<?php for($i=$num-1;$i>=0;$i--){?>
<Row ss:AutoFitHeight="0" ss:Height="16.5">
<Cell ss:StyleID="s79"><Data ss:Type="String"><?php echo $arr[$i]["saveDay"];?></Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String"><?php echo $arr[$i]["type"];?></Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String"><?php echo $arr[$i]["price"];?></Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String"><?php echo $arr[$i]["mainOrderId"];?></Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String"><?php echo $arr[$i]["wl"];?></Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String"><?php echo $arr[$i]["griName"];?></Data></Cell>
<Cell ss:StyleID="s78"><Data ss:Type="String"><?php echo $arr[$i]["passengerName"];?></Data></Cell>
</Row>
<?php }?>
<Row ss:AutoFitHeight="0" ss:Height="36">
<Cell ss:MergeAcross="6" ss:StyleID="m58993992"><Data ss:Type="String"></Data></Cell>
</Row>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<Unsynced/>
<Selected/>
<Panes>
<Pane>
<Number>3</Number>
<ActiveRow>4</ActiveRow>
<ActiveCol>4</ActiveCol>
</Pane>
</Panes>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
<Worksheet ss:Name="Sheet2">
<Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="13.5">
<Row ss:AutoFitHeight="0"/>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<Unsynced/>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
<Worksheet ss:Name="Sheet3">
<Table ss:ExpandedColumnCount="1" ss:ExpandedRowCount="1" x:FullColumns="1"
x:FullRows="1" ss:DefaultColumnWidth="54" ss:DefaultRowHeight="13.5">
<Row ss:AutoFitHeight="0"/>
</Table>
<WorksheetOptions xmlns="urn:schemas-microsoft-com:office:excel">
<PageSetup>
<Header x:Margin="0.3"/>
<Footer x:Margin="0.3"/>
<PageMargins x:Bottom="0.75" x:Left="0.7" x:Right="0.7" x:Top="0.75"/>
</PageSetup>
<Unsynced/>
<ProtectObjects>False</ProtectObjects>
<ProtectScenarios>False</ProtectScenarios>
</WorksheetOptions>
</Worksheet>
</Workbook>

@ -24,7 +24,7 @@
<p style="text-align:center;"><a href="refund?order=<?php echo $ordernumber?>" style="padding:5px 15px;" class="btn btn-warning btn-sm">查看详情 <span class="glyphicon glyphicon-forward"></span></a></p>
<?php endif;?>
<?php if((int)$status === 7 || (int)$status==8):?>
<?php if((int)$status === 7):?>
<p style="border-top:1px dashed #000; height:1px;margin-top:10px;" ></p>
<p><?php echo $msg;?></p>
<p style="text-align:center;"><a href="refund?order=<?php echo $ordernumber?>" style="padding:5px 15px;" class="btn btn-warning btn-sm">查看详情 <span class="glyphicon glyphicon-forward"></span></a></p>
@ -38,13 +38,6 @@
<?php else:?>
<p><?php echo $msg;?></p>
<?php endif;?>
<?php if ($channel == "lanhai"){ ?>
<p style="text-align:center;"><a href="lanhaiMsg?order=<?php echo $ordernumber?>&type=orderticket" style="padding:5px 15px;" class="btn btn-warning btn-sm" target="_blank">出票详细信息 <span class="glyphicon glyphicon-forward"></span></a>
&nbsp;&nbsp;&nbsp;&nbsp;
<a href="lanhaiMsg?order=<?php echo $ordernumber?>&type=returnticket" style="padding:5px 15px;" class="btn btn-warning btn-sm" target="_blank">退票详细信息 <span class="glyphicon glyphicon-forward"></span></a>
</p>
<?php } ?>
</div>
</div>
</div>

@ -20,13 +20,6 @@
<option value="train_vc">法国</option>
</select>
</div>
<div class="col-md-2">
<select class="form-control" name="channel">
<option value ="" disabled="disabled" selected>渠道</option>
<option value ="ctrip">携程</option>
<option value ="lanhai">澜海</option>
</select>
</div>
<!--<div class="col-md-5">
<input type="text" name="from_date" class="date" value="" class="">
@ -54,13 +47,12 @@
<th style="text-align:center;">出发</th>
<th style="text-align:center;">到达</th>
<th style="text-align:center;">状态</th>
<th style="text-align:center;">外联</th>
<th style="text-align:center;">价格</th>
<th style="text-align:center;">提交时间</th>
<th style="text-align:center;">所属部门</th>
<th style="text-align:center;">渠道</th>
<th style="text-align:center;">出票方式</th>
<th style="text-align:center;">出票次数</th>
<th style="text-align:center;">发送邮件</th>
<th style="text-align:center;">是否发送邮件</th>
<th style="text-align:center;">反馈</th>
<th style="text-align:center;">操作</th>
</tr>
@ -75,7 +67,7 @@
<td><?php echo $v->ts_fromstationame;?></td>
<td><?php echo $v->ts_tostationame;?></td>
<td><?php echo $v->info;?></td>
<td><?php echo $v->OPIName;?></td>
<td><?php echo $v->ts_orderamount;?></td>
<td><?php echo $v->ts_subtime;?></td>
<td><?php echo $v->COLI_WebCode;?></td>
<td><?php echo $v->ts_channel;?></td>
@ -90,7 +82,6 @@
echo '<td>复查</td>';
}
?>
<td><?php echo $v->ts_autotimes;?></td>
<?php
if($v->ts_sendmail == 1){
if($v->ts_m_sn){

@ -1,30 +0,0 @@
<div style="width:90%;margin:30px auto;">
<div class="panel panel-primary" style="width:60%;margin:0 auto;">
<div class="panel-heading">
<h3 class="panel-title">预售时间添加(车站名是中文名)</h3>
</div>
<div class="panel-body">
<form action="/info.php/apps/trainsystem/pages/presale_addsave" name="saletimeform" method="POST">
<table class="table table-condensed table-bordered">
<tr>
<td style="text-align:center;">车站名</td>
<td><input type="text" name="TST_station_cn" value="" /></td>
</tr>
<tr>
<td style="text-align:center;">预售时间8:00 ,18:30)</td>
<td><input type="text" name="TST_saletime" value="" /></td>
</tr>
<tr>
<td style="text-align:center;">车站编码</td>
<td><input type="text" name="TST_station_code" value="" /></td>
</tr>
<tr>
<td colspan="2" style="text-align:center;">
<input type="submit" class="btn btn-warning btn-sm" value="添 加" style="width:120px;" />
</td>
</tr>
</table>
</form>
</div>
</div>
</div>

@ -1,31 +0,0 @@
<div style="width:90%;margin:30px auto;">
<div class="panel panel-primary" style="width:60%;margin:0 auto;">
<div class="panel-heading">
<h3 class="panel-title">预售时间修改(车站名尽量不要修改)</h3>
</div>
<div class="panel-body">
<form action="/info.php/apps/trainsystem/pages/presale_editsave" name="saletimeform" method="POST">
<table class="table table-condensed table-bordered">
<tr>
<td style="text-align:center;">车站名</td>
<td><input type="text" name="TST_station_cn" value="<?php echo($info->TST_station_cn) ?>" /></td>
</tr>
<tr>
<td style="text-align:center;">预售时间</td>
<td><input type="text" name="TST_saletime" value="<?php echo($info->TST_saletime) ?>" /></td>
</tr>
<tr>
<td style="text-align:center;">车站编码</td>
<td><input type="text" name="TST_station_code" value="<?php echo($info->TST_station_code) ?>" /></td>
</tr>
<tr>
<td colspan="2" style="text-align:center;">
<input type="submit" class="btn btn-warning btn-sm" value="更 新" style="width:120px;" />
<input type="hidden" name="TST_id" value="<?php echo($info->TST_id) ?>"" />
</td>
</tr>
</table>
</form>
</div>
</div>
</div>

@ -1,54 +0,0 @@
<div style="width:90%;margin:30px auto;">
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">预售时间搜索</h3>
</div>
<div class="panel-body">
<div class="row">
<form style="" action="" method="get">
<div class="col-md-6">
<input class="form-control" type="text" placeholder="站点中文名(和汉特的保持一致)" name="stationcn" value="<?php echo !empty($stationcn)?"$stationcn":"";?>" autocomplete="off">
</div>
<div class="col-md-5">
<button type="submit" id="sub" class="btn btn-success btn-sm"><span class="glyphicon glyphicon-search"></span> 搜索</button>
&nbsp;&nbsp;<a href="/info.php/apps/trainsystem/pages/presale_add" class="btn btn-warning " style="width: 120px;">新增站点</a>
</div>
</form>
</div>
</div>
</div>
<div class="panel panel-primary">
<div class="panel-heading">
<h3 class="panel-title">预售时间列表</h3>
</div>
<div class="panel-body">
<table class="table table-striped" style="text-align:center;">
<thead>
<tr>
<th style="text-align:center;" width="5%">序号</th>
<th style="text-align:center;" width="5%">ID</th>
<th style="text-align:center;" width="25%">车站</th>
<th style="text-align:center;" width="25%">预售时间</th>
<th style="text-align:center;" width="15%">车站编码</th>
<th style="text-align:center;" width="15%">更新时间</th>
<th style="text-align:center;">操作</th>
</tr>
</thead>
<tbody>
<?php $num=0; foreach($data as $v):?>
<tr>
<td><?php echo ++$num;?></td>
<td><?php echo $v->TST_id;?></td>
<td><?php echo $v->TST_station_cn;?></td>
<td><?php echo $v->TST_saletime;?></td>
<td><?php echo $v->TST_station_code;?></td>
<td><?php echo $v->TST_updatetime;?></td>
<td><a target="_blank" href="presale_edit?tstid=<?php echo $v->TST_id;?>">修改</a></td>
</tr>
<?php endforeach;?>
</tbody>
</table>
<div style="text-align:right;"><ul class="pagination"><?php echo $page_link;?></ul></div>
</div>
</div>
</div>

@ -8,20 +8,8 @@
foreach ($passengers as $items){
echo '<p>'.$from_station_name.'<span class="glyphicon glyphicon-arrow-right"></span>'.$to_station_name.'</p>';
echo '<p style="border-top:1px dashed #000; height:1px;margin-top:10px;" ></p>';
echo '<p>ID:'.$items->tst_id.''.$items->tst_realname.'('.$items->tst_ticketype.')&nbsp;&nbsp;&nbsp;&nbsp;'.$items->tst_seatstype.'&nbsp;&nbsp;'.$items->tst_seatdetail.'&nbsp;&nbsp;&nbsp;&nbsp;票价:¥'.$items->tst_ticketprice.'</p>';
if ((int)$items->tst_status==7){//退票成功
echo '&nbsp;&nbsp;&nbsp;&nbsp;<p>退票成功</p>';
}else if ((int)$items->tst_status==8){
$errMsg = "";
if (!empty($items->tst_returncallback)){
$returnCallBack = json_decode($items->tst_returncallback);
if (isset($returnCallBack->failReason)){
$errMsg = $returnCallBack->failReason;
}
}
echo '&nbsp;&nbsp;&nbsp;&nbsp;<p>退票失败:'.$errMsg.'</p>';
}
if((int)$items->tst_status == 4 || (int)$items->tst_status==8){
echo '<p>'.$items->tst_realname.'('.$items->tst_ticketype.')&nbsp;&nbsp;&nbsp;&nbsp;'.$items->tst_seatstype.'&nbsp;&nbsp;'.$items->tst_seatdetail.'&nbsp;&nbsp;&nbsp;&nbsp;票价:¥'.$items->tst_ticketprice.'</p>';
if((int)$items->tst_status == 4){
echo '<p>';
echo '<a href="###" style="padding:5px 15px;" class="btn btn-warning btn-sm returnticket" name="'.$items->tst_realname.'" passid="'.$items->tst_numberid.'"><span class="glyphicon glyphicon-remove"></span>退票</a>';
echo '</p>';
@ -53,12 +41,12 @@ $(function(){
url:url,
success:function(json){
alert('请求成功,正在处理退票...');
return_ticket.html('退票提交成功');
return_ticket.html('退票成功');
},
error:function(json){
alert('请求失败,请重新请求,如果还有错误请联系管理员');
return_ticket.html('退票提交失败');
return_ticket.html('退票失败');
}
});
});

@ -1,117 +0,0 @@
/*携程出票发送信息*/
{
"train": {
"FOI_SN": 421000463,
"DepartureCity": "Guilin",
"ArrivalCity": "Guilin Bei (North)",
"FOI_COLD_SN": 586000781,
"DepartAirport": "GLZ",
"ArrivalAirport": "GBZ",
"FlightsNo": "G2910",
"Aircraft": "O",
"Cabin": "2nd Class Seat",
"DepartureDate": "2023-04-15 00:00:00",
"FOI_SelectedSeat": "1A,1B,1C",
"DepartAirport_cn": "\u6842\u6797",
"ArrivalAirport_cn": "\u6842\u6797\u5317",
"FOI_TrainNetOrderNo": null,
"adultcost": 6,
"childcost": 3,
"adultprice": 7,
"childprice": 7,
"ArrivalTime": "08:28AM Apr.15, 2023",
"DepartureTime": "08:18AM Apr.15, 2023",
"FOI_SaleDate": null
},
"people_list": [{
"BPE_SN": 571000773,
"BPE_FirstName": "",
"BPE_MiddleName": null,
"BPE_LastName": "AAA",
"BPE_GuestType": 1,
"BPE_Passport": "111",
"BPE_PassportType": "Passport No.",
"BPE_SEX": 100001,
"BPE_BirthDate": "1957-03-04",
"BPE_PassExpdate": "2023-04-14"
}, {
"BPE_SN": 571000774,
"BPE_FirstName": "",
"BPE_MiddleName": null,
"BPE_LastName": "BBB",
"BPE_GuestType": 1,
"BPE_Passport": "2222",
"BPE_PassportType": "Passport No.",
"BPE_SEX": 100001,
"BPE_BirthDate": "2005-03-29",
"BPE_PassExpdate": "2025-04-08"
}, {
"BPE_SN": 571000775,
"BPE_FirstName": "",
"BPE_MiddleName": null,
"BPE_LastName": "CCCC",
"BPE_GuestType": 1,
"BPE_Passport": "33333",
"BPE_PassportType": "Passport No.",
"BPE_SEX": 100003,
"BPE_BirthDate": "2007-04-23",
"BPE_PassExpdate": "2030-04-16"
}
],
"email": "vivi@hainatravel.com"
}
/*订单信息*/
{
"wl": [
{
"Name": "Vivi Chen",
"OPI_Name": "陈媛明",
"OPI_Email": "vivi@chinahighlights.com",
"tel": "86-0773-2823567",
"Mobile": "86-18877331805",
"Email": "vivi@chinahighlights.com"
}
],
"info": [
{
"people": [
{
"BPE_SN": 559006230,
"BPE_FirstName": "",
"BPE_MiddleName": null,
"BPE_LastName": "ZHANG HAIHUA",
"BPE_GuestType": 1,
"BPE_Passport": "G41163238",
"BPE_PassportType": "Passport No."
}
],
"train": {
"FOI_SN": 409004469,
"DepartureCity": "Beijing Nan (South)",
"ArrivalCity": "Yiwu",
"FOI_COLD_SN": 574005898,
"DepartAirport": "VNP",
"ArrivalAirport": "YWH",
"FlightsNo": "G191",
"Aircraft": "M",
"Cabin": "1st Class Seat",
"DepartureDate": "2021-10-26 00:00:00",
"FOI_SelectedSeat": "1F",
"DepartAirport_cn": "北京南",
"ArrivalAirport_cn": "义乌",
"FOI_TrainNetOrderNo": null,
"adultcost": 1061.5,
"childcost": 530.75,
"adultprice": 179,
"childprice": 93,
"ArrivalTime": "22:14 Oct.26, 2021",
"DepartureTime": "15:18 Oct.26, 2021",
"FOI_SaleDate": null
},
"status": true
}
],
"cols_id": "2110265554",
"balance": "NULL"
}

@ -1,396 +0,0 @@
//订单提交JSON结构
{
"authentication": {
"timeStamp": "2023-04-14 16:15:39",
"serviceName": "train.addTrainOrder",
"companyId": "1503141150",
"messageIdentity": "1f71fab781f73caea6686c8a69600732"
},
"trainOrderInfo": {
"companyId": "1503141150",
"orderType": 2,
"orderTicketType": 0,
"companyOrderId": "HN1681460139569",
"isReservationOrder": null,
"leakCutOffTime": null,
"orderInfo": {
"orderTime": "2023-04-14 16:15:39",
"ticketList": [{
"fromStationName": "桂林",
"toStationName": "桂林北",
"ticketTime": "2023-04-29 08:18",
"trainNo": "G2910",
"allAcceptTrainNo": "",
"acceptDepartDates": "",
"arrivalDateTime": "2023-04-29 08:28",
"ticketPrice": 6,
"seatName": "二等座",
"selectedSeat": "1A",
"acceptSeat": "",
"passengerList": [{
"passengerType": 1,
"certificateType": 1,
"certificateNo": "oiHef47aYwngLzVN2iiBtTS80fvlfpc8",
"certificateName": "赵鹏",
"birthday": null,
"realName": "赵鹏",
"identityLimitDate": null,
"countryCode": "",
"contactMobile": "",
"contactEmail": ""
}
]
}
],
"frontSeatFlag": 0,
"orderRemark": ""
},
"contactUser": {
"contactUserId": "",
"contactName": "vivi",
"companyId": "1503141150",
"countryCode": "86",
"contactMobile": "up3E0hBuzNbADKxufANHMg=="
},
"extraService": {
"noVerifyFlag": 1,
"lowerBerthFlag": 0,
"lowerBerthCount": 0,
"grabTicketRate": 1
}
}
}
//订单提交成功返回数据
{
"returnCode": 1,
"returnMessage": "SUCCESS",
"returnData": {
"serviceName": "train.addTrainOrder",
"companyId": "1503141150",
"companyOrderId": "HN1681460139569",
"operationDateTime": "2023-04-14 16:15:56",
"orderPayDetail": {
"orderAmount": 12.00,
"ticketAmount": 6,
"serveAmount": 0,
"extraServeFees": [
{
"feeAmount": 6.00,
"feeType": 141
}
]
}
},
"ResponseStatus": {
"Timestamp": "/Date(1681460156763+0800)/",
"Ack": "Success",
"Errors": [],
"Build": null,
"Version": null,
"Extension": [
{
"Id": "CLOGGING_TRACE_ID",
"Version": null,
"ContentType": null,
"Value": "7715658886832531034"
},
{
"Id": "RootMessageId",
"Version": null,
"ContentType": null,
"Value": "100031671-0a6d18d7-467072-1571193"
}
]
}
}
//支付成功
{
"returnCode": 1,
"returnMessage": "pay success",
"returnData": {
"serviceName": "train.companyPayOrder",
"companyId": "1503141150",
"companyOrderId": "HN1681700111527",
"operationDateTime": "2023-04-17 10:55:19"
},
"ResponseStatus": {
"Timestamp": "/Date(1681700119599+0800)/",
"Ack": "Success",
"Errors": [],
"Build": null,
"Version": null,
"Extension": [{
"Id": "CLOGGING_TRACE_ID",
"Version": null,
"ContentType": null,
"Value": "489001780207311316"
}, {
"Id": "RootMessageId",
"Version": null,
"ContentType": null,
"Value": "100031671-0a6e4a89-467138-6889241"
}
]
}
}
//订单callback
{
"authentication": {
"timeStamp": "2023-04-19 14:19:26",
"serviceName": "notice.ticketresult",
"messageIdentity": "8c82312e95158e289fd453f33114e0d2",
"companyId": "1503141150"
},
"ticketResult": {
"companyOrderId": "HN1681885121340",
"resultCode": 1,
"resultMsg": null,
"ticketSuccTime": "2023-04-19 14:19:26",
"operateTradeNo": "5027649989833265152",
"orderMasterInfo": {
"totalPayAmount": 12.00,
"orderType": 2,
"contactName": "vivi",
"mobileNo": "up3E0hBuzNbADKxufANHMg==",
"remark": ""
},
"passengerInfoList": [{
"passengerId": 6197111157,
"certificateType": 1,
"certificateName": "赵鹏",
"certificateNo": "oiHef47aYwngLzVN2iiBtTS80fvlfpc8",
"birthday": null,
"realName": "赵鹏",
"passengerType": 1,
"contactMobile": "7s0sfWX+Bx8=",
"contactEmail": "7s0sfWX+Bx8="
}
],
"orderRouteInfoList": [{
"routeId": 1136901379,
"departTime": "2023-04-30 10:16:00",
"arrivalTime": "2023-04-30 10:26:00",
"ticketCount": 1,
"ticketPrice": 6.00,
"fromStationName": "桂林",
"toStationName": "桂林北",
"trainNo": "D8268",
"ticketSeat": "二等座",
"acceptSeat": null,
"routeNo": 1,
"elecNo": "EJW2232127",
"checkWindow": "检票口6"
}
],
"orderTicketInfoList": [{
"ticketId": 892585335,
"routeId": 1136901379,
"passengerId": 6197111157,
"realTicketPrice": 6.00,
"seatName": "二等座",
"carriageNo": "7",
"seatNo": "14B号",
"createTime": "2023-04-19 14:19:26",
"longElecNo": "23174648650D82685902",
"quickPass": 0,
"trainStatus": 0
}
]
}
}
/*退
*/
{
"authentication": {
"timeStamp": "2023-04-28 09:46:40",
"serviceName": "train.artificialTicketReturn",
"companyId": "1503141150",
"messageIdentity": "a46aa9f51cb8dbe299d2584aa41be93a"
},
"companyOrderId": "HN1681696305456",
"operator": "vivi",
"returnServiceFee": "15",
"returnTicketList": [{
"trainNo": "G2910",
"carriageNo": "4",
"seatNo": "5F\u53f7",
"longElecNo": "23383214738D84519712",
"cardFirstImage": "",
"cardSecondImage": ""
}
]
}
/*退票返回的数据结构*/
{
"ResponseStatus": {
"Timestamp": "/Date(1683186036147+0800)/",
"Ack": "Success",
"Errors": [],
"Build": null,
"Version": null,
"Extension": [{
"Id": "CLOGGING_TRACE_ID",
"Version": null,
"ContentType": null,
"Value": "5184875534824024628"
}, {
"Id": "RootMessageId",
"Version": null,
"ContentType": null,
"Value": "100031671-0a638ae3-467551-5279705"
}
]
},
"returnCode": 0,
"returnMessage": "车票价格需要大于 19.5才能退票"
}
/*退款calback*/
{
"authentication": {
"timeStamp": "2023-05-04 11:40:15",
"serviceName": "notice.refundresult",
"messageIdentity": "c38f06426a3e9b11d221f6402ab4fd99",
"companyId": "1503141150"
},
"refundResult": {
"companyOrderId": "HN1683171474981",
"refundType": 5,
"reason": null,
"refundTime": "2023-05-04 11:40:04",
"tradeNo": "5033045727832576000",
"refundAmount": 12.00,
"operateTradeNo": null,
"refundDetailInfoList": null
}
}
/*退款 多张票的情况 长订单号等有所不同*/
{
"authentication": {
"timeStamp": "2023-06-01 15:06:11",
"serviceName": "notice.refundresult",
"messageIdentity": "9af17693f6546dd0719cfcf3f4cbd896",
"companyId": "4003171843"
},
"refundResult": {
"companyOrderId": "HN1685430938567",
"refundType": 2,
"reason": null,
"refundTime": "2023-06-01 15:06:11",
"tradeNo": "5043244432384724992",
"refundAmount": 271.00,
"operateTradeNo": "5042802996723978240",
"refundDetailInfoList": [{
"longElecNo": "24060026739G65552055",
"refundDetailType": 20,
"refundDetailAmount": 271.00
}
]
}
}
{
"authentication": {
"timeStamp": "2023-06-01 15:06:11",
"serviceName": "notice.refundresult",
"messageIdentity": "9af17693f6546dd0719cfcf3f4cbd896",
"companyId": "4003171843"
},
"refundResult": {
"companyOrderId": "HN1685430938567",
"refundType": 2,
"reason": null,
"refundTime": "2023-06-01 15:06:11",
"tradeNo": "5043244431617167360",
"refundAmount": 271.00,
"operateTradeNo": "5042809037335433216",
"refundDetailInfoList": [{
"longElecNo": "24060026739G65552054",
"refundDetailType": 20,
"refundDetailAmount": 271.00
}
]
}
}
//澜海出票成功返回
{
"authentication": {
"timeStamp": "2024-07-10 15:40:50",
"appId": "3649601564",
"mainOrderId": "HN1720487984255"
},
"bodyInfo": {
"agentCode": "000001428",
"contactMobile": "17722807804",
"currentTime": "2022-09-29 10:40:50",
"eOrderNumber": "E5W0086985",
"failCode": 0,
"orderPrice": "720.0",
"orderResultCode": 200,
"mainOrderId": "21158540860",
"payTradeNumber": "2022092922001429951455254961",
"resultMsg": "出票成功",
"ticketList": [{
"ticketCheck": "检票口13AB",
"arriveTime": "2022-10-04 22:33:00",
"deliveryTicketId": 76861483,
"departTime": "2022-10-04 20:02",
"fromStationName": "赣县北",
"passengerList": [{
"carriageNo": "03",
"passengerId": 113317051,
"passengerName": "何沙沙",
"passengerType": 2,
"passportNumber": "420821198609055029",
"passportType": "1",
"passportTypeName": "身份证",
"realTicketPrice": "288.0",
"seatName": "二等座",
"seatNo": "05D"
}, {
"carriageNo": "03",
"passengerId": 113317052,
"passengerName": "刘明山",
"passengerType": 2,
"passportNumber": "362121197703160012",
"passportType": "1",
"passportTypeName": "身份证",
"realTicketPrice": "288.0",
"seatName": "二等座",
"seatNo": "06C"
}, {
"carriageNo": "03",
"passengerId": 113317053,
"passengerName": "刘沛勋【儿童票】",
"passengerType": 3,
"passportNumber": "360721201007070013",
"passportType": "1",
"passportTypeName": "身份证",
"realTicketPrice": "144.0",
"seatName": "二等座",
"seatNo": "09F"
}
],
"ticketCount": 3,
"ticketPrice": "288.0",
"toStationName": "深圳北",
"trainNumber": "G2793"
}
],
"ticketSuccessTime": "2022-09-29 10:40:50",
"userId": 65
}
}

@ -1,133 +0,0 @@
/*澜海返回*/
{
"bodyInfo": "HEYIbCfmv/d057K+gdHTKpv7FVeC4QYpF178Zu69jv0lxaHZbPc6GyiuJFTf1ZT9dFZCWKnHw0tFTZkNepGH7oLkt0CS2h1IEiSs0XPwnzKN9g/RlEaiMPh7rl9ZuBIFxaWRvyKK1cxjxb5CZxrjaIaV/Cm3hmdsIFum2vSGsuTy3FwjRty6RvI+d1rMy+XcInKWewzd9eCUgpA5u68SL9IJJ9TzbKpHI0f9ab/Cu28m2v7ZpQPWC3DgqYgP84x6NFniu0Js/PXU3e5a2lZz1z+a4gX2NvGNINMvNsClpzRzikEVTWqxhz/apLcwnDEJwS2Spt8zt9g3aVgtF6jc9QOdWZYrzuNWV2DH0mdn8Cyb1gqRK+0nLtPQt/NzO0xVLHlZuCsSTW9/r7ZjDd07gX6D+EQzDXVGpKbP+TerNOu77V+SYC5VDBYycpfa+w6Z48OzLZL5D4KN/y5lFI1cWK4MQ8IMlBHd8UUu5Rurx7yCLZvKsaxAK6MzW+Kdf7hza+B18AwPrtvXZ26H66kSF6FK4s6hvrvyeGsUxj2teHdDr9XjDsEnjw8qdamUYSModr0tfQyX5HW7bENc8w8mvCHvJS+fz/eiZctPQ+p8t+RCv0OBwIEVRtivFvkTB3M8xtsAO1oM1LtX13FoSsxyzNFB2d4rTj1K1fPbhmxMKGWmxDdPy4JOzk9OEB9cbG4a22bI/vSnp+YDqu5a/Vp9EeIBOfYUNXTpqnhBaff8ORreXEehjKJzrKZ8XKKcxo7V5S5P02RV2cO9V/v5uL/rbSPBnmR+9qizb9aBBjUKedBLVXXZO1sKJOohv71qFKXauNc6ASW/1iKl08mW4MYAlR1IL1UDr0aWhw7OhYDK+fbRlh55kALEfmn98bvwltrS56QWULdzfpTYSiVnOZ165NX8ywcT+CwF1+WGY6Hj+uYNeIulZKI9XBUKcmqat5RwUEyMNKB3KAdizeiOzp6QAomCttz7XxXJ9h+mWkhDipY8jktMX2Ss3zRCuO0lGphtFxpYdJ3sPYtQnRD71wSUeMVnNzSBcmYBwG3l2tlBrjtIddHp60ZUIYnUcFMKriPn7iO3UWWlVz/XX0ELHrLcXQ==",
"authentication": {
"timeStamp": "2024-07-16 15:42:48",
"appId": "3649601564",
"mainOrderId": "HN1721115685991"
}
}
/*返回编译*/
{
"agentCode": "3649601564",
"contactMobile": "18877331805",
"currentTime": "2024-07-16 15:42:48",
"eOrderNumber": "EGW1561545",
"failCode": 0,
"mainOrderId": "HN1721115685991",
"orderPrice": "6.0",
"orderResultCode": 200,
"payTradeNumber": "1452204560486540561056048965",
"resultMsg": "\u51fa\u7968\u6210\u529f",
"ticketList": [{
"arriveTime": "2024-07-18 09:23",
"deliveryTicketId": 586043269,
"departTime": "2024-07-18 09:13",
"fromStationName": "\u6842\u6797",
"passengerList": [{
"carriageNo": "01",
"passengerId": 571060468,
"passengerName": "\u8d75\u9e4f",
"passengerType": 1,
"passportNumber": "450303197904120517",
"passportType": "1",
"passportTypeName": "\u8eab\u4efd\u8bc1",
"realTicketPrice": "6.0",
"seatName": "\u4e8c\u7b49\u5ea7",
"seatNo": "2A",
"ticketName": ""
}
],
"ticketCount": 1,
"ticketPrice": "6.0",
"toStationName": "\u6842\u6797\u5317",
"trainNumber": "G2910"
}
],
"ticketSuccessTime": "2024-07-16 15:42:48",
"userId": 428
}
/**账单列表*/
{
"success": true,
"code": "0",
"msg": "",
- "data": {
- "records": [
- {
"saveDay": "2024-07-31",
"type": "出票",
"mainOrderId": "HN1722438313448",
"dataId": null,
"ticket12306Id": "E1W1330191",
"trainNum": "K73",
"fromStation": "重庆北",
"toStation": "张家界西",
"fromTime": "2024-08-12 08:32",
"passengerName": "ABAJO LOPEZ LUCIA",
"price": 69,
"oldPrice": null,
"changeCost": null,
"handleTime": "2024-07-31 23:08:08",
"createTime": "2024-07-31 23:05:32"
},
- {
"saveDay": "2024-07-31",
"type": "出票",
"mainOrderId": "HN1722438313448",
"dataId": null,
"ticket12306Id": "E1W1330191",
"trainNum": "K73",
"fromStation": "重庆北",
"toStation": "张家界西",
"fromTime": "2024-08-12 08:32",
"passengerName": "ESCAMILLA QUILES MARIO",
"price": 69,
"oldPrice": null,
"changeCost": null,
"handleTime": "2024-07-31 23:08:08",
"createTime": "2024-07-31 23:05:32"
},
- {
"saveDay": "2024-08-01",
"type": "出票",
"mainOrderId": "HN1722441803173",
"dataId": null,
"ticket12306Id": "E2W4589927",
"trainNum": "D954",
"fromStation": "宜昌东",
"toStation": "上海",
"fromTime": "2024-08-13 14:06",
"passengerName": " PALOMA PALENCIA GRANDE",
"price": 676,
"oldPrice": null,
"changeCost": null,
"handleTime": "2024-08-01 00:06:37",
"createTime": "2024-08-01 00:03:56"
},
- {
"saveDay": "2024-08-01",
"type": "出票",
"mainOrderId": "HN1722441803173",
"dataId": null,
"ticket12306Id": "E2W4589927",
"trainNum": "D954",
"fromStation": "宜昌东",
"toStation": "上海",
"fromTime": "2024-08-13 14:06",
"passengerName": "FRANCISCO RAFAEL GARCIA TUDELA",
"price": 676,
"oldPrice": null,
"changeCost": null,
"handleTime": "2024-08-01 00:06:37",
"createTime": "2024-08-01 00:03:56"
}
],
"total": 4,
"size": 100,
"current": 1,
"searchCount": true,
"pages": 1
}
}

@ -1 +0,0 @@
[{"id":1,"seatName":"硬座","seatItems":["硬座","无座"]},{"id":2,"seatName":"硬卧","seatItems":["硬卧上","硬卧中","硬卧下"]},{"id":3,"seatName":"软座","seatItems":["软座"]},{"id":4,"seatName":"一等软座","seatItems":["一等软座"]},{"id":5,"seatName":"二等软座","seatItems":["二等软座"]},{"id":6,"seatName":"特等软座","seatItems":["特等软座"]},{"id":7,"seatName":"软卧","seatItems":["软卧上","软卧下"]},{"id":8,"seatName":"商务座","seatItems":["商务座"]},{"id":9,"seatName":"一等包座","seatItems":["一等包座"]},{"id":10,"seatName":"观光座","seatItems":["观光座"]},{"id":11,"seatName":"特等座","seatItems":["特等座"]},{"id":12,"seatName":"一等座","seatItems":["一等座"]},{"id":13,"seatName":"二等座","seatItems":["二等座","无座"]},{"id":14,"seatName":"高级软卧","seatItems":["高级软卧上","高级软卧下"]},{"id":15,"seatName":"包厢硬卧","seatItems":["包厢硬卧上","包厢硬卧中","包厢硬卧下"]},{"id":16,"seatName":"包厢软座","seatItems":["包厢软座"]},{"id":17,"seatName":"一等卧","seatItems":["一等卧上","一等卧下"]},{"id":18,"seatName":"二等卧","seatItems":["二等卧上","二等卧中","二等卧下"]},{"id":19,"seatName":"混编软座","seatItems":["混编软座"]},{"id":20,"seatName":"动卧","seatItems":["动卧上","动卧下"]},{"id":21,"seatName":"多功能座","seatItmes":["多功能座"]},{"id":22,"seatName":"二等包座","seatItems":["二等包座"]},{"id":23,"seatName":"一人软包","seatItems":["一人软包"]},{"id":24,"seatName":"二等软包","seatItmes":["二等软包"]},{"id":25,"seatName":"高级动卧","seatItems":["高级动卧上","高级动卧下"]}]

@ -15,10 +15,6 @@ class Index extends CI_Controller
private $Log_Client;
private $logstore = array(
'cht' => 'globalhoghlights'
,
'ghtobzg' => 'globalhoghlights'
,
'ghtobhw' => 'globalhoghlights'
,
'ah' => 'asiahighlights'
,
@ -28,8 +24,6 @@ class Index extends CI_Controller
,
'yz' => 'yangtzeriver'
,
'ts' => 'trainspread_com'
,
'gl' => 'guilinchina'
,
'sht' => 'shanghaihighlights'
@ -56,19 +50,7 @@ class Index extends CI_Controller
,
'vc' => 'voyageschine'
,
'vchw' => 'voyageschine'
,
'gh_vac' => 'globalhighlights_es'
,
'gh_jp' => 'globalhighlights_jp'
,
'gh_vc' => 'globalhighlights_fr'
,
'gh_ru' => 'globalhighlights_ru'
,
'gh_gm' => 'globalhighlights_de'
,
'gh_it' => 'globalhighlights_it'
'vchw' => 'voyageschine',
); //站点日志存储库,每个网站对应一个
public function __construct()
@ -82,13 +64,12 @@ class Index extends CI_Controller
public function index()
{
$data = array();
$orders = $this->wwwlogs_model->get_update_list(15);
$orders = $this->wwwlogs_model->get_update_list(10);
// print_r($orders);
if ($orders) {
foreach ($orders as $item) {
$site_code = strtolower($item->COLI_WebCode);
//判断是否为国际站点
if (in_array($site_code, array('gm', 'gmhw', 'jp', 'jphw', 'ru', 'ruhw', 'it', 'ithw', 'vac', 'vachw', 'vc', 'vchw', 'gh_vac', 'gh_jp', 'gh_vc', 'gh_gm', 'gh_ru', 'gh_it'))) {
if (in_array($site_code, array('gm', 'gmhw', 'jp', 'jphw', 'ru', 'ruhw', 'it', 'ithw', 'vac', 'vachw', 'vc', 'vchw'))) {
try {
$this->orders_view_path_int($item->COLI_SN, $site_code, $item->COLI_SenderIP, 0, $item->COLI_OrderDetailText);
} catch (Exception $err) {
@ -97,7 +78,7 @@ class Index extends CI_Controller
} else {
$this->orders_view_path($item->COLI_SN, $site_code, $item->COLI_SenderIP);
}
echo 'COLI_WebCode:' . $item->COLI_WebCode . ' COLI_ID:' . $item->COLI_ID . ' COLI_SenderIP:' . $item->COLI_SenderIP . ' COLI_SN:' . $item->COLI_SN . ' COLI_ApplyDate:' . $item->COLI_ApplyDate. '<br/>';
echo 'COLI_WebCode:' . $item->COLI_WebCode . ' COLI_ID:' . $item->COLI_ID . ' COLI_SenderIP:' . $item->COLI_SenderIP . '<br/>';
}
// echo 'test async v6';
}
@ -218,7 +199,6 @@ class Index extends CI_Controller
and (remote_addr='$ip' OR http_x_forwarded_for like '%$ip%' OR request_uri like '%$client_id%')
ORDER BY __time__ DESC
"; // 同时使用IP和用户ID
//echo '<code>'.$query_string.'</code><br>';
$from = time() - 604800 * 2; //往前 604800(7天), 1296000(15天)
$to = time();
$request = new Aliyun_Log_Models_GetLogsRequest('globalhoghlights', $this->logstore[$sitecode], $from, $to, '', $query_string, 100, $offset, true);
@ -249,10 +229,9 @@ class Index extends CI_Controller
}
}
//echo '<code>'.print_r($LogData, true).'</code><br>';
$add_status = $this->wwwlogs_model->add('wwwlogs', $LogData);
//echo '<code> add_status => '.$add_status.'</code><br>';
// print_r($LogData);
$this->wwwlogs_model->add('wwwlogs', $LogData);
}
} catch (Aliyun_Log_Exception $ex) {
print_r($ex);
@ -283,95 +262,4 @@ class Index extends CI_Controller
logVarDump($ex);
}
}
//测试接口权限 - lmr
public function test($COLI_SN, $sitecode = 'cht', $ip, $offset = 0, $order_text)
{
// 测试数据 - 2
//$COLI_SN = 1004250;
//$sitecode = 'gmhw';
//$ip = '2a00:6020:41c7:3900:20c1:3c5c:c854:7095';
//$offset = 0;
//$order_text = 'Gaid-> GA1.2.1747854879.1682254516 <-Gaid
//YandexId-> 1682254516819066352 <-YandexId
//clino :g-de-in-2
//startdate :2023-08-06
//adultnum :4
//Reiseroute Klasse :4 sterne hotel
//tourname :Rundreisen Nordindien 3 Wochen
//tages :21
//Reiseroutennummer :14083
//Geschlecht :
//Name :Firestone
//nationality :?sterreich
//E-Mail :AnaAnaki@hotmail.com
//Telefon :+4369918253609
//来源页面 :https://www.chinarundreisen.com/indien/top-indien-reiseziele/
//
//from:android
//Mozilla/5.0 (Linux; Android 9; SM-G950F) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Mobile Safari/537.36 X-Middleton/1';
// 匹配clientId的正则表达式
$yarndexPat = "/YandexId->(.+?)<-YandexId/";
// 检查文本是否匹配正则表达式
if (preg_match($yarndexPat, $order_text, $yandexMatches)) {
$client_id = trim($yandexMatches[1]);
} else {
$gaPat = "/Gaid->(.+?)<-Gaid/";
if (preg_match($gaPat, $order_text, $gaMatches)) {
$client_id = trim($gaMatches[1]);
} else {
$client_id = "-- Match not found --";
}
}
// echo $client_id;
$query_string = "
* | select time_local,http_referer,request_uri,http_user_agent,http_x_forwarded_for,
remote_addr,request_method,request_time,status,body_bytes_sent,upstream_response_time from log where
request_uri like '/io/?event=pageview%'
and (remote_addr='$ip' OR http_x_forwarded_for like '%$ip%' OR request_uri like '%$client_id%')
ORDER BY __time__ DESC
"; // 同时使用IP和用户ID
$from = time() - 604800 * 2; //往前 604800(7天), 1296000(15天)
$to = time();
$request = new Aliyun_Log_Models_GetLogsRequest('globalhoghlights', $this->logstore[$sitecode], $from, $to, '', $query_string, 100, $offset, true);
try {
$LogData = new StdClass;
$LogData->wl_sitecode = $sitecode;
$LogData->wl_COLI_SN = $COLI_SN; //订单SN
$response = $this->Log_Client->getLogs($request);
foreach ($response->getLogs() as $log) {
foreach ($log->getContents() as $key => $value) {
$LogData->$key = $value;
}
// 调整数据: http_referer -> request_uri, request_uri.ref -> http_referer
if (isset($LogData->http_referer) && isset($LogData->request_uri)) {
$request_uri = $LogData->request_uri;
$http_referer = $LogData->http_referer;
// http_referer -> request_uri
$LogData->request_uri = $LogData->http_referer;
// request_uri.ref -> http_referer
$query_string_tmp = urldecode($request_uri);
parse_str($query_string_tmp, $params);
if (isset($params['ref'])) {
$LogData->http_referer = $params['ref'];
} else {
$LogData->http_referer = '(not set)';
}
}
print_r($LogData);
// $this->wwwlogs_model->add('wwwlogs', $LogData);
}
} catch (Aliyun_Log_Exception $ex) {
print_r($ex);
} catch (Exception $ex) {
print_r($ex);
}
}
}

@ -43,7 +43,6 @@ class wwwlogs_model extends CI_Model
{
$this->init();
$this->topnum = $topnum;
$this->orderby = ' order by COLI_SN desc ';
return $this->get_list();
}
@ -64,7 +63,7 @@ class wwwlogs_model extends CI_Model
$sql .= "
COLI_SN,COLI_ID, COLI_WebCode,COLI_Name, COLI_OrderDetailText, COLI_OrderStartDate,COLI_SenderIP,COLI_WebCode,COLI_ApplyDate from ConfirmLineInfo
where 1=1
and COLI_WebCode in ('cht','ah','gh','ct','yz','sht','gl','gm','jp','ru','it','vac','vc','gmhw','jphw','ruhw','ithw','vachw','vchw','gh_vac','gh_vc','gh_jp','gh_ru','gh_it','gh_gm','ghtobzg','ghtobhw')
and COLI_WebCode in ('cht','ah','gh','ct','yz','sht','gl','gm','jp','ru','it','vac','vc','gmhw','jphw','ruhw','ithw','vachw','vchw')
and not exists (select top 1 1 from InfoManager.dbo.wwwlogs where wl_COLI_SN=COLI_SN )
and COLI_SenderIP is not null
and DeleteFlag=0
@ -73,7 +72,7 @@ class wwwlogs_model extends CI_Model
$this->where ? $sql .= $this->where : false;
$this->orderby ? $sql .= $this->orderby : false;
$query = $this->HT->query($sql);
// print_r($this->INFO->queries);
//print_r($this->INFO->queries);
if ($this->topnum === 1) {
if ($query->num_rows() > 0) {
$row = $query->row();

@ -12,62 +12,62 @@
<link rel="shortcut icon" href="/bootstrap/img/glyphicons_290_skull.png">
<script language="javascript">
//资源文件上传管理
function openKCFinder_singleFile_res() {
CKFinder.modal({
chooseFiles: true,
pass: 'sitecode',
sitecode: '<?php echo $this->config->item('site_code'); ?>',
width: 1024,
height: 800,
onInit: function (finder) {
finder.on('files:choose', function (evt) {
var file = evt.data.files.first();
alert(file.getUrl());
});
finder.on('file:choose:resizedImage', function (evt) {
alert(evt.data.resizedUrl);
});
}
});
}
//快速图片上传
function openKCFinder_fast() {
window.CallBack = oopenKCFinder_fast_callback;
window.open(
'/media/popselectpicture.php?site_code=<?php echo $this->config->item('site_code'); ?>&site_lgc=<?php echo $this->config->item('site_lgc'); ?>',
'kcfinder_textbox',
'status=0, toolbar=0, location=0, menubar=0, directories=0,resizable=1, scrollbars=0, width=800, height=600');
}
function oopenKCFinder_fast_callback(result) {
var site_image_url = '<?php echo $this->config->item('site_image_url') ?>';
if (result != null && result.Pinfo[0]) {
$.modaldialog.success("图片地址:<br/>" + site_image_url + result.Pinfo[0].PUrl);
//资源文件上传管理
function openKCFinder_singleFile_res() {
CKFinder.modal({
chooseFiles: true,
pass: 'sitecode',
sitecode: '<?php echo $this->config->item('site_code'); ?>',
width: 1024,
height: 800,
onInit: function(finder) {
finder.on('files:choose', function(evt) {
var file = evt.data.files.first();
alert(file.getUrl());
});
finder.on('file:choose:resizedImage', function(evt) {
alert(evt.data.resizedUrl);
});
}
});
}
//快速图片上传
function openKCFinder_fast() {
window.CallBack = oopenKCFinder_fast_callback;
window.open(
'/media/popselectpicture.php?site_code=<?php echo $this->config->item('site_code'); ?>&site_lgc=<?php echo $this->config->item('site_lgc'); ?>',
'kcfinder_textbox',
'status=0, toolbar=0, location=0, menubar=0, directories=0,resizable=1, scrollbars=0, width=800, height=600');
}
function oopenKCFinder_fast_callback(result) {
var site_image_url = '<?php echo $this->config->item('site_image_url') ?>';
if (result != null && result.Pinfo[0]) {
$.modaldialog.success("图片地址:<br/>" + site_image_url + result.Pinfo[0].PUrl);
}
//标识所有信息未已读
function set_allmsg_to_read(ic_ids) {
var url = '<?php echo site_url("author/set_msg_to_read"); ?>';
$.post(url, {
'msg_ids': ic_ids
}, function (result) {
window.location.href = window.location.href;
});
}
}
//标识所有信息未已读
function set_allmsg_to_read(ic_ids) {
var url = '<?php echo site_url("author/set_msg_to_read"); ?>';
$.post(url, {
'msg_ids': ic_ids
}, function(result) {
window.location.href = window.location.href;
});
}
</script>
<script>
var _hmt = _hmt || [];
(function () {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?57ab7a81de0914994d5f2cf7986124f8";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?57ab7a81de0914994d5f2cf7986124f8";
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
</head>
@ -132,19 +132,21 @@
class="navbar-form pull-left">
<div class="input-append">
<span class="add-on">
<input type="checkbox" title="全文搜索" name="all_text_search" id="all_text_search" value="true" <?php echo (isset($all_text_search) && ($all_text_search == 'true')) ? 'checked' : false; ?>>
<input type="checkbox" title="全文搜索" name="all_text_search" id="all_text_search" value="true"
<?php echo (isset($all_text_search) && ($all_text_search == 'true')) ? 'checked' : false; ?>
>
</span>
<input type="text" class="input-xlarge" name="keywords" id="keywords"
value="<?php echo isset($keywords) ? $keywords : false; ?>">
<button class="btn">搜索</button>
<?php if (in_array($this->config->item('site_code'), array('jp', 'gm', 'vc', 'vac', 'ru', 'it', 'gh_jp', 'gh_gm', 'gh_vc', 'gh_vac', 'gh_ru', 'gh_it'))) { ?>
<a href="<?php
$admin_info = $this->session->userdata('session_admin');
echo 'https://multimedia.mycht.cn/authorise/' . $admin_info['OPI_SN'] . '/' . $this->config->item('site_code') ?>"
target="_blank" class="btn" title="图片上传管理"><i class="icon-picture"></i></a>
<?php if (in_array($this->config->item('site_code'), array('jp', 'gm', 'vc', 'vac', 'ru', 'it'))) { ?>
<a href="<?php
$admin_info = $this->session->userdata('session_admin');
echo 'https://multimedia.mycht.cn/authorise/' . $admin_info['OPI_SN'] . '/' . $this->config->item('site_code') ?>" target="_blank"
class="btn" title="图片上传管理"><i class="icon-picture"></i></a>
<?php } else { ?>
<a href="#" onclick="openKCFinder_singleFile_res();" class="btn" title="快速上传图片"><i
class="icon-picture"></i></a>
<a href="#" onclick="openKCFinder_singleFile_res();" class="btn" title="快速上传图片"><i
class="icon-picture"></i></a>
<?php } ?>
<a href="#" onclick="openKCFinder_fast();" class="btn btn-default btn-sm" title="多媒体中心"><span
class="icon-folder-open"></span></a>
@ -161,86 +163,80 @@
<ul class="nav pull-right">
<?php
$all_unread_sms = get_all_unread_sms();
$info_unread_sms = get_all_unread_sms('info');
if (isset($information->ic_id))
$current_msg = $information->ic_id;
if (isset($task->t_id))
$current_msg = $task->t_id;
$total_count = $all_unread_sms['sms_count'] + $info_unread_sms['sms_count']; //计算未读消息总数
$unread_sms_ic_id = 0; //用于设置所有收录消息为已读
if ($total_count != 0) {
?>
<!-- 如果当前页面存在未读消息,则消息数减一 -->
<?php
if (isset($current_msg) && isset($all_unread_sms['sms'][$current_msg])) {
$total_count = $total_count - count($all_unread_sms['sms'][$current_msg]);
unset($all_unread_sms['sms'][$current_msg]);
}
?>
<?php
if (isset($current_msg) && isset($info_unread_sms['sms'][$current_msg])) {
$total_count = $total_count - count($info_unread_sms['sms'][$current_msg]);
unset($info_unread_sms['sms'][$current_msg]);
}
?>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="icon-envelope icon-white pull-left" style="margin-top:3px;"></i> <span
class="badge badge-important pull-right">
<?php echo $total_count; ?>
</span>
</a>
<ul class="dropdown-menu">
<!-- 信息平台的消息 -->
<?php if (isset($info_unread_sms['sms']) && !empty($info_unread_sms['sms'])) { ?>
<a style="padding-left:20px;" href="javascript:void(0);"
onclick="set_allmsg_to_read($('#unreadinfomsg').val());">标记全部收录信息为已读</a>
<li class="divider"></li>
<?php foreach ($info_unread_sms['sms'] as $m) { ?>
<li><a href="<?php echo site_url('information/edit/' . $m[0]->is_id); ?>">
<?php
$t_title = get_text_short($m[0]->t_title, 15);
echo '[' . $m[0]->ic_sitecode . '] ' . $t_title['content'] . ' (' . $m[0]->m_content . ')';
?>
</a>
</li>
<?php $unread_sms_ic_id .= ',' . $m[0]->m_object_id; ?>
<?php } ?>
<li class="divider"></li>
<input type="hidden" name="unreadinfomsg" id="unreadinfomsg" value="<?php echo $unread_sms_ic_id; ?>">
<?php } ?>
<!--作者平台的消息-->
<?php foreach ($all_unread_sms['sms'] as $am) { ?>
<li><a href="<?php echo site_url('author/edit_task/' . $am[0]->m_object_id); ?>">
<?php
$t_title = get_text_short($am[0]->t_title, 15);
echo $t_title['content'] . ' (' . count($am) . ')';
$all_unread_sms = get_all_unread_sms();
$info_unread_sms = get_all_unread_sms('info');
if (isset($information->ic_id))
$current_msg = $information->ic_id;
if (isset($task->t_id))
$current_msg = $task->t_id;
$total_count = $all_unread_sms['sms_count'] + $info_unread_sms['sms_count']; //计算未读消息总数
$unread_sms_ic_id = 0; //用于设置所有收录消息为已读
if ($total_count != 0) {
?>
<!-- 如果当前页面存在未读消息,则消息数减一 -->
<?php
if (isset($current_msg) && isset($all_unread_sms['sms'][$current_msg])) {
$total_count = $total_count - count($all_unread_sms['sms'][$current_msg]);
unset($all_unread_sms['sms'][$current_msg]);
}
?>
</a>
</li>
<?php } ?>
</ul>
</li>
<?php
if (isset($current_msg) && isset($info_unread_sms['sms'][$current_msg])) {
$total_count = $total_count - count($info_unread_sms['sms'][$current_msg]);
unset($info_unread_sms['sms'][$current_msg]);
}
?>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<i class="icon-envelope icon-white pull-left" style="margin-top:3px;"></i> <span
class="badge badge-important pull-right"><?php echo $total_count; ?></span>
</a>
<ul class="dropdown-menu">
<!-- 信息平台的消息 -->
<?php if (isset($info_unread_sms['sms']) && !empty($info_unread_sms['sms'])) { ?>
<a style="padding-left:20px;" href="javascript:void(0);"
onclick="set_allmsg_to_read($('#unreadinfomsg').val());">标记全部收录信息为已读</a>
<li class="divider"></li>
<?php foreach ($info_unread_sms['sms'] as $m) { ?>
<li><a href="<?php echo site_url('information/edit/' . $m[0]->is_id); ?>"><?php
$t_title = get_text_short($m[0]->t_title, 15);
echo '[' . $m[0]->ic_sitecode . '] ' . $t_title['content'] . ' (' . $m[0]->m_content . ')';
?></a>
</li>
<?php $unread_sms_ic_id .= ',' . $m[0]->m_object_id; ?>
<?php } ?>
<li class="divider"></li>
<input type="hidden" name="unreadinfomsg" id="unreadinfomsg" value="<?php echo $unread_sms_ic_id; ?>">
<?php } ?>
<!--作者平台的消息-->
<?php foreach ($all_unread_sms['sms'] as $am) { ?>
<li><a
href="<?php echo site_url('author/edit_task/' . $am[0]->m_object_id); ?>"><?php
$t_title = get_text_short($am[0]->t_title, 15);
echo $t_title['content'] . ' (' . count($am) . ')';
?></a>
</li>
<?php } ?>
</ul>
</li>
<?php } ?>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">
<?php
echo $this->config->item('site_code');
echo ' -';
$admin_info = $this->session->userdata('session_admin');
echo $admin_info['OPI_Name'];
?>
echo $this->config->item('site_code');
echo ' -';
$admin_info = $this->session->userdata('session_admin');
echo $admin_info['OPI_Name'];
?>
<b class="caret"></b>
</a>
<ul class="dropdown-menu">
<?php foreach ($this->config->item('site') as $site_item) { ?>
<li> <a href="<?php echo site_url('login/change_site/' . $site_item['site_code']); ?>">
<?php echo $site_item['site_code'] ?>
</a>
</li>
<li> <a
href="<?php echo site_url('login/change_site/' . $site_item['site_code']); ?>"><?php echo $site_item['site_code'] ?></a>
</li>
<?php } ?>
<li><a href="<?php echo site_url('login/out'); ?>">退出</a></li>

@ -202,7 +202,7 @@
<span class="input-group-btn">
<button class="btn btn-default btn-sm" type="submit">搜索</button>
<?php if (in_array($this->config->item('site_code'), array('jp', 'gm', 'vc', 'vac', 'ru', 'it', 'gh_jp', 'gh_gm', 'gh_vc', 'gh_vac', 'gh_ru', 'gh_it'))) { ?>
<?php if (in_array($this->config->item('site_code'), array('jp', 'gm', 'vc', 'vac', 'ru', 'it'))) { ?>
<a href="<?php
$admin_info = $this->session->userdata('session_admin');
echo 'https://multimedia.mycht.cn/authorise/' . $admin_info['OPI_SN'] . '/' . $this->config->item('site_code') ?>"
@ -217,6 +217,8 @@
echo 'https://multimedia.mycht.cn/authorise/' . $admin_info['OPI_SN'] . '/' . $this->config->item('site_code') ?>"
class="btn btn-default btn-sm" title="多媒体图片"><span class="glyphicon glyphicon-new-window"></span></a>
<?php } ?>
<a href="#" onclick="openKCFinder_fast();" class="btn btn-default btn-sm" title="多媒体中心"><span
class="glyphicon glyphicon-folder-open"></span></a>
<a href="#" title="静态化更新" class="btn btn-default btn-sm" data-toggle="modal"
data-target="#cache_refresh_modal"><span class="glyphicon glyphicon-repeat"></span></a>
<a href="#" title="cdn缓存清理" class="btn btn-default btn-sm" data-toggle="modal"

File diff suppressed because it is too large Load Diff

@ -59,11 +59,11 @@
}
</style>
<script type="text/javascript">
$(function () {
$(function() {
//更新静态页,异步请求队列(setp_set个)
var setp_set = 8;
$('#update').on('click', function () {
$('#update').on('click', function() {
var $data = $('.data');
for (var i = 0; i < setp_set; i++) {
dg_ajax($data, i, setp_set);
@ -71,7 +71,7 @@
});
//下拉选站点
$('a.sss').on('click', function () {
$('a.sss').on('click', function() {
var site = $(this).html();
location.href = '/info.php/login/change_site/' + site + '/?url=/cache/update/';
});
@ -90,14 +90,14 @@
data: {
'<?php echo ($post_para); ?>': file
},
success: function (data) {
success: function(data) {
star = star + step;
current.find('.msg_wait').css('color', 'blue').html('成功');
count_num(num_zero);
//console.log(star+''+file);
dg_ajax(dom, star, step);
},
error: function () {
error: function() {
current.find('.msg_wait').css('color', 'red').html('重试');
dg_ajax(dom, star, step);
}
@ -122,8 +122,7 @@
<ul class="nav nav-pills">
<li class="active dropdown mr10">
<a class="dropdown-toggle" data-toggle="dropdown" href="#">
站点:
<?php echo ($this->config->item('site_code')); ?>
站点:<?php echo ($this->config->item('site_code')); ?>
<b class="caret"></b>
</a>
<ul class="dropdown-menu">
@ -145,38 +144,15 @@
<li>
<a class="sss">it</a>
</li>
<li>
<a class="sss">gh_jp</a>
</li>
<li>
<a class="sss">gh_gm</a>
</li>
<li>
<a class="sss">gh_vc</a>
</li>
<li>
<a class="sss">gh_vac</a>
</li>
<li>
<a class="sss">gh_ru</a>
</li>
<li>
<a class="sss">gh_it</a>
</li>
</ul>
</li>
<span class="mt12 label label-success">缓存目录
<?php echo (count($path)); ?>
</span>
<span class="mt12 label label-info">含文件
<?php echo (count($file)); ?>
</span>
<span class="mt12 label label-success">缓存目录<?php echo (count($path)); ?></span>
<span class="mt12 label label-info">含文件<?php echo (count($file)); ?></span>
<span class="mt12 label label-important none" id="count_num">已更新0个页面 进度0%</span>
<form class="form-search" id="path_search" action="#" method="post">
<input type="text" placeholder="输入路径删选,例如:/tours/。" value="<?php if (isset($_POST['p'])) {
echo ($_POST['p']);
} ?>" class="input-medium search-query" name="p" />
echo ($_POST['p']);
} ?>" class="input-medium search-query" name="p" />
<button type="submit" class="btn">筛选</button>
</form>
<a id="update" class="btn mr10 btn-info">更新</a>
@ -193,32 +169,18 @@
</tr>
</thead>
<tbody class="data_group">
<?php $c = 0; ?>
<?php foreach ($file as $key => $it) {
// $encode = mb_detect_encoding($it, array('ASCII', 'GBK', 'ISO-8859-1', 'UTF-8'));
// $_it = mb_convert_encoding($it, 'UTF8', $encode);
$_it = preg_replace('/#(.*)$/i', '', $it);
if (strlen($it) != strlen($_it))
continue;
$c++;
?>
$encode = mb_detect_encoding($it, array('ASCII', 'GBK', 'ISO-8859-1', 'UTF-8'));
$_it = mb_convert_encoding($it, 'UTF8', $encode);
?>
<tr class="data">
<td>
<?php echo ($c); ?>
</td>
<td><?php echo ($key + 1); ?></td>
<?php if (strlen($_it) > 100) { ?>
<td class="file" title="<?php echo ($_it); ?>">
<?php echo (substr($_it, 0, 40)); ?>..........
<?php echo (substr($_it, -35)); ?>
</td>
<td class="file" title="<?php echo ($_it); ?>"><?php echo (substr($_it, 0, 40)); ?>..........<?php echo (substr($_it, -35)); ?></td>
<?php } else { ?>
<td class="file" title="<?php echo ($_it); ?>">
<?php echo ($_it); ?>
</td>
<td class="file" title="<?php echo ($_it); ?>"><?php echo ($_it); ?></td>
<?php } ?>
<td>
<?php echo (isset($file_time[$it]) ? $file_time[$it] : 'bad file'); ?>
</td>
<td><?php echo ($file_time[$it]); ?></td>
<td class="msg_wait">无操作</td>
</tr>
<?php } ?>

@ -2,10 +2,9 @@
<?php foreach ($feedback_list as $index => $feedback) {?>
<div class="feedback_content">
<strong><?php echo $feedback['title'] ?></strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" alt="tour rating">
<p style="height: auto;"><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?></div>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>,<?php echo $feedback['createdOn'] ?></div>
</div>
<?php }?>

@ -1,14 +1,14 @@
<!-- Bangkok -->
<!-- Bangkok -->
<h2 id="thailand">Thailand Travel Reviews</h2>
<?php if (!empty($Bangkok)) {?>
<?php foreach ($Bangkok as $index => $feedback) {?>
<div class="feedback_content">
<strong style="height: auto; margin-bottom: 15px;"><?php echo $feedback['title'] ?></strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="tour rating">
<p style="height: auto;"><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?></div>
<strong><?php echo $feedback['title'] ?></strong>
<p><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>,<?php echo $feedback['createdOn'] ?></div>
</div>
<?php }?> <div class="more_tours"><a href="/reviews/thailand">More Thailand reviews</a></div>
<?php }?>
@ -19,11 +19,10 @@
<?php if (!empty($Hanoi)) {?>
<?php foreach ($Hanoi as $index => $feedback) {?>
<div class="feedback_content">
<strong style="height: auto; margin-bottom: 15px;"><?php echo $feedback['title'] ?></strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="tour rating">
<p style="height: auto;"><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?></div>
<strong><?php echo $feedback['title'] ?></strong>
<p><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>,<?php echo $feedback['createdOn'] ?></div>
</div>
<?php }?><div class="more_tours"><a href="/reviews/vietnam">More Vietnam reviews</a></div>
<?php }?>
@ -34,11 +33,10 @@
<?php if (!empty($Siem_Reap)) {?>
<?php foreach ($Siem_Reap as $index => $feedback) {?>
<div class="feedback_content">
<strong style="height: auto; margin-bottom: 15px;"><?php echo $feedback['title'] ?></strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="tour rating">
<p style="height: auto;"><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?></div>
<strong><?php echo $feedback['title'] ?></strong>
<p><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>,<?php echo $feedback['createdOn'] ?></div>
</div>
<?php }?><div class="more_tours"><a href="/reviews/cambodia">More Cambodia reviews</a></div>
<?php }?>
@ -49,16 +47,28 @@
<?php if (!empty($Tokyo)) {?>
<?php foreach ($Tokyo as $index => $feedback) {?>
<div class="feedback_content">
<strong style="height: auto; margin-bottom: 15px;"><?php echo $feedback['title'] ?></strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="tour rating">
<p style="height: auto;"><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?></div>
<strong><?php echo $feedback['title'] ?></strong>
<p><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>,<?php echo $feedback['createdOn'] ?></div>
</div>
<?php }?><div class="more_tours"><a href="/reviews/japan">More Japan reviews</a></div>
<?php }?>
<!-- India
<h2 id="india">India Travel Reviews</h2>
<?php if (!empty($Delhi)) {?>
<?php foreach ($Delhi as $index => $feedback) {?>
<div class="feedback_content">
<strong><?php echo $feedback['title'] ?></strong>
<p><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>,<?php echo $feedback['createdOn'] ?></div>
</div>
<?php }?><div class="more_tours"><a href="/reviews/india">More India reviews</a></div>
<?php }?>
-->
<!-- Myanmar -->
@ -66,11 +76,10 @@
<?php if (!empty($Yangon)) {?>
<?php foreach ($Yangon as $index => $feedback) {?>
<div class="feedback_content">
<strong style="height: auto; margin-bottom: 15px;"><?php echo $feedback['title'] ?></strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="tour rating">
<p style="height: auto;"><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?></div>
<strong><?php echo $feedback['title'] ?></strong>
<p><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>,<?php echo $feedback['createdOn'] ?></div>
</div>
<?php }?><div class="more_tours"><a href="/reviews/myanmar">More Myanmar reviews</a></div>
<?php }?>
@ -81,11 +90,10 @@
<?php if (!empty($Beijing)) {?>
<?php foreach ($Beijing as $index => $feedback) {?>
<div class="feedback_content">
<strong style="height: auto; margin-bottom: 15px;"><?php echo $feedback['title'] ?></strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="tour rating">
<p style="height: auto;"><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?></div>
<strong><?php echo $feedback['title'] ?></strong>
<p><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>,<?php echo $feedback['createdOn'] ?></div>
</div>
<?php }?> <div class="more_tours"><a href="/reviews/china">More China reviews</a></div>
<?php }?>

@ -1,29 +1,37 @@
<p style="text-align: center;margin-top: 80px;margin-bottom: 0;clear:both;">Discover real reviews of <a href="/about-us/highlights-travel-family">Highlights Travel Family</a>'s best-rated service across trusted platforms. </p>
<p style="text-align: center;margin-top: 80px;margin-bottom: 0;"><a href="https://www.chinahighlights.com/" target="blank">China Highlights</a>, Asia Highlights, and <a href="https://www.globalhighlights.com/" target="blank">Global Highlights</a> collaborate to provide families and couples with personalized and stress-free experiences in diverse destinations.</p>
<div class="visible-xs" style="margin: 20px 20px 90px 20px; ">
<img class="img-responsive" height="69" src="https://images.chinahighlights.com/allpicture/2024/07/22bf1a7554fc4906bdeaa6536ffe514b_cut_175x68_241_1719916246.png" style="float: left; width: 150px; margin: 0 auto; display: block;" width="175" alt="Trip Advisor certificate of excellence 2024">
<img height="40" src="https://images.asiahighlights.com/allpicture/2024/04/0c58b3494bc04eeb9c5d3bdf55e55fad_cut_200x111_241.jpg" style="width: 120px; height: auto; display: block; float: right;" width="211" alt="tour rating">
<img class="img-responsive" height="69" src="https://data.asiahighlights.com/image/forms/ah-ta-2023-certificate.png" style="float: left; width: 150px; margin: 0 auto;
display: block;" width="175">
<img height="40" src="https://data.asiahighlights.com/image/forms/ah-ch-gh-tp-rating.png" style="width: 120px; height: auto; display: block;
float: right;" width="211">
</div>
<div class="table-responsive" style="margin-bottom: 20px;" rel="nofollow">
<table style="width: max-content;">
<div class="table-responsive" style="margin-bottom: 20px;">
<table>
<tbody>
<tr>
<td class="hidden-xs feedback_logo">
<img class="img-responsive" height="69" src="https://images.chinahighlights.com/allpicture/2024/07/22bf1a7554fc4906bdeaa6536ffe514b_cut_175x68_241_1719916246.png" style="margin: 0px auto; " width="175" alt="Trip Advisor certificate of excellence 2024"> <img alt="Tour Review" class="img-responsive" height="278" src="https://images.asiahighlights.com/allpicture/2024/04/0c58b3494bc04eeb9c5d3bdf55e55fad_cut_200x111_241.jpg" style="width: 170px; display: block; margin: 10px auto 0px; " width="1133">
<td class="hidden-xs">
<div class="feedback_logo">
<img class="img-responsive" height="69" src="https://data.asiahighlights.com/image/forms/ah-ta-2023-certificate.png" style="margin: 0px auto; " width="175"> <img alt="Tour Review" class="img-responsive" height="278" src="https://data.asiahighlights.com/image/forms/ah-ch-gh-tp-rating.png" style="width: 170px; display: block; margin: 10px auto 0px; " width="1133"></div>
</td>
<?php foreach ($feedback_list as $index => $feedback) {?>
<td class="tour_feedback feedback_content">
<td>
<div class="tour_feedback">
<div class="feedback_content">
<strong>
<?php echo $feedback['title'] ?>
</strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="tour rating">
<p>
<?php echo $feedback['content'] ?>
</p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name">
<?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?>
</div>
<?php echo $feedback['customer'] ?>,
<?php echo $feedback['createdOn'] ?>
</div>
</div>
</div>
</td>
<?php }?>
</tr>

@ -1,29 +0,0 @@
<div class="right_tour">
<div class="feedback_logo" style="width: auto; display: flex;">
<img height="65" style="margin: 0px auto; " width="150"
src="https://images.chinahighlights.com/allpicture/2024/07/22bf1a7554fc4906bdeaa6536ffe514b_cut_175x68_241_1719916246.png" alt="Trip Advisor certificate of excellence 2024"/>
<img alt="Tour rating" class="img-responsive" height="278"
style="width: 140px; display: block; margin: 0 auto; " width="1133"
src="https://images.asiahighlights.com/allpicture/2024/04/0c58b3494bc04eeb9c5d3bdf55e55fad_cut_200x111_241.jpg" />
</div>
<p style="text-align: center;
margin-top: 10px;
margin-bottom: 0;
font-size: 18px;
line-height: 21px;">Discover real reviews of <a href="/about-us/highlights-travel-family">Highlights Travel Family</a>'s best-rated service across trusted platforms.</p>
<?php foreach ($feedback_list as $index => $feedback) {?>
<div class="tour_feedback" style="width: auto; height: auto;">
<div class="feedback_content">
<strong style="height: auto;"><?php echo $feedback['title'] ?></strong>
<p class="feedback_rating"><img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" alt="tour rating"></p>
<p><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">more</a>
<div class="customer_name">
<?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?>
</div>
</div>
</div>
<?php }?>
<p style="margin-top: 20px;"><a href="/reviews">More reviews</a></p>
</div>

@ -1,19 +1,19 @@
<p style="text-align: center;margin-top: 80px;margin-bottom: 0;clear:both;">Discover real reviews of <a href="/about-us/highlights-travel-family">Highlights Travel Family</a>'s best-rated service across trusted platforms.</p>
<p style="text-align: center;margin-top: 80px;margin-bottom: 0;"><a href="https://www.chinahighlights.com/" target="blank">China Highlights</a>, Asia Highlights, and <a href="https://www.globalhighlights.com/" target="blank">Global Highlights</a> collaborate to provide families and couples with personalized and stress-free experiences in diverse destinations.</p>
<div class="visible-xs" style="margin: 20px 20px 90px 20px; ">
<img class="img-responsive" height="69" src="https://images.chinahighlights.com/allpicture/2024/07/22bf1a7554fc4906bdeaa6536ffe514b_cut_175x68_241_1719916246.png" style="float: left; width: 150px; margin: 0 auto;
display: block;" width="175" alt="Trip Advisor certificate of excellence 2024">
<img class="img-responsive" height="69" src="https://data.asiahighlights.com/image/forms/ah-ta-2023-certificate.png" style="float: left; width: 150px; margin: 0 auto;
display: block;" width="175">
<img height="40" src="https://data.asiahighlights.com/image/forms/ah-ch-gh-tp-rating.png" style="width: 120px; height: auto; display: block;
float: right;" width="211" alt="tour rating">
float: right;" width="211">
</div>
<div class="table-responsive" style="margin-bottom: 20px;" rel="nofollow">
<div class="table-responsive" style="margin-bottom: 20px;">
<table>
<tbody>
<tr>
<td class="hidden-xs">
<div class="feedback_logo">
<img class="img-responsive" height="69" src="https://images.asiahighlights.com/allpicture/2024/04/b3e0271ca0874b7cb0342ea6f2987723_cut_175x68_241.jpg" style="margin: 0px auto; " width="175" alt="Trip Advisor certificate of excellence 2023"> <img alt="Tour Review" class="img-responsive" height="278" src="https://images.asiahighlights.com/allpicture/2024/04/0c58b3494bc04eeb9c5d3bdf55e55fad_cut_200x111_241.jpg" style="width: 170px; display: block; margin: 10px auto 0px; " width="1133"></div>
<img class="img-responsive" height="69" src="https://data.asiahighlights.com/image/forms/ah-ta-2023-certificate.png" style="margin: 0px auto; " width="175"> <img alt="Tour Review" class="img-responsive" height="278" src="https://data.asiahighlights.com/image/forms/ah-ch-gh-tp-rating.png" style="width: 170px; display: block; margin: 10px auto 0px; " width="1133"></div>
</td>
<?php foreach ($feedback_list as $index => $feedback) {?>
<td>
@ -22,13 +22,13 @@
<strong>
<?php echo $feedback['title'] ?>
</strong>
<p class="feedback_rating"><img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" alt="tour rating"></p>
<p>
<?php echo $feedback['content'] ?>
</p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name">
<?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?>
<?php echo $feedback['customer'] ?>,
<?php echo $feedback['createdOn'] ?>
</div>
</div>

@ -1,25 +0,0 @@
<img class="img-responsive" height="69" src="https://images.asiahighlights.com/allpicture/2024/04/b3e0271ca0874b7cb0342ea6f2987723_cut_175x68_241.jpg" style="float: left; width: 150px; margin: 0 auto;
display: block;" width="175">
<img height="40" src="https://images.asiahighlights.com/allpicture/2024/04/0c58b3494bc04eeb9c5d3bdf55e55fad_cut_200x111_241.jpg" style="width: 120px; height: auto; display: block;
float: right;" width="211">
<?php foreach ($feedback_list as $index => $feedback) {?>
<div class="tour_feedback_right">
<div class="feedback_content_right">
<strong>
<?php echo $feedback['title'] ?>
</strong>
<p class="feedback_rating"><img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>"></p>
<p>
<?php echo $feedback['content'] ?>
</p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name">
<?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?>
</div>
</div>
</div>
<?php }?>

@ -12,21 +12,18 @@
Adults and kids (≥10 years old)
</p>
<div class="numberBtn">
<input class="minaddBtn reduceadult" id="minusAdult" type="button" value="-" style="width: 50px !important;">
<input class="number" type="text" id="adultNumber" readonly value="1" name="adult" style="width: 70px !important;
text-align: center;
position: relative;
top: -7px;">
<input class="minaddBtn addadult" id="plusAdult" type="button" value="+" style="width: 50px !important;">
<input class="minaddBtn reduceadult" id="minusAdult" type="button" value="-">
<input class="number" type="text" id="adultNumber" readonly value="1" name="adult">
<input class="minaddBtn addadult" id="plusAdult" type="button" value="+">
</div>
</div>
</div>
<div id="childrenBlock" >
<p style="font-size: 20px;margin-bottom: 10px;"><strong>Children</strong></p>
<div class="kids_age" style="width: 30%;">
<div class="kids_age">
<p style="margin-bottom: 5px;">3-9 yrs old</p>
<select class="kids_number" id="childrenNumber" name="children_3_9_yrs" style="width: 55%;">
<select class="kids_number" id="childrenNumber" name="children_3_9_yrs">
<option value="0">0
</option>
<option value="1">1
@ -40,9 +37,9 @@
</option>
</select>
</div>
<div class="kids_age" style="width: 30%;">
<div class="kids_age">
<p style="margin-bottom: 5px;">0-2 yrs old</p>
<select class="kids_number" id="infantNumber" name="infant_0_2_yrs" style="width: 55%;">
<select class="kids_number" id="infantNumber" name="infant_0_2_yrs">
<option value="0">0
</option>
<option value="1">1
@ -331,7 +328,7 @@
margin-top: 0;
margin-bottom: 10px;
padding: 0;
">I am also available on:</p>
">I prefer to be contacted via:</p>
<div class="checkYes">
<input type="checkbox" value="yes" name="contact_via_whatsapp" id="whatsapp" class="checkBorder" >
@ -341,13 +338,32 @@
<input type="checkbox" value="yes" name="contact_via_iMessage" id="iMessage" class="checkBorder" >
<label for="iMessage">iMessage</label>
</div>
<div class="checkYes">
<input type="checkbox" value="yes" name="contact_via_phone_call" id="Phone" class="checkBorder" >
<label for="Phone">Phone call</label>
</div>
<div class="checkYes">
<input type="checkbox" value="yes" name="contact_via_email" id="Email" class="checkBorder" >
<label for="Email">Email</label>
</div>
<div class="checkYes">
<input type="checkbox" value="yes" name="contact_via_video_appointment" id="Video" class="checkBorder" >
<label for="Video">Video appointment</label>
</div>
<button class="sendButton" id="submit_gp_form" type="button">Inquire Now</button>
<input name="payment_required" id="payment_required" type="hidden" value="" />
<input name="product_code" type="hidden" value="<?php echo $meta_product_code; ?>"/>
<input name="itinerary" type="hidden" value="<?php echo $information->ic_title; ?>" />
</form>
<!-- <h3 style="text-align: center;
font-size: 20px;
line-height: 22px;">For a quick conversation, simply reach us via WhatsApp:</h3>
<div class="contactwechat"><img alt="Asia Highlights' wechat code" height="100px" src="https://data.asiahighlights.com/image/about/asia-highlights-whatsapp-code.jpg" width="100px" >
<div class="wechatinfo"><span class="wechatred">+8615807734776</span><br>
Email: <span class="wechatred">contact@asiahighlights.com</span></div>
</div>
-->
</div>
<script>

@ -1,5 +1,11 @@
<div class=topcontent>
<div class="infotopimage">
<?php if (!empty($meta_news_video) && !empty($meta_video_picture)) { ?>
<video autoplay="" controls="controls" id="bgvid" poster="<?php echo $meta_video_picture; ?>" src="<?php echo $meta_news_video; ?>" style="position: inherit;"> </video>
<?php }else{ ?>
<img src="<?php echo $meta_addon_picture; ?>"
alt="<?php echo !empty($information->ic_title)?$information->ic_title:'H1 title asiahighlights mobile first template'; ?>" class="img-responsive">
<?php } ?>
<div class="topbannerbg">
<div class="infocategory">
<a href="/" data-count="<?php echo count($breadcrumb_data) ?>">Home</a>
@ -7,44 +13,33 @@
<a href="<?php echo $item['ic_url'] ?>" data-index="<?php echo $index ?>" data-is-id="<?php echo $item['is_id'] ?>"><?php echo $item['ic_url_title'] ?></a>
<?php }?>
<div class="top_banner_tp">
<img src="https://images.asiahighlights.com/allpicture/2024/04/162495e225c5441eadcee119fa971806_cut_200x200_241.jpg" alt="Asia Highlights TrustPilot rating" class="img-responsive hidden-xs">
<img src="https://data.asiahighlights.com/image/forms/ah-top-banner-tp-rating.png" alt="Asia Highlights TrustPilot rating" class="img-responsive">
</div>
</div>
<div class="infotoptitle">
<h1 class="whitefont"><?php echo !empty($information->ic_title)?$information->ic_title:'H1 title asiahighlights mobile first template'; ?></h1>
<?php
$OPI_CodeUrls = [
'zzy' => 'https://www.globalhighlights.com/aboutus/team/ruru-zhou',
'2' => 'https://www.globalhighlights.com/aboutus/team/ruru-zhou',
'HWT' => 'https://www.globalhighlights.com/aboutus/team/mike-he',
'CA' => 'https://www.globalhighlights.com/aboutus/team/carol-wang',
'SI' => 'https://www.globalhighlights.com/aboutus/team/simon-huang',
'TJQ' => 'https://www.globalhighlights.com/aboutus/team/cindy-tang',
'CLA' => 'https://www.globalhighlights.com/aboutus/team/claire-wang',
'Albee' => 'https://www.globalhighlights.com/aboutus/team/albee-ning',
'KM' => 'https://www.globalhighlights.com/aboutus/team/kimi-huang',
'RY' => 'https://www.globalhighlights.com/aboutus/team/rita-yu',
'QMY' => 'https://www.globalhighlights.com/aboutus/team/chris-quan',
'CY' => 'https://www.globalhighlights.com/aboutus/team/cynthia-li',
'Vicky' => 'https://www.globalhighlights.com/aboutus/team/vicky-leng',
'LXW' => 'https://www.globalhighlights.com/aboutus/team/carper-li',
'zzyGH' => 'https://www.globalhighlights.com/aboutus/team/ruru-zhou',
];
$OPI_Code = empty($OPI_Code) ? '' : $OPI_Code;
if (!empty($meta_news_createdate)) {?>
<div class="authorupdate">
Written by
<?php if (array_key_exists($OPI_Code, $OPI_CodeUrls)) {?>
<strong><a href="<?php echo $OPI_CodeUrls[$OPI_Code]; ?>" target="_blank"><?php echo $author; ?></a></strong>
<?php } else { ?>
<strong><?php echo $author; ?></strong>
<?php }?>
Updated <?php echo date("M. j, Y", strtotime($meta_news_createdate)); ?>
</div>
<?php } ?>
<div class="authorupdate">By <strong><?php echo !empty($author)?$author:''; ?></strong>Updated <?php echo date("M. j, Y",strtotime($information->ic_datetime)); ?></div>
</div>
</div>
</div>
<?php if ($ads_by_google) { ?>
<style>
#adsense-head-ads {
height: 427px;
min-height: 427px;
background: url(https://data.viaggio-in-cina.it/information-view/information/img/adsense.gif) center center no-repeat;
}
@media screen and (max-width: 767px) {
#adsense-head-ads {
height: 320px;
min-height: 320px;
}
}
</style>
<ins id="adsense-head-ads" class="adsbygoogle" style="display:block" data-ad-client="ca-pub-4231674166786366" data-ad-slot="1166484387" data-ad-format="auto" data-full-width-responsive="true"></ins>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4231674166786366"
crossorigin="anonymous"></script>
<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>
<?php } ?>
</div>

@ -8,128 +8,135 @@
<form action="/orders/quick_inquiry_save" method="post" novalidate="" id="info_page_form">
<textarea id="form_additionalrequirements" name="additional_requirements" placeholder="E.g.: This is a big trip for anniversary, honeymoon, birthday celebration..." style="height:90px;"></textarea>
<div class="selectionBlock">
<h4 style="margin-bottom: 0;margin-top: 0; padding-bottom: 0;">
How would you travel?
</h4>
<div id="group_error_msg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please select number in your group.</div>
</div>
<div class="travel_group">
<input type="radio" value="Family" id="Family" name="travel_group">
<label for="Family" class="family">
Family
</label>
</div>
<div class="travel_group">
<input type="radio" value="Couple" id="Couple" name="travel_group">
<label for="Couple" class="couple">
Couple
</label>
</div>
<div class="travel_group">
<input type="radio" value="Solo" id="Solo" name="travel_group">
<label for="Solo" class="solo">
Solo
</label>
</div>
<div class="travel_group">
<input type="radio" value="group" id="Other" name="travel_group">
<label for="Other" class="group">
Other group
</label>
</div>
<div id="adultBlock" style="display: none">
<p style="margin-top: 0;margin-bottom: 0;"><strong>Adults number (age ≥ 18 years old)</strong></p>
<div class="kids_age">
<select class="kids_number" id="adult_18_plus" name="adult_18_plus" >
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
</select>
<p style="
margin-top: 5px;font-size: 18px;
">people</p>
</div>
</div>
<div class="clear"></div>
<div id="childrenBlock" style="display: none">
<p style="margin-top: 0;margin-bottom: 0;"><strong>Children number</strong></p>
<div class="kids_age">
<p style="margin-bottom: 5px;">10-17 yrs old</p>
<select class="kids_number" id="teenagerNumber" name="teenager_10_17">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<p style="
margin-top: 10px;font-size: 18px;
">people</p>
</div>
<div class="kids_age">
<p style="margin-bottom: 5px;">3-9 yrs old</p>
<select class="kids_number" id="childrenNumber" name="children_3_9">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<p style="
margin-top: 10px;font-size: 18px;
">people</p>
</div>
<div class="kids_age">
<p style="margin-bottom: 5px;">0-2 yrs old</p>
<select class="kids_number" id="infantNumber" name="infant_0_2">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<p style="
margin-top: 10px;font-size: 18px;
">people</p>
</div>
</div>
</div>
<div class="selectionBlock" style="margin-bottom: 0;">
<p style="
margin-bottom: 0px;
">
<strong>Number in your group</strong>
</p>
<div id="group_error_msg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please select number in your group.</div>
</div>
<div class="travel_group">
<input type="radio" value="Family" id="Family" name="travel_group">
<label for="Family" class="family">
Family
</label>
</div>
<div class="travel_group">
<input type="radio" value="Couple" id="Couple" name="travel_group">
<label for="Couple" class="couple">
Couple
</label>
</div>
<div class="travel_group">
<input type="radio" value="Solo" id="Solo" name="travel_group">
<label for="Solo" class="solo">
Solo
</label>
</div>
<div class="travel_group">
<input type="radio" value="group" id="Other" name="travel_group">
<label for="Other" class="group">
Other group
</label>
</div>
<div id="adultBlock" style="display: none">
<div class="peopleSelect">
<p style=" margin-top: 10px;
margin-bottom: 10px;"><strong>
Adults (≥18 years old)
</strong> </p>
<button class="minaddBtn reduceadult" id="minusAdult" type="button"
value="-">-</button>
<input class="number" type="text" value="2" id="adultNumber" name="adult">
<button class="minaddBtn addadult" type="button" id="plusAdult" value="+">+</button>
</div>
<div class="age_range">
<p>
Adults' ages
</p>
<div class="checkYes" style="float:left;">
<label for="65+">
<input type="checkbox" value="yes" name="age_65_plus" id="65+" class="checkBorder" >65+
</label>
</div>
<div class="checkYes" style="float:left;">
<label for="51-64">
<input type="checkbox" value="yes" name="age_51_64" id="51-64" class="checkBorder" >51-64
</label>
</div>
<div class="checkYes" style="float:left;">
<label for="41-50">
<input type="checkbox" value="yes" name="age_41_50" id="41-50" class="checkBorder" >41-50
</label>
</div>
<div class="checkYes" style="float:left;">
<label for="31-40">
<input type="checkbox" value="yes" name="age_31_40" id="31-40" class="checkBorder" >31-40
</label>
</div>
<div class="checkYes" style="float:left;">
<label for="18-30">
<input type="checkbox" value="yes" name="age_18_30" id="18-30" class="checkBorder" >18-30
</label>
</div>
</div>
</div>
<div class="clear"></div>
<div id="childrenBlock" style="display: none">
<p style=" margin-top: -10px; margin-bottom: 5px;"><strong>Children (age of children at time of trip)</strong></p>
<div class="kids_age">
<p style="margin-bottom: 5px;">10-17 yrs old</p>
<select class="kids_number" id="teenagerNumber" name="teenager_10_17_yrs">
<option value="0">0
</option>
<option value="1">1
</option>
<option value="2">2
</option>
<option value="3">3
</option>
<option value="4">4
</option>
</select>
</div>
<div class="kids_age">
<p style="margin-bottom: 5px;">3-9 yrs old</p>
<select class="kids_number" id="childrenNumber" name="children_3_9_yrs">
<option value="0">0
</option>
<option value="1">1
</option>
<option value="2">2
</option>
<option value="3">3
</option>
<option value="4">4
</option>
</select>
</div>
<div class="kids_age">
<p style="margin-bottom: 5px;">0-2 yrs old</p>
<select class="kids_number" id="infantNumber" name="infant_0_2_yrs">
<option value="0">0
</option>
<option value="1">1
</option>
<option value="2">2
</option>
<option value="3">3
</option>
<option value="4">4
</option>
</select>
</div>
</div>
</div>
<div class="selectionBlock" style="margin-bottom: 10px;">
<p style=" margin-top: 10px;
@ -140,79 +147,41 @@
<div class="requiredArea" style="margin-top:-10px;">Select your travel data.</div>
</div>
<div class="travel_group date_select" >
<input type="radio" value="exact dates" id="exact" name="trip_date">
<input type="radio" value="exact travel dates" id="exact" name="trip_date">
<label for="exact" class="updatedestination" style="font-size: 18px;">
Exact dates
Exact travel dates
</label>
</div>
<div class="travel_group date_select" >
<input type="radio" value="approximate dates" id="approximate" name="trip_date">
<input type="radio" value="approximate travel dates" id="approximate" name="trip_date">
<label for="approximate" class="updatedestination" style="font-size: 18px;">
Approximate dates
Approximate travel dates
</label>
</div>
<div class="travel_group date_select" >
<input type="radio" value="Undecided dates" id="yet" name="trip_date">
<input type="radio" value="haven't decided travel dates" id="yet" name="trip_date">
<label for="yet" class="updatedestination" style="font-size: 18px;">
Undecided dates
Not decided travel dates
</label>
</div>
<div class="trip_date_length" id="tripDateBlock" style="display: none">
<p style="margin-bottom: 10px;">Select your travel date and trip length (days).</p>
<div id='dateSelectionBlock'>
<div id='date_start_block'>
<input type="text" class="arrivalDate datepicker" id="starting_date" name="date_start" value="" placeholder="Select your exact travel date." autocomplete="off" style="width: auto; float: left; margin-right: 15px; height: 30px;
<input type="text" class="arrivalDate datepicker" id="starting_date" name="date_start" value="" placeholder="mm/dd/yyyy" autocomplete="off" style="width: auto; float: left; margin-right: 15px; height: 30px;
margin-top: 5px;">
<input type="month" id="expectedMonth" name="expected_month" placeholder="Select your expected travel date." style="width: auto; float: left; margin-right: 15px;height: 30px;
margin-top: 5px;">
</div>
<select class="country_code" id="expectedMonth" name="expected_month" style="margin-top: 15px;">
<option value="" disabled selected>Select your approximate travel date.</option>
<option value="Mar. 2024">Mar. 2024</option>
<option value="Apr. 2024">Apr. 2024</option>
<option value="May. 2024">May. 2024</option>
<option value="Jun. 2024">Jun. 2024</option>
<option value="Jul. 2024">Jul. 2024</option>
<option value="Aug. 2024">Aug. 2024</option>
<option value="Sep. 2024">Sep. 2024</option>
<option value="Oct. 2024">Oct. 2024</option>
<option value="Nov. 2024">Nov. 2024</option>
<option value="Dec. 2024">Dec. 2024</option>
<option value="Jan. 2025">Jan. 2025</option>
<option value="Feb. 2025">Feb. 2025</option>
<option value="Mar. 2025">Mar. 2025</option>
<option value="Apr. 2025">Apr. 2025</option>
<option value="May. 2025">May. 2025</option>
<option value="Jun. 2025">Jun. 2025</option>
<option value="Jul. 2025">Jul. 2025</option>
<option value="Aug. 2025">Aug. 2025</option>
<option value="Sep. 2025">Sep. 2025</option>
<option value="Oct. 2025">Oct. 2025</option>
<option value="Nov. 2025">Nov. 2025</option>
<option value="Dec. 2025">Dec. 2025</option>
<option value="Jan. 2026">Jan. 2026</option>
<option value="Feb. 2026">Feb. 2026</option>
<option value="Mar. 2026">Mar. 2026</option>
<option value="Apr. 2026">Apr. 2026</option>
<option value="May. 2026">May. 2026</option>
<option value="Jun. 2026">Jun. 2026</option>
<option value="Jul. 2026">Jul. 2026</option>
<option value="Aug. 2026">Aug. 2026</option>
<option value="Sep. 2026">Sep. 2026</option>
<option value="Oct. 2026">Oct. 2026</option>
<option value="Nov. 2026">Nov. 2026</option>
<option value="Dec. 2026">Dec. 2026</option>
<option value="Jan. 2027">Jan. 2027</option>
<option value="Feb. 2027">Feb. 2027</option>
<option value="Mar. 2027">Mar. 2027</option>
<option value="Apr. 2027">Apr. 2027</option>
</select>
</div>
<div class="peopleSelect">
<div class="numberBtn">
<input class="minaddBtn" id="tripLengthMinus" type="button" value="-">
<input class="number" type="text" value="14" id="tripLengthNumber" name="trip_length">
<input class="minaddBtn" id="tripLengthPlus" type="button" value="+">
</div>
</div>
</div>
</div>
<input class="FullName" id="realname" name="name" placeholder="Your name *" required="" type="text" value="" />
@ -223,7 +192,7 @@
<div id="email_errmsg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please enter your email</div>
</div>
<div id="email_verify_errmsg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please verify your email</div>
</div>
@ -485,7 +454,7 @@
<div id="contact_errmsg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please enter your phone number.</div> </div>
<p style="margin-top: 0;margin-bottom: 5px;padding: 0;">I am also available on:</p>
<p style="margin-top: 0;margin-bottom: 5px;padding: 0;">I prefer to be contacted via:</p>
<div class="checkYes">
<input type="checkbox" value="yes" name="contact_via_whatsapp" id="whatsapp" class="checkBorder" >
<label for="whatsapp">WhatsApp</label>
@ -494,18 +463,38 @@
<input type="checkbox" value="yes" name="contact_via_iMessage" id="iMessage" class="checkBorder" >
<label for="iMessage">iMessage</label>
</div>
<button class="sendButton" id="info_page_button" name="booking_form_inquiry_list" type="button">Inquire Now</button> <input name="product_code" type="hidden" value="YDFW-AH"/>
<div class="checkYes">
<input type="checkbox" value="yes" name="contact_via_phone_call" id="Phone" class="checkBorder" >
<label for="Phone">Phone call</label>
</div>
<div class="checkYes">
<input type="checkbox" value="yes" name="contact_via_email" id="Email" class="checkBorder" >
<label for="Email">Email</label>
</div>
<div class="checkYes">
<input type="checkbox" value="yes" name="contact_via_video_appointment" id="Video" class="checkBorder" >
<label for="Video">Video appointment</label>
</div>
<button class="sendButton" id="info_page_button" name="booking_form_inquiry_list" type="button">Inquire Now</button> <input name="product_code" type="hidden" value="YDFW-AH"/>
<input name="ic_title" type="hidden" value="YDFW-AH" />
</form>
<!--
<h3 style="text-align: center; font-size: 20px; line-height: 22px;">For a quick conversation, simply reach us via WhatsApp:</h3>
<div class="contactwechat"><img alt="asia highlights' wechat code" height="100px" src="https://data.asiahighlights.com/image/about/asia-highlights-whatsapp-code.jpg" width="100px" />
<div class="wechatinfo"><span class="wechatred">+8615807734776</span><br />
Email: <span class="wechatred">contact@asiahighlights.com</span></div>
</div>
-->
</div>
</div>
<script src="https://www.recaptcha.net/recaptcha/enterprise.js?render=6Lf828MhAAAAANNetijCXKwW5ARyhcJ-b1Hhslja"></script>
<script src="https://data.asiahighlights.com/min/?f=/js/jquery-1.8.2.min.js,/js/flatpickr-4.6.1.min.js"></script>
<script>
var selectedExpectedDate = '';
document.addEventListener('DOMContentLoaded', () => {
flatpickr("#starting_date", {
@ -515,10 +504,10 @@
disableMobile: true,
minDate: "today"
});
var quick_inquiry_button = document.getElementById("info_page_button");
var quick_inquiry_form = document.getElementById("info_page_form");
quick_inquiry_button.addEventListener('click', function(event) {
var validateResult = validateQuickInquiryForm();
if (validateResult) {
@ -537,10 +526,10 @@
quick_inquiry_button.innerText = "Submitted successfully";
});
}
}
}
});
});
function validateQuickInquiryForm() {
var result = true;
var realnameVal = document.getElementById("realname").value;
@ -548,33 +537,33 @@
var expectedDateVal = document.getElementById("starting_date").value;
var expectedMonthVal = document.getElementById("expectedMonth").value;
var contactVal = document.getElementById("PhoneNo").value;
var realnameErrEl = document.getElementById("realname_errmsg");
var emailErrEl = document.getElementById("email_errmsg");
var emailVerifyErrEl = document.getElementById("email_verify_errmsg");
var startingDateErrEl = document.getElementById("date_error_msg");
var contactErrEl = document.getElementById("contact_errmsg");
var groupErrEl = document.getElementById("group_error_msg");
realnameErrEl.style.display = 'none';
emailErrEl.style.display = 'none';
emailVerifyErrEl.style.display = 'none';
startingDateErrEl.style.display = 'none';
contactErrEl.style.display = 'none';
groupErrEl.style.display = 'none';
var travel_group_is_checked = false;
document.querySelectorAll('input[name="travel_group"]').forEach(function(groupNode) {
if (groupNode.checked) {
travel_group_is_checked = true;
}
});
if (travel_group_is_checked === false) {
groupErrEl.style.display = '';
result = false;
}
var tripDate_is_checked = false;
if (selectedExpectedDate === 'exact') {
tripDate_is_checked = expectedDateVal !== '';
@ -583,13 +572,13 @@
} else if (selectedExpectedDate === 'yet') {
tripDate_is_checked = true;
}
//时间选择
if (!tripDate_is_checked) {
//时间选择
if (!tripDate_is_checked) {
startingDateErrEl.style.display = '';
result = false;
}
}
if (realnameVal === '') {
realnameErrEl.style.display = '';
result = false;
@ -612,13 +601,25 @@
}
</script>
<script>
$(function () {
var $adultBlock = $('#adultBlock');
var $childrenBlock = $('#childrenBlock');
var $adultNumberInput = $('#adultNumber');
var adultNumber = $adultNumberInput.val();
var $teenagerNumberInput = $('#teenagerNumber');
var teenagerNumber = $teenagerNumberInput.val();
var $childrenNumberInput = $('#childrenNumber');
var childrenNumber = $childrenNumberInput.val();
var $infantNumberInput = $('#infantNumber');
var infantNumber = $infantNumberInput.val();
$('input[name="travel_group"]').each((i, groupEle) => {
$(groupEle).click(function (e) {
$teenagerNumberInput.val(0);
$childrenNumberInput.val(0);
$infantNumberInput.val(0);
var currentTarget = e.currentTarget;
if (currentTarget.id === 'Family' || currentTarget.id === 'Other' ) {
$adultBlock.show();
@ -628,15 +629,15 @@
$childrenBlock.hide();
}
if (currentTarget.id === 'Couple') {
$('#adult_18_plus').val('2');
} else if (currentTarget.id === 'Solo') {
$('#adult_18_plus').val('1');
}
$adultNumberInput.val(2);
} else if (currentTarget.id === 'Solo') {
$adultNumberInput.val(1);
}
})
});
var $tripDateBlock = $('#tripDateBlock');
var $expectedDate = $('#date_start_block');
var $expectedDate = $('#starting_date');
var $expectedMonth = $('#expectedMonth');
var $dateSelectionBlock = $('#dateSelectionBlock');
var $expectedTravelDateBlock = $('#expectedTravelDateBlock');
@ -665,6 +666,53 @@
});
var tripLength = $('#tripLengthNumber').val();
//成人
$('#plusAdult').click(function () {
adultNumber++;
$adultNumberInput.val(adultNumber);
});
$('#minusAdult').click(function () {
if (adultNumber > 1) {
adultNumber--;
$adultNumberInput.val(adultNumber);
}
});
// 青少年
$('#plusTeenager').click(function () {
teenagerNumber++;
$teenagerNumberInput.val(teenagerNumber);
});
$('#minusTeenager').click(function () {
if (teenagerNumber > 0) {
teenagerNumber--;
$teenagerNumberInput.val(teenagerNumber);
}
});
// 儿童
$('#plusChildren').click(function () {
childrenNumber++;
$childrenNumberInput.val(childrenNumber);
});
$('#minusChildren').click(function () {
if (childrenNumber > 0) {
childrenNumber--;
$childrenNumberInput.val(childrenNumber);
}
});
// 婴儿
$('#plusInfant').click(function () {
infantNumber++;
$infantNumberInput.val(infantNumber);
});
$('#minusInfant').click(function () {
if (infantNumber > 0) {
infantNumber--;
$infantNumberInput.val(infantNumber);
}
});
// Trip Length
$('#tripLengthPlus').click(function () {
@ -682,7 +730,7 @@
</script>
<script>
// 折叠展开
document.querySelectorAll('div[collapse]').forEach(function ($collapseDiv, index) {
$collapseDiv.onclick = function (e) {
let collapseStatus = $collapseDiv.getAttribute('collapse-status');
@ -759,7 +807,7 @@
target.style.removeProperty('transition-property');
}, duration);
}
function slideDown(target, duration) {
duration = duration ? duration : 500;
target.style.removeProperty('display');
@ -791,28 +839,11 @@
}, duration);
}
</script>
<script src="https://data.asiahighlights.com/min/?f=/js/jquery-1.8.2.min.js,/js/jquery.mailAutoComplete-4.0.min.js"></script>
<style>
.date_select {width: 31% !important; margin-bottom: 10px;}
.date_select {width: 27.5% !important; margin-bottom: 10px;}
.age_range { margin-top: 45px;}
@media (max-width: 750px){
.date_select {width: 47% !important;}
.date_select label {font-size:17px !important;}
.date_select {width: 93% !important; margin-bottom: 0 !important;}
.age_range { margin-top: 0;}
}
</style>
<style type="text/css">
.emailist{border:1px solid #bdbdbd; border-radius: 4px; background-color:#fff; color:#666; font-size:14px; list-style-type:0; padding:0; margin:0; overflow:hidden;}
.emailist li{ padding: 2px 11px;
cursor: pointer;
font-size: 18px;
text-shadow: none;
color: #000;
}
.emailist .on, .emailist li:hover{background-color:#eee;}
</style>
<script>
$("#email").mailAutoComplete({
email: ['gmail.com','outlook.com','yahoo.com','icloud.com','hotmail.com','live.com','aol.com']
});
</script>
</style>

@ -1,131 +1,139 @@
<script src="https://www.recaptcha.net/recaptcha/enterprise.js?render=6Lf828MhAAAAANNetijCXKwW5ARyhcJ-b1Hhslja"></script>
<div class="tmbottom">
<h3 style="text-align: center; font-size: 20px; line-height: 22px;">Inquire now! Your 1:1 travel consultant will reply within 1 working day.</h3>
<h3 style="text-align: center; font-size: 20px; line-height: 22px;">Inquire now! Your 1:1 travel consultant will reply within 1 working day.</h3>
<form action="/orders/quick_inquiry_save" method="post" novalidate="" id="quick_inquiry_form">
<textarea id="form_additionalrequirements" name="additional_requirements" placeholder="E.g.: This is a big trip for anniversary, honeymoon, birthday celebration..."></textarea>
<div class="selectionBlock">
<h4 style="margin-bottom: 0;margin-top: 0; padding-bottom: 0;">
How would you travel?
</h4>
<div id="group_error_msg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please select number in your group.</div>
</div>
<div class="travel_group">
<input type="radio" value="Family" id="Family" name="travel_group">
<label for="Family" class="family">
Family
</label>
</div>
<div class="travel_group">
<input type="radio" value="Couple" id="Couple" name="travel_group">
<label for="Couple" class="couple">
Couple
</label>
</div>
<div class="travel_group">
<input type="radio" value="Solo" id="Solo" name="travel_group">
<label for="Solo" class="solo">
Solo
</label>
</div>
<div class="travel_group">
<input type="radio" value="group" id="Other" name="travel_group">
<label for="Other" class="group">
Other group
</label>
</div>
<div class="selectionBlock">
<h4 style="margin-bottom: 0;margin-top: 0; padding-bottom: 0;">
How would you travel?
</h4>
<div id="group_error_msg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please select number in your group.</div>
</div>
<div class="travel_group">
<input type="radio" value="Family" id="Family" name="travel_group">
<label for="Family" class="family">
Family
</label>
</div>
<div class="travel_group">
<input type="radio" value="Couple" id="Couple" name="travel_group">
<label for="Couple" class="couple">
Couple
</label>
</div>
<div class="travel_group">
<input type="radio" value="Solo" id="Solo" name="travel_group">
<label for="Solo" class="solo">
Solo
</label>
</div>
<div class="travel_group">
<input type="radio" value="group" id="Other" name="travel_group">
<label for="Other" class="group">
Other group
</label>
</div>
<div id="adultBlock" style="display: none">
<p style="
margin-bottom: 0;
font-size: 22px;
margin-top: 20px;
">When you plan to take the trip:</p>
<div class="peopleSelect">
<p style="margin-top: 20px;"><strong>
Adults (≥18 years old)
</strong> </p>
<button class="minaddBtn reduceadult" id="minusAdult" type="button"
value="-">-</button>
<input class="number" type="text" value="2" id="adultNumber" name="adult">
<button class="minaddBtn addadult" type="button" id="plusAdult" value="+">+</button>
</div>
<div class="age_range">
<p>
Adults' ages
</p>
<div class="checkYes" style="float:left;">
<label for="65+">
<input type="checkbox" value="yes" name="age_65_plus" id="65+" class="checkBorder" >65+
</label>
</div>
<div class="checkYes" style="float:left;">
<label for="51-64">
<input type="checkbox" value="yes" name="age_51_64" id="51-64" class="checkBorder" >51-64
</label>
</div>
<div class="checkYes" style="float:left;">
<label for="41-50">
<input type="checkbox" value="yes" name="age_41_50" id="41-50" class="checkBorder" >41-50
</label>
</div>
<div class="checkYes" style="float:left;">
<label for="31-40">
<input type="checkbox" value="yes" name="age_31_40" id="31-40" class="checkBorder" >31-40
</label>
</div>
<div class="checkYes" style="float:left;">
<label for="18-30">
<input type="checkbox" value="yes" name="age_18_30" id="18-30" class="checkBorder" >18-30
</label>
</div>
</div>
</div>
<div class="clear"></div>
<div id="childrenBlock" style="display: none">
<p style="margin-top: 0;margin-bottom: 0;"><strong>Children</strong></p>
<div class="kids_age">
<p style="margin-bottom: 5px;">10-17 yrs old</p>
<select class="kids_number" id="teenagerNumber" name="teenager_10_17_yrs">
<option value="0">0
</option>
<option value="1">1
</option>
<option value="2">2
</option>
<option value="3">3
</option>
<option value="4">4
</option>
</select>
</div>
<div class="kids_age">
<p style="margin-bottom: 5px;">3-9 yrs old</p>
<select class="kids_number" id="childrenNumber" name="children_3_9_yrs">
<option value="0">0
</option>
<option value="1">1
</option>
<div id="adultBlock" style="display: none">
<p style="margin-top: 0;margin-bottom: 0;"><strong>Adults number (age ≥ 18 years old)</strong></p>
<div class="kids_age">
<select class="kids_number" id="adult_18_plus" name="adult_18_plus" >
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
</select>
<p style="
margin-top: 5px;font-size: 18px;
">people</p>
</div>
</div>
<div class="clear"></div>
<div id="childrenBlock" style="display: none">
<p style="margin-top: 0;margin-bottom: 0;"><strong>Children number</strong></p>
<div class="kids_age">
<p style="margin-bottom: 5px;">10-17 yrs old</p>
<select class="kids_number" id="teenagerNumber" name="teenager_10_17">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<p style="
margin-top: 10px;font-size: 18px;
">people</p>
</div>
<div class="kids_age">
<p style="margin-bottom: 5px;">3-9 yrs old</p>
<select class="kids_number" id="childrenNumber" name="children_3_9">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<p style="
margin-top: 10px;font-size: 18px;
">people</p>
</div>
<div class="kids_age">
<p style="margin-bottom: 5px;">0-2 yrs old</p>
<select class="kids_number" id="infantNumber" name="infant_0_2">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<p style="
margin-top: 10px;font-size: 18px;
">people</p>
</div>
</div>
<option value="2">2
</option>
<option value="3">3
</option>
<option value="4">4
</option>
</select>
</div>
<div class="kids_age">
<p style="margin-bottom: 5px;">0-2 yrs old</p>
<select class="kids_number" id="infantNumber" name="infant_0_2_yrs">
<option value="0">0
</option>
<option value="1">1
</option>
<option value="2">2
</option>
<option value="3">3
</option>
<option value="4">4
</option>
</select>
</div>
</div>
</div>
</div>
<div class="selectionBlock">
<h4 style="margin-top: 0; margin-bottom: 0;">
@ -140,7 +148,7 @@
<div class="travel_group date_select">
<input type="radio" value="Handpicked comfort (4-star)" id="Handpicked" name="hotel">
<label for="Handpicked" class="family">
Selected comfort<br> (4-star)
Handpicked comfort<br> (4-star)
</label>
</div>
<div class="travel_group date_select">
@ -148,90 +156,43 @@
<label for="Standard" class="family">
Standard <br>(3-star)
</label>
</div>
</div>
</div>
<div class="selectionBlock" style="margin-bottom: 10px;">
<h4 style="margin-bottom: 0;margin-top: 0; padding-bottom: 0;">
When would you travel?
<div class="selectionBlock">
<h4 style="margin-top: 0; margin-bottom: 0;">
When would you travel?
</h4>
<div id="date_error_msg" style="display: none">
<div id="date_error_msg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Select your travel data.</div>
</div>
<div class="travel_group date_select" >
<input type="radio" value="exact dates" id="exact" name="trip_date">
<label for="exact" class="updatedestination" style="font-size: 18px;">
Exact dates
<div class="travel_group date_select">
<input type="radio" value="exact travel dates" id="exact" name="trip_date">
<label for="exact" class="family">
Exact travel dates
</label>
</div>
<div class="travel_group date_select" >
<input type="radio" value="approximate dates" id="approximate" name="trip_date">
<label for="approximate" class="updatedestination" style="font-size: 18px;">
Approximate dates
<div class="travel_group date_select">
<input type="radio" value="approximate travel dates" id="approximate" name="trip_date">
<label for="approximate" class="couple">
Approximate travel dates
</label>
</div>
<div class="travel_group date_select" >
<input type="radio" value="Undecided dates" id="yet" name="trip_date">
<label for="yet" class="updatedestination" style="font-size: 18px;">
Undecided dates
<div class="travel_group date_select">
<input type="radio" value="haven't decided travel dates" id="yet" name="trip_date">
<label for="yet" class="solo">
Undecided travel dates
</label>
</div>
<div class="trip_date_length" id="tripDateBlock" style="display: none">
<div id='dateSelectionBlock'>
<div id='date_start_block'>
<input type="text" class="arrivalDate datepicker" id="starting_date" name="date_start" value="" placeholder="Select your exact travel date." autocomplete="off" style="width: auto; float: left; margin-right: 15px; height: 30px;
margin-top: 5px;">
</div>
<select class="country_code" id="expectedMonth" name="expected_month" style="margin-top: 15px;">
<option value="" disabled selected>Select your approximate travel date.</option>
<option value="Mar. 2024">Mar. 2024</option>
<option value="Apr. 2024">Apr. 2024</option>
<option value="May. 2024">May. 2024</option>
<option value="Jun. 2024">Jun. 2024</option>
<option value="Jul. 2024">Jul. 2024</option>
<option value="Aug. 2024">Aug. 2024</option>
<option value="Sep. 2024">Sep. 2024</option>
<option value="Oct. 2024">Oct. 2024</option>
<option value="Nov. 2024">Nov. 2024</option>
<option value="Dec. 2024">Dec. 2024</option>
<option value="Jan. 2025">Jan. 2025</option>
<option value="Feb. 2025">Feb. 2025</option>
<option value="Mar. 2025">Mar. 2025</option>
<option value="Apr. 2025">Apr. 2025</option>
<option value="May. 2025">May. 2025</option>
<option value="Jun. 2025">Jun. 2025</option>
<option value="Jul. 2025">Jul. 2025</option>
<option value="Aug. 2025">Aug. 2025</option>
<option value="Sep. 2025">Sep. 2025</option>
<option value="Oct. 2025">Oct. 2025</option>
<option value="Nov. 2025">Nov. 2025</option>
<option value="Dec. 2025">Dec. 2025</option>
<option value="Jan. 2026">Jan. 2026</option>
<option value="Feb. 2026">Feb. 2026</option>
<option value="Mar. 2026">Mar. 2026</option>
<option value="Apr. 2026">Apr. 2026</option>
<option value="May. 2026">May. 2026</option>
<option value="Jun. 2026">Jun. 2026</option>
<option value="Jul. 2026">Jul. 2026</option>
<option value="Aug. 2026">Aug. 2026</option>
<option value="Sep. 2026">Sep. 2026</option>
<option value="Oct. 2026">Oct. 2026</option>
<option value="Nov. 2026">Nov. 2026</option>
<option value="Dec. 2026">Dec. 2026</option>
<option value="Jan. 2027">Jan. 2027</option>
<option value="Feb. 2027">Feb. 2027</option>
<option value="Mar. 2027">Mar. 2027</option>
<option value="Apr. 2027">Apr. 2027</option>
</select>
</div>
</div>
<div class="trip_date_length" id="tripDateBlock" style="display: none">
<p style="clear: both;margin-bottom: 10px;" id="trip_date_tip">Select your travel date.</p>
<div id="dateSelectionBlock">
<div id='flatpickrBlock'>
<input class="InquiryCalendar datepicker" id="starting_date" name="date_start" placeholder="Starting date *" readonly="readonly" type="text" value="" />
</div>
<input type="month" id="expectedMonth" name="expected_month" placeholder="Select your expected travel date.">
</div>
</div>
</div>
<input class="FullName" id="realname" name="name" placeholder="Your name *" required="" type="text" value="" />
<div id="realname_errmsg" style="display: none">
@ -240,11 +201,86 @@
<input class="EmailAddress" id="email" name="email" placeholder="Email *" required="" type="text" value="" />
<div id="email_errmsg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please enter your email.</div>
</div>
</div>
<div id="email_verify_errmsg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please verify your email.</div>
</div>
</div>
<!--<div class="selectionBlock">
<div class="peopleSelect">
<span class="formMemo">
Adults (≥12 years old)
</span>
<div class="numberBtn">
<input class="minaddBtn reduceadult" id="minusAdult" type="button" value="-">
<input class="number" type="text" id="adultNumber" readonly value="1" name="adultnumber">
<input class="minaddBtn addadult" id="plusAdult" type="button" value="+">
</div>
</div>
<div class="age_range">
<p>
Adults' ages
</p>
<div class="checkYes">
<label for="12-17">
<input type="checkbox" value="yes" name="adult age range 12 17" id="12-17" class="checkBorder">12-17
</label>
</div>
<div class="checkYes">
<label for="18-30">
<input type="checkbox" value="yes" name="adult age range 18 30" id="18-30" class="checkBorder">18-30
</label>
</div>
<div class="checkYes">
<label for="31-50">
<input type="checkbox" value="yes" name="adult age range 31 50" id="31-50" class="checkBorder">31-50
</label>
</div>
<div class="checkYes">
<label for="51-64">
<input type="checkbox" value="yes" name="adult age range 51 64" id="51-64" class="checkBorder">51-64
</label>
</div>
<div class="checkYes">
<label for="65+">
<input type="checkbox" value="yes" name="adult age range 65" id="65+" class="checkBorder">65+
</label>
</div>
</div>
<div class="peopleSelect">
<span class="formMemo">
Kids (2-11 years old)
</span>
<div class="numberBtn">
<input class="minaddBtn reducechild" id="minusKid" type="button" value="-">
<input class="kidNum" type="text" id="kidNumber" readonly value="0" name="kidnumber">
<input class="minaddBtn addchild" id="plusKid" type="button" value="+">
</div>
</div>
<div class="age_range">
<p>
Kids' ages
</p>
<div class="checkYes">
<label for="0">
<input type="checkbox" value="yes" name="kid age range 0 2" id="0" class="checkBorder">0-2
</label>
</div>
<div class="checkYes">
<label for="3">
<input type="checkbox" value="yes" name="kid age range 3 7" id="3" class="checkBorder">3-7
</label>
</div>
<div class="checkYes">
<label for="8">
<input type="checkbox" value="yes" name="kid age range 8 11" id="8" class="checkBorder">8-11
</label>
</div>
</div>
<div class="clear">
</div>
</div>-->
<select name="country_code" class="country_code">
<option style="font-weight: 600;" value="United States +1">United States&nbsp; &nbsp;+1</option>
<option style="font-weight: 600;" value="United Kingdom +44">United Kingdom&nbsp; &nbsp;+44</option>
@ -498,15 +534,15 @@
<option value="Zimbabwe +263">Zimbabwe&nbsp; &nbsp;+263</option>
<option value="Åland Islands +385">Åland Islands&nbsp; &nbsp;+35818</option>
</select>
<input class="Inquiryphone" id="PhoneNo" name="PhoneNo" placeholder="Phone number *" type="tel" value="" />
<input class="Inquiryphone" id="PhoneNo" name="PhoneNo" placeholder="Phone number *" type="tel" value="" />
<div id="contact_errmsg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please enter your phone number.</div> </div>
<p style="
margin-top: 0;
margin-bottom: 10px;
padding: 0;
">I am also available on:</p>
">I prefer to be contacted via:</p>
<div class="checkYes">
<input type="checkbox" value="yes" name="contact_via_whatsapp" id="whatsapp" class="checkBorder" >
<label for="whatsapp">WhatsApp</label>
@ -515,14 +551,36 @@ margin-bottom: 10px;
<input type="checkbox" value="yes" name="contact_via_iMessage" id="iMessage" class="checkBorder" >
<label for="iMessage">iMessage</label>
</div>
<button class="sendButton" id="quick_inquiry_button" name="quick_inquiry_button" type="button">Inquire Now</button> <input name="product_code" type="hidden" value="<?php echo $meta_product_code; ?>"/>
<div class="checkYes">
<input type="checkbox" value="yes" name="contact_via_phone_call" id="Phone" class="checkBorder" >
<label for="Phone">Phone call</label>
</div>
<div class="checkYes">
<input type="checkbox" value="yes" name="contact_via_email" id="Email" class="checkBorder" >
<label for="Email">Email</label>
</div>
<div class="checkYes">
<input type="checkbox" value="yes" name="contact_via_video_appointment" id="Video" class="checkBorder" >
<label for="Video">Video appointment</label>
</div>
<button class="sendButton" id="quick_inquiry_button" name="quick_inquiry_button" type="button">Inquire Now</button> <input name="product_code" type="hidden" value="<?php echo $meta_product_code; ?>"/>
<input name="itinerary" type="hidden" value="<?php echo $information->ic_title; ?>" />
</form>
<!--
<h3 style="text-align: center;
font-size: 20px;
line-height: 22px;">For a quick conversation, simply reach us via WhatsApp:</h3>
<div class="contactwechat"><img alt="Asia Highlights' wechat code" height="100px" src="https://data.asiahighlights.com/image/about/asia-highlights-whatsapp-code.jpg" width="100px" >
<div class="wechatinfo"><span class="wechatred">+8615807734776</span><br>
Email: <span class="wechatred">contact@asiahighlights.com</span></div>
</div>
-->
</div>
<script src="https://data.asiahighlights.com/min/?f=/js/jquery-1.8.2.min.js,/js/flatpickr-4.6.1.min.js"></script>
<script>
var selectedExpectedDate = '';
document.addEventListener('DOMContentLoaded', () => {
flatpickr("#starting_date", {
@ -535,7 +593,7 @@ document.addEventListener('DOMContentLoaded', () => {
var quick_inquiry_button = document.getElementById("quick_inquiry_button");
var quick_inquiry_form = document.getElementById("quick_inquiry_form");
quick_inquiry_button.addEventListener('click', function(event) {
var validateResult = validateQuickInquiryForm();
if (validateResult) {
@ -554,7 +612,7 @@ document.addEventListener('DOMContentLoaded', () => {
quick_inquiry_button.innerText = "Submitted successfully";
});
}
}
}
});
});
@ -629,12 +687,25 @@ function validateQuickInquiryForm() {
}
</script>
<script>
$(function () {
var $adultBlock = $('#adultBlock');
var $adultBlock = $('#adultBlock');
var $childrenBlock = $('#childrenBlock');
var $adultNumberInput = $('#adultNumber');
var adultNumber = $adultNumberInput.val();
var $teenagerNumberInput = $('#teenagerNumber');
var teenagerNumber = $teenagerNumberInput.val();
var $childrenNumberInput = $('#childrenNumber');
var childrenNumber = $childrenNumberInput.val();
var $infantNumberInput = $('#infantNumber');
var infantNumber = $infantNumberInput.val();
$('input[name="travel_group"]').each((i, groupEle) => {
$(groupEle).click(function (e) {
$teenagerNumberInput.val(0);
$childrenNumberInput.val(0);
$infantNumberInput.val(0);
var currentTarget = e.currentTarget;
if (currentTarget.id === 'Family' || currentTarget.id === 'Other' ) {
$adultBlock.show();
@ -644,19 +715,19 @@ function validateQuickInquiryForm() {
$childrenBlock.hide();
}
if (currentTarget.id === 'Couple') {
$('#adult_18_plus').val('2');
} else if (currentTarget.id === 'Solo') {
$('#adult_18_plus').val('1');
}
$adultNumberInput.val(2);
} else if (currentTarget.id === 'Solo') {
$adultNumberInput.val(1);
}
})
});
var $tripDateBlock = $('#tripDateBlock');
var $expectedDate = $('#date_start_block');
var $expectedDate = $('#flatpickrBlock');
var $expectedMonth = $('#expectedMonth');
var $dateSelectionBlock = $('#dateSelectionBlock');
var $tripDateTip = $('#trip_date_tip');
$('input[name="trip_date"]').each((i, tripDateEle) => {
$(tripDateEle).click(function (e) {
$expectedDate.val('');
@ -680,13 +751,58 @@ function validateQuickInquiryForm() {
}
})
});
//成人
$('#plusAdult').click(function () {
adultNumber++;
$adultNumberInput.val(adultNumber);
});
$('#minusAdult').click(function () {
if (adultNumber > 1) {
adultNumber--;
$adultNumberInput.val(adultNumber);
}
});
// 青少年
$('#plusTeenager').click(function () {
teenagerNumber++;
$teenagerNumberInput.val(teenagerNumber);
});
$('#minusTeenager').click(function () {
if (teenagerNumber > 0) {
teenagerNumber--;
$teenagerNumberInput.val(teenagerNumber);
}
});
// 儿童
$('#plusChildren').click(function () {
childrenNumber++;
$childrenNumberInput.val(childrenNumber);
});
$('#minusChildren').click(function () {
if (childrenNumber > 0) {
childrenNumber--;
$childrenNumberInput.val(childrenNumber);
}
});
// 婴儿
$('#plusInfant').click(function () {
infantNumber++;
$infantNumberInput.val(infantNumber);
});
$('#minusInfant').click(function () {
if (infantNumber > 0) {
infantNumber--;
$infantNumberInput.val(infantNumber);
}
});
})
</script>
<style>
.date_select {width: 31% !important;}
.date_select {width: 27.5% !important;}
@media (max-width: 750px){
.date_select {width: 47% !important;}
.date_select label {font-size:17px !important;}
.date_select {
width: 93% !important;
}
}
</style>
</style>

@ -6,37 +6,27 @@
<div class="selectionBlock" style="margin-bottom: 0;">
<div id="adultBlock" >
<p style="margin-bottom: 0; font-size: 22px; text-align: left;">Traveler numbers for your group:</p>
<div class="peopleSelect" >
<p style="margin-top: 20px; margin-bottom: 10px;">
Adult & kids (≥8 years old)
</p>
<div class="numberBtn">
<input class="minaddBtn reduceadult" id="minusAdult" type="button" value="-">
<input class="number" type="text" id="adultNumber" readonly value="1" name="adult" style="width: 50px;
height: 22px;
top: -5px;
position: relative;
text-align: center;
font-size: 20px;">
<input class="minaddBtn addadult" id="plusAdult" type="button" value="+">
</div>
</div>
<div class="peopleSelect" >
<p style="margin-top: 20px; margin-bottom: 10px;">
Kids (0-7 years old)
</p>
<div class="numberBtn">
<input class="minaddBtn reduceadult" id="minusKid" type="button" value="-">
<input class="number" type="text" id="kidNumber" readonly value="0" name="children_3_9_yrs" style="width: 50px;
height: 22px;
top: -5px;
position: relative;
text-align: center;
font-size: 20px;">
<input class="minaddBtn addadult" id="plusKid" type="button" value="+">
</div>
</div>
<div class="peopleSelect" >
<p style="margin-top: 20px; margin-bottom: 10px;">
Adult & kids (≥8 years old)
</p>
<div class="numberBtn">
<input class="minaddBtn reduceadult" id="minusAdult" type="button" value="-">
<input class="number" type="text" id="adultNumber" readonly value="1" name="adult">
<input class="minaddBtn addadult" id="plusAdult" type="button" value="+">
</div>
</div>
<div class="peopleSelect" >
<p style="margin-top: 20px; margin-bottom: 10px;">
Kids (0-7 years old)
</p>
<div class="numberBtn">
<input class="minaddBtn reduceadult" id="minusKid" type="button" value="-">
<input class="number" type="text" id="kidNumber" readonly value="0" name="children_3_9_yrs">
<input class="minaddBtn addadult" id="plusKid" type="button" value="+">
</div>
</div>
</div>
</div>
<input class="FullName" id="realname" name="name" placeholder="Your name *" required="" type="text" value="" />
@ -313,7 +303,7 @@
margin-top: 0;
margin-bottom: 10px;
padding: 0;
">I am also available on:</p>
">I prefer to be contacted via:</p>
<div class="checkYes">
<input type="checkbox" value="yes" name="contact_via_whatsapp" id="whatsapp" class="checkBorder" >
@ -323,13 +313,32 @@
<input type="checkbox" value="yes" name="contact_via_iMessage" id="iMessage" class="checkBorder" >
<label for="iMessage">iMessage</label>
</div>
<div class="checkYes">
<input type="checkbox" value="yes" name="contact_via_phone_call" id="Phone" class="checkBorder" >
<label for="Phone">Phone call</label>
</div>
<div class="checkYes">
<input type="checkbox" value="yes" name="contact_via_email" id="Email" class="checkBorder" >
<label for="Email">Email</label>
</div>
<div class="checkYes">
<input type="checkbox" value="yes" name="contact_via_video_appointment" id="Video" class="checkBorder" >
<label for="Video">Video appointment</label>
</div>
<button class="sendButton" id="submit_gp_form" type="button">Inquire</button>
<input name="payment_description" type="hidden" value="Booking Yi Peng Festival Mini-Group Tour" />
<input name="product_code" type="hidden" value="<?php echo $meta_product_code; ?>"/>
<input name="itinerary" type="hidden" value="<?php echo $information->ic_title; ?>" />
</form>
<!-- <h3 style="text-align: center;
font-size: 20px;
line-height: 22px;">For a quick conversation, simply reach us via WhatsApp:</h3>
<div class="contactwechat"><img alt="Asia Highlights' wechat code" height="100px" src="https://data.asiahighlights.com/image/about/asia-highlights-whatsapp-code.jpg" width="100px" >
<div class="wechatinfo"><span class="wechatred">+8615807734776</span><br>
Email: <span class="wechatred">contact@asiahighlights.com</span></div>
</div>
-->
</div>
<script>
@ -450,4 +459,4 @@
});
})(document);
</script>
</script>

File diff suppressed because it is too large Load Diff

@ -1,592 +0,0 @@
<script src="https://www.recaptcha.net/recaptcha/enterprise.js?render=6Lf828MhAAAAANNetijCXKwW5ARyhcJ-b1Hhslja"></script>
<div class="tmbottom">
<h3 style="font-size: 24px; line-height: 22px;">Book Now for Chiang Mai CAD New Year Countdown to 2025 Festival Ticket</h3>
<form id='ticket_form' action="https://www.asiahighlights.com/orders/new_year_countdown_save" method="post" >
<p style="font-size: 22px;"><strong>Select Date:</strong></p>
<div class="selectHotl" style="margin-bottom: 20px;">
<div class="optionLable">
<input type="radio" value="2024-12-30" id="december30th" name="ticket_date">
<label for="december30th">
December 30th, 2024
</label>
</div>
<div class="optionLable">
<input type="radio" value="2024-12-31" checked id="december31st" name="ticket_date">
<label for="december31st">
December 31st, 2024
</label>
</div>
</div>
<p style="font-size: 22px;"><strong>Select an Available Ticket Type</strong></p>
<div class="selectHotl" style="margin-bottom: 20px;">
<div class="optionLable" id="ticket_type_elite_december30th" style="display: none">
<input type="radio" value="Elite Ticket" id="elite_december30th" data-price="189" name="ticket_type">
<label for="elite_december30th" style="font-size:18px;">
<strong style=" margin-bottom: 5px;
display: block;
font-size: 19px;">Elite Ticket</strong>
<div class="selectionMemo" style="line-height: 18px;">
US$189 (6900THB)
<br>
Elite service + shuttle transfer + dinner
</div>
</label>
</div>
<div class="optionLable" id="ticket_type_elite_december31th">
<input type="radio" value="Elite Ticket" id="elite_december31th" data-price="329" name="ticket_type">
<label for="elite_december31th" style="font-size:18px;">
<strong style=" margin-bottom: 5px;
display: block;
font-size: 19px;">Elite Ticket</strong>
<div class="selectionMemo" style="line-height: 18px;">
US$329 (11,750 THB)
<br>
Elite service + <strong>exclusive hotel transfer</strong> + dinner
</div>
</label>
</div>
<div class="optionLable" id="vip_type_premium_december30th" style="display: none">
<input type="radio" value="Premium Ticket" id="premium_december30th" data-price="139" name="ticket_type">
<label for="premium_december30th" style="font-size:18px;">
<strong style=" margin-bottom: 5px;
display: block;
font-size: 19px;">Premium Ticket</strong>
<div class="selectionMemo" style="line-height: 18px;">
US$139 (4900THB)
<br>
Premium service + shuttle transfer + dinner
</div>
</label>
</div>
<div class="optionLable" id="vip_type_premium_december31th">
<input type="radio" value="Premium Ticket" id="premium_december31th" data-price="179" name="ticket_type">
<label for="premium_december31th" style="font-size:18px;">
<strong style=" margin-bottom: 5px;
display: block;
font-size: 19px;">Premium Ticket</strong>
<div class="selectionMemo" style="line-height: 18px;">
US$179 (6,500 THB)
<br>
Premium service + shuttle transfer + dinner
</div>
</label>
</div>
<div class="optionLable" id="ticket_type_standard_december30th" style="display: none">
<input type="radio" value="VIP Ticket" id="vip_december30th" data-price="109" name="ticket_type">
<label for="vip_december30th" style="font-size:18px;">
<strong style=" margin-bottom: 5px;
display: block;
font-size: 19px;">VIP Ticket</strong>
<div class="selectionMemo" style="line-height: 18px;">
US$109 (3900THB)
<br>
VIP service + shuttle transfer + dinner
</div>
</label>
</div>
<div class="optionLable" id="ticket_type_standard_december31th">
<input type="radio" value="VIP Ticket" checked id="vip_december31th" data-price="139" name="ticket_type">
<label for="vip_december31th" style="font-size:18px;">
<strong style=" margin-bottom: 5px;
display: block;
font-size: 19px;">VIP Ticket</strong>
<div class="selectionMemo" style="line-height: 18px;">
US$139 (5,000 THB)
<br>
VIP service + shuttle transfer + dinner
</div>
</label>
</div>
</div>
<div id="ticket_type_errmsg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please select at least one option.</div>
</div>
<p style="font-size: 22px;"><strong>Select Ticket Quantity</strong></p>
<div class="peopleSelect" style="width: auto;">
<span class="formMemo">
Adults and older children (8+ years old)
</span>
<div class="numberBtn">
<input class="minaddBtn reduceadult" id='minusButton' type="button" value="-">
<input class="number" id="adultNumberValue" readonly="readonly" type="text" value="1"
name="adult" style="width: 50px;
height: 22px;
top: -5px;
position: relative;
text-align: center;
font-size: 20px;">
<input class="minaddBtn addadult" id='plusButton' type="button" value="+">
</div>
</div>
<div class="payonline_price">Total price: <strong id="totalPriceText">$129</strong></div>
<p style=" margin-top: 30px;
margin-bottom: 10px;"><strong>Please provide correct personal information for your ticket
booking. Double
check.</strong></p>
<input class="FullName" id="ticket_realname" name="fullname"
placeholder="Your name * (exactly per passport)" required="" type="text" value="" />
<div id="ticket_realname_errmsg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please enter your name.</div>
</div>
<input class="EmailAddress" id="ticket_email" name="email" placeholder="Email *" required="" type="text"
value="" />
<div id="ticket_email_errmsg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please enter your email.</div>
</div>
<div id="ticket_email_verify_errmsg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please verify your email.</div>
</div>
<select name="country_code" class="country_code">
<option style="font-weight: 600;" value="United States +1">United States&nbsp; &nbsp;+1</option>
<option style="font-weight: 600;" value="United Kingdom +44">United Kingdom&nbsp; &nbsp;+44</option>
<option style="font-weight: 600;" value="Australia +61">Australia&nbsp; &nbsp;+61</option>
<option style="font-weight: 600;" value="Canada +1">Canada&nbsp; &nbsp;+1</option>
<option style="font-weight: 600;" value="France +33">France&nbsp; &nbsp;+33</option>
<option style="font-weight: 600;" value="Germany +49">Germany&nbsp; &nbsp;+49</option>
<option style="font-weight: 600; " value="Italy +39">Italy&nbsp; &nbsp;+39</option>
<option style="font-weight: 600; " value="Mexico +52">Mexico&nbsp; &nbsp;+52</option>
<option style="font-weight: 600; " value="Netherlands +31">Netherlands&nbsp; &nbsp;+31</option>
<option style="font-weight: 600; " value="Singapore +65">Singapore&nbsp; &nbsp;+65</option>
<option value="Afghanistan +93">Afghanistan &nbsp; &nbsp;+93</option>
<option value="Albania +355">Albania &nbsp; &nbsp;+355</option>
<option value="Algeria +213">Algeria&nbsp; &nbsp;+213</option>
<option value="American Samoa +1">American Samoa&nbsp; &nbsp;+1684</option>
<option value="Andorra +376">Andorra&nbsp; &nbsp;+376</option>
<option value="Angola +244">Angola&nbsp; &nbsp;+244</option>
<option value="Anguilla +1">Anguilla&nbsp; &nbsp;+1264</option>
<option value="Australia +61">Australia&nbsp; &nbsp;+61</option>
<option value="Antigua and Barbuda +1">Antigua and Barbuda&nbsp; &nbsp;+1268</option>
<option value="Argentina +54">Argentina&nbsp; &nbsp;+54</option>
<option value="Armenia +374">Armenia &nbsp; &nbsp;+374</option>
<option value="Aruba +297">Aruba&nbsp; &nbsp;+297</option>
<option value="Ascension Island +247">Ascension Island&nbsp; &nbsp;+247</option>
<option value="Austria +43">Austria&nbsp; &nbsp;+43</option>
<option value="Azerbaijan +994">Azerbaijan&nbsp; &nbsp;+994</option>
<option value="Bahamas +1">Bahamas&nbsp; &nbsp;+1242</option>
<option value="Bahrain +973">Bahrain&nbsp; &nbsp;+973</option>
<option value="Bangladesh +880">Bangladesh&nbsp; &nbsp;+880</option>
<option value="Barbados +1">Barbados&nbsp; &nbsp;+1246</option>
<option value="Belarus +375">Belarus&nbsp; &nbsp;+375</option>
<option value="Belgium +32">Belgium&nbsp; &nbsp;+32</option>
<option value="Belize +501">Belize&nbsp; &nbsp;+501</option>
<option value="Benin +229">Benin&nbsp; &nbsp;+229</option>
<option value="Bermuda +1">Bermuda&nbsp; &nbsp;+1441</option>
<option value="Bhutan +975">Bhutan&nbsp; &nbsp;+975</option>
<option value="Bolivia +591">Bolivia&nbsp; &nbsp;+591</option>
<option value="Bosnia and Herzegovina +387">Bosnia and Herzegovina&nbsp; &nbsp;+387</option>
<option value="Botswana +267">Botswana&nbsp; &nbsp;+267</option>
<option value="Brazil +55">Brazil&nbsp; &nbsp;+55</option>
<option value="British Indian Ocean Territory +246">British Indian Ocean Territory&nbsp; &nbsp;+246</option>
<option value="British Virgin Islands +1">British Virgin Islands&nbsp; &nbsp;+1284</option>
<option value="Brunei +673">Brunei&nbsp; &nbsp;+673</option>
<option value="Bulgaria +359">Bulgaria &nbsp; &nbsp;+359</option>
<option value="Burkina Faso +226">Burkina Faso&nbsp; &nbsp;+226</option>
<option value="Burundi +257">Burundi&nbsp; &nbsp;+257</option>
<option value="Cambodia +855">Cambodia&nbsp; &nbsp;+855</option>
<option value="Cameroon +237">Cameroon&nbsp; &nbsp;+237</option>
<option value="Canada +1">Canada&nbsp; &nbsp;+1</option>
<option value="Cape Verde +238">Cape Verde&nbsp; &nbsp;+238</option>
<option value="Caribbean Netherlands +599">Caribbean Netherlands&nbsp; &nbsp;+599</option>
<option value="Cayman Islands +1">Cayman Islands&nbsp; &nbsp;+1345</option>
<option value="Central African Republic +236">Central African Republic&nbsp; &nbsp;+236</option>
<option value="Chad +235">Chad&nbsp; &nbsp;+235</option>
<option value="Chile +56">Chile&nbsp; &nbsp;+56</option>
<option value="China +86">China&nbsp; &nbsp;+86</option>
<option value="Christmas Island +61">Christmas Island&nbsp; &nbsp;+6189164</option>
<option value="Cocos Islands +61">Cocos Islands&nbsp; &nbsp;+6189162</option>
<option value="Colombia +57">Colombia&nbsp; &nbsp;+57</option>
<option value="Comoros +269">Comoros&nbsp; &nbsp;+269</option>
<option value="Congo +243">Congo (DRC)&nbsp; &nbsp;+243</option>
<option value="Congo +242">Congo (Republic)&nbsp; &nbsp;+242</option>
<option value="Cook Islands +682">Cook Islands&nbsp; &nbsp;+682</option>
<option value="Costa Rica +506">Costa Rica&nbsp; &nbsp;+506</option>
<option value="Côte d'Ivoire +225">Côte d'Ivoire&nbsp; &nbsp;+225</option>
<option value="Croatia +385">Croatia&nbsp; &nbsp;+385</option>
<option value="Cuba +53">Cuba&nbsp; &nbsp;+53</option>
<option value="Curaçao +599">Curaçao&nbsp; &nbsp;+599</option>
<option value="Cyprus +357">Cyprus&nbsp; &nbsp;+357</option>
<option value="Czech Republic +420">Czech Republic&nbsp; &nbsp;+420</option>
<option value="Denmark +45">Denmark&nbsp; &nbsp;+45</option>
<option value="Djibouti +253">Djibouti&nbsp; &nbsp;+253</option>
<option value="Dominica +1">Dominica&nbsp; &nbsp;+1767</option>
<option value="Dominican Republic +1">Dominican Republic&nbsp; &nbsp;+1809</option>
<option value="Ecuador +593">Ecuador&nbsp; &nbsp;+593</option>
<option value="Egypt +20">Egypt&nbsp; &nbsp;+20</option>
<option value="El Salvador +503">El Salvador&nbsp; &nbsp;+503</option>
<option value="Equatorial Guinea +240">Equatorial Guinea&nbsp; &nbsp;+240</option>
<option value="Eritrea +291">Eritrea&nbsp; &nbsp;+291</option>
<option value="Estonia +372">Estonia&nbsp; &nbsp;+372</option>
<option value="Eswatini +268">Eswatini&nbsp; &nbsp;+268</option>
<option value="Ethiopia +251">Ethiopia&nbsp; &nbsp;+251</option>
<option value="Falkland Islands +500">Falkland Islands&nbsp; &nbsp;+500</option>
<option value="Faroe Islands +298">Faroe Islands&nbsp; &nbsp;+298</option>
<option value="Fiji +679">Fiji&nbsp; &nbsp;+679</option>
<option value="Finland +358">Finland&nbsp; &nbsp;+358</option>
<option value="France +33">France&nbsp; &nbsp;+33</option>
<option value="French Guiana +594">French Guiana&nbsp; &nbsp;+594</option>
<option value="French Polynesia +689">French Polynesia&nbsp; &nbsp;+689</option>
<option value="Gabon +241">Gabon&nbsp; &nbsp;+241</option>
<option value="Gambia +220">Gambia&nbsp; &nbsp;+220</option>
<option value="Georgia +995">Georgia&nbsp; &nbsp;+995</option>
<option value="Germany +49">Germany&nbsp; &nbsp;+49</option>
<option value="Ghana +233">Ghana&nbsp; &nbsp;+233</option>
<option value="Gibraltar +350">Gibraltar&nbsp; &nbsp;+350</option>
<option value="Greece +30">Greece&nbsp; &nbsp;+30</option>
<option value="Greenland +299">Greenland&nbsp; &nbsp;+299</option>
<option value="Grenada +1">Grenada&nbsp; &nbsp;+1473</option>
<option value="Guadeloupe +590">Guadeloupe&nbsp; &nbsp;+590</option>
<option value="Guam +1">Guam&nbsp; &nbsp;+1671</option>
<option value="Guatemala +502">Guatemala&nbsp; &nbsp;+502</option>
<option value="Guernsey +44">Guernsey&nbsp; &nbsp;+441481</option>
<option value="Guinea +224">Guinea&nbsp; &nbsp;+224</option>
<option value="Guinea-Bissau +245">Guinea-Bissau&nbsp; &nbsp;+245</option>
<option value="Guyana +592">Guyana&nbsp; &nbsp;+592</option>
<option value="Haiti +509">Haiti&nbsp; &nbsp;+509</option>
<option value="Honduras +504">Honduras&nbsp; &nbsp;+504</option>
<option value="Hong Kong +852">Hong Kong&nbsp; &nbsp;+852</option>
<option value="Hungary +36">Hungary&nbsp; &nbsp;+36</option>
<option value="Iceland +354">Iceland&nbsp; &nbsp;+354</option>
<option value="India +91">India&nbsp; &nbsp;+91</option>
<option value="Indonesia +62">Indonesia&nbsp; &nbsp;+62</option>
<option value="Iran +98">Iran&nbsp; &nbsp;+98</option>
<option value="Iraq +964">Iraq&nbsp; &nbsp;+964</option>
<option value="Ireland +353">Ireland&nbsp; &nbsp;+353</option>
<option value="Isle of Man +44">Isle of Man&nbsp; &nbsp;+44</option>
<option value="Israel +972">Israel&nbsp; &nbsp;+972</option>
<option value="Italy +39">Italy&nbsp; &nbsp;+39</option>
<option value="Jamaica +1">Jamaica&nbsp; &nbsp;+1876</option>
<option value="Japan +81">Japan&nbsp; &nbsp;+81</option>
<option value="Jersey +44">Jersey&nbsp; &nbsp;+44</option>
<option value="Jordan +962">Jordan&nbsp; &nbsp;+962</option>
<option value="Kazakhstan +7">Kazakhstan &nbsp; &nbsp;+7</option>
<option value="Kenya +254">Kenya&nbsp; &nbsp;+254</option>
<option value="Kiribati +686">Kiribati&nbsp; &nbsp;+686</option>
<option value="Kosovo +383">Kosovo&nbsp; &nbsp;+383</option>
<option value="Kuwait +965">Kuwait&nbsp; &nbsp;+965</option>
<option value="Kyrgyzstan +996">Kyrgyzstan &nbsp; &nbsp;+996</option>
<option value="Laos +856">Laos&nbsp; &nbsp;+856</option>
<option value="Latvia +371">Latvia &nbsp; &nbsp;+371</option>
<option value="Lebanon +961">Lebanon&nbsp; &nbsp;+961</option>
<option value="Lesotho +266">Lesotho&nbsp; &nbsp;+266</option>
<option value="Liberia +231">Liberia&nbsp; &nbsp;+231</option>
<option value="Libya +218">Libya&nbsp; &nbsp;+218</option>
<option value="Liechtenstein +423">Liechtenstein&nbsp; &nbsp;+423</option>
<option value="Lithuania +370">Lithuania&nbsp; &nbsp;+370</option>
<option value="Luxembourg +352">Luxembourg&nbsp; &nbsp;+352</option>
<option value="Macau +853">Macau&nbsp; &nbsp;+853</option>
<option value="Macedonia +389">Macedonia&nbsp; &nbsp;+389</option>
<option value="Madagascar +261">Madagascar&nbsp; &nbsp;+261</option>
<option value="Malawi +265">Malawi&nbsp; &nbsp;+265</option>
<option value="Malaysia +60">Malaysia&nbsp; &nbsp;+60</option>
<option value="Maldives +960">Maldives&nbsp; &nbsp;+960</option>
<option value="Mali +223">Mali&nbsp; &nbsp;+223</option>
<option value="Malta +356">Malta&nbsp; &nbsp;+356</option>
<option value="Marshall +692">Marshall Islands&nbsp; &nbsp;+692</option>
<option value="Martinique +596">Martinique&nbsp; &nbsp;+596</option>
<option value="Mauritania +222">Mauritania&nbsp; &nbsp;+222</option>
<option value="Mauritius +230">Mauritius&nbsp; &nbsp;+230</option>
<option value="Mayotte +262">Mayotte&nbsp; &nbsp;+262</option>
<option value="Micronesia +691">Micronesia&nbsp; &nbsp;+691</option>
<option value="Moldova +373">Moldova&nbsp; &nbsp;+373</option>
<option value="Monaco +377">Monaco&nbsp; &nbsp;+377</option>
<option value="Mongolia +976">Mongolia&nbsp; &nbsp;+976</option>
<option value="Montenegro +382">Montenegro&nbsp; &nbsp;+382</option>
<option value="Montserrat +1">Montserrat&nbsp; &nbsp;+1664</option>
<option value="Morocco +212">Morocco&nbsp; &nbsp;+212</option>
<option value="Mozambique +258">Mozambique&nbsp; &nbsp;+258</option>
<option value="Myanmar +95">Myanmar &nbsp; &nbsp;+95</option>
<option value="Namibia +264">Namibia&nbsp; &nbsp;+264</option>
<option value="Nauru +674">Nauru&nbsp; &nbsp;+674</option>
<option value="Nepal +977">Nepal&nbsp; &nbsp;+977</option>
<option value="New Caledonia +687">New Caledonia&nbsp; &nbsp;+687</option>
<option value="New Zealand +64">New Zealand&nbsp; &nbsp;+64</option>
<option value="Nicaragua +505">Nicaragua&nbsp; &nbsp;+505</option>
<option value="Niger +227">Niger&nbsp; &nbsp;+227</option>
<option value="Nigeria +234">Nigeria&nbsp; &nbsp;+234</option>
<option value="Niue +683">Niue&nbsp; &nbsp;+683</option>
<option value="Norfolk Island +672">Norfolk Island&nbsp; &nbsp;+6723</option>
<option value="North Korea +850">North Korea&nbsp; &nbsp;+850</option>
<option value="Northern Mariana Islands +1">Northern Mariana Islands&nbsp; &nbsp;+1670</option>
<option value="Norway +47">Norway&nbsp; &nbsp;+47</option>
<option value="Oman +968">Oman&nbsp; &nbsp;+968</option>
<option value="Pakistan +92">Pakistan&nbsp; &nbsp;+92</option>
<option value="Palau +680">Palau&nbsp; &nbsp;+680</option>
<option value="Palestine +970">Palestine &nbsp; &nbsp;+970</option>
<option value="Panama +507">Panama &nbsp; &nbsp;+507</option>
<option value="Papua New Guinea 675">Papua New Guinea&nbsp; &nbsp;+675</option>
<option value="Paraguay +595">Paraguay&nbsp; &nbsp;+595</option>
<option value="Peru +51">Peru &nbsp; &nbsp;+51</option>
<option value="Philippines +63">Philippines&nbsp; &nbsp;+63</option>
<option value="Poland +48">Poland&nbsp; &nbsp;+48</option>
<option value="Portugal +351">Portugal&nbsp; &nbsp;+351</option>
<option value="Puerto Rico +1">Puerto Rico&nbsp; &nbsp;+1787</option>
<option value="Qatar +974">Qatar&nbsp; &nbsp;+974</option>
<option value="Réunion +262">Réunion&nbsp; &nbsp;+262</option>
<option value="Romania +40">Romania&nbsp; &nbsp;+40</option>
<option value="Russia +7">Russia&nbsp; &nbsp;+7</option>
<option value="Rwanda +250">Rwanda&nbsp; &nbsp;+250</option>
<option value="Saint Barthélemy +590">Saint Barthélemy&nbsp; &nbsp;+590</option>
<option value="Saint Helena +290">Saint Helena&nbsp; &nbsp;+290</option>
<option value="Saint Kitts and Nevis +1">Saint Kitts and Nevis&nbsp; &nbsp;+1869</option>
<option value="Saint Lucia +1">Saint Lucia&nbsp; &nbsp;+1758</option>
<option value="Saint Martin +590">Saint Martin&nbsp; &nbsp;+590</option>
<option value="Saint Pierre and Miquelon +508">Saint Pierre and Miquelon&nbsp; &nbsp;+508</option>
<option value="Saint Vincent and the Grenadines +1">Saint Vincent and the Grenadines&nbsp; &nbsp;+1784</option>
<option value="Samoa +685">Samoa&nbsp; &nbsp;+685</option>
<option value="San Marino +378">San Marino&nbsp; &nbsp;+378</option>
<option value="São Tomé and Príncipe +239">São Tomé and Príncipe&nbsp; &nbsp;+239</option>
<option value="Saudi Arabia +966">Saudi Arabia &nbsp; &nbsp;+966</option>
<option value="Senegal +221">Senegal &nbsp; &nbsp;+221</option>
<option value="Serbia +381">Serbia&nbsp; &nbsp;+381</option>
<option value="Seychelles +248">Seychelles&nbsp; &nbsp;+248</option>
<option value="Sierra Leone +232">Sierra Leone&nbsp; &nbsp;+232</option>
<option value="Sint Maarten +1">Sint Maarten&nbsp; &nbsp;+1721</option>
<option value="Slovakia +421">Slovakia&nbsp; &nbsp;+421</option>
<option value="Slovenia +386">Slovenia&nbsp; &nbsp;+386</option>
<option value="Solomon Islands +677">Solomon Islands&nbsp; &nbsp;+677</option>
<option value="Somalia +252">Somalia&nbsp; &nbsp;+252</option>
<option value="South Africa +27">South Africa&nbsp; &nbsp;+27</option>
<option value="South Korea +82">South Korea&nbsp; &nbsp;+82</option>
<option value="South Sudan +211">South Sudan&nbsp; &nbsp;+211</option>
<option value="Spain +34">Spain&nbsp; &nbsp;+34</option>
<option value="Sri Lanka +94">Sri Lanka &nbsp; &nbsp;+94</option>
<option value="Sudan +249">Sudan&nbsp; &nbsp;+249</option>
<option value="Suriname">Suriname&nbsp; &nbsp;+597</option>
<option value="Svalbard and Jan Mayen +47">Svalbard and Jan Mayen&nbsp; &nbsp;+47</option>
<option value="Sweden +46">Sweden&nbsp; &nbsp;+46</option>
<option value="Switzerland +41">Switzerland&nbsp; &nbsp;+41</option>
<option value="Syria +963">Syria &nbsp; &nbsp;+963</option>
<option value="Taiwan +886">Taiwan&nbsp; &nbsp;+886</option>
<option value="Tajikistan +992">Tajikistan&nbsp; &nbsp;+992</option>
<option value="Tanzania +255">Tanzania&nbsp; &nbsp;+255</option>
<option value="Thailand +66">Thailand&nbsp; &nbsp;+66</option>
<option value="Timor-Leste +670">Timor-Leste&nbsp; &nbsp;+670</option>
<option value="Togo +228">Togo&nbsp; &nbsp;+228</option>
<option value="Tokelau +690">Tokelau&nbsp; &nbsp;+690</option>
<option value="Tonga +676">Tonga&nbsp; &nbsp;+676</option>
<option value="Trinidad and Tobago +1">Trinidad and Tobago&nbsp; &nbsp;+1868</option>
<option value="Tunisia +216">Tunisia&nbsp; &nbsp;+216</option>
<option value="Turkey +90">Turkey&nbsp; &nbsp;+90</option>
<option value="Turkmenistan +993">Turkmenistan&nbsp; &nbsp;+993</option>
<option value="Turks and Caicos Islands +1">Turks and Caicos Islands&nbsp; &nbsp;+1649</option>
<option value="Tuvalu +688">Tuvalu&nbsp; &nbsp;+688</option>
<option value="U.S. Virgin Islands +1">U.S. Virgin Islands&nbsp; &nbsp;+1340</option>
<option value="Uganda +256">Uganda&nbsp; &nbsp;+256</option>
<option value="Ukraine +380">Ukraine&nbsp; &nbsp;+380</option>
<option value="United Arab Emirates +971">United Arab Emirates &nbsp; &nbsp;+971</option>
<option value="United Kingdom +44">United Kingdom&nbsp; &nbsp;+44</option>
<option value="United States +1">United States&nbsp; &nbsp;+1</option>
<option value="Uruguay +598">Uruguay&nbsp; &nbsp;+598</option>
<option value="Uzbekistan +998">Uzbekistan&nbsp; &nbsp;+998</option>
<option value="Vanuatu +678">Vanuatu&nbsp; &nbsp;+678</option>
<option value="Vatican City +39">Vatican City&nbsp; &nbsp;+379</option>
<option value="Venezuela +58">Venezuela&nbsp; &nbsp;+58</option>
<option value="Vietnam +84">Vietnam&nbsp; &nbsp;+84</option>
<option value="Wallis and Futuna +681">Wallis and Futuna&nbsp; &nbsp;+681</option>
<option value="Western Sahara +212">Western Sahara &nbsp; &nbsp;+21228</option>
<option value="Yemen +967">Yemen&nbsp; &nbsp;+967</option>
<option value="Zambia +260">Zambia&nbsp; &nbsp;+260</option>
<option value="Zimbabwe +263">Zimbabwe&nbsp; &nbsp;+263</option>
<option value="Åland Islands +385">Åland Islands&nbsp; &nbsp;+35818</option>
</select>
<input class="Inquiryphone" id="ticket_PhoneNo" name="PhoneNo"
placeholder="Phone number *" type="tel" value="" />
<div id="ticket_contact_errmsg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please enter your phone number.</div>
</div>
<textarea name="other_travelers_names" style="height: 60px;" placeholder="If booking two or more tickets, please fill in other traveler name(s) here:(per passport, e.g.Smith Sarah Jean)."></textarea>
<p style="margin-top: 20px; margin-bottom: 10px;">For Elite Ticket bookings on December 31th, please provide your Chiang Mai hotel name and address for pick-up and drop-off purposes.</p>
<textarea name="additional_requirements" style="height: 60px;"></textarea>
<input name="total_price" id="totalPriceHidden" type="hidden" value="10000" />
<input name="product_code" id="cli_no" type="hidden" value="YDFW-AH"/>
<input name="itinerary" type="hidden" value="<?php echo $information->ic_title; ?>" />
<button class="sendButton" id="submit_ticket_button" name="submit_ticket_form"
type="button">Proceed to Payment</button>
<p style=" text-align: center;
font-style: italic;
margin-top: -15px;
line-height: 20px;"><strong>Once we receive your payment, our travel advisor will contact you within 24 hours and send you your e-ticket.</strong></p>
</form>
</div>
<script>
function calcTotalPrice(ticketPrice, adultNumber) {
var totalPrice = ticketPrice * adultNumber;
totalPrice = totalPrice.toFixed(2);
totalPriceHidden.value = totalPrice;
totalPriceText.innerText = '$' + totalPrice;
}
var adultNumberNode = document.getElementById("adultNumberValue");
var ticketTypeList = document.querySelectorAll("input[name='ticket_type']");
var totalPriceText = document.getElementById("totalPriceText");
var totalPriceHidden = document.getElementById("totalPriceHidden");
var adultNumberValue = parseInt(adultNumberNode.value);
var currentTicketPrice = 10000;
var vip_december30thRadio = document.getElementById("vip_december30th");
var vip_december31thRadio = document.getElementById("vip_december31th");
var ticket_type_elite_december30th_div = document.getElementById("ticket_type_elite_december30th");
var ticket_type_elite_december31th_div = document.getElementById("ticket_type_elite_december31th");
var vip_type_premium_december30th_div = document.getElementById("vip_type_premium_december30th");
var vip_type_premium_december31th_div = document.getElementById("vip_type_premium_december31th");
var ticket_type_standard_december30th_div = document.getElementById("ticket_type_standard_december30th");
var ticket_type_standard_december31th_div = document.getElementById("ticket_type_standard_december31th");
for (var i = 0; i < ticketTypeList.length; i++) {
var ticketTypeNode = ticketTypeList[i];
currentTicketPrice = parseInt(ticketTypeNode.getAttribute('data-price'));
if (ticketTypeNode.checked) {
calcTotalPrice(currentTicketPrice, adultNumberValue);
}
ticketTypeNode.addEventListener('click', function (event) {
var currentTarget = event.currentTarget;
currentTicketPrice = parseInt(currentTarget.getAttribute('data-price'));
adultNumberValue = parseInt(adultNumberNode.value);
calcTotalPrice(currentTicketPrice, adultNumberValue);
});
}
var ticketDateList = document.querySelectorAll("input[name='ticket_date']");
for (var i = 0; i < ticketDateList.length; i++) {
var ticketDateNode = ticketDateList[i];
ticketDateNode.addEventListener('click', function (event) {
var currentTarget = event.currentTarget;
if (currentTarget.id === 'december30th') {
setDecember30thTicket();
} else if (currentTarget.id === 'december31th') {
setDecember31thTicket();
}
});
}
function setDecember30thTicket() {
ticket_type_elite_december30th_div.style.display = '';
ticket_type_elite_december31th_div.style.display = 'none';
vip_type_premium_december30th_div.style.display = '';
vip_type_premium_december31th_div.style.display = 'none';
ticket_type_standard_december30th_div.style.display = '';
ticket_type_standard_december31th_div.style.display = 'none';
vip_december30thRadio.checked = true;
currentTicketPrice = parseInt(vip_december30thRadio.getAttribute('data-price'));
adultNumberValue = parseInt(adultNumberNode.value);
calcTotalPrice(currentTicketPrice, adultNumberValue);
}
function setDecember31thTicket() {
ticket_type_elite_december30th_div.style.display = 'none';
ticket_type_elite_december31th_div.style.display = '';
vip_type_premium_december30th_div.style.display = 'none';
vip_type_premium_december31th_div.style.display = '';
ticket_type_standard_december30th_div.style.display = 'none';
ticket_type_standard_december31th_div.style.display = '';
vip_december31thRadio.checked = true;
currentTicketPrice = parseInt(vip_december31thRadio.getAttribute('data-price'));
adultNumberValue = parseInt(adultNumberNode.value);
calcTotalPrice(currentTicketPrice, adultNumberValue);
}
var plusButton = document.getElementById("plusButton");
var minusButton = document.getElementById("minusButton");
plusButton.addEventListener('click', function (event) {
adultNumberValue = parseInt(adultNumberNode.value) + 1;
adultNumberNode.value = adultNumberValue;
calcTotalPrice(currentTicketPrice, adultNumberValue);
});
minusButton.addEventListener('click', function (event) {
var beforeValue = parseInt(adultNumberNode.value);
if (beforeValue > 1) {
adultNumberValue = beforeValue - 1;
adultNumberNode.value = adultNumberValue;
calcTotalPrice(currentTicketPrice, adultNumberValue);
}
});
</script>
<script>
var submit_ticket_button = document.getElementById("submit_ticket_button");
var ticket_form = document.getElementById("ticket_form");
submit_ticket_button.addEventListener('click', function (event) {
var validateResult = validateTicketForm();
if (validateResult) {
if (typeof (grecaptcha) === "undefined") {
console.warn('grecaptcha is disabled.');
ticket_form.submit();
} else {
grecaptcha.enterprise.ready(async () => {
const token = await grecaptcha.enterprise.execute('6Lf828MhAAAAANNetijCXKwW5ARyhcJ-b1Hhslja', { action: 'ADD_TO_CART' });
var el = document.createElement("input");
el.type = "hidden";
el.name = "__grecaptcha_token__";
el.value = token;
ticket_form.appendChild(el);
ticket_form.submit();
submit_ticket_button.innerText = "Submitted successfully";
});
}
}
});
function validateTicketForm() {
var result = true;
var realnameVal = document.getElementById("ticket_realname").value;
var emailVal = document.getElementById("ticket_email").value;
var contactVal = document.getElementById("ticket_PhoneNo").value;
var realnameErrEl = document.getElementById("ticket_realname_errmsg");
var emailErrEl = document.getElementById("ticket_email_errmsg");
var emailVerifyErrEl = document.getElementById("ticket_email_verify_errmsg");
var contactErrEl = document.getElementById("ticket_contact_errmsg");
var ticketTypeErrEl = document.getElementById("ticket_type_errmsg");
realnameErrEl.style.display = 'none';
emailErrEl.style.display = 'none';
emailVerifyErrEl.style.display = 'none';
contactErrEl.style.display = 'none';
ticketTypeErrEl.style.display = 'none';
var selectedTicketType = false;
for (var i = 0; i < ticketTypeList.length; i++) {
var ticketTypeNode = ticketTypeList[i];
if (ticketTypeNode.checked) {
selectedTicketType = true;
}
}
if (!selectedTicketType) {
ticketTypeErrEl.style.display = '';
result = false;
}
if (realnameVal === '') {
realnameErrEl.style.display = '';
result = false;
}
if (emailVal === '') {
emailErrEl.style.display = '';
result = false;
} else {
var emailPattern = /^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/;
if (!emailPattern.test(emailVal)) {
emailVerifyErrEl.style.display = '';
result = false;
}
}
if (contactVal === '') {
contactErrEl.style.display = '';
result = false;
}
return result;
}
</script>

@ -49,7 +49,65 @@
</div>
<?php } ?>
<?php if(!empty($recommands['Tour E'])){ ?>
<div class="nextarticle">
<a href="<?php echo $recommands['Tour E']->ic_url; ?>" id="bottom_tour_e_image_mobile"> <img src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Tour E']->mobile_photo; ?>"
class="img-responsive" alt="<?php echo $recommands['Tour E']->ic_title; ?>"></a>
<div class="tournextname"><a href="<?php echo $recommands['Tour E']->ic_url; ?>" id="bottom_tour_e_title_mobile"><?php echo $recommands['Tour E']->ic_title; ?></a></div>
</div>
<?php } ?>
<?php if(!empty($recommands['Tour F'])){ ?>
<div class="nextarticle">
<a href="<?php echo $recommands['Tour F']->ic_url; ?>" id="bottom_tour_f_image_mobile"> <img src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Tour F']->mobile_photo; ?>"
class="img-responsive" alt="<?php echo $recommands['Tour F']->ic_title; ?>"></a>
<div class="tournextname"><a href="<?php echo $recommands['Tour F']->ic_url; ?>" id="bottom_tour_f_title_mobile"><?php echo $recommands['Tour F']->ic_title; ?></a></div>
</div>
<?php } ?>
<?php if(!empty($recommands['Tour G'])){ ?>
<div class="nextarticle">
<a href="<?php echo $recommands['Tour G']->ic_url; ?>" id="bottom_tour_g_image_mobile"> <img src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Tour G']->mobile_photo; ?>"
class="img-responsive" alt="<?php echo $recommands['Tour G']->ic_title; ?>"></a>
<div class="tournextname"><a href="<?php echo $recommands['Tour G']->ic_url; ?>" id="bottom_tour_g_title_mobile"><?php echo $recommands['Tour G']->ic_title; ?></a></div>
</div>
<?php } ?>
<?php if(!empty($recommands['Tour H'])){ ?>
<div class="nextarticle">
<a href="<?php echo $recommands['Tour H']->ic_url; ?>" id="bottom_tour_h_image_mobile"><img src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Tour H']->mobile_photo; ?>"
class="img-responsive" alt="<?php echo $recommands['Tour H']->ic_title; ?>"></a>
<div class="tournextname"><a href="<?php echo $recommands['Tour H']->ic_url; ?>" id="bottom_tour_h_title_mobile"><?php echo $recommands['Tour H']->ic_title; ?></a></div>
</div>
<?php } ?>
<?php } ?>
@ -116,6 +174,73 @@
<a href="<?php echo $recommands['Article D']->ic_url; ?>" id="bottom_info_d_title_mobile"> <?php echo $recommands['Article D']->ic_title; ?> </a>
</div>
</div>
<?php } ?>
<?php if(!empty($recommands['Article E'])){ ?>
<div class="nextarticle">
<a href="<?php echo $recommands['Article E']->ic_url; ?>" id="bottom_info_e_image_mobile"> <img
src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Article E']->mobile_photo; ?>"
class="img-responsive" alt="<?php echo $recommands['Article E']->ic_title; ?>"></a>
<div class="tournextname">
<a href="<?php echo $recommands['Article E']->ic_url; ?>" id="bottom_info_e_title_mobile"> <?php echo $recommands['Article E']->ic_title; ?> </a>
</div>
</div>
<?php } ?>
<?php if(!empty($recommands['Article F'])){ ?>
<div class="nextarticle">
<a href="<?php echo $recommands['Article F']->ic_url; ?>" id="bottom_info_f_image_mobile"> <img
src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Article F']->mobile_photo; ?>"
class="img-responsive" alt="<?php echo $recommands['Article F']->ic_title; ?>"></a>
<div class="tournextname">
<a href="<?php echo $recommands['Article F']->ic_url; ?>" id="bottom_info_f_title_mobile"> <?php echo $recommands['Article F']->ic_title; ?> </a>
</div>
</div>
<?php } ?>
<?php if(!empty($recommands['Article G'])){ ?>
<div class="nextarticle">
<a href="<?php echo $recommands['Article G']->ic_url; ?>" id="bottom_info_g_image_mobile"> <img
src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Article G']->mobile_photo; ?>"
class="img-responsive" alt="<?php echo $recommands['Article G']->ic_title; ?>"></a>
<div class="tournextname">
<a href="<?php echo $recommands['Article G']->ic_url; ?>" id="bottom_info_g_title_mobile"> <?php echo $recommands['Article G']->ic_title; ?> </a>
</div>
</div>
<?php } ?>
<?php if(!empty($recommands['Article H'])){ ?>
<div class="nextarticle">
<a href="<?php echo $recommands['Article H']->ic_url; ?>" id="bottom_info_h_image_mobile"> <img
src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Article H']->mobile_photo; ?>"
class="img-responsive" alt="<?php echo $recommands['Article H']->ic_title; ?>"></a>
<div class="tournextname">
<a href="<?php echo $recommands['Article H']->ic_url; ?>" id="bottom_info_h_title_mobile"> <?php echo $recommands['Article H']->ic_title; ?> </a>
</div>
</div>
<?php } ?>

@ -54,6 +54,64 @@
</div></td>
<?php } ?>
<?php if(!empty($recommands['Tour E'])){ ?>
<td> <div class="nextarticle">
<a href="<?php echo $recommands['Tour E']->ic_url; ?>" id="bottom_tour_e_image"> <img src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Tour E']->mobile_photo; ?>"
class="img-responsive" alt="<?php echo $recommands['Tour E']->ic_title; ?>"></a>
<div class="tournextname"><a href="<?php echo $recommands['Tour E']->ic_url; ?>" id="bottom_tour_e_title"><?php echo $recommands['Tour E']->ic_title; ?></a></div>
</div></td>
<?php } ?>
<?php if(!empty($recommands['Tour F'])){ ?>
<td> <div class="nextarticle">
<a href="<?php echo $recommands['Tour F']->ic_url; ?>" id="bottom_tour_f_image"> <img src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Tour F']->mobile_photo; ?>"
class="img-responsive" alt="<?php echo $recommands['Tour F']->ic_title; ?>"></a>
<div class="tournextname"><a href="<?php echo $recommands['Tour F']->ic_url; ?>" id="bottom_tour_f_title"><?php echo $recommands['Tour F']->ic_title; ?></a></div>
</div></td>
<?php } ?>
<?php if(!empty($recommands['Tour G'])){ ?>
<td> <div class="nextarticle">
<a href="<?php echo $recommands['Tour G']->ic_url; ?>" id="bottom_tour_g_image"> <img src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Tour G']->mobile_photo; ?>"
class="img-responsive" alt="<?php echo $recommands['Tour G']->ic_title; ?>"></a>
<div class="tournextname"><a href="<?php echo $recommands['Tour G']->ic_url; ?>" id="bottom_tour_g_title"><?php echo $recommands['Tour G']->ic_title; ?></a></div>
</div></td>
<?php } ?>
<?php if(!empty($recommands['Tour H'])){ ?>
<td> <div class="nextarticle">
<a href="<?php echo $recommands['Tour H']->ic_url; ?>" id="bottom_tour_h_image"><img src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Tour H']->mobile_photo; ?>"
class="img-responsive" alt="<?php echo $recommands['Tour H']->ic_title; ?>"></a>
<div class="tournextname"><a href="<?php echo $recommands['Tour H']->ic_url; ?>" id="bottom_tour_h_title"><?php echo $recommands['Tour H']->ic_title; ?></a></div>
</div> </td>
<?php } ?>
</tr>
</tbody>
</table>
@ -86,7 +144,7 @@
<?php if(!empty($recommands['Article B'])){ ?>
<td>
<div class="nextarticle">
<a href="<?php echo $recommands['Article B']->ic_url; ?>" id="bottom_info_b_image"> <img
<a href="<?php echo $recommands['Article B']->ic_url; ?>" id="bottom_info_b_image"></a> <img
src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Article B']->mobile_photo; ?>"
class="img-responsive" alt="<?php echo $recommands['Article B']->ic_title; ?>"></a>
@ -127,10 +185,76 @@
<a href="<?php echo $recommands['Article D']->ic_url; ?>" id="bottom_info_d_title"> <?php echo $recommands['Article D']->ic_title; ?> </a>
</div>
</div>
</td>
<?php } ?>
<?php if(!empty($recommands['Article E'])){ ?>
<td>
<div class="nextarticle">
<a href="<?php echo $recommands['Article E']->ic_url; ?>" id="bottom_info_e_image"> <img
src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Article E']->mobile_photo; ?>"
class="img-responsive" alt="<?php echo $recommands['Article E']->ic_title; ?>"></a>
<div class="tournextname">
<a href="<?php echo $recommands['Article E']->ic_url; ?>" id="bottom_info_e_title"> <?php echo $recommands['Article E']->ic_title; ?> </a>
</div>
</div>
</td>
<?php } ?>
<?php if(!empty($recommands['Article F'])){ ?>
<td>
<div class="nextarticle">
<a href="<?php echo $recommands['Article F']->ic_url; ?>" id="bottom_info_f_image"> <img
src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Article F']->mobile_photo; ?>"
class="img-responsive" alt="<?php echo $recommands['Article F']->ic_title; ?>"></a>
<div class="tournextname">
<a href="<?php echo $recommands['Article F']->ic_url; ?>" id="bottom_info_f_title"> <?php echo $recommands['Article F']->ic_title; ?> </a>
</div>
</div>
</td>
<?php } ?>
<?php if(!empty($recommands['Article G'])){ ?>
<td>
<div class="nextarticle">
<a href="<?php echo $recommands['Article G']->ic_url; ?>" id="bottom_info_g_image"> <img
src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Article G']->mobile_photo; ?>"
class="img-responsive" alt="<?php echo $recommands['Article G']->ic_title; ?>"></a>
<div class="tournextname">
<a href="<?php echo $recommands['Article G']->ic_url; ?>" id="bottom_info_g_title"> <?php echo $recommands['Article G']->ic_title; ?> </a>
</div>
</div>
</td>
<?php } ?>
<?php if(!empty($recommands['Article H'])){ ?>
<td>
<div class="nextarticle">
<a href="<?php echo $recommands['Article H']->ic_url; ?>" id="bottom_info_h_image"> <img
src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Article H']->mobile_photo; ?>"
class="img-responsive" alt="<?php echo $recommands['Article H']->ic_title; ?>"></a>
<div class="tournextname">
<a href="<?php echo $recommands['Article H']->ic_url; ?>" id="bottom_info_h_title"> <?php echo $recommands['Article H']->ic_title; ?> </a>
</div>
</div>
</td>
<?php } ?>
</tr>
</tbody>
</table>

@ -10,8 +10,8 @@
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta content="yes" name="apple-mobile-web-app-capable">
<meta name="apple-mobile-web-app-title" content="Asia Highlights - Since 2016!">
<meta name="keywords" content="<!--@KEYWORDS@-->">
<meta name="description" content="<!--@DESCRIPTION@-->">
<!--@Meta_Robots@-->
<!--@OG:IMAGE@-->
<link rel="canonical" href="<!--@CANONICAL@-->">
<link rel="shortcut icon" href="https://data.asiahighlights.com/favicon.ico" />
@ -21,6 +21,7 @@
<!--@MAIN-CSS@-->
<!--@ADDON-CSS@-->
<!-- Google Tag Manager -->
<script>(function (w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });
@ -29,6 +30,16 @@
j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', 'GTM-56CMWN3');</script>
<!-- End Google Tag Manager -->
<!-- Global site tag (gtag.js) - Google Ads: 996341496 -->
<script async src="https://www.googletagmanager.com/gtag/js?id=AW-996341496"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'AW-996341496');
</script>
</head>
<body>
@ -39,25 +50,118 @@
<!--PC头部-->
<header class="headerbar" id="header">
<div class="p_topnavigation">
<div class="topnavigation">
<a href="/" class="p_toplogo"> <img src="https://data.asiahighlights.com/pic/logo-ah.png"
alt="Asiahighlights logo" class="asiahighlightslogo img-responsive"></a>
<nav>
<div class="p_topnavigation">
<ul class="pctopnavi">
<li class="dropdown"><a href="/japan/tours" class="p_topnavilink">Japan</a>
<div class=" dropdown-content">
<div class="inspirationinfo">
<div class="inspirationlist vacationtype">
<span class="inspirationtitle">Itinerary Ideas</span>
<div class="listtour">
<ul class="inspiration">
<li><a href="/japan/tours/tokyo-highlights">5 Days</a></li>
<li><a href="/japan/1-week-itinerary">7 Days</a></li>
<li><a href="/japan/tours/mountain-and-sea">8 Days</a></li>
<li><a href="/japan/tours/japan-highlights">9 Days</a></li>
<li><a href="/japan/tours/cherry-blossom-spring-mini-group">10 Days</a></li>
</ul>
<ul class="inspiration">
<li><a href="/japan/tours/classic-japan">11 Days</a></li>
<li><a href="/japan/tours/family-vacation">14 Days</a></li>
<li><a href="/japan/tours/japan-china-discovery">16 Days</a></li>
<li><a href="/japan/tours/summer-family-vacation">17 Days</a></li>
<li><a href="/japan/3-week-itineraries">3 Weeks</a></li>
</ul>
</div>
</div>
<div class="inspirationlist vacationtype">
<span class="inspirationtitle">Trip Plan</span>
<div class="listtour">
<ul class="inspiration">
<li><a href="/japan/plan-a-trip">Bucket List Trip</a></li>
<li><a href="/japan/how-to-plan-a-family-trip-to-japan">Family Trip</a></li>
<li><a href="/japan/plan-a-cherry-blossom-trip">Cherry Blossom Trip</a></li>
<li><a href="/japan/planning-a-summer-trip">Summer Trip</a></li>
<li><a href="/japan/plan-a-winter-trip">Winter Trip</a></li>
</ul>
<ul class="inspiration">
<li><a href="/asia/plan-a-two-week-itinerary-in-japan-and-south-korea">Japan-South
Korea Trip</a></li>
<li><a href="/asia/plan-a-trip-to-china-and-japan">Japan-China Trip</a></li>
<li><a href="/asia/plan-a-trip-to-japan-and-thailand">Japan-Thailand
Trip</a></li>
</ul>
</div>
</div>
</div>
</div>
</li>
<li class="dropdown"><a href="/southeast-asia/tours/thailand-cambodia-and-vietnam"
class="p_topnavilink" id="thailand_vietnam_cambodia_pc">Thailand-Vietnam-Cambodia</a>
<div class=" dropdown-content">
<div class="inspirationinfo">
<div class="inspirationlist topthings">
<span class="inspirationtitle">Thailand-Vietnam-Cambodia:</span>
<ul class="inspiration">
<li><a href="/southeast-asia/tours/highlights-of-thailand-cambodia-and-vietnam">3
Weeks
</a></li>
<li><a href="/southeast-asia/tours/best-of-thailand-cambodia-and-vietnam">
2 Weeks</a></li>
<li><a href="/southeast-asia/tours/essential-thailand-cambodia-and-vietnam">12
Days</a></li>
</ul>
</div>
<div class="inspirationlist topthings">
<span class="inspirationtitle">Vietnam & Cambodia:</span>
<ul class="inspiration">
<li><a href="/southeast-asia/tours/vietnam-cambodia-family-tour">2 Weeks for
Family</a></li>
<li><a href="/southeast-asia/tours/vietnam-cambodia-mekong-cruise">2 Weeks for
Couple</a></li>
<li><a href="/southeast-asia/tours/cambodia-and-vietnam-highlights">12 Days</a>
</li>
<li><a href="/southeast-asia/tours/from-south-vietnam-to-north-cambodia">8 Days</a></li>
</ul>
</div>
<div class="inspirationlist topthings">
<span class="inspirationtitle">Vietnam & Thailand:</span>
<ul class="inspiration">
<li><a href="/southeast-asia/tours/classic-vietnam-and-thailand">2 Weeks</a>
</li>
</ul>
</div>
<div class="inspirationlist topthings">
<span class="inspirationtitle">Thailand & Cambodia:</span>
<ul class="inspiration">
<li><a href="/southeast-asia/tours/best-of-thailand-and-cambodia">11 Days</a>
</li>
</ul>
</div>
</div>
</div>
</li>
<li class="dropdown"><a class="p_topnavilink" href="/destinations">Destinations</a>
<div class=" dropdown-content">
<div class="inspirationinfo">
<div class="inspirationlist navi_destination">
<span class="inspirationtitle"><a href="/southeast-asia/tours">Southeast
Asia:</a></span>
<span class="inspirationtitle"><a href="/southeast-asia/tours">Southeast Asia:</a></span>
<ul class="inspiration">
<li><a href="/thailand">Thailand</a></li>
<li><a href="/thailand/tours/lantern-festival">Thailand Lantern Festival</a>
</li>
<li><a href="/thailand/tours/lantern-festival">Thailand Lantern Festival</a></li>
<li><a href="/vietnam">Vietnam</a></li>
<li><a href="/cambodia">Cambodia</a></li>
<li><a href="/laos">Laos</a></li>
@ -73,10 +177,8 @@
<ul class="inspiration">
<li><a href="/japan">Japan</a></li>
<li><a href="/south-korea">South Korea</a></li>
<li><a href="https://www.chinahighlights.com/tour/" target="_blank"
rel="nofollow">China (HK,
Taiwan)</a></li>
<li><a href="/asia/plan-a-two-week-itinerary-in-japan-and-south-korea">South Korea</a></li>
<li><a href="https://www.chinahighlights.com/tour/" target="_blank">China (HK, Taiwan)</a></li>
<li><a href="/asia/tours/mongolia-china-and-thailand">Mongolia</a></li>
</ul>
@ -89,10 +191,20 @@
<li><a href="/nepal">Nepal</a></li>
<li><a href="/bhutan">Bhutan</a></li>
<li><a href="/srilanka">Sri Lanka</a></li>
</ul>
</div>
<div class="inspirationlist navi_destination">
<span class="inspirationtitle"><a href="https://www.globalhighlights.com/middle-east/tours" target="_blank">Middle East:</a></span>
<ul class="inspiration">
<li><a href="https://www.globalhighlights.com/egypt/tours" target="_blank">Egypt</a></li>
<li><a href="https://www.globalhighlights.com/israel/plan-a-trip" target="_blank">Israel</a></li>
<li><a href="https://www.globalhighlights.com/middle-east/tours/12-day-egypt-jordan" target="_blank">Jordan</a></li>
<li><a href="https://www.globalhighlights.com/turkey/tours" target="_blank">Turkey</a></li>
<li><a href="https://www.globalhighlights.com/morocco/tours" target="_blank">Morocco</a></li>
</ul>
</div>
<div class="inspirationlist navi_destination">
<span class="inspirationtitle">Central Asia:</span>
<ul class="inspiration">
@ -102,8 +214,74 @@
</div>
</div>
</li>
<li class="dropdown"><a href="/tours" class="p_topnavilink">Tours</a></li>
<li class="dropdown"><a class="p_topnavilink" href="/itinerary-ideas">Itinerary Ideas</a></li>
<li class="dropdown"><a class="p_topnavilink">Itinerary Ideas</a>
<div class=" dropdown-content">
<div class="inspirationinfo">
<div class="inspirationlist topthings">
<span class="inspirationtitle">7-12 Days Itinerary</span>
<div class="listtour">
<ul class="inspiration">
<li><a href="/japan/1-week-itinerary">1 Week in Japan</a></li>
<li><a href="/vietnam/7-days-itinerary">1 Week in Vietnam</a></li>
<li><a href="https://www.chinahighlights.com/travelguide/8-day-china-itinerary.htm"
target="_blank">8 Days in China</a></li>
<li><a href="/japan/10-day-itineraries">10 Days in Japan</a></li>
<li><a href="/vietnam/10-days-itinerary">10 Days in Vietnam</a></li>
<li><a href="https://www.chinahighlights.com/travelguide/10-days-china-itinerary.htm"
target="_blank">10 Days in China</a></li>
<li><a href="/japan/12-day-itineraries">12 Days in Japan</a></li>
<li><a href="https://www.chinahighlights.com/travelguide/12-days-china-itinerary.htm"
target="_blank">12 Days in China</a></li>
</ul>
</div>
</div>
<div class="inspirationlist topthings">
<span class="inspirationtitle">2-Week Itinerary</span>
<div class="listtour">
<ul class="inspiration">
<li><a href="/southeast-asia/2-weeks-itinerary ">Southeast Asia</a></li>
<li><a href="/japan/2-week-itineraries">Japan</a></li>
<li><a href="/asia/plan-a-two-week-itinerary-in-japan-and-south-korea">
Japan and South Korea</a></li>
<li><a href="/thailand/2-weeks-in-thailand">Thailand</a></li>
<li><a href="/vietnam/2-weeks-itinerary">Vietnam</a></li>
<li><a href="/india/2-week-itinerary">India</a></li>
<li><a href="https://www.chinahighlights.com/travelguide/2-weeks-china-itinerary.htm"
target="_blank">China</a></li>
</ul>
</div>
</div>
<div class="inspirationlist topthings">
<span class="inspirationtitle">3-Week Itinerary</span>
<ul class="inspiration">
<li><a href="/southeast-asia/3-weeks-itinerary">Southeast Asia</a></li>
<li><a href="/japan/3-week-itineraries">Japan</a></li>
<li><a href="/vietnam/3-weeks-itinerary">Vietnam</a></li>
<li><a href="https://www.chinahighlights.com/travelguide/3-weeks-china-itinerary.htm"
target="_blank">China</a></li>
<li><a href="/southeast-asia/trip-to-thailand-cambodia-vietnam">Thailand,
Cambodia, Vietnam</a></li>
<li><a href="/asia/tours/china-and-vietnam">China, Vietnam</a></li>
<li><a href="/asia/tours/china-nepal-and-india">China, Nepal, India</a></li>
<li><a href="/asia/tours/china-laos-thailand">China, Laos, Thailand</a></li>
</ul>
</div>
<div class="inspirationlist topthings">
<span class="inspirationtitle">4-Week Itinerary</span>
<ul class="inspiration">
<li><a href="/southeast-asia/4-weeks-itinerary">Southeast Asia</a></li>
<li><a href="https://www.chinahighlights.com/travelguide/4-week-china-itinerary.htm"
target="_blank">China</a></li>
</ul>
</div>
</div>
</div>
</li>
<li class="dropdown"><a href="/about-us" class="p_topnavilink">About Us</a>
<div class=" dropdown-content">
<div class="inspirationinfo">
@ -113,15 +291,11 @@
<li><a href="/reviews" id="all_reviews">Asia Highlights Travel Reviews</a></li>
</ul>
<ul class="inspiration" style="width: 260px;">
<li><a href="/reviews/thailand" id="thailand_reviews">Thailand Travel
Reviews</a></li>
<li><a href="/reviews/vietnam" id="veitnam_reviews">Vietnam Travel Reviews</a>
</li>
<li><a href="/reviews/cambodia" id="cambodia_reviews">Cambodia Travel
Reviews</a></li>
<li><a href="/reviews/thailand" id="thailand_reviews">Thailand Travel Reviews</a></li>
<li><a href="/reviews/vietnam" id="veitnam_reviews">Vietnam Travel Reviews</a></li>
<li><a href="/reviews/cambodia" id="cambodia_reviews">Cambodia Travel Reviews</a></li>
<li><a href="/reviews/japan" id="japan_reviews">Japan Travel Reviews</a></li>
<li><a href="/reviews/myanmar" id="myanmar_reviews">Myanmar Travel Reviews</a>
</li>
<li><a href="/reviews/myanmar" id="myanmar_reviews">Myanmar Travel Reviews</a></li>
<li><a href="/reviews/china" id="china_reviews">China Travel Reviews</a></li>
</ul>
</div>
@ -137,23 +311,21 @@
<input type="hidden" value="001281624266240652297:cl1fy1cxepi" name="cx">
<input type="hidden" value="FORID:9" name="cof">
<input type="text" onfocus="this.value = ''" class="strkeys"
placeholder="Search Asia Highlights" name="q">
placeholder="Search Asia Highlights" name="q" style="width: 165px;">
<input type="image" class="submits"
src="https://data.chinahighlights.com/pic/pc-top-navigation-web-search-bg.png"
width="25px" alt="site search button">
width="25px">
<input type="hidden" name="__ftoken__"
value="MTU5ODMzNDc2NDQ0NA==.3664784f0395175e7de44382781cd7f7cb647e2a">
</form>
</div>
</li>
</ul>
</nav>
</div>
</div>
</header>
<div class="updated_news">How to Plan an Incredible Family Trip to Japan in 2024/2025. <a
href="/japan/how-to-plan-a-family-trip-to-japan">Learn more.</a></div>
<!--PC头部 结束-->
<!--@HEAD_1@-->
@ -161,35 +333,24 @@
<!--PC正文-->
<div class="main_content">
<div id="main_content_pc">
<main>
<div class="pc_content">
<!--@CUSTOM-CONENT@-->
</div>
</main>
<aside>
<?php if ($meta_show_advertise == 'yes' || empty($meta_show_advertise)) {?>
<div class="right_brand_info">
<h3>Why Asia Highlights (10,000+ reviews & 98.8% 5-star rating)</h3>
<ul>
<li class="brand_title">Save Your Time:</li>
<li>Less research, more enjoyment!</li>
<li>Real-time 1V1 expert planning</li>
<li class="brand_title">Maximize Your Flexibility:</li>
<li>Personal local guide and ride</li>
<li>Explore at your own pace</li>
<li class="brand_title">Celebrate Your Journeys:</li>
<li>Specially-crafted family adventures</li>
<li>Celebrate milestones with style!</li>
</ul>
</div>
<?php } ?>
<!--@TIPS-RIGHT@-->
<!--@TIPS-RIGHT-LIST@-->
</aside>
<div class="info_tm_button"><a href="/forms/tailormade?product_code=" id="create_my_trip_button_pc">Create
my trip</a>
<div class="pc_content">
<!--@CUSTOM-CONENT@-->
</div>
<div class="right_brand_info">
<h2>Why Travel with Asia Highlights (98.8% positive customer reviews among 10,000+)</h2>
<ul>
<li class="tailormade"><strong>Unique experiences tailored to your interests:</strong> Enjoy a
premium trip that goes beyond the typical tourist attractions.</li>
<li class="worryfree"><strong>Hassle-free travel and peace of mind: </strong>Every aspect of your
trip will be carefully planned and organized by your 1:1 travel consultant.
</li>
<li class="norisk"><strong>Experienced and knowledgeable guides:</strong> Your guides will be local
and love to work for travelers' smiles.</li>
</ul>
</div>
<!--@TIPS-RIGHT@-->
<!--@TIPS-RIGHT-LIST@-->
<div class="info_tm_button"><a href="/forms/tailormade" id="create_my_trip_button_pc">Create my trip</a>
</div>
</div>
@ -201,216 +362,247 @@
<!--PC底部-->
<div class="infotailor">
<span class="infotailorword">
<span class="bottomtailor">Start planning your tailor-made tour with 1-1 help
from our travel advisors.</span>
<span class="infotailorword">We are here to help you...<br> Start planning your tailor-made tour with 1-1 help
from our travel advisors.
<span class="infotailormade"><a href="/forms/tailormade?product_code=">Create My Trip</a></span>
</span>
<div class="tp_banner">4.9 Excellent<img src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="https://data.asiahighlights.com/pic/trustpilot-new-icon.png" class="img-responsive"
alt="TrustPilot rating" width="100px">
<img src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="https://data.asiahighlights.com/image/about/logo-white.png" class="img-responsive"
<div class="tp_banner">4.9 Excellent<img src="https://data.asiahighlights.com/pic/trustpilot-new-icon.png"
class="img-responsive" alt="TrustPilot rating" width="100px">
<img src="https://data.asiahighlights.com/image/about/logo-white.png" class="img-responsive"
alt="TrustPilot Logo" width="73px">
</div>
</div>
<div class="newsletter_form">
<div class="list_content">
<h2 style="padding-top: 0; text-align: center;">Sign up to Our Newsletter</h2>
<p style="text-align: center;">Be the first to receive exciting updates, exclusive promotions, and valuable
travel tips from our
team of experts. </p>
<span class="infotailormade"><a href="/newsletter">Click to sign up</a></span>
<h2 style="padding-top: 0; text-align: center;">Sign up to Our Newsletter</h2>
<p style="text-align: center;">Be the first to receive exciting updates, exclusive promotions, and valuable travel tips from our
team of experts. </p>
<form action="https://www.asiahighlights.com/orders/newsletter_save" method="post" id="newsletter_form" name="newsletter_form" novalidate="">
<label id="name_area">
<input type="text" name="name" id="newsletter_realname" class="contact_name" placeholder="* Your name">
<div style="color: #a31022;display: none" class="requiredArea" id="newsletter_realname_errmsg">Please fill up your name.</div>
</label>
<label id="email_area">
<input type="email" class="safyemail autoemail ui-autocomplete-input contact_email" name="email" id="newsletter_email" autocomplete="off" placeholder="* Email">
<div style="color: #a31022;display: none" class="requiredArea" id="newsletter_email_errmsg">Please fill up your email address.</div>
<div style="color: #a31022;display: none" class="requiredArea" id="newsletter_email_verify_errmsg">Please verify your email.</div>
</label>
<button id="submit_newsletter" type="button" class="sendInquiry">Inspire Me</button>
</form>
</div>
</div>
</div>
<div class="bottom_why_us">
<h2>Why Asia Highlights</h2>
<h2>The Asia Highlights Experience</h2>
<div class="table-responsive">
<table class="why_us_table">
<tbody>
<tr>
<td>
<div class="bottom_why_us_content">
<div class="whyus_image"> <img src="https://data.asiahighlights.com/grey.gif"
loader="lazy"
originalsrc="https://images.asiahighlights.com/allpicture/2024/02/2fa10d72338f4942af532a909a486215_cut_100x100_241.png"
alt="Customize Your Tour" class="img-responsive" width="100" height="100" />
</div>
<h3>Customize Your Tour</h3>
<ul class="infolist">
<li>Travel Advisors Rooted in Asia</li>
<li>Instant Response, No More Waits! </li>
<li>Direct Connections, Supreme Values</li>
</ul>
<img src="https://data.globalhighlights.com/image/aboutus/ah-bottom-why-us-tag-1.png"
alt="1-to-1 Expert Planning" class="img-responsive">
<h3>1-to-1 Expert Planning</h3>
<p>Your tour will be tailor-made to suit you by a destination expert. Your personal
travel advisor will always reply within 24 hours.</p>
</div>
</td>
<td>
<div class="bottom_why_us_content">
<div class="whyus_image"> <img src="https://data.asiahighlights.com/grey.gif"
loader="lazy"
originalsrc="https://images.asiahighlights.com/allpicture/2024/02/128f3292b9054cd295eeaf0a6223ee93_cut_100x100_241.png"
alt="Maximize Your Flexibility" class="img-responsive" width="100"
height="100" /></div>
<h3>Maximize Your Flexibility</h3>
<ul class="infolist">
<li>Your own personal guide and ride. </li>
<li> Explore at your own pace. </li>
<li> Unparalleled flexibility, impossible on a group tour.</li>
</ul>
<img src="https://data.globalhighlights.com/image/aboutus/ah-bottom-why-us-tag-2.png"
alt="Personal Journeys" class="img-responsive">
<h3>Personal Journeys</h3>
<p>Enjoy having your own personal local guide and ride. Explore destinations at your own
pace. Have as much flexibility as possible.</p>
</div>
</td>
<td>
<div class="bottom_why_us_content">
<div class="whyus_image"><img src="https://data.asiahighlights.com/grey.gif"
loader="lazy"
originalsrc="https://images.asiahighlights.com/allpicture/2024/02/93cce481fbbb427882ce36285d73119d_cut_100x100_241.png"
alt="Ensure Your Satisfactory" class="img-responsive" width="100"
height="100" /></div>
<h3>Ensure Your Satisfactory</h3>
<ul class="infolist">
<li>The Top 20% nationwide guides at your service.</li>
<li>20% more space on your group's transportation.</li>
<li> 24/7 emergency support.</li>
</ul>
<img src="https://data.globalhighlights.com/image/aboutus/ah-bottom-why-us-tag-3.png"
alt="Authentic Experiences" class="img-responsive">
<h3>Authentic Experiences</h3>
<p>Go beyond the sightseeing. Understand the destinations by practicing the local
culture and interacting with local people.</p>
</div>
</td>
<td>
<div class="bottom_why_us_content">
<div class="whyus_image"> <img src="https://data.asiahighlights.com/grey.gif"
loader="lazy"
originalsrc="https://images.asiahighlights.com/allpicture/2024/02/03f93f0c74d548bf9ebd55796545c25b_cut_100x100_241.png"
alt="Celebrate Your Journey" class="img-responsive" width="100" height="100" />
</div>
<h3>Celebrate Your Journey</h3>
<ul class="infolist">
<li>Family adventures</li>
<li> Celebrate milestones with style!</li>
<li> Photographer service for special moments</li>
</ul>
<img src="https://data.globalhighlights.com/image/aboutus/ah-bottom-why-us-tag-4.png"
alt="One-Stop Service" class="img-responsive">
<h3>One-Stop Service</h3>
<p>Leave all the booking work to us, including international and internal
transportation, visas, hotels, meals, and activities.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
<div class="bottom_destinations">
<div class="footerbox">
<h2 style="
<h2 style="
margin-top: 0;
text-align: center;
">Where Can We Take You Today?</h2>
<div class="listtour">
<div class="destination_links">
<ul>
<li><a href="https://www.chinahighlights.com/" target="_blank" rel="nofollow">China</a></li>
<li><a href="https://www.globalhighlights.com/europe" target="_blank" rel="nofollow">Europe</a></li>
<li><a href="https://www.globalhighlights.com/middle-east/tours" target="_blank"
rel="nofollow">Middle East </a>
</li>
<li><a href="https://www.globalhighlights.com/african-safari-tours/tours" target="_blank"
rel="nofollow">African
Safari</a></li>
</ul>
</div>
</div>
</div>
<div class="destination_links">
<ul>
<li><a href="/southeast-asia/tours">Southeast Asia Tours</a></li>
<li><a href="/japan/tours">Japan Tours</a></li>
<li><a href="/thailand/tours">Thailand Tours</a></li>
<li><a href="/vietnam/tours">Vietnam Tours</a></li>
<div class="infobottom">
<div class="footerbox">
<div class="list_content">
<div class="aboutusleft">
<div class="bottomaboutus">
<img src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="https://images.asiahighlights.com/allpicture/2024/03/1437fad7aabf4cf297ae5cefce15b241_cut_1191x842_241.png"
width="170" height="121" alt="Asia Highlights' logo"
style="float: left; margin-right: 10px; margin-bottom: 10px; width: 170px; height: 121px;">
<div class="aboutusinfo">
<img src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="https://data.asiahighlights.com/pic/trustpilot-new-icon.png"
style="display: block; margin-bottom: 10px;" width="104" height="20" alt="tour review">
Rated 4.9 out of 5 | 98.8% Excellence<br>
China Highlights International<br> Travel Service Co., LTD
</div>
</div>
</ul>
</div>
<div class="destination_links">
<ul>
<li><a href="/cambodia/tours">Cambodia Tours</a></li>
<li><a href="/singapore">Singapore</a></li>
<li><a href="/indonesia/bali/tours">Bali Tours</a></li>
<li><a href="/laos/trip-plan">Laos</a></li>
</ul>
</div>
<div class="aboutusright company">
<div class="bottompctitle">Company</div>
<div class="destination_links">
<ul>
<li><a href="/about-us">About us</a></li>
<li><a href="/travel-agents">Travel Agents</a></li>
<li><a href="/reviews">Reviews</a></li>
<li><a href="/contact-us">Contact us</a></li>
<li><a href="/about-us/loyalty-program">Loyalty Program</a></li>
<li><a href="/privacy">Privacy Policy</a></li>
<li><a href="/terms-of-use">Terms</a></li>
<li><a href="/india/tours">India Tours</a></li>
<li><a href="/nepal">Nepal</a></li>
<li><a href="/bhutan">Bhutan</a></li>
<li><a href="/srilanka">Sri Lanka</a></li>
</ul>
</div>
<div class="aboutusright language">
<div class="bottompctitle">Language</div>
<div class="destination_links">
<ul>
<li><a href="https://www.globalhighlights.com/" target="_blank" rel="nofollow">Global</a></li>
<li><a href="https://www.chinarundreisen.com/" target="_blank" rel="nofollow">Deutsch</a></li>
<li><a href="https://www.voyageschine.com/" target="_blank" rel="nofollow">Français</a></li>
<li><a href="https://www.viaje-a-china.com/" target="_blank" rel="nofollow">Español</a></li>
<li><a href="https://www.viaggio-in-cina.it/" target="_blank" rel="nofollow">Italiano</a></li>
<li><a href="https://www.chinahighlights.ru/" target="_blank" rel="nofollow">Русский</a></li>
<li><a href="https://www.arachina.com/" target="_blank" rel="nofollow">日本語</a></li>
<li><a href="/myanmar/tours">Myanmar Tours</a></li>
<li><a href="/caucasus-central-asia/tours">Caucasus and Central Asia Tours</a></li>
<li><a href="https://www.chinahighlights.com/tour/" target="_blank">China Tours</a></li>
</ul>
</div>
</div>
<div class="listtour">
<div class="destination_links">
<ul>
<li><a href="https://www.globalhighlights.com/egypt/tours" target="_blank">Egypt Tours</a>
</li>
</ul>
</div>
<div class="destination_links">
<ul>
<li><a href="https://www.globalhighlights.com/morocco/tours" target="_blank">Morocco
Tours</a></li>
</ul>
</div>
<div class="aboutusright followus">
<div class="bottompctitle">Follow Us</div>
<div class="destination_links">
<ul>
<li style="margin-bottom: 30px;"><a href="https://www.facebook.com/AsiaHighlights/"
rel="nofollow" title="Follow us on Facebook" class="fb" target="_blank">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="30px"
height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30"
xml:space="preserve">
<path id="facebook" fill="#ffffff"
d="M17.252,11.106V8.65c0-0.922,0.611-1.138,1.041-1.138h2.643V3.459l-3.639-0.015 c-4.041,0-4.961,3.023-4.961,4.961v2.701H10v4.178h2.336v11.823h4.916V15.284h3.316l0.428-4.178H17.252z">
</path>
</svg>Facebook</a></li>
<li style="margin-bottom: 30px;"><a href="https://www.pinterest.com/AsiaHighlights/_saved/"
rel="nofollow" title="Share us on Pinterest" target="_blank"><svg id="svg--pinterest"
viewBox="-180 -180 850 850">
<path id="pinterest" fill="#ffffff"
d="M430.149,135.248C416.865,39.125,321.076-9.818,218.873,1.642 C138.071,10.701,57.512,76.03,54.168,169.447c-2.037,57.029,14.136,99.801,68.399,111.84 c23.499-41.586-7.569-50.676-12.433-80.802C90.222,77.367,252.16-6.718,336.975,79.313c58.732,59.583,20.033,242.77-74.57,223.71 c-90.621-18.179,44.383-164.005-27.937-192.611c-58.793-23.286-90.013,71.135-62.137,118.072 c-16.355,80.711-51.557,156.709-37.3,257.909c46.207-33.561,61.802-97.734,74.57-164.704 c23.225,14.136,35.659,28.758,65.268,31.038C384.064,361.207,445.136,243.713,430.149,135.248z">
</path>
</svg>Pinterest</a>
<li><a href="https://www.globalhighlights.com/turkey/tours" target="_blank">Turkey Tours</a>
</li>
<li style="margin-bottom: 30px;"><a href="https://www.instagram.com/asiahighlights/"
rel="nofollow" title="Follow us on Instagram" class="linkin" target="_blank">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="30px"
height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30"
xml:space="preserve">
<path id="instagram" fill="#ffffff"
d="M22.107,3.415H7.893c-2.469,0-4.479,2.007-4.479,4.477v4.73v9.486c0,2.469,2.01,4.479,4.479,4.479h14.215 c2.469,0,4.479-2.01,4.479-4.479v-9.486v-4.73C26.586,5.421,24.576,3.415,22.107,3.415 M23.393,6.086l0.512-0.004v0.511v3.416 l-3.916,0.014l-0.012-3.928L23.393,6.086z M11.693,12.622c0.742-1.028,1.945-1.7,3.307-1.7s2.564,0.672,3.307,1.7 c0.484,0.67,0.771,1.49,0.771,2.379c0,2.248-1.828,4.078-4.078,4.078c-2.248,0-4.078-1.83-4.078-4.078 C10.922,14.112,11.211,13.292,11.693,12.622 M24.328,22.107c0,1.225-0.994,2.219-2.221,2.219H7.893 c-1.225,0-2.219-0.994-2.219-2.219v-9.486h3.459C8.832,13.356,8.664,14.159,8.664,15c0,3.494,2.842,6.335,6.336,6.335 s6.336-2.842,6.336-6.335c0-0.842-0.17-1.645-0.467-2.379h3.459V22.107z">
</path>
</svg> Instagram </a></li>
</ul>
</div>
<div class="feature">
<div class="bottompctitle">Featured on</div>
<a href="/about-us/who-recommended"><img src="https://data.asiahighlights.com/grey.gif"
loader="lazy"
originalsrc="https://images.chinahighlights.com/allpicture/2024/02/c858c422f4aa4702ba62eeeccc29156f_cut_1135x66_241.jpg"
alt="China Highlights was featured on these medias." width="1135" height="66"></a>
<div class="destination_links">
<ul>
<li><a href="https://www.globalhighlights.com/jordan/plan-a-trip" target="_blank">Jordan</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="infobottom">
<div class="footerbox">
<div class="aboutusleft">
<div class="bottomaboutus">
<div class="bottompctitle">About Us</div>
<div class="aboutusinfo">At Asia Highlights, we are committed to providing you a premium,
quality private tour, whether it's a milestone trip, family trip, or bucketlist trip — your
planning will be made easy with just one specialist throughout. <a href="/about-us">Know more
...</a>
<div class="trustPilotIconBig">
<img class="img-responsive" src="https://data.asiahighlights.com/grey.gif"
originalsrc="https://data.asiahighlights.com/pic/trustpilot-new-icon.png" loader="lazy"
style="margin: 10px 0; width:160px;">
Rated
4.9 out of 5 | Excellent<br>
China Highlights International Travel Service Co., LTD<br>
Corporate Number: 914503003486045699
</div>
</div>
</div>
</div>
<div class="aboutusright">
<div class="bottompctitle">Featured on</div>
<img src="https://data.asiahighlights.com/grey.gif" loader="lazy" width="436" height="250"
style="width: 70%;"
originalsrc="https://data.chinahighlights.com/pic/guide/info-template-feature-on.png" alt="Medias"
class="img-responsive bottomfeature" style="opacity: 1; transition: opacity 0.5s ease-in-out 0s;">
</div>
<div class="clear"></div>
<div class="bottomaboutuslinks">
<div class="bottomlinksleft">
<ul class="withBorder">
<li><a href="/travel-agents">Travel Agents</a></li>
<li><a href="/about-us" rel="nofollow">About us</a></li>
<li><a href="/reviews" rel="nofollow">Reviews</a></li>
<li><a href="/about-us/history" rel="nofollow">History</a></li>
<li><a href="/about-us/our-differences" rel="nofollow">Our Differences</a></li>
<li><a href="/contact-us" rel="nofollow">Contact Us</a></li>
</ul>
</div>
<p style="margin-top: 20px; padding-bottom: 0;"><strong>Address:</strong> Building 6, Chuangyi Business
Park, 70 Qilidian Road, Guilin, Guangxi, 541004, China</p>
<ul class="socialmedias">
<li><a href="https://www.facebook.com/AsiaHighlights/" rel="nofollow" title="Follow us on Facebook"
class="fb" target="_blank">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="30px" height="30px"
viewBox="0 0 30 30" enable-background="new 0 0 30 30" xml:space="preserve">
<path id="facebook" fill="#ffffff"
d="M17.252,11.106V8.65c0-0.922,0.611-1.138,1.041-1.138h2.643V3.459l-3.639-0.015 c-4.041,0-4.961,3.023-4.961,4.961v2.701H10v4.178h2.336v11.823h4.916V15.284h3.316l0.428-4.178H17.252z">
</path>
</svg>Facebook
</a></li>
<li><a href="https://www.instagram.com/asiahighlights/" rel="nofollow"
title="Follow us on Instagram" target="_blank">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" width="30px" height="30px"
viewBox="0 0 30 30" enable-background="new 0 0 30 30" xml:space="preserve">
<path id="instagram" fill="#ffffff"
d="M22.107,3.415H7.893c-2.469,0-4.479,2.007-4.479,4.477v4.73v9.486c0,2.469,2.01,4.479,4.479,4.479h14.215 c2.469,0,4.479-2.01,4.479-4.479v-9.486v-4.73C26.586,5.421,24.576,3.415,22.107,3.415 M23.393,6.086l0.512-0.004v0.511v3.416 l-3.916,0.014l-0.012-3.928L23.393,6.086z M11.693,12.622c0.742-1.028,1.945-1.7,3.307-1.7s2.564,0.672,3.307,1.7 c0.484,0.67,0.771,1.49,0.771,2.379c0,2.248-1.828,4.078-4.078,4.078c-2.248,0-4.078-1.83-4.078-4.078 C10.922,14.112,11.211,13.292,11.693,12.622 M24.328,22.107c0,1.225-0.994,2.219-2.221,2.219H7.893 c-1.225,0-2.219-0.994-2.219-2.219v-9.486h3.459C8.832,13.356,8.664,14.159,8.664,15c0,3.494,2.842,6.335,6.336,6.335 s6.336-2.842,6.336-6.335c0-0.842-0.17-1.645-0.467-2.379h3.459V22.107z">
</path>
</svg>
Instagram </a></li>
<li><a href="https://www.pinterest.com/AsiaHighlights/_saved/" rel="nofollow"
title="Share us on Pinterest" target="_blank"><svg id="svg--pinterest"
viewBox="-180 -180 850 850" style="
fill: #fff;
width: 30px;
">
<path d="M430.149,135.248C416.865,39.125,321.076-9.818,218.873,1.642
C138.071,10.701,57.512,76.03,54.168,169.447c-2.037,57.029,14.136,99.801,68.399,111.84
c23.499-41.586-7.569-50.676-12.433-80.802C90.222,77.367,252.16-6.718,336.975,79.313c58.732,59.583,20.033,242.77-74.57,223.71
c-90.621-18.179,44.383-164.005-27.937-192.611c-58.793-23.286-90.013,71.135-62.137,118.072
c-16.355,80.711-51.557,156.709-37.3,257.909c46.207-33.561,61.802-97.734,74.57-164.704
c23.225,14.136,35.659,28.758,65.268,31.038C384.064,361.207,445.136,243.713,430.149,135.248z"></path>
</svg>Pinterest</a>
</li>
</ul>
</div>
</div>
</div>
@ -422,10 +614,100 @@
originalsrc="https://data.chinahighlights.com/image/asia/asia-highlights-bottom-logo.png" width="114"
height="71" loader="lazy" class="img-responsive bottomlogopc">
<span class="bottomcopyright">© 2016-2024 Asia Highlights — Discovery Your Way! </span>
<span class="bottomprivacy"><a href="/privacy">Privacy Policy</a> | <a href="/terms-of-use">Terms</a></span>
</div>
</div>
<div class="web_cookie" id='gotIdArea' style='display: none;'>
<p>Asia Highlights uses cookies to give you the best possible service. If you continue browsing, you agree to
the use of cookies. More details can be found in our <a href="/privacy">privacy policy</a>.</p>
<div class="cookie_close" id="gotItBtn" style="float: right;
padding: 5px 10px;
cursor: pointer;
background: #fff;
font-weight: 600;
font-size: 16px;">X</div>
</div>
<script>
var GOT_IT_KEY = '__asia_highlights_you_agree_to_use_of_cookies__';
if (window.localStorage && localStorage.getItem(GOT_IT_KEY)) {
console.info('If you continue browsing, you agree to the use of cookies.');
} else {
document.getElementById('gotIdArea').style.display = '';
if (window.localStorage) {
localStorage.setItem(GOT_IT_KEY, '1');
}
var gotItBtn = document.getElementById('gotItBtn');
gotItBtn.addEventListener('click', function (evt) {
document.getElementById('gotIdArea').style.display = 'none';
});
setTimeout(function () {
document.getElementById('gotIdArea').style.display = 'none';
}, 10000);
}
</script>
<!--newsletter表单 JS-->
<script src="https://www.recaptcha.net/recaptcha/enterprise.js?render=6Lf828MhAAAAANNetijCXKwW5ARyhcJ-b1Hhslja"></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
var submitbutton = document.getElementById("submit_newsletter");
var newsletterForm = document.getElementById("newsletter_form");
submitbutton.addEventListener('click', function(event) {
var validateResult = validateNewsletterForm();
if (validateResult) {
if (typeof(grecaptcha) === "undefined") {
console.warn('grecaptcha is disabled.');
newsletterForm.submit();
} else {
grecaptcha.enterprise.ready(async () => {
const token = await grecaptcha.enterprise.execute('6Lf828MhAAAAANNetijCXKwW5ARyhcJ-b1Hhslja', {action: 'ADD_TO_CART'});
var el = document.createElement("input");
el.type = "hidden";
el.name = "__grecaptcha_token__";
el.value = token;
newsletterForm.appendChild(el);
newsletterForm.submit();
submitbutton.innerText = "Submitted successfully";
});
}
}
});
});
function validateNewsletterForm() {
var result = true;
var realnameVal = document.getElementById("newsletter_realname").value;
var emailVal = document.getElementById("newsletter_email").value;
var realnameErrEl = document.getElementById("newsletter_realname_errmsg");
var emailErrEl = document.getElementById("newsletter_email_errmsg");
var emailVerifyErrEl = document.getElementById("newsletter_email_verify_errmsg");
realnameErrEl.style.display = 'none';
emailErrEl.style.display = 'none';
emailVerifyErrEl.style.display = 'none';
if (realnameVal === '') {
realnameErrEl.style.display = '';
result = false;
}
if (emailVal === '') {
emailErrEl.style.display = '';
result = false;
} else {
var emailPattern = /^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/;
if (!emailPattern.test(emailVal)) {
emailVerifyErrEl.style.display = '';
result = false;
}
}
return result;
}
</script>
<!--PC底部 结束-->

@ -1,12 +1,13 @@
<div class="infopage_ad_content">
<?php if (!empty($recommands['Content Article A']) || !empty($recommands['Content Article B']) || !empty($recommands['Content Article C']) || !empty($recommands['Content Article D'])) { ?>
<div class="content_article_title">You might be interested in:</div>
<div class="content_article_title">You might be interested in:</div>
<?php if (!empty($recommands['Content Article A'])) { ?>
<div class="infopage_ad">
<a href="<?php echo $recommands['Content Article A']->ic_url; ?>"> <img
src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Content Article A']->desktop_photo; ?>"
originalsrc="<?php echo $recommands['Content Article A']->mobile_photo; ?>"
class="img-responsive"
alt="<?php echo $recommands['Content Article A']->ic_title; ?>"></a>
@ -23,7 +24,7 @@
<div class="infopage_ad">
<a href="<?php echo $recommands['Content Article B']->ic_url; ?>"> <img
src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Content Article B']->desktop_photo; ?>"
originalsrc="<?php echo $recommands['Content Article B']->mobile_photo; ?>"
class="img-responsive"
alt="<?php echo $recommands['Content Article B']->ic_title; ?>"></a>
@ -41,7 +42,7 @@
<div class="infopage_ad">
<a href="<?php echo $recommands['Content Article C']->ic_url; ?>"> <img
src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Content Article C']->desktop_photo; ?>"
originalsrc="<?php echo $recommands['Content Article C']->mobile_photo; ?>"
class="img-responsive"
alt="<?php echo $recommands['Content Article C']->ic_title; ?>"></a>
@ -58,7 +59,7 @@
<div class="infopage_ad hidden-xs">
<a href="<?php echo $recommands['Content Article D']->ic_url; ?>"> <img
src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Content Article D']->desktop_photo; ?>"
originalsrc="<?php echo $recommands['Content Article D']->mobile_photo; ?>"
class="img-responsive"
alt="<?php echo $recommands['Content Article D']->ic_title; ?>"></a>
@ -76,7 +77,7 @@
<div class="infopage_ad hidden-xs">
<a href="<?php echo $recommands['Content Article E']->ic_url; ?>"> <img
src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Content Article E']->desktop_photo; ?>"
originalsrc="<?php echo $recommands['Content Article E']->mobile_photo; ?>"
class="img-responsive"
alt="<?php echo $recommands['Content Article E']->ic_title; ?>"></a>
@ -94,7 +95,7 @@
<div class="infopage_ad hidden-xs">
<a href="<?php echo $recommands['Content Article F']->ic_url; ?>"> <img
src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Content Article F']->desktop_photo; ?>"
originalsrc="<?php echo $recommands['Content Article F']->mobile_photo; ?>"
class="img-responsive"
alt="<?php echo $recommands['Content Article F']->ic_title; ?>"></a>

@ -1,11 +1,12 @@
<div class="infopage_ad_content">
<?php if (!empty($recommands['Content Tour A']) || !empty($recommands['Content Tour B']) || !empty($recommands['Content Tour C']) || !empty($recommands['Content Tour D'])) { ?>
<div class="content_article_title">Explore similar itineraries:</div>
<div class="content_article_title">You might be interested in:</div>
<?php if (!empty($recommands['Content Tour A'])) { ?>
<div class="infopage_ad">
<a href="<?php echo $recommands['Content Tour A']->ic_url; ?>"> <img
src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Content Tour A']->desktop_photo; ?>"
originalsrc="<?php echo $recommands['Content Tour A']->mobile_photo; ?>"
class="img-responsive"
alt="<?php echo $recommands['Content Tour A']->ic_title; ?>"></a>
@ -22,7 +23,7 @@
<div class="infopage_ad">
<a href="<?php echo $recommands['Content Tour B']->ic_url; ?>"> <img
src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Content Tour B']->desktop_photo; ?>"
originalsrc="<?php echo $recommands['Content Tour B']->mobile_photo; ?>"
class="img-responsive"
alt="<?php echo $recommands['Content Tour B']->ic_title; ?>"></a>
@ -40,7 +41,7 @@
<div class="infopage_ad">
<a href="<?php echo $recommands['Content Tour C']->ic_url; ?>"> <img
src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Content Tour C']->desktop_photo; ?>"
originalsrc="<?php echo $recommands['Content Tour C']->mobile_photo; ?>"
class="img-responsive"
alt="<?php echo $recommands['Content Tour C']->ic_title; ?>"></a>
@ -57,7 +58,7 @@
<div class="infopage_ad">
<a href="<?php echo $recommands['Content Tour D']->ic_url; ?>"> <img
src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Content Tour D']->desktop_photo; ?>"
originalsrc="<?php echo $recommands['Content Tour D']->mobile_photo; ?>"
class="img-responsive"
alt="<?php echo $recommands['Content Tour D']->ic_title; ?>"></a>
@ -70,5 +71,41 @@
</div>
<?php } ?>
<?php if (!empty($recommands['Content Tour E'])) { ?>
<div class="infopage_ad">
<a href="<?php echo $recommands['Content Tour E']->ic_url; ?>"> <img
src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Content Tour E']->mobile_photo; ?>"
class="img-responsive"
alt="<?php echo $recommands['Content Tour E']->ic_title; ?>"></a>
<div class="content_article_name"><a
href="<?php echo $recommands['Content Tour E']->ic_url; ?>"> <?php echo $recommands['Content Tour E']->ic_title; ?> </a>
</div>
<div class="content_article_button"><a
href="<?php echo $recommands['Content Tour E']->ic_url; ?>"></a>
</div>
</div>
<?php } ?>
<?php if (!empty($recommands['Content Tour F'])) { ?>
<div class="infopage_ad">
<a href="<?php echo $recommands['Content Tour F']->ic_url; ?>"> <img
src="https://data.asiahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Content Tour F']->mobile_photo; ?>"
class="img-responsive"
alt="<?php echo $recommands['Content Tour F']->ic_title; ?>"></a>
<div class="content_article_name"><a
href="<?php echo $recommands['Content Tour F']->ic_url; ?>"> <?php echo $recommands['Content Tour F']->ic_title; ?> </a>
</div>
<div class="content_article_button"><a
href="<?php echo $recommands['Content Tour F']->ic_url; ?>"></a>
</div>
</div>
<?php } ?>
<?php } ?>
</div>

@ -14,7 +14,7 @@
"dateModified": "<?php echo date('Y-m-d\TH:i:s'); ?>",
"author": {
"@type": "Person",
"name": "<?php echo $author; ?>"
"name": "<?php echo $author->OPI_FirstName; ?>"
},
"publisher": {
"@type": "Organization",

@ -1,22 +1,22 @@
<div class="right_tour">
<div class="right_ad_list popular_tours"><div class="info_ad_title" style="display: flex;">Popular tours</div>
<div class="info_ad_title" style="display: flex;">Popular tours</div>
<div class="right_ad_list">
<ul>
<?php foreach ($tips_right_a as $index => $info) {?>
<li><a href="<?php echo $info->ic_url ?>" id="right_ad_list_tours"><?php echo $info->ic_title ?></a></li>
<?php }?>
</ul>
</div>
<div class="right_ad_list make_most_time"><div class="info_ad_title" style="display: flex;">Make the most of your time</div>
<div class="info_ad_title" style="display: flex;">Make the most of your time</div>
<div class="right_ad_list">
<ul>
<?php foreach ($tips_right_b as $index => $info) {?>
<li><a href="<?php echo $info->ic_url ?>" id="right_ad_list_plan"><?php echo $info->ic_title ?></a></li>
<?php }?>
</ul>
</div>
<div class="right_ad_list best_time_visit"><div class="info_ad_title" style="display: flex;">Choose the best time to visit</div>
<div class="info_ad_title" style="display: flex;">Choose the best time to visit</div>
<div class="right_ad_list">
<ul>
<?php foreach ($tips_right_c as $index => $info) {?>
<li><a href="<?php echo $info->ic_url ?>" id="right_ad_list_weather"><?php echo $info->ic_title ?></a></li>

@ -11,212 +11,177 @@
placeholder="E.g.: This is a big trip for anniversary, honeymoon, birthday celebration..."
style="height:80px;"></textarea>
<div class="selectionBlock">
<h4 style="margin-bottom: 0;margin-top: 0; padding-bottom: 0;">
How would you travel?
</h4>
<div id="group_error_msg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please select number in your group.</div>
</div>
<div class="travel_group">
<input type="radio" value="Family" id="Family" name="travel_group">
<label for="Family" class="family">
Family
</label>
</div>
<div class="travel_group">
<input type="radio" value="Couple" id="Couple" name="travel_group">
<label for="Couple" class="couple">
Couple
</label>
</div>
<div class="travel_group">
<input type="radio" value="Solo" id="Solo" name="travel_group">
<label for="Solo" class="solo">
Solo
</label>
</div>
<div class="travel_group">
<input type="radio" value="group" id="Other" name="travel_group">
<label for="Other" class="group">
Other group
</label>
</div>
<div id="adultBlock" style="display: none">
<p style="margin-top: 0;margin-bottom: 0;"><strong>Adults number (age ≥ 18 years old)</strong></p>
<div class="kids_age">
<select class="kids_number" id="adult_18_plus" name="adult_18_plus" >
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
<option value="6">6</option>
<option value="7">7</option>
<option value="8">8</option>
<option value="9">9</option>
<option value="10">10</option>
<option value="11">11</option>
<option value="12">12</option>
<option value="13">13</option>
<option value="14">14</option>
<option value="15">15</option>
<option value="16">16</option>
<option value="17">17</option>
<option value="18">18</option>
<option value="19">19</option>
<option value="20">20</option>
<option value="21">21</option>
<option value="22">22</option>
<option value="23">23</option>
<option value="24">24</option>
<option value="25">25</option>
<option value="26">26</option>
<option value="27">27</option>
<option value="28">28</option>
<option value="29">29</option>
<option value="30">30</option>
</select>
<p style="
margin-top: 5px;font-size: 18px;
">people</p>
</div>
</div>
<div class="clear"></div>
<div id="childrenBlock" style="display: none">
<p style="margin-top: 0;margin-bottom: 0;"><strong>Children number</strong></p>
<div class="kids_age">
<p style="margin-bottom: 5px;">10-17 yrs old</p>
<select class="kids_number" id="teenagerNumber" name="teenager_10_17">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<p style="
margin-top: 10px;font-size: 18px;
">people</p>
</div>
<div class="kids_age">
<p style="margin-bottom: 5px;">3-9 yrs old</p>
<select class="kids_number" id="childrenNumber" name="children_3_9">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<p style="
margin-top: 10px;font-size: 18px;
">people</p>
</div>
<div class="kids_age">
<p style="margin-bottom: 5px;">0-2 yrs old</p>
<select class="kids_number" id="infantNumber" name="infant_0_2">
<option value="0">0</option>
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<p style="
margin-top: 10px;font-size: 18px;
">people</p>
</div>
</div>
</div>
<div class="selectionBlock" style="margin-bottom: 10px;">
<h4 style="margin-bottom: 0;
margin-top: 0;
padding-bottom: 0;">
When would you travel?
</h4>
<div id="date_error_msg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Select your travel data.</div>
</div>
<div class="travel_group date_select" >
<input type="radio" value="exact dates" id="exact" name="trip_date">
<label for="exact" class="updatedestination" style="font-size: 18px;">
Exact dates
</label>
</div>
<div class="travel_group date_select" >
<input type="radio" value="approximate dates" id="approximate" name="trip_date">
<label for="approximate" class="updatedestination" style="font-size: 18px;">
Approximate dates
</label>
</div>
<div class="travel_group date_select" >
<input type="radio" value="Undecided dates" id="yet" name="trip_date">
<label for="yet" class="updatedestination" style="font-size: 18px;">
Undecided dates
</label>
</div>
<div class="trip_date_length" id="tripDateBlock" style="display: none">
<div id='dateSelectionBlock'>
<div id='date_start_block'>
<input type="text" class="arrivalDate datepicker" id="starting_date" name="date_start" value="" placeholder="Select your exact travel date." autocomplete="off" style="width: auto; float: left; margin-right: 15px; height: 30px;
margin-top: 5px;">
</div>
<select class="country_code" id="expectedMonth" name="expected_month" style="margin-top: 15px;">
<option value="" disabled selected>Select your approximate travel date.</option>
<option value="Mar. 2024">Mar. 2024</option>
<option value="Apr. 2024">Apr. 2024</option>
<option value="May. 2024">May. 2024</option>
<option value="Jun. 2024">Jun. 2024</option>
<option value="Jul. 2024">Jul. 2024</option>
<option value="Aug. 2024">Aug. 2024</option>
<option value="Sep. 2024">Sep. 2024</option>
<option value="Oct. 2024">Oct. 2024</option>
<option value="Nov. 2024">Nov. 2024</option>
<option value="Dec. 2024">Dec. 2024</option>
<option value="Jan. 2025">Jan. 2025</option>
<option value="Feb. 2025">Feb. 2025</option>
<option value="Mar. 2025">Mar. 2025</option>
<option value="Apr. 2025">Apr. 2025</option>
<option value="May. 2025">May. 2025</option>
<option value="Jun. 2025">Jun. 2025</option>
<option value="Jul. 2025">Jul. 2025</option>
<option value="Aug. 2025">Aug. 2025</option>
<option value="Sep. 2025">Sep. 2025</option>
<option value="Oct. 2025">Oct. 2025</option>
<option value="Nov. 2025">Nov. 2025</option>
<option value="Dec. 2025">Dec. 2025</option>
<option value="Jan. 2026">Jan. 2026</option>
<option value="Feb. 2026">Feb. 2026</option>
<option value="Mar. 2026">Mar. 2026</option>
<option value="Apr. 2026">Apr. 2026</option>
<option value="May. 2026">May. 2026</option>
<option value="Jun. 2026">Jun. 2026</option>
<option value="Jul. 2026">Jul. 2026</option>
<option value="Aug. 2026">Aug. 2026</option>
<option value="Sep. 2026">Sep. 2026</option>
<option value="Oct. 2026">Oct. 2026</option>
<option value="Nov. 2026">Nov. 2026</option>
<option value="Dec. 2026">Dec. 2026</option>
<option value="Jan. 2027">Jan. 2027</option>
<option value="Feb. 2027">Feb. 2027</option>
<option value="Mar. 2027">Mar. 2027</option>
<option value="Apr. 2027">Apr. 2027</option>
</select>
</div>
<div class="selectionBlock" style="margin-bottom: 0;">
<h4 style="margin-top: 0; margin-bottom: 0px;">
Number in your group
</h4>
<div id="group_error_msg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please select number in your group.</div>
</div>
<div class="travel_group">
<input type="radio" value="Family" id="Family" name="travel_group">
<label for="Family" class="family">
Family
</label>
</div>
<div class="travel_group">
<input type="radio" value="Couple" id="Couple" name="travel_group">
<label for="Couple" class="couple">
Couple
</label>
</div>
<div class="travel_group">
<input type="radio" value="Solo" id="Solo" name="travel_group">
<label for="Solo" class="solo">
Solo
</label>
</div>
<div class="travel_group">
<input type="radio" value="group" id="Other" name="travel_group">
<label for="Other" class="group">
Other group
</label>
</div>
<div id="adultBlock" style="display: none">
<p style="
margin-bottom: 0;
font-size: 22px;
margin-top: 20px;
">When you plan to take the trip:</p>
<div class="peopleSelect">
<p style="margin-top: 20px;"><strong>
Adults (≥18 years old)
</strong> </p>
<button class="minaddBtn reduceadult" id="minusAdult" type="button" value="-">-</button>
<input class="number" type="text" value="2" id="adultNumber" name="adult">
<button class="minaddBtn addadult" type="button" id="plusAdult" value="+">+</button>
</div>
<div class="age_range">
<p>
Adults' ages
</p>
<div class="checkYes" style="float:left;">
<label for="65+">
<input type="checkbox" value="yes" name="age_65_plus" id="65+"
class="checkBorder">65+
</label>
</div>
<div class="checkYes" style="float:left;">
<label for="51-64">
<input type="checkbox" value="yes" name="age_51_64" id="51-64"
class="checkBorder">51-64
</label>
</div>
<div class="checkYes" style="float:left;">
<label for="41-50">
<input type="checkbox" value="yes" name="age_41_50" id="41-50"
class="checkBorder">41-50
</label>
</div>
<div class="checkYes" style="float:left;">
<label for="31-40">
<input type="checkbox" value="yes" name="age_31_40" id="31-40"
class="checkBorder">31-40
</label>
</div>
<div class="checkYes" style="float:left;">
<label for="18-30">
<input type="checkbox" value="yes" name="age_18_30" id="18-30"
class="checkBorder">18-30
</label>
</div>
</div>
</div>
<div class="clear"></div>
<div id="childrenBlock" style="display: none">
<p style="margin-top: 0; margin-top: 0;
margin-bottom: 5px;
font-size: 20px;"><strong>Children</strong></p>
<div class="kids_age">
<p style="margin-bottom: 5px;">10-17 yrs old</p>
<select class="kids_number" id="teenagerNumber" name="teenager_10_17_yrs">
<option value="0">0
</option>
<option value="1">1
</option>
<option value="2">2
</option>
<option value="3">3
</option>
<option value="4">4
</option>
</select>
</div>
<div class="kids_age">
<p style="margin-bottom: 5px;">3-9 yrs old</p>
<select class="kids_number" id="childrenNumber" name="children_3_9_yrs">
<option value="0">0
</option>
<option value="1">1
</option>
<option value="2">2
</option>
<option value="3">3
</option>
<option value="4">4
</option>
</select>
</div>
<div class="kids_age">
<p style="margin-bottom: 5px;">0-2 yrs old</p>
<select class="kids_number" id="infantNumber" name="infant_0_2_yrs">
<option value="0">0
</option>
<option value="1">1
</option>
<option value="2">2
</option>
<option value="3">3
</option>
<option value="4">4
</option>
</select>
</div>
</div>
</div>
</div>
</div>
<div class="selectionBlock">
<h4>
When would you travel?
</h4>
<div id="date_error_msg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Select your travel data.</div>
</div>
<div class="travel_group date_select">
<input type="radio" value="exact travel dates" id="exact" name="trip_date">
<label for="exact" class="family">
Exact travel dates
</label>
</div>
<div class="travel_group date_select">
<input type="radio" value="approximate travel dates" id="approximate" name="trip_date">
<label for="approximate" class="couple">
Approximate travel dates
</label>
</div>
<div class="travel_group date_select">
<input type="radio" value="haven't decided travel dates" id="yet" name="trip_date">
<label for="yet" class="solo">
Undecided travel dates
</label>
</div>
<div class="trip_date_length" id="tripDateBlock" style="display: none">
<p style="clear: both;margin-bottom: 10px;" id="trip_date_tip">Select your travel date.</p>
<div id="dateSelectionBlock">
<div id='flatpickrBlock'>
<input class="InquiryCalendar datepicker" id="starting_date" name="date_start" placeholder="Starting date *" readonly="readonly" type="text" value="" />
</div>
<input type="month" id="expectedMonth" name="expected_month" placeholder="Select your expected travel date.">
</div>
</div>
</div>
<input class="FullName" id="realname" name="name" placeholder="Your name *" required="" type="text"
value="" />
<div id="realname_errmsg" style="display: none">
@ -231,7 +196,12 @@
<div id="email_verify_errmsg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please verify your email</div>
</div>
<!-- <input class="InquiryCalendar" id="starting_date" name="date_start" placeholder="Starting date *"
readonly="readonly" />
<div id="starting_date_errmsg" style="display: none">
<div class="requiredArea" style="margin-top:-10px;">Please enter your starting date</div>
</div>-->
<select name="country_code" class="country_code">
<option style="font-weight: 600;" value="United States +1">United States&nbsp; &nbsp;+1</option>
<option style="font-weight: 600;" value="United Kingdom +44">United Kingdom&nbsp; &nbsp;+44</option>
@ -495,7 +465,7 @@
margin-top: 0;
margin-bottom: 10px;
padding: 0;
">I am also available on:</p>
">I prefer to be contacted via:</p>
<div class="checkYes">
<input type="checkbox" value="yes" name="contact_via_whatsapp" id="whatsapp" class="checkBorder" style="width:auto !important">
<label for="whatsapp">WhatsApp</label>
@ -504,20 +474,39 @@
<input type="checkbox" value="yes" name="contact_via_iMessage" id="iMessage" class="checkBorder" style="width:auto !important">
<label for="iMessage">iMessage</label>
</div>
<div class="checkYes">
<input type="checkbox" value="yes" name="contact_via_phone_call" id="Phone" class="checkBorder" style="width:auto !important">
<label for="Phone">Phone call</label>
</div>
<div class="checkYes">
<input type="checkbox" value="yes" name="contact_via_email" id="Email" class="checkBorder" style="width:auto !important">
<label for="Email">Email</label>
</div>
<div class="checkYes">
<input type="checkbox" value="yes" name="contact_via_video_appointment" id="Video" class="checkBorder" style="width:auto !important">
<label for="Video">Video appointment</label>
</div>
<button class="sendButton" id="tour_list_button" name="tour_list_button" type="button">Inquire
Now</button> <input name="product_code" type="hidden" value="<?php echo $meta_product_code; ?>" />
<input name="itinerary" type="hidden" value="<?php echo $information->ic_title; ?>" />
</form>
<!--
<h3 style="text-align: center; font-size: 20px; line-height: 22px;">For a quick conversation, simply reach us via WhatsApp:</h3>
<div class="contactwechat"><img alt="asia highlights' wechat code" height="100px" src="https://data.asiahighlights.com/image/about/asia-highlights-whatsapp-code.jpg" width="100px" />
<div class="wechatinfo"><span class="wechatred">+8615807734776</span><br />
Email: <span class="wechatred">contact@asiahighlights.com</span></div>
</div>
-->
</div>
</div>
</div>
<script src="https://data.asiahighlights.com/min/?f=/js/jquery-1.8.2.min.js,/js/flatpickr-4.6.1.min.js"></script>
<script>
var selectedExpectedDate = '';
document.addEventListener('DOMContentLoaded', () => {
flatpickr("#starting_date", {
@ -528,29 +517,29 @@ document.addEventListener('DOMContentLoaded', () => {
minDate: "today"
});
var quick_inquiry_button = document.getElementById("tour_list_button");
var quick_inquiry_form = document.getElementById("tour_list_form");
quick_inquiry_button.addEventListener('click', function(event) {
var validateResult = validateQuickInquiryForm();
if (validateResult) {
if (typeof(grecaptcha) === "undefined") {
console.warn('grecaptcha is disabled.');
quick_inquiry_form.submit();
} else {
grecaptcha.enterprise.ready(async () => {
const token = await grecaptcha.enterprise.execute('6Lf828MhAAAAANNetijCXKwW5ARyhcJ-b1Hhslja', {action: 'ADD_TO_CART'});
var el = document.createElement("input");
el.type = "hidden";
el.name = "__grecaptcha_token__";
el.value = token;
quick_inquiry_form.appendChild(el);
quick_inquiry_form.submit();
quick_inquiry_button.innerText = "Submitted successfully";
});
}
}
});
var tour_list_button = document.getElementById("tour_list_button");
var tour_list_form = document.getElementById("tour_list_form");
tour_list_button.addEventListener('click', function (event) {
var validateResult = validateQuickInquiryForm();
if (validateResult) {
if (typeof (grecaptcha) === "undefined") {
console.warn('grecaptcha is disabled.');
tour_list_form.submit();
} else {
grecaptcha.enterprise.ready(async () => {
const token = await grecaptcha.enterprise.execute('6Lf828MhAAAAANNetijCXKwW5ARyhcJ-b1Hhslja', { action: 'ADD_TO_CART' });
var el = document.createElement("input");
el.type = "hidden";
el.name = "__grecaptcha_token__";
el.value = token;
tour_list_form.appendChild(el);
tour_list_form.submit();
tour_list_button.innerText = "Submitted successfully";
});
}
}
});
});
function validateQuickInquiryForm() {
@ -596,11 +585,11 @@ function validateQuickInquiryForm() {
tripDate_is_checked = true;
}
//时间选择
if (!tripDate_is_checked) {
//时间选择
if (!tripDate_is_checked) {
startingDateErrEl.style.display = '';
result = false;
}
}
if (realnameVal === '') {
realnameErrEl.style.display = '';
@ -624,7 +613,7 @@ function validateQuickInquiryForm() {
}
</script>
<script>
$(function () {
var $adultBlock = $('#adultBlock');
var $childrenBlock = $('#childrenBlock');
@ -638,6 +627,10 @@ function validateQuickInquiryForm() {
var infantNumber = $infantNumberInput.val();
$('input[name="travel_group"]').each((i, groupEle) => {
$(groupEle).click(function (e) {
$teenagerNumberInput.val(0);
$childrenNumberInput.val(0);
$infantNumberInput.val(0);
var currentTarget = e.currentTarget;
if (currentTarget.id === 'Family' || currentTarget.id === 'Other' ) {
@ -648,19 +641,19 @@ function validateQuickInquiryForm() {
$childrenBlock.hide();
}
if (currentTarget.id === 'Couple') {
$('#adult_18_plus').val('2');
} else if (currentTarget.id === 'Solo') {
$('#adult_18_plus').val('1');
}
$adultNumberInput.val(2);
} else if (currentTarget.id === 'Solo') {
$adultNumberInput.val(1);
}
})
});
var $tripDateBlock = $('#tripDateBlock');
var $expectedDate = $('#date_start_block');
var $expectedDate = $('#flatpickrBlock');
var $expectedMonth = $('#expectedMonth');
var $dateSelectionBlock = $('#dateSelectionBlock');
var $tripDateTip = $('#trip_date_tip');
$('input[name="trip_date"]').each((i, tripDateEle) => {
$(tripDateEle).click(function (e) {
$expectedDate.val('');
@ -695,7 +688,7 @@ function validateQuickInquiryForm() {
adultNumber--;
$adultNumberInput.val(adultNumber);
}
});
});
// 青少年
$('#plusTeenager').click(function () {
teenagerNumber++;
@ -731,11 +724,11 @@ function validateQuickInquiryForm() {
});
})
</script>
<style>
.date_select {width: 31% !important;}
.date_select {width: 28% !important;}
@media (max-width: 750px){
.date_select {width: 47% !important;}
.date_select label {font-size:17px !important;}
.date_select {
width: 93% !important;
}
}
</style>
</style>

@ -6,9 +6,9 @@
<title>
<!--@TITLE@-->
</title>
<meta name="keywords" content="<!--@KEYWORDS@-->">
<meta name="description" content="<!--@DESCRIPTION@-->">
<link rel="canonical" href="<!--@CANONICAL@-->">
<!--@Meta_Robots@-->
<meta content="width=device-width,minimum-scale=1,initial-scale=1" name="viewport">
<!--@OG:IMAGE@-->
<link rel="shortcut icon" href="https://data.asiahighlights.com/favicon.ico" />
@ -17,6 +17,7 @@
<link rel="dns-prefetch" href="https://www.googletagmanager.com">
<!--@MAIN-CSS@-->
<!--@ADDON-CSS@-->
<!-- Google Tag Manager -->
<script>(function (w, d, s, l, i) {
w[l] = w[l] || [];
w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' });
@ -25,6 +26,16 @@
j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl;
f.parentNode.insertBefore(j, f);
})(window, document, 'script', 'dataLayer', 'GTM-56CMWN3');</script>
<!-- End Google Tag Manager -->
<!-- Global site tag (gtag.js) - Google Ads: 996341496 -->
<script async src="https://www.googletagmanager.com/gtag/js?id=AW-996341496"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag() { dataLayer.push(arguments); }
gtag('js', new Date());
gtag('config', 'AW-996341496');
</script>
</head>
<body>
@ -34,14 +45,15 @@
<header class="headerbar" id="header">
<img src="https://data.chinahighlights.com/image/tour-detail/icon/top-navigation-menu-button.jpg"
class="topnaviarrowdown action--open" width="26" height="25" style="position: absolute; top: 13px; left: 10px;" title="navigation button">
class="topnaviarrowdown action--open" width="26" height="25" style="position: absolute; top: 13px; left: 10px;">
<a href="/" style="width: 103px; display: block; margin: 0 auto;"> <img src="https://data.asiahighlights.com/pic/logo-ah.png" alt="Asia Highlights logo" class="chinahighlightslogo img-responsive" width="238" height="117"></a>
<div class="topnavitailor">
<a href="/contact-us" class="infocustomize">Contact</a>
</div>
</header>
<div class="updated_news">How to Plan an Incredible Family Trip to Japan in 2024/2025. <a
href="/japan/how-to-plan-a-family-trip-to-japan">Learn more.</a></div>
<nav id="ml-menu" class="menu">
<div class="siteSearch">
<form id="searchbox_001281624266240652297:cl1fy1cxepi" name="googlesreach"
@ -50,7 +62,7 @@
<input type="hidden" value="FORID:9" name="cof">
<input type="text" onfocus="this.value = ''" class="strkeys" placeholder="site search" name="q">
<input type="image" class="submits"
src="https://data.chinahighlights.com/pic/pc-top-navigation-web-search-bg.png" alt="site search button" title="site search button">
src="https://data.chinahighlights.com/pic/pc-top-navigation-web-search-bg.png">
<input type="hidden" name="__ftoken__" value="MTU5ODMzNDc2NDQ0NA==.3664784f0395175e7de44382781cd7f7cb647e2a">
</form>
</div>
@ -65,34 +77,231 @@
<div class="menu__wrap">
<ul data-menu="main" class="menu__level menu__level--current" tabindex="-1" role="menu" aria-label="All">
<li class="menu__item" role="menuitem"><a class="menu__link" href="/">Home</a></li>
<li class="menu__item" role="menuitem" ><a class="menu__link" data-submenu="submenu-2" aria-owns="submenu-2" >Destinations</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/tours" data-submenu="submenu-7" aria-owns="submenu-7">Tours</a></li>
<li class="menu__item" role="menuitem" style="margin-bottom: 50px;"><a class="menu__link" href="/itinerary-ideas">Itinerary Ideas</a></li>
<li class="menu__item" role="menuitem"><a href="/reviews" data-submenu="submenu-9" aria-owns="submenu-9" class="menu__link">Reviews</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/japan/tours" data-submenu="submenu-7"
aria-owns="submenu-7">Japan</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" id="thailand_vietnam_cambodia_mobile"
data-submenu="submenu-6" aria-owns="submenu-6">Thailand-Vietnam-Cambodia</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" data-submenu="submenu-1"
aria-owns="submenu-1">Southeast Asia</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" data-submenu="submenu-10"
aria-owns="submenu-10">East Asia</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" data-submenu="submenu-11"
aria-owns="submenu-11">India & Himalaya</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" data-submenu="submenu-12"
aria-owns="submenu-12">Middle East</a></li>
<li class="menu__item" role="menuitem" style="margin-bottom: 50px;"><a class="menu__link"
data-submenu="submenu-13" aria-owns="submenu-13">Central Asia</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" data-submenu="submenu-4"
aria-owns="submenu-4">1-Week Itinerary</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" data-submenu="submenu-2"
aria-owns="submenu-2">10-12 Days Itinerary</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" data-submenu="submenu-5"
aria-owns="submenu-5">2-Week Itinerary</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" data-submenu="submenu-3"
aria-owns="submenu-3">3-Week Itinerary</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" data-submenu="submenu-8"
aria-owns="submenu-8">4-Week Itinerary</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/about-us">About Us</a></li>
<li class="menu__item" role="menuitem"><a href="/reviews" data-submenu="submenu-9" aria-owns="submenu-9"
class="menu__link">Reviews</a></li>
</ul>
<ul data-menu="submenu-2" id="submenu-2" class="menu__level" tabindex="-1" role="menu"
aria-label="destinations">
<!-- 4-weeks-itinerary -->
<ul data-menu="submenu-8" id="submenu-8" class="menu__level" tabindex="-1" role="menu"
aria-label="4-weeks-itinerary">
<li class="menu__item" role="menuitem"><a class="menu__link" href="/southeast-asia/4-weeks-itinerary">Southeast
Asia</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link"
href="https://www.chinahighlights.com/travelguide/4-week-china-itinerary.htm" target="_blank">China</a></li>
</ul>
<!-- Thailand-Vietnam-Cambodia -->
<ul data-menu="submenu-6" id="submenu-6" class="menu__level" tabindex="-1" role="menu"
aria-label="Thailand_Vietnam_Cambodia">
<li class="menu__item" role="menuitem"><a
href="/southeast-asia/tours/highlights-of-thailand-cambodia-and-vietnam" class="menu__link">3 Weeks in
Thailand, Cambodia, and Vietnam</a></li>
<li class="menu__item" role="menuitem"><a href="/southeast-asia/tours/best-of-thailand-cambodia-and-vietnam"
class="menu__link">2 Weeks in Thailand, Cambodia, and Vietnam</a></li>
<li class="menu__item" role="menuitem" style="margin-bottom: 30px;"><a
href="/southeast-asia/tours/essential-thailand-cambodia-and-vietnam" class="menu__link">12 Days in Thailand,
Cambodia, and Vietnam)</a></li>
<li class="menu__item" role="menuitem"><a href="/southeast-asia/tours/vietnam-cambodia-family-tour"
class="menu__link">2 Weeks in Vietnam and Cambodia for Family</a></li>
<li class="menu__item" role="menuitem"><a href="/southeast-asia/tours/vietnam-cambodia-mekong-cruise"
class="menu__link">2 Weeks in Vietnam and Cambodia With Mekong Cruise</a></li>
<li class="menu__item" role="menuitem"><a href="/southeast-asia/tours/cambodia-and-vietnam-highlights"
class="menu__link">12 Days in Vietnam and Cambodia</a></li>
<li class="menu__item" role="menuitem" style="margin-bottom: 30px;"><a
href="/southeast-asia/tours/from-south-vietnam-to-north-cambodia" class="menu__link">8 Days in Vietnam and
Cambodia</a></li>
<li class="menu__item" role="menuitem" style="margin-bottom: 30px;"><a
href="/southeast-asia/tours/classic-vietnam-and-thailand" class="menu__link">2 Weeks in Vietnam and
Thailand</a></li>
<li class="menu__item" role="menuitem" style="margin-bottom: 30px;"><a
href="/southeast-asia/tours/best-of-thailand-and-cambodia" class="menu__link">11 Days in Thailand and
Cambodia</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link"
href="/southeast-asia/tours/thailand-cambodia-and-vietnam">All Thailand-Vietnam-Cambodia Tours</a></li>
</ul>
<!-- destinations -->
<ul data-menu="submenu-1" id="submenu-1" class="menu__level" tabindex="-1" role="menu" aria-label="destinations">
<li class="menu__item" role="menuitem"><a class="menu__link" href="/thailand">Thailand</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/thailand/tours/lantern-festival">Thailand
Lantern Festival</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/vietnam">Vietnam</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/cambodia">Cambodia</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/laos">Laos</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/bali">Indonesia (Bali)</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/bali">Indonesia(Bali)</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/singapore">Singapore</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/myanmar">Myanmar</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/southeast-asia/tours">All Southeast Asia
Destinations</a></li>
</ul>
<ul data-menu="submenu-10" id="submenu-10" class="menu__level" tabindex="-1" role="menu"
aria-label="destinations">
<li class="menu__item" role="menuitem"><a class="menu__link" href="/japan">Japan</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/asia/plan-a-two-week-itinerary-in-japan-and-south-korea">South Korea</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="https://www.chinahighlights.com/tour/" target="_blank" rel="nofollow">China (HK, Taiwan)</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/asia/tours/mongolia-china-and-thailand">Mongolia</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/india">India</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/nepal">Nepal</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/bhutan">Bhutan</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/srilanka">Sri Lanka</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link"
href="/asia/plan-a-two-week-itinerary-in-japan-and-south-korea">South Korea</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="https://www.chinahighlights.com/tour/"
target="_blank">China (HK, Taiwan)</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link"
href="/asia/tours/mongolia-china-and-thailand">Mongolia</a></li>
</ul>
<ul data-menu="submenu-11" id="submenu-11" class="menu__level" tabindex="-1" role="menu"
aria-label="destinations">
<li class="menu__item" role="menuitem"><a class="menu__link" href="/india">India</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/nepal">Nepal</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/bhutan">Bhutan</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/srilanka">Sri Lanka</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/india/tours">All India & Himalaya
Destinations</a></li>
</ul>
<ul data-menu="submenu-12" id="submenu-12" class="menu__level" tabindex="-1" role="menu"
aria-label="destinations">
<li class="menu__item" role="menuitem"><a class="menu__link"
href="https://www.globalhighlights.com/middle-east/tours" target="_blank">Middle East Destinations</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="https://www.globalhighlights.com/egypt/tours"
target="_blank">Egypt</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link"
href="https://www.globalhighlights.com/israel/plan-a-trip" target="_blank">Israel</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link"
href="https://www.globalhighlights.com/middle-east/tours/12-day-egypt-jordan" target="_blank">Jordan</a>
</li>
<li class="menu__item" role="menuitem"><a class="menu__link"
href="https://www.globalhighlights.com/turkey/tours" target="_blank">Turkey</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link"
href="https://www.globalhighlights.com/morocco/tours" target="_blank">Morocco</a></li>
</ul>
<ul data-menu="submenu-13" id="submenu-13" class="menu__level" tabindex="-1" role="menu"
aria-label="destinations">
<li class="menu__item" role="menuitem"><a class="menu__link" href="/tours/kyrgyzstan-tajikistan-uzbekistan">Five
Stans</a></li>
</ul>
<!-- Best-time -->
<ul data-menu="submenu-2" id="submenu-2" class="menu__level" tabindex="-1" role="menu" aria-label="Best-time">
<li class="menu__item" role="menuitem"><a
href="https://www.chinahighlights.com/travelguide/8-day-china-itinerary.htm" class="menu__link"
target="_blank">8 Days in China</a></li>
<li class="menu__item" role="menuitem"><a href="/japan/10-day-itineraries" class="menu__link">10 Days in
Japan</a></li>
<li class="menu__item" role="menuitem"><a href="/vietnam/10-days-itinerary" class="menu__link">10 Days in
Vietnam</a></li>
<li class="menu__item" role="menuitem"><a
href="https://www.chinahighlights.com/travelguide/10-days-china-itinerary.htm" target="_blank"
class="menu__link">10 Days in China</a></li>
<li class="menu__item" role="menuitem"><a href="/japan/12-day-itineraries" class="menu__link">12 Days in
Japan</a></li>
<li class="menu__item" role="menuitem"><a
href="https://www.chinahighlights.com/travelguide/12-days-china-itinerary.htm" class="menu__link"
target="_blank">12 Days in China</a></li>
</ul>
<!-- festival -->
<ul data-menu="submenu-3" id="submenu-3" class="menu__level" tabindex="-1" role="menu" aria-label="festival">
<li class="menu__item" role="menuitem"><a href="/southeast-asia/3-weeks-itinerary" class="menu__link">Southeast
Asia</a></li>
<li class="menu__item" role="menuitem"><a href="/japan/3-week-itineraries" class="menu__link">Japan</a></li>
<li class="menu__item" role="menuitem"><a href="/vietnam/3-weeks-itinerary" class="menu__link">Vietnam</a></li>
<li class="menu__item" role="menuitem"><a
href="https://www.chinahighlights.com/travelguide/3-weeks-china-itinerary.htm" target="_blank"
class="menu__link">China</a></li>
<li class="menu__item" role="menuitem"><a href="/southeast-asia/trip-to-thailand-cambodia-vietnam"
class="menu__link">Thailand, Cambodia, Vietnam</a></li>
<li class="menu__item" role="menuitem"><a href="/asia/tours/china-and-vietnam" class="menu__link">China,
Vietnam</a></li>
<li class="menu__item" role="menuitem"><a href="/asia/tours/china-nepal-and-india" class="menu__link">China,
Nepal, India</a></li>
<li class="menu__item" role="menuitem"><a href="/asia/tours/china-laos-thailand" class="menu__link">China, Laos,
Thailand</a></li>
</ul>
<!-- top things to do -->
<ul data-menu="submenu-4" id="submenu-4" class="menu__level" tabindex="-1" role="menu" aria-label="topthingstodo">
<li class="menu__item" role="menuitem"><a href="/japan/1-week-itinerary" class="menu__link">Japan</a></li>
<li class="menu__item" role="menuitem"><a href="/vietnam/7-days-itinerary" class="menu__link">Vietnam</a></li>
</ul>
<ul data-menu="submenu-5" id="submenu-5" class="menu__level" tabindex="-1" role="menu" aria-label="vacation">
<li class="menu__item" role="menuitem"><a href="/southeast-asia/2-weeks-itinerary" class="menu__link">Southeast
Asia</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/japan/2-week-itineraries">Japan</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link"
href="/asia/plan-a-two-week-itinerary-in-japan-and-south-korea"> Japan and South Korea</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/thailand/2-weeks-in-thailand">Thailand</a>
</li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/vietnam/2-weeks-itinerary">Vietnam</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/india/2-week-itinerary">India</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link"
href="https://www.chinahighlights.com/travelguide/2-weeks-china-itinerary.htm" target="_blank">China</a>
</li>
</ul>
<ul data-menu="submenu-7" id="submenu-7" class="menu__level" tabindex="-1" role="menu" aria-label="japan">
<li class="menu__item" role="menuitem"><a href="/japan/tours/tokyo-highlights" class="menu__link">5 Days</a>
</li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/japan/1-week-itinerary">7 Days</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/japan/tours/mountain-and-sea">8 Days</a>
</li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/japan/tours/japan-highlights">9 Days</a>
</li>
<li class="menu__item" role="menuitem"><a class="menu__link"
href="/japan/tours/cherry-blossom-spring-mini-group">10 Days</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/japan/tours/classic-japan">11 Days</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/japan/tours/family-vacation">14 Days</a>
</li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/japan/tours/japan-china-discovery">16
Days</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/japan/tours/summer-family-vacation">17
Days</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/japan/3-week-itineraries">3 Weeks</a></li>
<br><br>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/japan/plan-a-trip">Bucket List Trip</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link"
href="/japan/how-to-plan-a-family-trip-to-japan">Family Trip</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/japan/plan-a-cherry-blossom-trip">Cherry
Blossom Trip</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/japan/planning-a-summer-trip">Summer
Trip</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link" href="/japan/plan-a-winter-trip">Winter Trip</a>
</li>
<li class="menu__item" role="menuitem"><a class="menu__link"
href="/asia/plan-a-two-week-itinerary-in-japan-and-south-korea">Japan-South Korea Trip</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link"
href="/asia/plan-a-trip-to-china-and-japan">Japan-China Trip</a></li>
<li class="menu__item" role="menuitem"><a class="menu__link"
href="/asia/plan-a-trip-to-japan-and-thailand">Japan-Thailand Trip</a></li>
</ul>
<ul data-menu="submenu-9" id="submenu-9" class="menu__level" tabindex="-1" role="menu" aria-label="reviews">
<li class="menu__item" role="menuitem"><a class="menu__link" href="/reviews" id="all_reviews_mobile">Asia
@ -118,6 +327,8 @@
id="china_reviews_mobile">China Travel Reviews</a></li>
</ul>
</div>
</nav>
<!--移动头部 结束-->
@ -129,12 +340,11 @@
<div id="main_content_mobile">
<main>
<!--@CUSTOM-CONENT@-->
</main>
<!--@TIPS-RIGHT@-->
<div class="info_tm_button"><a href="/forms/tailormade?product_code=" id="create_my_trip_button_mobile">Create my trip</a></div>
<div class="info_tm_button"><a href="/forms/tailormade" id="create_my_trip_button_mobile">Create my trip</a></div>
</div>
@ -146,13 +356,13 @@
<!--移动底部-->
<footer>
<div class="infotailor">
<span class="infotailorword">Start planning your tailor-made tour with 1-1 help
<span class="infotailorword">We are here to help you...<br> Start planning your tailor-made tour with 1-1 help
from our travel advisors.
<span class="infotailormade"><a href="/forms/tailormade?product_code=">Create My Trip</a></span>
</span>
<div class="tp_banner">4.9 Excellent<img src="https://data.asiahighlights.com/grey.gif" loader="lazy" originalsrc="https://data.asiahighlights.com/pic/trustpilot-new-icon.png"
<div class="tp_banner">4.9 Excellent<img src="https://data.asiahighlights.com/pic/trustpilot-new-icon.png"
class="img-responsive" alt="TrustPilot rating" width="100px">
<img src="https://data.asiahighlights.com/grey.gif" loader="lazy" originalsrc="https://data.asiahighlights.com/image/about/logo-white.png" class="img-responsive"
<img src="https://data.asiahighlights.com/image/about/logo-white.png" class="img-responsive"
alt="TrustPilot Logo" width="73px">
</div>
</div>
@ -162,73 +372,74 @@
<p style="text-align: center;">Be the first to receive exciting updates, exclusive promotions, and valuable
travel tips from our
team of experts. </p>
<span class="infotailormade"><a href="/newsletter">Click to sign up</a></span>
<form action="https://www.asiahighlights.com/orders/newsletter_save" method="post" id="newsletter_form"
name="newsletter_form" novalidate="">
<label id="name_area">
<input type="text" name="name" id="newsletter_realname" class="contact_name" placeholder="* Your name">
<div style="color: #a31022;display: none" class="requiredArea" id="newsletter_realname_errmsg">Please fill
up your name.</div>
</label>
<label id="email_area">
<input type="email" class="safyemail autoemail ui-autocomplete-input contact_email" name="email"
id="newsletter_email" autocomplete="off" placeholder="* Email">
<div style="color: #a31022;display: none" class="requiredArea" id="newsletter_email_errmsg">Please fill up
your email address.</div>
<div style="color: #a31022;display: none" class="requiredArea" id="newsletter_email_verify_errmsg">Please
verify your email.</div>
</label>
<button id="submit_newsletter" type="button" class="sendInquiry">Inspire Me</button>
</form>
</div>
</div>
<div class="bottom_why_us">
<h2>Why Asia Highlights</h2>
<h2>The Asia Highlights Experience</h2>
<div class="table-responsive">
<table class="why_us_table">
<tbody>
<tr>
<td>
<div class="bottom_why_us_content">
<div class="whyus_image"> <img src="https://data.asiahighlights.com/grey.gif" loader="lazy" originalsrc="https://images.asiahighlights.com/allpicture/2024/02/2fa10d72338f4942af532a909a486215_cut_100x100_241.png"
alt="Customize Your Tour" class="img-responsive" width="100" height="100"/></div>
<h3>Customize Your Tour</h3>
<ul class="infolist">
<li>Travel Advisors Rooted in Asia</li>
<li>Instant Response, No More Waits! </li>
<li>Direct Connections, Supreme Values</li>
</ul>
</div>
</td>
<td>
<div class="bottom_why_us_content">
<div class="whyus_image"> <img src="https://data.asiahighlights.com/grey.gif" loader="lazy" originalsrc="https://images.asiahighlights.com/allpicture/2024/02/128f3292b9054cd295eeaf0a6223ee93_cut_100x100_241.png"
alt="Maximize Your Flexibility" class="img-responsive" width="100" height="100"/></div>
<h3>Maximize Your Flexibility</h3>
<ul class="infolist">
<li>Your own personal guide and ride. </li>
<li> Explore at your own pace. </li>
<li> Unparalleled flexibility, impossible on a group tour.</li>
</ul>
</div>
</td>
<td>
<div class="bottom_why_us_content">
<div class="whyus_image"><img src="https://data.asiahighlights.com/grey.gif" loader="lazy" originalsrc="https://images.asiahighlights.com/allpicture/2024/02/93cce481fbbb427882ce36285d73119d_cut_100x100_241.png"
alt="Ensure Your Satisfactory" class="img-responsive" width="100" height="100"/></div>
<h3>Ensure Your Satisfactory</h3>
<ul class="infolist">
<li>The Top 20% nationwide guides at your service.</li>
<li>20% more space on your group's transportation.</li>
<li> 24/7 emergency support.</li>
</ul>
</div>
</td>
<td>
<div class="bottom_why_us_content">
<div class="whyus_image"> <img src="https://data.asiahighlights.com/grey.gif" loader="lazy" originalsrc="https://images.asiahighlights.com/allpicture/2024/02/03f93f0c74d548bf9ebd55796545c25b_cut_100x100_241.png"
alt="Celebrate Your Journey" class="img-responsive" width="100"
height="100" /></div>
<h3>Celebrate Your Journey</h3>
<ul class="infolist">
<li>Family adventures</li>
<li> Celebrate milestones with style!</li>
<li> Photographer service for special moments</li>
</ul>
</div>
</td>
</tr>
</tbody>
</table>
<table class="why_us_table">
<tbody>
<tr>
<td>
<div class="bottom_why_us_content">
<img src="https://data.globalhighlights.com/image/aboutus/ah-bottom-why-us-tag-1.png"
alt="1-to-1 Expert Planning" class="img-responsive">
<h3>1-to-1 Expert Planning</h3>
<p>Your tour will be tailor-made to suit you by a destination expert. Your personal travel advisor
will always reply within 24 hours.</p>
</div>
</td>
<td>
<div class="bottom_why_us_content">
<img src="https://data.globalhighlights.com/image/aboutus/ah-bottom-why-us-tag-2.png"
alt="Personal Journeys" class="img-responsive">
<h3>Personal Journeys</h3>
<p>Enjoy having your own personal local guide and ride. Explore destinations at your own pace. Have as
much flexibility as possible.</p>
</div>
</td>
<td>
<div class="bottom_why_us_content">
<img src="https://data.globalhighlights.com/image/aboutus/ah-bottom-why-us-tag-3.png"
alt="Authentic Experiences" class="img-responsive">
<h3>Authentic Experiences</h3>
<p>Go beyond the sightseeing. Understand the destinations by practicing the local culture and
interacting with local people.</p>
</div>
</td>
<td>
<div class="bottom_why_us_content">
<img src="https://data.globalhighlights.com/image/aboutus/ah-bottom-why-us-tag-4.png"
alt="One-Stop Service" class="img-responsive">
<h3>One-Stop Service</h3>
<p>Leave all the booking work to us, including international and internal transportation, visas,
hotels, meals, and activities.</p>
</div>
</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<div class="bottom_destinations">
<div class="footerbox">
@ -236,39 +447,68 @@
margin-top: 0;
text-align: center;
">Where Can We Take You Today?</h2>
<div class="listtour">
<div class="destination_links">
<ul>
<li><a href="https://www.chinahighlights.com/" target="_blank" rel="nofollow">China</a></li>
<li><a href="https://www.globalhighlights.com/europe" target="_blank" rel="nofollow">Europe</a></li>
</ul>
</div>
<div class="destination_links">
<ul>
<li><a href="https://www.globalhighlights.com/middle-east/tours" target="_blank" rel="nofollow">Middle East </a></li>
<li><a href="https://www.globalhighlights.com/african-safari-tours/tours" target="_blank" rel="nofollow">African Safari</a></li>
</ul>
</div>
</div>
<div class="listtour">
<div class="destination_links">
<ul>
<li><a href="/southeast-asia/tours">Southeast Asia Tours</a></li>
<li><a href="/thailand/tours">Thailand Tours</a></li>
<li><a href="/cambodia/tours">Cambodia Tours</a></li>
<li><a href="/indonesia/bali/tours">Bali Tours</a></li>
<li><a href="/india/tours">India Tours</a></li>
<li><a href="/bhutan">Bhutan</a></li>
<li><a href="/myanmar/tours">Myanmar Tours</a></li>
<li><a href="/caucasus-central-asia/tours">Caucasus and Central Asia Tours</a></li>
</ul>
</div>
<div class="destination_links">
<ul>
<li><a href="/japan/tours">Japan Tours</a></li>
<li><a href="/vietnam/tours">Vietnam Tours</a></li>
<li><a href="/singapore">Singapore</a></li>
<li><a href="/laos/trip-plan">Laos</a></li>
<li><a href="/nepal">Nepal</a></li>
<li><a href="/srilanka">Sri Lanka</a></li>
<li><a href="https://www.chinahighlights.com/tour/" target="_blank">China Tours</a></li>
</ul>
</div>
</div>
<div class="listtour">
<div class="destination_links">
<ul>
<li><a href="https://www.globalhighlights.com/egypt/tours" target="_blank">Egypt Tours</a></li>
<li><a href="https://www.globalhighlights.com/turkey/tours" target="_blank">Turkey Tours</a></li>
</ul>
</div>
<div class="destination_links">
<ul>
<li><a href="https://www.globalhighlights.com/morocco/tours" target="_blank">Morocco Tours</a></li>
<li><a href="https://www.globalhighlights.com/jordan/plan-a-trip" target="_blank">Jordan</a>
</li>
</ul>
</div>
</div>
</div>
</div>
<div class="infobottom">
<div class="bottomlogoinfo">
<img src="https://data.asiahighlights.com/grey.gif" loader="lazy" originalsrc="https://images.asiahighlights.com/allpicture/2024/03/1437fad7aabf4cf297ae5cefce15b241_cut_1191x842_241.png" class="img-responsive" style="width: 150px; margin: 0 auto;" alt="Asia Highlights' logo">
<div class="bottomlogoinfo">At Asia Highlights, we are committed to providing you a premium, quality private
tour, whether it's a milestone trip, family trip, or bucketlist trip — your planning will be made easy with
just one specialist throughout. <a href="/about-us">Know more...</a>
<img src="https://data.asiahighlights.com/grey.gif"
originalsrc="https://data.asiahighlights.com/pic/trustpilot-new-icon.png" loader="lazy" alt="tour review"
originalsrc="https://data.asiahighlights.com/pic/trustpilot-new-icon.png" loader="lazy"
class="bottomlogocenter img-responsive" style="width: 160px; margin-top: 15px;">
Rated 4.9 out of 5 | 98.8% Excellence<br>
China Highlights International<br> Travel Service Co., LTD
Rated 4.9 out of 5 | Excellent
</div>
<div class="bottommedia">
<span class="followtitle">Follow Us</span>
<ul>
<li style="margin-bottom: 30px;"><a href="https://www.facebook.com/AsiaHighlights/" rel="nofollow" title="Follow us on Facebook"
<li><a href="https://www.facebook.com/AsiaHighlights/" rel="nofollow" title="Follow us on Facebook"
target="_blank">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
y="0px" width="30px" height="30px" viewBox="0 0 30 30" enable-background="new 0 0 30 30"
@ -278,10 +518,7 @@
</path>
</svg>Facebook
</a></li>
<li style="margin-bottom: 30px;"><a href="https://www.pinterest.com/AsiaHighlights/_saved/" rel="nofollow" title="Share us on Pinterest" target="_blank"><svg id="svg--pinterest" viewBox="-180 -180 850 850">
<path id="pinterest" fill="#ffffff" d="M430.149,135.248C416.865,39.125,321.076-9.818,218.873,1.642 C138.071,10.701,57.512,76.03,54.168,169.447c-2.037,57.029,14.136,99.801,68.399,111.84 c23.499-41.586-7.569-50.676-12.433-80.802C90.222,77.367,252.16-6.718,336.975,79.313c58.732,59.583,20.033,242.77-74.57,223.71 c-90.621-18.179,44.383-164.005-27.937-192.611c-58.793-23.286-90.013,71.135-62.137,118.072 c-16.355,80.711-51.557,156.709-37.3,257.909c46.207-33.561,61.802-97.734,74.57-164.704 c23.225,14.136,35.659,28.758,65.268,31.038C384.064,361.207,445.136,243.713,430.149,135.248z"></path>
</svg>Pinterest</a>
</li>
<li><a href="https://www.instagram.com/asiahighlights/" rel="nofollow" title="Follow us on Instagram"
target="_blank">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
@ -297,53 +534,141 @@
<div class="bottomlinks">
<span class="followtitle"><a href="/about-us">About Us</a></span>
<span class="followtitle"><a href="/about-us" rel="nofollow">About Us</a></span>
<ul>
<li><a href="/about-us">About us</a></li>
<li><a href="/travel-agents">Travel Agents</a></li>
<li><a href="/reviews">Reviews</a></li>
<li><a href="/contact-us" >Contact us</a></li>
<li><a href="/about-us/loyalty-program">Loyalty Program</a></li>
<li><a href="/privacy" >Privacy Policy</a></li>
<li><a href="/terms-of-use">Terms</a></li>
<li><a href="/travel-agents">Travel Agents</a></li>
<li><a href="/reviews">Reviews</a></li>
<li><a href="/about-us/history" rel="nofollow">History</a></li>
<li><a href="/about-us/our-differences" rel="nofollow">Our Differences</a></li>
<li><a href="/reviews" rel="nofollow">Reviews</a></li>
<li><a href="/contact-us" rel="nofollow">Contact Us</a></li>
<li><a href="/privacy">Privacy Policy</a></li>
<li><a href="/terms-of-use">Terms</a></li>
</ul>
</div>
<div class="language_links">
<span class="followtitle">Language</span>
<div class="listtour" style="display: flex;">
<div><ul style="width:185px;">
<li><a href="https://www.chinarundreisen.com/" target="_blank" rel="nofollow">Deutsch</a></li>
<li><a href="https://www.voyageschine.com/" target="_blank" rel="nofollow">Français</a></li>
<li><a href="https://www.viaje-a-china.com/" target="_blank" rel="nofollow">Español</a></li>
</ul></div>
<div>
<ul>
<li><a href="https://www.viaggio-in-cina.it/" target="_blank" rel="nofollow">Italiano</a></li>
<li><a href="https://www.chinahighlights.ru/" target="_blank" rel="nofollow">Русский</a></li>
<li><a href="https://www.arachina.com/" target="_blank" rel="nofollow">日本語</a></li>
</ul>
</div>
</div>
</div>
<div class="clear"></div>
<div class="featureon" style="margin-bottom: 50px;">
<span class="followtitle">Featured on</span>
<a href="/about-us/who-recommended"> <img src="https://data.asiahighlights.com/grey.gif" loader="lazy" width="436" height="250"
<img src="https://data.asiahighlights.com/grey.gif" loader="lazy" width="436" height="250"
originalsrc="https://data.chinahighlights.com/pic/guide/info-template-feature-on.png" alt="Social medias"
class="img-responsive bottomfeature" style="opacity: 1; transition: opacity 0.5s ease-in-out 0s;"></a>
class="img-responsive bottomfeature" style="opacity: 1; transition: opacity 0.5s ease-in-out 0s;">
</div>
<div class="featureon">
<span class="followtitle">Address</span>
Building 6, Chuangyi Business Park, 70 Qilidian Road, Guilin, Guangxi, 541004, China
<span class="followtitle">Company Info</span>
China Highlights International Travel Service Co., LTD<br>
Corporate Number: 914503003486045699
</div>
</div>
<div class="bottomlogo">
© 2016-2024 Asia Highlights <br>— Discovery Your Way!
</div>
<div class="web_cookie" id='gotIdArea' style='display: none;'>
<p>Asia Highlights uses cookies to give you the best possible service. If you continue browsing, you agree to the
use of cookies. More details can be found in our <a href="/privacy">privacy policy</a>.</p>
<div class="cookie_close" id="gotItBtn" style="float: right;
padding: 5px 10px;
cursor: pointer;
background: #fff;
font-weight: 600;
font-size: 16px;">X</div>
</div>
<script>
var GOT_IT_KEY = '__asia_highlights_you_agree_to_use_of_cookies__';
if (window.localStorage && localStorage.getItem(GOT_IT_KEY)) {
console.info('If you continue browsing, you agree to the use of cookies.');
} else {
document.getElementById('gotIdArea').style.display = '';
if (window.localStorage) {
localStorage.setItem(GOT_IT_KEY, '1');
}
var gotItBtn = document.getElementById('gotItBtn');
gotItBtn.addEventListener('click', function (evt) {
document.getElementById('gotIdArea').style.display = 'none';
});
setTimeout(function () {
document.getElementById('gotIdArea').style.display = 'none';
}, 10000);
}
</script>
<!--newsletter表单 JS-->
<script
src="https://www.recaptcha.net/recaptcha/enterprise.js?render=6Lf828MhAAAAANNetijCXKwW5ARyhcJ-b1Hhslja"></script>
<script>
document.addEventListener('DOMContentLoaded', () => {
var submitbutton = document.getElementById("submit_newsletter");
var newsletterForm = document.getElementById("newsletter_form");
submitbutton.addEventListener('click', function (event) {
var validateResult = validateNewsletterForm();
if (validateResult) {
if (typeof (grecaptcha) === "undefined") {
console.warn('grecaptcha is disabled.');
newsletterForm.submit();
} else {
grecaptcha.enterprise.ready(async () => {
const token = await grecaptcha.enterprise.execute('6Lf828MhAAAAANNetijCXKwW5ARyhcJ-b1Hhslja', { action: 'ADD_TO_CART' });
var el = document.createElement("input");
el.type = "hidden";
el.name = "__grecaptcha_token__";
el.value = token;
newsletterForm.appendChild(el);
newsletterForm.submit();
submitbutton.innerText = "Submitted successfully";
});
}
}
});
});
function validateNewsletterForm() {
var result = true;
var realnameVal = document.getElementById("newsletter_realname").value;
var emailVal = document.getElementById("newsletter_email").value;
var realnameErrEl = document.getElementById("newsletter_realname_errmsg");
var emailErrEl = document.getElementById("newsletter_email_errmsg");
var emailVerifyErrEl = document.getElementById("newsletter_email_verify_errmsg");
realnameErrEl.style.display = 'none';
emailErrEl.style.display = 'none';
emailVerifyErrEl.style.display = 'none';
if (realnameVal === '') {
realnameErrEl.style.display = '';
result = false;
}
if (emailVal === '') {
emailErrEl.style.display = '';
result = false;
} else {
var emailPattern = /^[\w\-\.]+@[\w\-\.]+(\.\w+)+$/;
if (!emailPattern.test(emailVal)) {
emailVerifyErrEl.style.display = '';
result = false;
}
}
return result;
}
</script>
<script>
(function (w, d, i) {
var navbar = d.getElementById(i);
var prevScrollpos = w.pageYOffset;
w.onscroll = function() {
var currentScrollPos = w.pageYOffset;
if (prevScrollpos > currentScrollPos) {
navbar.style.top = '0';
} else {
navbar.style.top = '-100px';
}
prevScrollpos = currentScrollPos;
}
})(window, document, 'header');
</script>
</footer>
<!--移动底部 结束-->
@ -473,4 +798,5 @@
<!--@STRUCTURED-DATA-BREADCRUMB-BLOCK@-->
<!--@STRUCTURED-DATA-ARTICLE-BLOCK@-->
</body>
</html>

@ -265,9 +265,8 @@
return dateFilter(date);
}],
minDate: new Date().fp_incr(3),
maxDate: new Date().fp_incr(540),
defaultDate: new Date().fp_incr(3)
minDate: new Date().fp_incr(1),
maxDate: new Date().fp_incr(540)
});
//日期结束

@ -1,62 +1,42 @@
<p style="text-align: center;
margin-bottom: 20px;
padding-bottom: 0;" class="city_feedback">Discover real reviews of <a href="/aboutus/highlights-travel-family.htm">Highlights Travel Family</a>'s best-rated service across trusted platforms.</p>
<p style="text-align: center;margin-top: 80px;margin-bottom: 0;padding-bottom: 0;">China Highlights, <a href="https://www.asiahighlights.com/" target="blank">Asia Highlights</a>, and <a href="https://www.globalhighlights.com/" target="blank">Global Highlights</a> collaborate to provide families and couples with personalized and stress-free experiences in diverse destinations.</p>
<div style="display: inline-block;" class="city_feedback_tag">
<div style="margin: 0 10px; float: left;"> <img alt="" class="img-responsive" style="width: 150px;"
src="https://images.chinahighlights.com/allpicture/2024/07/22bf1a7554fc4906bdeaa6536ffe514b_cut_175x68_241_1719916246.png" alt="Trip Advisor certificate of 2024">
</div>
<div style="margin: 0 10px; float: left;">
<img alt="Tour Review" class="img-responsive"
src="https://images.asiahighlights.com/allpicture/2024/04/0c58b3494bc04eeb9c5d3bdf55e55fad_cut_200x111_241.jpg" width="150px">
</div>
</div>
<div class="listtour">
<div style="margin: 0 10px;"> <img alt="" class="img-responsive" height="69"
src="https://data.chinahighlights.com/image/aboutus/awards/china-highlights-ta-2022-certificate.png"
width="175">
<img alt="" src="https://data.chinahighlights.com/image/aboutus/feedback/five-star.png"
class="img-responsive" style="margin: 5px auto;">
</div>
<div style="margin: 0 10px;">
<img alt="Tour Review" class="img-responsive" height="278"
src="https://data.asiahighlights.com/image/about/logo-black.png" width="175px">
<img alt="" height="40" src="https://data.asiahighlights.com/pic/trustpilot-new-icon.png"
width="175px" class="img-responsive">
</div>
</div>
<!--单个目的地反馈 展示30条反馈内容每条反馈包括标题正文客人名字反馈时间反馈链接-->
<?php foreach ($feedback_list as $index => $feedback) {?>
<div class="feedback_content">
<strong style="height: auto;"><?php echo $feedback['title'] ?></strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="review rating">
<p style="height:auto;"><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?></div>
<div class="feedback_content">
<strong><?php echo $feedback['title'] ?></strong>
<p><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>,<?php echo $feedback['createdOn'] ?></div>
</div>
<?php }?>
<h3>All Destinations' Feedbacks</h3>
<div class="listtour">
<div>
<ul class="infolist">
<li><a href="/reviews/guilin.htm">Guilin</a></li>
<li><a href="/reviews/beijing.htm">Beijing</a></li>
<li><a href="/reviews/tibet.htm">Tibet</a></li>
<li><a href="/reviews/huangshan.htm">Huangshan</a></li>
</ul>
</div>
<div>
<ul class="infolist">
<li><a href="/reviews/chengdu.htm">Chengdu</a></li>
<li><a href="/reviews/hangzhou.htm">Hangzhou</a></li>
<li><a href="/reviews/taiwan.htm">Taiwan</a></li>
<li><a href="/reviews/huangshan.htm">Huangshan</a></li>
</ul>
</div>
<div>
<ul class="infolist">
<li><a href="/reviews/suzhou.htm">Suzhou</a></li>
<li><a href="/reviews/lijiang.htm">Lijiang</a></li>
<li><a href="/reviews/dali.htm">Dali</a></li>
<li><a href="/reviews/zhangjiajie.htm">Zhangjiajie</a></li>
<div class="skipBox">
<div class="headerText">Asia Highlights Reviews</div>
<div class="skipAhead">
<ul>
<li><a href="#thailand">Thailand reviews</a></li>
<li><a href="#where">Vietnam reviews</a></li>
<li><a href="#itinerary">Cambodia reviews</a></li>
<li><a href="#avoid">Japan reviews</a></li>
<li><a href="#budget">India reviews</a></li>
<li><a href="#budget">Myanmar reviews</a></li>
</ul>
</div>
<div>
<ul class="infolist">
<li><a href="/reviews/xian.htm">Xi'an</a></li>
<li><a href="/reviews/shanghai.htm">Shanghai</a></li>
<li><a href="/reviews/kunming.htm">Kunming</a></li>
<li><a href="/reviews/zhangjiajie.htm">Zhangjiajie</a></li>
</ul>
</div>
</div>
</div>
</div>

@ -6,14 +6,13 @@
<?php foreach ($Beijing as $index => $feedback) {?>
<div class="feedback_content">
<strong><?php echo $feedback['title'] ?></strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="review rating">
<p><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?></div>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>,<?php echo $feedback['createdOn'] ?></div>
</div>
<?php }?>
<?php }?>
<p><a href="/reviews/beijing.htm">Read more Beijing travel reviews.</a></p>
<h2 id="vietnam">Xi'an Travel Reviews</h2>
@ -21,14 +20,13 @@
<?php foreach ($xian as $index => $feedback) {?>
<div class="feedback_content">
<strong><?php echo $feedback['title'] ?></strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="review rating">
<p><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?></div>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>,<?php echo $feedback['createdOn'] ?></div>
</div>
<?php }?>
<?php }?>
<p><a href="/reviews/xian.htm">Read more Xi'an travel reviews.</a></p>
<h2 id="cambodia">Chengdu Travel Reviews</h2>
@ -36,14 +34,13 @@
<?php foreach ($Chengdu as $index => $feedback) {?>
<div class="feedback_content">
<strong><?php echo $feedback['title'] ?></strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="review rating">
<p><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?></div>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>,<?php echo $feedback['createdOn'] ?></div>
</div>
<?php }?>
<?php }?>
<p><a href="/reviews/chengdu.htm">Read more Chengdu travel reviews.</a></p>
<h2 id="japan">Guilin Travel Reviews</h2>
@ -51,14 +48,13 @@
<?php foreach ($Guilin as $index => $feedback) {?>
<div class="feedback_content">
<strong><?php echo $feedback['title'] ?></strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="review rating">
<p><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?></div>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>,<?php echo $feedback['createdOn'] ?></div>
</div>
<?php }?>
<?php }?>
<p><a href="/reviews/guilin.htm">Read more Guilin travel reviews.</a></p>
<h2 id="japan">Tibet Travel Reviews</h2>
@ -66,14 +62,13 @@
<?php foreach ($Lhasa as $index => $feedback) {?>
<div class="feedback_content">
<strong><?php echo $feedback['title'] ?></strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="review rating">
<p><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?></div>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>,<?php echo $feedback['createdOn'] ?></div>
</div>
<?php }?>
<?php }?>
<p><a href="/reviews/tibet.htm">Read more Tibet travel reviews.</a></p>
<h2 id="myanmar">Suzhou Travel Reviews</h2>
@ -81,14 +76,13 @@
<?php foreach ($Suzhou as $index => $feedback) {?>
<div class="feedback_content">
<strong><?php echo $feedback['title'] ?></strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="review rating">
<p><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?></div>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>,<?php echo $feedback['createdOn'] ?></div>
</div>
<?php }?>
<?php }?>
<p><a href="/reviews/suzhou.htm">Read more Suzhou travel reviews.</a></p>
<h2 id="china">Shanghai Travel Reviews</h2>
@ -96,29 +90,27 @@
<?php foreach ($Shanghai as $index => $feedback) {?>
<div class="feedback_content">
<strong><?php echo $feedback['title'] ?></strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="review rating">
<p><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?></div>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>,<?php echo $feedback['createdOn'] ?></div>
</div>
<?php }?>
<?php }?>
<p><a href="/reviews/shanghai.htm">Read more Shanghai travel reviews.</a></p>
<h2 id="china">Zhangjiajie Travel Reviews</h2>
<?php if (!empty($Zhangjiajie)) {?>
<?php foreach ($Zhangjiajie as $index => $feedback) {?>
<div class="feedback_content">
<strong><?php echo $feedback['title'] ?></strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="review rating">
<p><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?></div>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>,<?php echo $feedback['createdOn'] ?></div>
</div>
<?php }?>
<?php }?>
<p><a href="/reviews/zhangjiajie.htm">Read more Zhangjiajie travel reviews.</a></p>
<h2 id="china">Lijiang Travel Reviews</h2>
@ -126,14 +118,13 @@
<?php foreach ($Lijiang as $index => $feedback) {?>
<div class="feedback_content">
<strong><?php echo $feedback['title'] ?></strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="review rating">
<p><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?></div>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>,<?php echo $feedback['createdOn'] ?></div>
</div>
<?php }?>
<?php }?>
<p><a href="/reviews/lijiang.htm">Read more Lijiang travel reviews.</a></p>
<h2 id="china">Dali Travel Reviews</h2>
@ -141,14 +132,13 @@
<?php foreach ($Dali as $index => $feedback) {?>
<div class="feedback_content">
<strong><?php echo $feedback['title'] ?></strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="review rating">
<p><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?></div>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>,<?php echo $feedback['createdOn'] ?></div>
</div>
<?php }?>
<?php }?>
<p><a href="/reviews/dali.htm">Read more Dali travel reviews.</a></p>
<h2 id="china">Kunming Travel Reviews</h2>
@ -156,14 +146,13 @@
<?php foreach ($Kunming as $index => $feedback) {?>
<div class="feedback_content">
<strong><?php echo $feedback['title'] ?></strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="review rating">
<p><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?></div>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>,<?php echo $feedback['createdOn'] ?></div>
</div>
<?php }?>
<?php }?>
<p><a href="/reviews/kunming.htm">Read more Kunming travel reviews.</a></p>
<h2 id="china">Huangshan Travel Reviews</h2>
@ -171,14 +160,13 @@
<?php foreach ($Huangshan as $index => $feedback) {?>
<div class="feedback_content">
<strong><?php echo $feedback['title'] ?></strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="review rating">
<p><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?></div>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>,<?php echo $feedback['createdOn'] ?></div>
</div>
<?php }?>
<?php }?>
<p><a href="/reviews/huangshan.htm">Read more Huangshan travel reviews.</a></p>
<h2 id="china">Hangzhou Travel Reviews</h2>
@ -186,11 +174,9 @@
<?php foreach ($Hangzhou as $index => $feedback) {?>
<div class="feedback_content">
<strong><?php echo $feedback['title'] ?></strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="review rating">
<p><?php echo $feedback['content'] ?></p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>, <?php echo $feedback['createdOn'] ?></div>
<a href="<?php echo $feedback['url'] ?>" target="_blank">More</a>
<div class="customer_name"><?php echo $feedback['customer'] ?>,<?php echo $feedback['createdOn'] ?></div>
</div>
<?php }?>
<?php }?>
<p><a href="/reviews/hangzhou.htm">Read more Hangzhou travel reviews.</a></p>
<?php }?>

@ -1,32 +1,39 @@
<p style="text-align: center;margin-top: 80px;margin-bottom: 0;padding-bottom: 0;">Discover real reviews of <a href="/aboutus/highlights-travel-family.htm">Highlights Travel Family</a>'s best-rated service across trusted platforms.</p>
<div class="visible-xs" style="margin: 20px 20px 110px 20px; ">
<img class="img-responsive" height="69" src="https://images.chinahighlights.com/allpicture/2024/07/22bf1a7554fc4906bdeaa6536ffe514b_cut_175x68_241_1719916246.png" style="float: left; width: 150px; margin: 0 auto;
display: block;" width="175" alt="Trip Advisor certificate of 2024">
<img height="40" src="https://images.asiahighlights.com/allpicture/2024/04/0c58b3494bc04eeb9c5d3bdf55e55fad_cut_200x111_241.jpg" style="width: 120px; height: auto; display: block;
float: right;" width="211" alt="Tour Review">
<p style="text-align: center;margin-top: 80px;margin-bottom: 0;padding-bottom: 0;">China Highlights, <a href="https://www.asiahighlights.com/" target="blank">Asia Highlights</a>, and <a href="https://www.globalhighlights.com/" target="blank">Global Highlights</a> collaborate to provide families and couples with personalized and stress-free experiences in diverse destinations.</p>
<div class="visible-xs" style="margin: 20px 20px 90px 20px; ">
<img class="img-responsive" height="69" src="https://data.asiahighlights.com/image/forms/ah-ta-2023-certificate.png" style="float: left; width: 150px; margin: 0 auto;
display: block;" width="175">
<img height="40" src="https://data.asiahighlights.com/image/forms/ah-ch-gh-tp-rating.png" style="width: 120px; height: auto; display: block;
float: right;" width="211">
</div>
<div class="table-responsive" style="margin-bottom: 20px;" rel="nofollow">
<table style="width: max-content;">
<div class="table-responsive" style="margin-bottom: 20px;">
<table>
<tbody>
<tr>
<td class="hidden-xs feedback_logo">
<img class="img-responsive" height="69" src="https://images.chinahighlights.com/allpicture/2024/07/22bf1a7554fc4906bdeaa6536ffe514b_cut_175x68_241_1719916246.png" style="margin: 0px auto; " width="175" alt="Trip Advisor certificate of 2024"> <img alt="Tour Review" class="img-responsive" height="278" src="https://images.asiahighlights.com/allpicture/2024/04/0c58b3494bc04eeb9c5d3bdf55e55fad_cut_200x111_241.jpg" style="width: 170px; display: block; margin: 10px auto 0px; " width="1133">
<td class="hidden-xs">
<div class="feedback_logo" >
<img class="img-responsive" height="69" src="https://data.asiahighlights.com/image/forms/ah-ta-2023-certificate.png" style="margin: 0px auto; " width="175"> <img alt="Tour Review" class="img-responsive" height="278" src="https://data.asiahighlights.com/image/forms/ah-ch-gh-tp-rating.png" style="width: 170px; display: block; margin: 10px auto 0px; " width="1133"></div>
</td>
<?php foreach ($feedback_list as $index => $feedback) {?>
<td class="tour_feedback feedback_content">
<td>
<div class="tour_feedback">
<div class="feedback_content">
<strong>
<?php echo $feedback['title'] ?>
</strong>
<img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/eba8a46e43514b55bb4e1dd15d9b5712_cut_211x40_241.jpg'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg'; } ?>" style="height: 20px; width: auto;" alt="Tour Review">
<p>
<?php echo $feedback['content'] ?>
</p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">more</a>
<a href="<?php echo $feedback['url'] ?>" target="_blank">more</a>
<div class="customer_name">
<?php echo $feedback['createdOn'] ?>, <?php echo $feedback['customer'] ?>
</div>
<?php echo $feedback['createdOn'] ?>,
<?php echo $feedback['customer'] ?>
</div>
</div>
</div>
</td>
<?php }?>
</tr>

@ -1,15 +1,14 @@
<p style="text-align: center;margin-top: 80px;margin-bottom: 0;padding-bottom: 0;">Discover real reviews of <a href="/aboutus/highlights-travel-family.htm">Highlights Travel Family</a>'s best-rated service across trusted platforms.</p>
<div class="visible-xs" style="margin: 0 20px;">
<img class="img-responsive" height="69" src="https://images.chinahighlights.com/allpicture/2024/07/22bf1a7554fc4906bdeaa6536ffe514b_cut_175x68_241_1719916246.png" style="float: left; width: 150px; " width="175" alt="Trip Advisor certificate of 2024">
<img height="40" src="https://data.asiahighlights.com/image/forms/ah-ch-gh-tp-rating.png" style="width: 120px; height: auto; " width="211" alt="trustpolit rating">
<p style="text-align: center;margin-top: 80px;margin-bottom: 0;padding-bottom: 0;">China Highlights, <a href="https://www.asiahighlights.com/" target="blank">Asia Highlights</a>, and <a href="https://www.globalhighlights.com/" target="blank">Global Highlights</a> collaborate to provide families and couples with personalized and stress-free experiences in diverse destinations.</p><div class="visible-xs" style="margin: 0 20px;">
<img class="img-responsive" height="69" src="https://data.asiahighlights.com/image/forms/ah-ta-2023-certificate.png" style="float: left; width: 150px; " width="175">
<img height="40" src="https://data.asiahighlights.com/image/forms/ah-ch-gh-tp-rating.png" style="width: 120px; height: auto; " width="211">
</div>
<div class="table-responsive" style="margin-bottom: 20px;" rel="nofollow">
<div class="table-responsive" style="margin-bottom: 20px;">
<table>
<tbody>
<tr>
<td class="hidden-xs">
<div class="feedback_logo">
<img class="img-responsive" height="69" src="https://images.chinahighlights.com/allpicture/2024/07/22bf1a7554fc4906bdeaa6536ffe514b_cut_175x68_241_1719916246.png" style="margin: 0px auto; " width="175" alt="Trip Advisor certificate of 2024"> <img alt="Tour Review" class="img-responsive" height="278" src="https://data.asiahighlights.com/image/forms/ah-ch-gh-tp-rating.png" style="width: 170px; display: block; margin: 10px auto 0px; " width="1133"></div>
<img class="img-responsive" height="69" src="https://data.asiahighlights.com/image/forms/ah-ta-2023-certificate.png" style="margin: 0px auto; " width="175"> <img alt="Tour Review" class="img-responsive" height="278" src="https://data.asiahighlights.com/image/forms/ah-ch-gh-tp-rating.png" style="width: 170px; display: block; margin: 10px auto 0px; " width="1133"></div>
</td>
<?php foreach ($feedback_list as $index => $feedback) {?>
@ -19,13 +18,13 @@
<strong>
<?php echo $feedback['title'] ?>
</strong>
<p class="feedback_rating"><img src="<?php if (strpos($feedback['url'], 'trustpilot.com') == true) { echo 'https://data.asiahighlights.com/pic/trustpilot-new-icon.png'; } else if (strpos($feedback['url'], 'tripadvisor.com') == true) { echo 'https://data.chinahighlights.com/image/aboutus/feedback/five-star.png'; } ?>"></p>
<p>
<?php echo $feedback['content'] ?>
</p>
<a href="<?php echo $feedback['url'] ?>" target="_blank" rel="nofollow">more</a>
<a href="<?php echo $feedback['url'] ?>" target="_blank">more</a>
<div class="customer_name">
<?php echo $feedback['createdOn'] ?>, <?php echo $feedback['customer'] ?>
<?php echo $feedback['createdOn'] ?>,
<?php echo $feedback['customer'] ?>
</div>
</div>

@ -3,9 +3,9 @@
<div class="feedback_content_right" style="width: 100%; margin-bottom: 50px;">
<div class="feedback_content" style="box-shadow: 0px 0px 8px 2px #d1d1d1;">
<div class="photoBlock300" style="width: auto;"><img alt="Trip Advisor travelers' choice 2024" src="https://images.chinahighlights.com/allpicture/2024/07/22bf1a7554fc4906bdeaa6536ffe514b_cut_175x68_241_1719916246.png" width="128" height="150" class="img-responsive" ></div>
<div class="photoBlock300" style="width: auto;"><img alt="Trip Advisor travelers' choice 2022" src="https://data.chinahighlights.com/image/aboutus/china-highlights-ta-certificate-2022.jpg" width="128" height="150" class="img-responsive" ></div>
<p><strong><?php echo $feedback_data['title'] ?></strong></p>
<img alt="" class="feedback-rate" src="https://images.asiahighlights.com/allpicture/2024/04/8bebcc898ce54b64a46ced58580966d4_cut_104x19_241.jpg" width="104" height="20" alt="trip advisor rating"><div class="review_date">reviewed <?php echo $feedback_data['createdOn'] ?>, <?php echo $feedback_data['customer'] ?></div>
<p><?php echo $feedback_data['content'] ?>&nbsp;<a href="<?php echo $feedback_data['url'] ?>" target="_blank" rel="nofollow">more</a></p>
<img alt="" class="feedback-rate" src="https://data.chinahighlights.com/image/aboutus/feedback/five-star.png" width="104" height="20"><div class="review_date">reviewed <?php echo $feedback_data['createdOn'] ?>, <?php echo $feedback_data['customer'] ?></div>
<p><?php echo $feedback_data['content'] ?>&nbsp;<a href="<?php echo $feedback_data['url'] ?>" target="_blank">more</a></p>
</div>
</div>

@ -1,7 +1,15 @@
<div class="topcontent">
<section>
<?php if (!empty($ic_photo)) { ?>
<div class="infotopimage">
<img src="<?php echo 'https://images.chinahighlights.com'.$ic_photo; ?>"
alt="<?php echo !empty($ic_title)?$ic_title:'H1 title Chinahighlights mobile first template'; ?>" class="img-responsive">
<div class="ta_tag">
<img src="https://data.chinahighlights.com/image/forms/ch-2023-trip-advisor-excellent-certificate.png" style="width: 120px !important;height: auto;">
</div>
</div>
<?php } ?>
<div class="infocategory">
<a href="/" data-count="<?php echo count($breadcrumb_data) ?>">Home</a>
<?php foreach ($breadcrumb_data as $index => $item) {?>
@ -10,39 +18,24 @@
</div>
<h1><?php echo !empty($ic_title)?$ic_title:'H1 title Chinahighlights mobile first template'; ?></h1>
<!--<p class="subheadline">to do</p> -->
<?php
$OPI_CodeUrls = [
'zzy' => 'https://www.globalhighlights.com/aboutus/team/ruru-zhou',
'2' => 'https://www.globalhighlights.com/aboutus/team/ruru-zhou',
'HWT' => 'https://www.globalhighlights.com/aboutus/team/mike-he',
'CA' => 'https://www.globalhighlights.com/aboutus/team/carol-wang',
'SI' => 'https://www.globalhighlights.com/aboutus/team/simon-huang',
'TJQ' => 'https://www.globalhighlights.com/aboutus/team/cindy-tang',
'CLA' => 'https://www.globalhighlights.com/aboutus/team/claire-wang',
'Albee' => 'https://www.globalhighlights.com/aboutus/team/albee-ning',
'KM' => 'https://www.globalhighlights.com/aboutus/team/kimi-huang',
'RY' => 'https://www.globalhighlights.com/aboutus/team/rita-yu',
'QMY' => 'https://www.globalhighlights.com/aboutus/team/chris-quan',
'CY' => 'https://www.globalhighlights.com/aboutus/team/cynthia-li',
'Vicky' => 'https://www.globalhighlights.com/aboutus/team/vicky-leng',
'LXW' => 'https://www.globalhighlights.com/aboutus/team/carper-li',
'zzyGH' => 'https://www.globalhighlights.com/aboutus/team/ruru-zhou',
];
$OPI_Code = empty($OPI_Code) ? '' : $OPI_Code;
if (!empty($meta_news_createdate)) {?>
<div class="authorupdate">
Written by
<?php if (array_key_exists($OPI_Code, $OPI_CodeUrls)) {?>
<strong><a href="<?php echo $OPI_CodeUrls[$OPI_Code]; ?>" target="_blank"><?php echo $author; ?></a></strong>
<?php } else { ?>
<strong><?php echo $author; ?></strong>
<?php }?>
Updated <?php echo date("M. j, Y", strtotime($meta_news_createdate)); ?>
</div>
<?php } ?>
<?php if ($ads_by_google) { ?>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4231674166786366"
crossorigin="anonymous"></script>
<?php } ?>
<div class="authorupdate">Written by <strong><?php echo !empty($author)?$author:''; ?></strong>Updated <?php echo date("M. j, Y",strtotime($ic_datetime)); ?></div>
<?php if ($ads_by_google) { ?>
<style>
#adsense-head-ads {
height: 427px;
min-height: 427px;
background: url(https://data.viaggio-in-cina.it/information-view/information/img/adsense.gif) center center no-repeat;
}
@media screen and (max-width: 767px) {
#adsense-head-ads {
height: 320px;
min-height: 320px;
}
}
</style>
<script async src="https://pagead2.googlesyndication.com/pagead/js/adsbygoogle.js?client=ca-pub-4231674166786366"
crossorigin="anonymous"></script>
<div id="ezoic-pub-ad-placeholder-102"></div>
<?php } ?>
</section>
</div>

File diff suppressed because it is too large Load Diff

@ -1,3 +1,6 @@
<?php if (!empty($ic_photo)) { ?>
<div class="infotopimage">
<img src="<?php echo 'https://images.chinahighlights.com'.$ic_photo; ?>"
alt="<?php echo !empty($ic_title)?$ic_title:'H1 title Chinahighlights mobile first template'; ?>" class="img-responsive">
</div>
<?php } ?>

File diff suppressed because it is too large Load Diff

@ -66,7 +66,68 @@
</td>
<td>
<?php if (!empty($recommands['Tour E'])) { ?>
<div class="articlenext">
<a href="<?php echo $recommands['Tour E']->ic_url; ?>" rel="nofollow">
<img src="https://data.chinahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Tour E']->mobile_photo; ?>"
class="img-responsive" alt="<?php echo $recommands['Tour E']->ic_title; ?>">
</a>
<span class="articlenexttitle"><a
href="<?php echo $recommands['Tour E']->ic_url; ?>"><?php echo $recommands['Tour E']->ic_title; ?></a>
</span>
</div>
<?php } ?>
</td>
<td>
<?php if (!empty($recommands['Tour F'])) { ?>
<div class="articlenext">
<a href="<?php echo $recommands['Tour F']->ic_url; ?>" rel="nofollow">
<img src="https://data.chinahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Tour F']->mobile_photo; ?>"
class="img-responsive" alt="<?php echo $recommands['Tour F']->ic_title; ?>">
</a>
<span class="articlenexttitle"><a
href="<?php echo $recommands['Tour F']->ic_url; ?>"><?php echo $recommands['Tour F']->ic_title; ?></a>
</span>
</div>
<?php } ?>
</td>
<td>
<?php if (!empty($recommands['Tour G'])) { ?>
<div class="articlenext">
<a href="<?php echo $recommands['Tour G']->ic_url; ?>" rel="nofollow">
<img src="https://data.chinahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Tour G']->mobile_photo; ?>"
class="img-responsive" alt="<?php echo $recommands['Tour G']->ic_title; ?>">
</a>
<span class="articlenexttitle"><a
href="<?php echo $recommands['Tour G']->ic_url; ?>"><?php echo $recommands['Tour G']->ic_title; ?></a>
</span>
</div>
<?php } ?>
</td>
<td>
<?php if (!empty($recommands['Tour H'])) { ?>
<div class="articlenext">
<a href="<?php echo $recommands['Tour H']->ic_url; ?>" rel="nofollow">
<img src="https://data.chinahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Tour H']->mobile_photo; ?>"
class="img-responsive" alt="<?php echo $recommands['Tour H']->ic_title; ?>"></a>
<span class="articlenexttitle"><a
href="<?php echo $recommands['Tour H']->ic_url; ?>"><?php echo $recommands['Tour H']->ic_title; ?></a>
</span>
</div>
<?php } ?>
</td>
</tr>
</tbody>
</table>
@ -83,7 +144,7 @@
<table >
<tbody>
<tr>
<?php if (!empty($recommands['Article A']) && isset($recommands['Article A']->ic_url)) { ?>
<?php if (!empty($recommands['Article A'])) { ?>
<td>
<div class="articlenext">
<a href="<?php echo $recommands['Article A']->ic_url; ?>" rel="nofollow"> <img
@ -96,11 +157,9 @@
</span>
</div>
</td>
<?php } else { ?>
<div style='display: none'><?php var_dump($recommands['Article A']); ?></div>
<?php } ?>
<?php if (!empty($recommands['Article B']) && isset($recommands['Article B']->ic_url)) { ?>
<?php if (!empty($recommands['Article B'])) { ?>
<td>
<div class="articlenext">
<a href="<?php echo $recommands['Article B']->ic_url; ?>" rel="nofollow"> <img
@ -113,11 +172,9 @@
</span>
</div>
</td>
<?php } else { ?>
<div style='display: none'><?php var_dump($recommands['Article B']); ?></div>
<?php } ?>
<?php if (!empty($recommands['Article C']) && isset($recommands['Article C']->ic_url)) { ?>
<?php if (!empty($recommands['Article C'])) { ?>
<td>
<div class="articlenext">
<a href="<?php echo $recommands['Article C']->ic_url; ?>" rel="nofollow"> <img
@ -130,11 +187,9 @@
</span>
</div>
</td>
<?php } else { ?>
<div style='display: none'><?php var_dump($recommands['Article C']); ?></div>
<?php } ?>
<?php if (!empty($recommands['Article D']) && isset($recommands['Article D']->ic_url)) { ?>
<?php if (!empty($recommands['Article D'])) { ?>
<td>
<div class="articlenext">
<a href="<?php echo $recommands['Article D']->ic_url; ?>" rel="nofollow"> <img
@ -147,11 +202,67 @@
</span>
</div>
</td>
<?php } else { ?>
<div style='display: none'><?php var_dump($recommands['Article D']); ?></div>
<?php } ?>
<?php if (!empty($recommands['Article E'])) { ?>
<td>
<div class="articlenext">
<a href="<?php echo $recommands['Article E']->ic_url; ?>" rel="nofollow"> <img
src="https://data.chinahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo empty($recommands['Article E']->mobile_photo) ? $recommands['Article E']->ic_photo_img : $recommands['Article E']->mobile_photo; ?>"
class="img-responsive"
alt="<?php echo $recommands['Article E']->ic_title; ?>"></a>
<span class="articlenexttitle">
<a href="<?php echo $recommands['Article E']->ic_url; ?>"> <?php echo $recommands['Article E']->ic_title; ?> </a> </span>
</div>
</td>
<?php } ?>
<?php if (!empty($recommands['Article F'])) { ?>
<td>
<div class="articlenext">
<a href="<?php echo $recommands['Article F']->ic_url; ?>" rel="nofollow"> <img
src="https://data.chinahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo empty($recommands['Article F']->mobile_photo) ? $recommands['Article F']->ic_photo_img : $recommands['Article F']->mobile_photo; ?>"
class="img-responsive"
alt="<?php echo $recommands['Article F']->ic_title; ?>"></a>
<span class="articlenexttitle">
<a href="<?php echo $recommands['Article F']->ic_url; ?>"> <?php echo $recommands['Article F']->ic_title; ?> </a>
</span>
</div>
</td>
<?php } ?>
<?php if (!empty($recommands['Article G'])) { ?>
<td>
<div class="articlenext">
<a href="<?php echo $recommands['Article G']->ic_url; ?>" rel="nofollow"> <img
src="https://data.chinahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Article G']->mobile_photo; ?>"
class="img-responsive"
alt="<?php echo $recommands['Article G']->ic_title; ?>"></a>
<span class="articlenexttitle">
<a href="<?php echo $recommands['Article G']->ic_url; ?>"> <?php echo $recommands['Article G']->ic_title; ?> </a>
</span>
</div>
</td>
<?php } ?>
<?php if (!empty($recommands['Article H'])) { ?>
<td>
<div class="articlenext">
<a href="<?php echo $recommands['Article H']->ic_url; ?>" rel="nofollow"> <img
src="https://data.chinahighlights.com/grey.gif" loader="lazy"
originalsrc="<?php echo $recommands['Article H']->mobile_photo; ?>"
class="img-responsive"
alt="<?php echo $recommands['Article H']->ic_title; ?>"></a>
<span class="articlenexttitle">
<a href="<?php echo $recommands['Article H']->ic_url; ?>"> <?php echo $recommands['Article H']->ic_title; ?> </a>
</span>
</div>
</td>
<?php } ?>
</tr>
</tbody>
</table>

File diff suppressed because it is too large Load Diff

@ -1,25 +1,22 @@
<div class="right_tour">
<div class="right_ad_list popular_tours">
<div class="info_ad_title" style="display: flex;">Popular tours</div>
<div class="info_ad_title" style="display: flex;">Popular tours</div>
<div class="right_ad_list">
<ul>
<?php foreach ($tips_right_a as $index => $info) {?>
<li><a href="<?php echo $info->ic_url ?>" id="right_ad_list_tours"><?php echo $info->ic_title ?></a></li>
<?php }?>
</ul>
</div>
<div class="right_ad_list make_most_time">
<div class="info_ad_title" style="display: flex;">Make the most of your time</div>
<div class="info_ad_title" style="display: flex;">Make the most of your time</div>
<div class="right_ad_list">
<ul>
<?php foreach ($tips_right_b as $index => $info) {?>
<li><a href="<?php echo $info->ic_url ?>" id="right_ad_list_plan"><?php echo $info->ic_title ?></a></li>
<?php }?>
</ul>
</div>
<div class="right_ad_list best_time_visit">
<div class="info_ad_title" style="display: flex;">Choose the best time to visit</div>
<div class="info_ad_title" style="display: flex;">Choose the best time to visit</div>
<div class="right_ad_list">
<ul>
<?php foreach ($tips_right_c as $index => $info) {?>
<li><a href="<?php echo $info->ic_url ?>" id="right_ad_list_weather"><?php echo $info->ic_title ?></a></li>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save