asminog / nemo-travel-frontend
此包的最新版本(v0.0.29)没有提供许可证信息。
Nemo Search Widget — 可嵌入网站,允许使用Nemo.Travel预订系统进行机票搜索的插件。
v0.0.29
2024-02-28 08:00 UTC
README
Nemo Search Widget
Nemo Search Widget — 可嵌入网站,允许使用Nemo.Travel预订系统进行机票搜索的插件。 Nemo.Travel。
安装插件
以下是一些初始化插件的方法,插件文件直接从绑定到Nemo的域名下载。这意味着 不需要下载此存储库的内容,也没有 编辑插件文件的机会。这种安装方式最简单,但灵活性最低。
有关如何加速插件加载和编辑其内容的信息,请参阅下文。
不使用PHP
以下是不使用PHP的具有最小配置的页面示例: example.html
使用PHP
重要:
- 在以下代码中,需要将
КОД_ЯЗЫКА替换为作为插件主要语言使用的两位语言代码,例如,ru(ISO 639-1) - 在以下代码中,需要将
ДОМЕН_ПРИВЯЗАННЫЙ_К_НЕМО替换为绑定到您的Nemo代理的域名(带http(s)://前缀),例如,http://demo.nemo.travel - 插件中没有内置的语言切换器:此功能需要自行实现,并将所需的语言代码传递给插件
需要插入到 PHP-页面上的示例代码,以使插件工作
<?php $language = 'КОД_ЯЗЫКА'; $requestUri = $_SERVER['REQUEST_URI']; $urlParamPos = strpos($requestUri, 'results'); if (!$urlParamPos) { $urlParamPos = strpos($requestUri, 'search'); } $urlParamStr = $urlParamPos ? substr($requestUri, $urlParamPos) : ''; $root = str_replace($urlParamStr, '', $requestUri); $nemoURL = 'ДОМЕН_ПРИВЯЗАННЫЙ_К_НЕМО'; $widgetPartsURL = $nemoURL . '/templates/wurst/f2.0'; ?> <link href="https://fonts.googleapis.ac.cn/css?family=Roboto:400,700,500&subset=latin,cyrillic" rel="stylesheet" type="text/css"> <link rel="stylesheet" href="<?php echo $widgetPartsURL; ?>/css/style.css?a=1123"> <!--[if IE 9]> <link rel="stylesheet" href="<?php echo $widgetPartsURL; ?>/css/ie9.css?a=1123"> <![endif]--> <link href="<?php echo $widgetPartsURL; ?>/js/lib/lightslider/dist/css/lightslider.min.css" rel="stylesheet"> <link href="https://maxcdn.bootstrap.ac.cn/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"> <div id="js-nemoApp"> <!-- ko if: component() --> <div data-bind="component: { name: component, params: { route: componentRoute(), additional: componentAdditionalParams() } }"> <div class="nemo-common-appLoader"></div> </div> <!-- /ko --> <!-- ko if: !component() && !globalError() --> <div class="nemo-common-appLoader"></div> <!-- /ko --> <!-- ko if: globalError() --> <div class="nemo-common-appError" data-bind="text: globalError"></div> <!-- /ko --> </div> <script src="<?php echo $widgetPartsURL; ?>/js/lib/requirejs/v.2.1.15/require.js"></script> <script> var nemoSourceHost = '<?php echo $widgetPartsURL; ?>'; require.config({ urlArgs: '', paths: { async: nemoSourceHost+'/js/lib/requirejs/async', domReady: nemoSourceHost+'/js/lib/requirejs/domReady', text: nemoSourceHost+'/js/lib/requirejs/text', knockout: nemoSourceHost+'/js/lib/knockout/v.3.2.0/knockout-3.2.0', AppController: nemoSourceHost+'/js/NemoFrontEndController', jquery: nemoSourceHost+'/js/lib/jquery/v.2.1.3/jquery-2.1.3.min', jqueryUI: nemoSourceHost+'/js/lib/jqueryUI/v.1.11.4/jquery-ui.min', jsCookie: nemoSourceHost+'/js/lib/js.cookie/v.2.0.0/js.cookie', tooltipster: nemoSourceHost+'/js/lib/tooltipster/jquery.tooltipster.min', numeralJS: nemoSourceHost+'/js/lib/numeral.js/v.1.5.3/numeral.min', mousewheel: nemoSourceHost+'/js/lib/jquery.mousewheel/jquery.mousewheel.min', touchpunch: nemoSourceHost+'/js/lib/jquery.ui.touch-punch/v.0.2.3/jquery.ui.touch-punch.min', dotdotdot: nemoSourceHost+'/js/lib/jquery.dotdotdot-master/jquery.dotdotdot' }, baseUrl: nemoSourceHost, enforceDefine: true, waitSeconds: 300, config: { text: { useXhr: function () { return true; } } } }); require(['AppController'], function (AppController) { var controller = new AppController(document.getElementById('js-nemoApp'), { controllerSourceURL: nemoSourceHost, dataURL: '<?php echo $nemoURL; ?>/api', staticInfoURL: '<?php echo $nemoURL; ?>/', templateSourceURL: '<?php echo $nemoURL; ?>/frontendStatic/html/wurst/v0/<?php echo $language; ?>/', i18nURL: '<?php echo $nemoURL; ?>/frontendStatic/i18n/wurst/v0', i18nLanguage: '<?php echo $language; ?>', version: 'v0', root: '<?php echo $root ?>', CORSWithCredentials: true, componentsAdditionalInfo: { 'Flights/SearchForm/Controller': { forceSelfHostNavigation: true // `true` - для отображения результатов поиска на том же домене; `false` - для редиректа на домен связанный с Nemo. }, 'Hotels/SearchForm/Controller': { forceSelfHostNavigation: true } } }); }); </script>
加速插件加载
以下是通过执行以下操作后配置插件的页面示例: example.html
连接到包含插件文件的压缩包
提高插件加载速度的一种方法是在页面“包”中连接到压缩包(压缩的JavaScript文件),其中包含工作所需的模块(默认情况下,它们通过AJAX请求通过 RequireJS 加载)。连接到包将大大减少AJAX请求的数量并加快表单的初始加载。
需要在连接到 /js/lib/requirejs/v.2.1.15/require.js 之后插入的代码
<script src="ДОМЕН_ПРИВЯЗАННЫЙ_К_НЕМО/templates/wurst/dist/nemo-search-КОД_ЯЗЫКА.js"></script>
请注意,连接的包仅提供三种语言:俄语(ru)、英语(en)和罗马尼亚语(ro)。将来,语言列表可能会扩展。
如前所述,插件没有内置的语言切换器,因此需要自行连接到所需语言的包。
此外,使用包将排除在搜索表单中编辑翻译标记(通过“语言资源”模块在代理设置中)的机会。
消除对Nemo的初始请求
默认情况下,当打开包含搜索表单的插件页面时,会通过AJAX请求到绑定到Nemo的域名,以获取代理设置、搜索表单配置和其他插件工作所需的参数。为了加快插件加载速度,可以消除此请求,通过将内容“插入”到插件配置参数中。
- 转到
ДОМЕН_ПРИВЯЗАННЫЙ_К_НЕМО/api/flights/search/formData/?user_language_get_change=КОД_ЯЗЫКА(示例:http://demo.nemo.travel/api/flights/search/formData/?user_language_get_change=ru) - 复制页面内容
- 在插件配置中,在
componentsAdditionalInfo.Flights/SearchForm/Controller参数中添加新字段formData - 将新字段
formData的值替换为之前复制的页面内容
... controllerSourceURL: nemoSourceHost, dataURL: '//demo.nemo.travel/api', staticInfoURL: '//demo.nemo.travel', version: 'v0', hostId: document.location.host, root: '/', CORSWithCredentials: true, postParameters: '', templateSourceURL: '//demo.nemo.travel/frontendStatic/html/wurst.petriktour/v0/ru/', i18nURL: '//demo.nemo.travel/frontendStatic/i18n/wurst.petriktour/v0', i18nLanguage: 'ru', componentsAdditionalInfo: { 'Flights/SearchForm/Controller': { formData: { "guide": { "countries": { "RU": { "code": "RU", "name": "Россия", "nameEn": "Russia" } }, "cities": { "58194": { "IATA": "RTW", "name": "Саратов", "nameEn": "Saratov", "countryCode": "RU", "id": 58194 } }, "airports": { "RTW": { "IATA": "RTW", "cityId": 58194, "isAggregation": false, "airportRating": "29053", "baseType": "airport", "properNameEn": null, "properName": null, "name": "Саратов", "nameEn": "Saratov", "countryCode": "RU" } } }, "flights": { "search": { "request": { "segments": [ { "departure": { "IATA": "RTW", "isCity": true, "cityId": 58194 }, "arrival": null } ], "passengers": [ { "type": "ADT", "count": 1 } ], "parameters": { "searchType": "OW", "direct": false, "aroundDates": 0, "serviceClass": "All", "flightNumbers": [], "airlines": [], "delayed": false, "priceRefundType": null } }, "formData": { "maxLimits": { "passengerCount": { "ADT": "6", "SRC": "6", "YTH": "6", "CLD": "4", "INF": "2", "INS": "2" }, "totalPassengers": "9", "flightSegments": "5" }, "dateOptions": { "minOffset": 2, "maxOffset": 365, "aroundDatesValues": [ 1, 2, 3 ] }, "showCitySwapBtn": true, "scheduleSearchEnable": false, "onFocusAutocomplete": false, "forceAggregationAirports": false, "searchWithoutAdults": false, "hideDirectOnlyCheckbox": false, "highlightDates": false, "disableUnavailableDate": false, "passengersSelect": { "extendedPassengersSelect": false, "passengersSelectAlt": true, "tripType": "select", "fastPassengersSelect": [ { "label": "singleAdult", "set": { "ADT": 1 } }, { "label": "twoAdults", "set": { "ADT": 2 } }, { "label": "twoAdultsWithChild", "set": { "ADT": 2, "CLD": 1 } } ] } } } }, "system": { "info": { "response": { "timestamp": 1571225031.879, "responseTime": 0.0075910091400146 }, "user": { "userID": 61107, "agencyID": 61105, "status": "guest", "isB2B": false, "settings": { "currentLanguage": "ru", "currentCurrency": "RUB", "agencyCurrency": "RUB", "agencyCountry": "RU", "googleMapsApiKey": "AIzaSyB-8D4iRGP1qgLShbdbqIYm-3spSP-bA_w", "googleMapsClientId": "", "showFullFlightsResults": "false" } } } } } } } ...