From 9cfcbbdd12308c9e4d2309dec4c3a6072e17997b Mon Sep 17 00:00:00 2001 From: Daniel Seifert Date: Mon, 13 Jun 2022 15:49:46 +0200 Subject: [PATCH] add 7.1.0.0 (sourceGuardian for PHP 8) --- .gitattributes | 1 + README.md | 15 + composer.json | 50 + docs/Features.txt | 114 + docs/daux/_index.md | 2 + docs/daux/assets/AttributeValueGroups.svg | 2 + docs/daux/changelog/010_Changelog.md | 639 ++ docs/daux/config.json | 74 + docs/daux/editions/010_Editionen.md | 17 + docs/daux/installation/002_Installation.md | 10 + .../010_Systemanforderungen.md | 28 + ...030_Kompatibilitaet_mit_anderen_Modulen.md | 7 + .../010_Anforderungen/050_Vorbereitungen.md | 9 + .../020_Neuinstallation/005_Vorbereitung.md | 7 + .../020_Modul_hinzufuegen.md | 15 + .../030_Verwendung_eigener_Themes.md | 16 + .../040_Providerspezifische_Installation.md | 5 + .../050_Modul_im_Shop_aktivieren.md | 19 + .../060_Shopanpassungen_installieren.md | 21 + .../070_TMP-Ordner_leeren.md | 21 + .../080_Lizenz_eintragen.md | 11 + .../090_Cronjob_einrichten.md | 13 + .../100_Updatefaehigkeit.md | 7 + .../020_Neuinstallation/_index.md | 16 + .../030_Update/005_Updatedefinition.md | 8 + .../030_Update/010_Modul_deaktivieren.md | 19 + .../030_Update/020_Dateien_erneuern.md | 18 + .../030_Providerspezifische_Installation.md | 5 + .../040_Modulinformationen_aktualisieren.md | 19 + .../050_Shopanpassungen_installieren.md | 21 + .../030_Update/060_TMP-Ordner_leeren.md | 21 + .../070_Lizenzschluessel_aktualisieren.md | 7 + .../030_Update/080_Erweiterungen_anpassen.md | 5 + .../010_Cachevermeidung.md | 16 + .../installation/040_Installationspruefung.md | 24 + docs/daux/installation/050_Schnellstart.md | 11 + ...rweiterungen_deaktivieren_und_entfernen.md | 5 + .../020_Modul_deaktivieren.md | 19 + ...30_Modul_aus_der_Installation_entfernen.md | 13 + .../040_Dateien_loeschen.md | 10 + .../050_Datenbank_bereinigen.md | 27 + .../060_TMP-Ordner_leeren.md | 21 + docs/daux/manual/010_Inhalte.md | 7 + docs/daux/manual/013_Ergebnisanlyse.md | 21 + docs/daux/manual/015_optischeAnpassungen.md | 18 + .../010_phonetischer_Index.md | 11 + docs/daux/manual/030_Statistik.md | 7 + docs/daux/manual/040_Synonym-Editor.md | 34 + .../045_korrespondierendeAttributswerte.md | 19 + docs/daux/manual/050_Logging.md | 5 + docs/daux/manual/060_externeEinstellungen.md | 21 + docs/daux/manual/070_Optimierungen.md | 31 + docs/daux/manual/080_Fragen.md | 11 + .../manual/090_Erweiterungsmoeglichkeiten.md | 23 + .../010_zusaetzliche_Formularfelder.md | 70 + .../020_MultiAttributFilter.md | 15 + .../030_Indexleiste.md | 11 + .../040_Relevanz.md | 20 + .../050_Phonetic-Cronjob.md | 11 + docs/daux/support/010_Hilfe-und-Support.md | 16 + docs/html/assets/AttributeValueGroups.svg | 2 + docs/html/changelog/Changelog.html | 846 +++ docs/html/editions/Editionen.html | 127 + docs/html/index.html | 107 + .../Kompatibilitaet_mit_anderen_Modulen.html | 110 + .../Anforderungen/Systemanforderungen.html | 151 + .../Anforderungen/Vorbereitungen.html | 112 + .../Deinstallation/Dateien_loeschen.html | 116 + .../Deinstallation/Datenbank_bereinigen.html | 143 + .../Modul_aus_der_Installation_entfernen.html | 115 + .../Deinstallation/Modul_deaktivieren.html | 120 + ...eiterungen_deaktivieren_und_entfernen.html | 109 + .../Deinstallation/TMP-Ordner_leeren.html | 121 + docs/html/installation/Installation.html | 123 + .../Cachevermeidung.html | 135 + .../installation/Installationspruefung.html | 129 + .../Neuinstallation/Cronjob_einrichten.html | 116 + .../Neuinstallation/Lizenz_eintragen.html | 112 + .../Neuinstallation/Modul_hinzufuegen.html | 118 + .../Modul_im_Shop_aktivieren.html | 120 + .../Providerspezifische_Installation.html | 109 + .../Shopanpassungen_installieren.html | 117 + .../Neuinstallation/TMP-Ordner_leeren.html | 121 + .../Neuinstallation/Updatefaehigkeit.html | 110 + .../Verwendung_eigener_Themes.html | 118 + .../Neuinstallation/Vorbereitung.html | 111 + .../installation/Neuinstallation/index.html | 116 + docs/html/installation/Schnellstart.html | 112 + .../installation/Update/Dateien_erneuern.html | 120 + .../Update/Erweiterungen_anpassen.html | 109 + .../Lizenzschluessel_aktualisieren.html | 110 + .../Update/Modul_deaktivieren.html | 120 + .../Modulinformationen_aktualisieren.html | 120 + .../Providerspezifische_Installation.html | 109 + .../Update/Shopanpassungen_installieren.html | 117 + .../Update/TMP-Ordner_leeren.html | 121 + .../installation/Update/Updatedefinition.html | 111 + docs/html/manual/Ergebnisanlyse.html | 122 + .../manual/Erweiterungsmoeglichkeiten.html | 118 + docs/html/manual/Fragen.html | 112 + docs/html/manual/Inhalte.html | 110 + docs/html/manual/Logging.html | 109 + docs/html/manual/Optimierungen.html | 132 + .../phonetischer_Index.html | 113 + docs/html/manual/Statistik.html | 110 + docs/html/manual/Synonym-Editor.html | 124 + docs/html/manual/externeEinstellungen.html | 117 + .../korrespondierendeAttributswerte.html | 121 + docs/html/manual/optischeAnpassungen.html | 119 + .../Indexleiste.html | 112 + .../MultiAttributFilter.html | 128 + .../Phonetic-Cronjob.html | 112 + .../technische_Erlaeuterungen/Relevanz.html | 119 + .../zusaetzliche_Formularfelder.html | 160 + docs/html/support/Hilfe-und-Support.html | 118 + docs/html/themes/d3/css/d3.css | 210 + docs/html/themes/d3/css/theme-blue.min.css | 10 + .../html/themes/d3/css/theme-blue.min.css.map | 1 + docs/html/themes/d3/fonts/robotoslab-bold.eot | Bin 0 -> 39370 bytes docs/html/themes/d3/fonts/robotoslab-bold.svg | 688 +++ docs/html/themes/d3/fonts/robotoslab-bold.ttf | Bin 0 -> 39120 bytes .../html/themes/d3/fonts/robotoslab-bold.woff | Bin 0 -> 23812 bytes .../themes/d3/fonts/robotoslab-bold.woff2 | Bin 0 -> 18720 bytes .../html/themes/d3/fonts/robotoslab-light.eot | Bin 0 -> 40646 bytes .../html/themes/d3/fonts/robotoslab-light.svg | 687 +++ .../html/themes/d3/fonts/robotoslab-light.ttf | Bin 0 -> 40392 bytes .../themes/d3/fonts/robotoslab-light.woff | Bin 0 -> 24224 bytes .../themes/d3/fonts/robotoslab-light.woff2 | Bin 0 -> 19112 bytes .../themes/d3/fonts/robotoslab-regular.eot | Bin 0 -> 39066 bytes .../themes/d3/fonts/robotoslab-regular.svg | 687 +++ .../themes/d3/fonts/robotoslab-regular.ttf | Bin 0 -> 38804 bytes .../themes/d3/fonts/robotoslab-regular.woff | Bin 0 -> 23624 bytes .../themes/d3/fonts/robotoslab-regular.woff2 | Bin 0 -> 18620 bytes docs/html/themes/d3/img/favicon.png | Bin 0 -> 4694 bytes docs/html/themes/d3/js/README.md | 12 + docs/html/themes/d3/js/daux.js | 98 + docs/html/themes/d3/js/fontawesome-all.js | 3082 ++++++++++ docs/html/themes/d3/js/highlight.pack.js | 3 + docs/html/themes/d3/js/html5shiv-3.7.3.min.js | 4 + docs/html/themes/d3/js/jquery-1.11.3.min.js | 5 + docs/html/tipuesearch/tipuesearch.css | 177 + docs/html/tipuesearch/tipuesearch.js | 365 ++ .../html/tipuesearch/tipuesearch_content.json | 1 + docs/migration_to_OXID_6.x.sql | 1 + docs/readme.txt | 20 + src/.htaccess | 27 + .../d3_attribute2category_extsearch_ajax.php | 72 + ..._attribute2manufacturer_extsearch_ajax.php | 72 + .../d3_attribute2vendor_extsearch_ajax.php | 72 + .../d3_attribute_extsearch_ajax_abstract.php | 169 + .../Reports/d3_extsearch_report_base.php | 402 ++ .../Reports/d3_extsearch_report_hitless.php | 163 + .../d3_extsearch_report_mostsearches.php | 166 + .../Admin/d3_attribute_extsearch.php | 122 + .../Admin/d3_category_extsearch.php | 101 + .../Controller/Admin/d3_cfg_extsearch.php | 32 + .../Admin/d3_cfg_extsearch_licence.php | 36 + .../Admin/d3_cfg_extsearch_list.php | 35 + .../Admin/d3_cfg_extsearch_main.php | 532 ++ .../Admin/d3_cfg_extsearch_navigation.php | 52 + .../Admin/d3_cfg_extsearch_plugins.php | 161 + .../Admin/d3_cfg_extsearch_quicksearch.php | 31 + .../Admin/d3_cfg_extsearch_statistik.php | 239 + .../Controller/Admin/d3_cfg_extsearchlog.php | 38 + .../Admin/d3_cfg_extsearchlog_list.php | 24 + .../Controller/Admin/d3_cfg_extsearchstat.php | 33 + .../Admin/d3_cfg_extsearchstat_list.php | 38 + .../Admin/d3_cfg_extsearchsyneditor.php | 35 + .../Admin/d3_cfg_extsearchsyneditor_list.php | 64 + .../Admin/d3_cfg_extsearchsyneditor_main.php | 249 + .../d3_cfg_extsearchsyneditor_manage.php | 213 + .../Controller/d3_extsearch_cron_response.php | 70 + .../Controller/d3_extsearch_response.php | 145 + .../Controller/d3_xlist_extsearch.php | 870 +++ .../Model/Filters/d3AttributeFilter.php | 2 + .../Model/Filters/d3CategoryFilter.php | 2 + .../Model/Filters/d3FieldIsFilter.php | 2 + .../Model/Filters/d3FieldLikeFilter.php | 2 + src/Application/Model/Filters/d3Filter.php | 2 + .../Model/Filters/d3FilterInterface.php | 2 + .../Model/Filters/d3FilterList.php | 2 + .../Model/Filters/d3IndexFilter.php | 2 + .../Model/Filters/d3ManufacturerFilter.php | 2 + .../Model/Filters/d3PriceFilter.php | 2 + .../Model/Filters/d3VendorFilter.php | 2 + .../Model/d3_extsearch_statisticlog.php | 2 + src/Application/Model/d3_extsearch_synset.php | 2 + src/Application/Model/d3_extsearch_term.php | 2 + .../Model/d3_oxutils_extsearch.php | 2 + src/Application/Model/d3_phonetic_de.php | 2 + src/Application/Model/d3_phonetic_de_voc.php | 2 + src/Application/Model/d3_querygenerator.php | 2 + src/Application/Model/d3_search.php | 2 + src/Application/Model/d3_search_generator.php | 2 + src/Application/Model/d3_semantic.php | 2 + .../Model/d3extsearch_attribute2object.php | 2 + .../translations/de/d3_extsearch_lang.php | 115 + .../translations/en/d3_extsearch_lang.php | 115 + .../blocks/d3_extsearch_article_extend.tpl | 18 + .../blocks/d3_extsearch_attribute_main.tpl | 3 + .../blocks/d3_extsearch_category_main.tpl | 3 + .../blocks/d3_extsearch_content_main.tpl | 11 + .../views/admin/de/d3_extsearch_lang.php | 443 ++ .../views/admin/de/module_options.php | 40 + .../views/admin/en/d3_extsearch_lang.php | 443 ++ .../views/admin/en/module_options.php | 40 + .../admin/tpl/d3_attribute_extsearch.tpl | 133 + .../views/admin/tpl/d3_category_extsearch.tpl | 81 + .../views/admin/tpl/d3_cfg_extsearch_main.tpl | 773 +++ .../d3_cfg_extsearch_main_sortanalysis.tpl | 50 + .../admin/tpl/d3_cfg_extsearch_navigation.tpl | 590 ++ .../admin/tpl/d3_cfg_extsearch_plugins.tpl | 167 + .../tpl/d3_cfg_extsearch_quicksearch.tpl | 227 + .../admin/tpl/d3_cfg_extsearch_statistik.tpl | 235 + .../tpl/d3_cfg_extsearchsyneditor_list.tpl | 126 + .../tpl/d3_cfg_extsearchsyneditor_main.tpl | 146 + .../tpl/d3_cfg_extsearchsyneditor_manage.tpl | 143 + .../views/admin/tpl/d3_extsearch_plugin.tpl | 11 + .../views/admin/tpl/d3_extsearch_popup.tpl | 40 + .../admin/tpl/d3_togglegroup_extsearch.tpl | 9 + .../popups/d3_attribute_extsearch_ajax.tpl | 90 + .../reports/d3_extsearch_report_hitless.tpl | 47 + .../d3_extsearch_report_mostsearches.tpl | 46 + .../views/blocks/layout/d3_extsearch_css.tpl | 31 + .../views/blocks/layout/d3_extsearch_js.tpl | 119 + .../page/list/d3extsearch_alist_filters.tpl | 17 + .../list/d3extsearch_alist_noartfilters.tpl | 33 + .../blocks/page/search/d3_inc_ext_search.tpl | 50 + .../header/d3_extsearch_headersearch.tpl | 19 + .../header/d3_extsearch_searchfield.tpl | 49 + .../locator/d3_list_disabledefaultfilters.tpl | 2 + ...d3_extsearch_listitemgrid_flowtitlebox.tpl | 16 + .../d3_extsearch_listitemgrid_title.tpl | 92 + .../d3_extsearch_listiteminfogrid_title.tpl | 24 + .../d3_extsearch_listitemline_description.tpl | 15 + ...d3_extsearch_listitemline_flowtitlebox.tpl | 19 + .../d3_extsearch_listitemline_selections.tpl | 30 + .../views/tpl/azure/d3_inc_ext_search.tpl | 200 + .../tpl/azure/d3extsearch_alist_filters.tpl | 66 + .../tpl/d3_ddoevisualcmsadmin_extsearch.tpl | 51 + .../views/tpl/d3_ext_search_filter.tpl | 11 + .../views/tpl/d3_ext_search_highlight.tpl | 3 + .../views/tpl/d3_ext_search_suggestsearch.tpl | 152 + .../views/tpl/filterelements/attribute.tpl | 96 + .../views/tpl/filterelements/category.tpl | 94 + .../tpl/filterelements/inc/multibuttons.tpl | 13 + .../views/tpl/filterelements/jqslider.tpl | 65 + .../views/tpl/filterelements/manufacturer.tpl | 94 + .../tpl/filterelements/priceselector.tpl | 49 + .../views/tpl/filterelements/vendor.tpl | 94 + .../views/tpl/flow/d3_list_filters.tpl | 72 + .../views/tpl/flow/d3_search_contents.tpl | 64 + .../views/tpl/flow/d3_search_filters.tpl | 115 + .../views/tpl/mobile/d3_inc_ext_search.tpl | 333 + .../tpl/mobile/d3extsearch_alist_filters.tpl | 204 + .../function.d3_extsearch_highlight.php | 2 + src/Core/d3_extsearch_conf.php | 2 + src/IntelliSenseHelper.php | 91 + .../Component/d3_oxcmp_basket_extsearch.php | 84 + .../Component/d3_oxcmp_utils_extsearch.php | 259 + .../Component/d3_oxwarticlebox_extsearch.php | 50 + .../d3_oxwarticledetails_extsearch.php | 327 + .../Admin/d3_article_list_extsearch.php | 265 + .../Admin/d3_ddoevisualcmsadmin_extsearch.php | 47 + .../Controller/d3_alist_extsearch.php | 762 +++ .../Controller/d3_details_extsearch.php | 244 + .../Application/Controller/d3_ext_search.php | 1715 ++++++ .../d3_manufacturerlist_extsearch.php | 762 +++ .../Controller/d3_oxlocator_extsearch.php | 482 ++ .../Controller/d3_rss_extsearch.php | 182 + .../Controller/d3_vendorlist_extsearch.php | 762 +++ .../Model/d3_attribute_extsearch.php | 2 + .../Model/d3_basemodel_extsearch.php | 2 + .../Model/d3_category_extsearch.php | 2 + .../Model/d3_manufacturer_extsearch.php | 2 + .../Model/d3_oxarticle_phonetic.php | 2 + .../Model/d3_oxarticlelist_extsearch.php | 2 + .../Model/d3_oxrssfeed_extsearch.php | 2 + .../Model/d3_oxsearch_extsearch.php | 2 + .../Application/Model/d3_vendor_extsearch.php | 2 + src/Modules/Core/d3_oxutilsview_extsearch.php | 38 + .../PsCache/Core/d3_CacheCore_extsearch.php | 2 + src/bin/d3_extsearch_cron | 16 + src/build/Gruntfile.js | 13 + src/build/README.md | 64 + src/build/grunt/aliases.yaml | 28 + src/build/grunt/clean.js | 7 + src/build/grunt/copy.js | 11 + src/build/grunt/criticalcss.js | 35 + src/build/grunt/cssmin.js | 15 + src/build/grunt/jshint.js | 32 + src/build/grunt/less.js | 28 + src/build/grunt/postcss.js | 155 + src/build/grunt/sass.js | 27 + src/build/grunt/uglify.js | 34 + src/build/grunt/watch.js | 8 + src/build/origin/js/.jshintrc | 17 + src/build/origin/js/d3extsearch.js | 490 ++ src/build/origin/js/d3extsearch_ias.js | 91 + src/build/origin/js/d3extsearch_slider.js | 92 + src/build/origin/less/layout/default.less | 83 + src/build/origin/less/layout/filters.less | 175 + src/build/origin/less/layout/iasbox.less | 47 + src/build/origin/less/layout/suggest.less | 158 + .../origin/less/ressources/copyright.less | 12 + .../origin/less/ressources/includes.less | 3 + src/build/origin/less/ressources/mixins.less | 0 .../origin/less/ressources/variables.less | 43 + src/build/origin/less/styles_azure.less | 10 + src/build/origin/less/styles_flow.less | 10 + src/build/origin/less/styles_mobile.less | 10 + src/build/origin/less/themes/azure.less | 38 + src/build/origin/less/themes/flow.less | 136 + src/build/origin/less/themes/flow_lg.less | 22 + src/build/origin/less/themes/flow_md.less | 48 + src/build/origin/less/themes/flow_sm.less | 11 + src/build/origin/less/themes/flow_xs.less | 55 + src/build/origin/less/themes/mobile.less | 42 + src/build/origin/less/themes/slider.less | 237 + src/build/origin/sass/layout/default.scss | 83 + src/build/origin/sass/layout/filters.scss | 174 + src/build/origin/sass/layout/iasbox.scss | 47 + src/build/origin/sass/layout/suggest.scss | 158 + .../origin/sass/ressources/_variables.scss | 43 + .../origin/sass/ressources/copyright.scss | 12 + .../origin/sass/ressources/includes.scss | 2 + src/build/origin/sass/ressources/mixins.scss | 0 src/build/origin/sass/styles_wave.scss | 14 + src/build/origin/sass/themes/slider.scss | 237 + src/build/origin/sass/themes/wave.scss | 128 + src/build/origin/sass/themes/wave_lg.scss | 46 + src/build/origin/sass/themes/wave_md.scss | 85 + src/build/origin/sass/themes/wave_sm.scss | 3 + src/build/origin/sass/themes/wave_xl.scss | 25 + src/build/origin/sass/themes/wave_xs.scss | 76 + src/build/package-lock.json | 5341 +++++++++++++++++ src/build/package.json | 40 + src/d3metadata.php | 167 + src/menu.xml | 35 + src/metadata.php | 313 + src/out/.htaccess | 11 + .../admin/img/d3_extsearch_quicksearch.jpg | Bin 0 -> 41293 bytes src/out/img/extsearch_slider_left.png | Bin 0 -> 264 bytes src/out/img/extsearch_slider_right.png | Bin 0 -> 292 bytes src/out/src/bg/d3extsearch_close.gif | Bin 0 -> 95 bytes src/out/src/css/d3extsearch_azure.css | 624 ++ src/out/src/css/d3extsearch_azure.min.css | 21 + src/out/src/css/d3extsearch_flow.css | 853 +++ src/out/src/css/d3extsearch_flow.min.css | 21 + src/out/src/css/d3extsearch_mobile.css | 630 ++ src/out/src/css/d3extsearch_mobile.min.css | 21 + src/out/src/css/d3extsearch_wave.css | 744 +++ src/out/src/css/d3extsearch_wave.min.css | 22 + src/out/src/js/d3extsearch.min.js | 14 + src/out/src/js/d3extsearch_ias.min.js | 14 + src/out/src/js/d3extsearch_slider.min.js | 14 + src/out/src/js/jquery.ui.touch-punch.min.js | 11 + src/picture.png | Bin 0 -> 9565 bytes src/public/.htaccess | 11 + src/public/d3_extsearch_cron.php | 334 ++ src/public/d3_extsearch_response.php | 59 + src/setup/Events.php | 46 + src/setup/d3_extsearch_attribute2object.php | 112 + src/setup/d3_extsearch_semantic_synset.php | 104 + src/setup/d3_extsearch_semantic_term.php | 158 + src/setup/d3_extsearch_semanticstructure.php | 43 + src/setup/d3_extsearch_statisticlog.php | 194 + src/setup/d3_extsearch_update.php | 607 ++ src/tests/README.md | 57 + src/tests/additional.inc.php | 2 + src/tests/d3extsearch_config.php | 2 + .../assignedFilters/allMultiFilterTest.php | 2 + .../assignedFilters/allSingleFilterTest.php | 2 + .../attributeMultiFilterInjectionTest.php | 2 + .../attributeMultiFilterTest.php | 2 + .../attributeSingleFilterInjectionTest.php | 2 + .../attributeSingleFilterTest.php | 2 + .../categoryMultiFilterInjectionTest.php | 2 + .../categoryMultiFilterTest.php | 2 + .../categoryMultiFilterVariantsTest.php | 2 + .../categorySingleFilterInjectionTest.php | 2 + .../categorySingleFilterTest.php | 2 + .../categorySingleFilterVariantsTest.php | 2 + ...searchFilterQueriesIntegrationTestCase.php | 2 + .../assignedFilters/fieldIsFilterTest.php | 2 + .../assignedFilters/fieldLikeFilterTest.php | 2 + .../assignedFilters/indexFilterTest.php | 2 + .../manufacturerMultiFilterInjectionTest.php | 2 + .../manufacturerMultiFilterTest.php | 2 + .../manufacturerSingleFilterInjectionTest.php | 2 + .../manufacturerSingleFilterTest.php | 2 + .../assignedFilters/nofilterTest.php | 2 + .../priceArrayFilterInjectionTest.php | 2 + .../assignedFilters/priceArrayFilterTest.php | 2 + .../priceSliderFilterInjectionTest.php | 2 + .../assignedFilters/priceSliderFilterTest.php | 2 + .../vendorMultiFilterInjectionTest.php | 2 + .../assignedFilters/vendorMultiFilterTest.php | 2 + .../vendorSingleFilterInjectionTest.php | 2 + .../vendorSingleFilterTest.php | 2 + .../d3ExtsearchIntegrationTestCase.php | 2 + .../filterlists/attributeFilterTest.php | 2 + .../filterlists/categoryFilterTest.php | 2 + ...xtsearchFilterlistsIntegrationTestCase.php | 2 + .../filterlists/indexFilterTest.php | 2 + .../filterlists/manufacturerFilterTest.php | 2 + .../filterlists/priceFilterTest.php | 2 + .../filterlists/vendorFilterTest.php | 2 + .../queryExecute/alistQueryExecuteTest.php | 2 + ...searchFilterQueriesIntegrationTestCase.php | 2 + .../queryExecute/rssQueryExecuteTest.php | 2 + .../queryExecute/searchQueryExecuteTest.php | 2 + src/tests/phpunit.xml | 27 + .../Filters/d3ManufacturerFilterTest.php | 2 + .../Model/d3_querygeneratorTest.php | 2 + .../unit/Application/Model/d3semanticTest.php | 2 + .../Model/d3_oxarticlelist_extsearchTest.php | 2 + .../Model/d3_oxsearch_extsearchTest.php | 2 + src/tests/unit/d3ExtsearchUnitTestCase.php | 2 + 419 files changed, 45949 insertions(+) create mode 100644 .gitattributes create mode 100644 README.md create mode 100644 composer.json create mode 100644 docs/Features.txt create mode 100644 docs/daux/_index.md create mode 100644 docs/daux/assets/AttributeValueGroups.svg create mode 100644 docs/daux/changelog/010_Changelog.md create mode 100644 docs/daux/config.json create mode 100644 docs/daux/editions/010_Editionen.md create mode 100644 docs/daux/installation/002_Installation.md create mode 100644 docs/daux/installation/010_Anforderungen/010_Systemanforderungen.md create mode 100644 docs/daux/installation/010_Anforderungen/030_Kompatibilitaet_mit_anderen_Modulen.md create mode 100644 docs/daux/installation/010_Anforderungen/050_Vorbereitungen.md create mode 100644 docs/daux/installation/020_Neuinstallation/005_Vorbereitung.md create mode 100644 docs/daux/installation/020_Neuinstallation/020_Modul_hinzufuegen.md create mode 100644 docs/daux/installation/020_Neuinstallation/030_Verwendung_eigener_Themes.md create mode 100644 docs/daux/installation/020_Neuinstallation/040_Providerspezifische_Installation.md create mode 100644 docs/daux/installation/020_Neuinstallation/050_Modul_im_Shop_aktivieren.md create mode 100644 docs/daux/installation/020_Neuinstallation/060_Shopanpassungen_installieren.md create mode 100644 docs/daux/installation/020_Neuinstallation/070_TMP-Ordner_leeren.md create mode 100644 docs/daux/installation/020_Neuinstallation/080_Lizenz_eintragen.md create mode 100644 docs/daux/installation/020_Neuinstallation/090_Cronjob_einrichten.md create mode 100644 docs/daux/installation/020_Neuinstallation/100_Updatefaehigkeit.md create mode 100644 docs/daux/installation/020_Neuinstallation/_index.md create mode 100644 docs/daux/installation/030_Update/005_Updatedefinition.md create mode 100644 docs/daux/installation/030_Update/010_Modul_deaktivieren.md create mode 100644 docs/daux/installation/030_Update/020_Dateien_erneuern.md create mode 100644 docs/daux/installation/030_Update/030_Providerspezifische_Installation.md create mode 100644 docs/daux/installation/030_Update/040_Modulinformationen_aktualisieren.md create mode 100644 docs/daux/installation/030_Update/050_Shopanpassungen_installieren.md create mode 100644 docs/daux/installation/030_Update/060_TMP-Ordner_leeren.md create mode 100644 docs/daux/installation/030_Update/070_Lizenzschluessel_aktualisieren.md create mode 100644 docs/daux/installation/030_Update/080_Erweiterungen_anpassen.md create mode 100644 docs/daux/installation/035_Installationshinweise/010_Cachevermeidung.md create mode 100644 docs/daux/installation/040_Installationspruefung.md create mode 100644 docs/daux/installation/050_Schnellstart.md create mode 100644 docs/daux/installation/060_Deinstallation/010_Modulerweiterungen_deaktivieren_und_entfernen.md create mode 100644 docs/daux/installation/060_Deinstallation/020_Modul_deaktivieren.md create mode 100644 docs/daux/installation/060_Deinstallation/030_Modul_aus_der_Installation_entfernen.md create mode 100644 docs/daux/installation/060_Deinstallation/040_Dateien_loeschen.md create mode 100644 docs/daux/installation/060_Deinstallation/050_Datenbank_bereinigen.md create mode 100644 docs/daux/installation/060_Deinstallation/060_TMP-Ordner_leeren.md create mode 100644 docs/daux/manual/010_Inhalte.md create mode 100644 docs/daux/manual/013_Ergebnisanlyse.md create mode 100644 docs/daux/manual/015_optischeAnpassungen.md create mode 100644 docs/daux/manual/020_Optionale_Erweiterungen/010_phonetischer_Index.md create mode 100644 docs/daux/manual/030_Statistik.md create mode 100644 docs/daux/manual/040_Synonym-Editor.md create mode 100644 docs/daux/manual/045_korrespondierendeAttributswerte.md create mode 100644 docs/daux/manual/050_Logging.md create mode 100644 docs/daux/manual/060_externeEinstellungen.md create mode 100644 docs/daux/manual/070_Optimierungen.md create mode 100644 docs/daux/manual/080_Fragen.md create mode 100644 docs/daux/manual/090_Erweiterungsmoeglichkeiten.md create mode 100644 docs/daux/manual/100_technische_Erlaeuterungen/010_zusaetzliche_Formularfelder.md create mode 100644 docs/daux/manual/100_technische_Erlaeuterungen/020_MultiAttributFilter.md create mode 100644 docs/daux/manual/100_technische_Erlaeuterungen/030_Indexleiste.md create mode 100644 docs/daux/manual/100_technische_Erlaeuterungen/040_Relevanz.md create mode 100644 docs/daux/manual/100_technische_Erlaeuterungen/050_Phonetic-Cronjob.md create mode 100644 docs/daux/support/010_Hilfe-und-Support.md create mode 100644 docs/html/assets/AttributeValueGroups.svg create mode 100644 docs/html/changelog/Changelog.html create mode 100644 docs/html/editions/Editionen.html create mode 100644 docs/html/index.html create mode 100644 docs/html/installation/Anforderungen/Kompatibilitaet_mit_anderen_Modulen.html create mode 100644 docs/html/installation/Anforderungen/Systemanforderungen.html create mode 100644 docs/html/installation/Anforderungen/Vorbereitungen.html create mode 100644 docs/html/installation/Deinstallation/Dateien_loeschen.html create mode 100644 docs/html/installation/Deinstallation/Datenbank_bereinigen.html create mode 100644 docs/html/installation/Deinstallation/Modul_aus_der_Installation_entfernen.html create mode 100644 docs/html/installation/Deinstallation/Modul_deaktivieren.html create mode 100644 docs/html/installation/Deinstallation/Modulerweiterungen_deaktivieren_und_entfernen.html create mode 100644 docs/html/installation/Deinstallation/TMP-Ordner_leeren.html create mode 100644 docs/html/installation/Installation.html create mode 100644 docs/html/installation/Installationshinweise/Cachevermeidung.html create mode 100644 docs/html/installation/Installationspruefung.html create mode 100644 docs/html/installation/Neuinstallation/Cronjob_einrichten.html create mode 100644 docs/html/installation/Neuinstallation/Lizenz_eintragen.html create mode 100644 docs/html/installation/Neuinstallation/Modul_hinzufuegen.html create mode 100644 docs/html/installation/Neuinstallation/Modul_im_Shop_aktivieren.html create mode 100644 docs/html/installation/Neuinstallation/Providerspezifische_Installation.html create mode 100644 docs/html/installation/Neuinstallation/Shopanpassungen_installieren.html create mode 100644 docs/html/installation/Neuinstallation/TMP-Ordner_leeren.html create mode 100644 docs/html/installation/Neuinstallation/Updatefaehigkeit.html create mode 100644 docs/html/installation/Neuinstallation/Verwendung_eigener_Themes.html create mode 100644 docs/html/installation/Neuinstallation/Vorbereitung.html create mode 100644 docs/html/installation/Neuinstallation/index.html create mode 100644 docs/html/installation/Schnellstart.html create mode 100644 docs/html/installation/Update/Dateien_erneuern.html create mode 100644 docs/html/installation/Update/Erweiterungen_anpassen.html create mode 100644 docs/html/installation/Update/Lizenzschluessel_aktualisieren.html create mode 100644 docs/html/installation/Update/Modul_deaktivieren.html create mode 100644 docs/html/installation/Update/Modulinformationen_aktualisieren.html create mode 100644 docs/html/installation/Update/Providerspezifische_Installation.html create mode 100644 docs/html/installation/Update/Shopanpassungen_installieren.html create mode 100644 docs/html/installation/Update/TMP-Ordner_leeren.html create mode 100644 docs/html/installation/Update/Updatedefinition.html create mode 100644 docs/html/manual/Ergebnisanlyse.html create mode 100644 docs/html/manual/Erweiterungsmoeglichkeiten.html create mode 100644 docs/html/manual/Fragen.html create mode 100644 docs/html/manual/Inhalte.html create mode 100644 docs/html/manual/Logging.html create mode 100644 docs/html/manual/Optimierungen.html create mode 100644 docs/html/manual/Optionale_Erweiterungen/phonetischer_Index.html create mode 100644 docs/html/manual/Statistik.html create mode 100644 docs/html/manual/Synonym-Editor.html create mode 100644 docs/html/manual/externeEinstellungen.html create mode 100644 docs/html/manual/korrespondierendeAttributswerte.html create mode 100644 docs/html/manual/optischeAnpassungen.html create mode 100644 docs/html/manual/technische_Erlaeuterungen/Indexleiste.html create mode 100644 docs/html/manual/technische_Erlaeuterungen/MultiAttributFilter.html create mode 100644 docs/html/manual/technische_Erlaeuterungen/Phonetic-Cronjob.html create mode 100644 docs/html/manual/technische_Erlaeuterungen/Relevanz.html create mode 100644 docs/html/manual/technische_Erlaeuterungen/zusaetzliche_Formularfelder.html create mode 100644 docs/html/support/Hilfe-und-Support.html create mode 100644 docs/html/themes/d3/css/d3.css create mode 100644 docs/html/themes/d3/css/theme-blue.min.css create mode 100644 docs/html/themes/d3/css/theme-blue.min.css.map create mode 100644 docs/html/themes/d3/fonts/robotoslab-bold.eot create mode 100644 docs/html/themes/d3/fonts/robotoslab-bold.svg create mode 100644 docs/html/themes/d3/fonts/robotoslab-bold.ttf create mode 100644 docs/html/themes/d3/fonts/robotoslab-bold.woff create mode 100644 docs/html/themes/d3/fonts/robotoslab-bold.woff2 create mode 100644 docs/html/themes/d3/fonts/robotoslab-light.eot create mode 100644 docs/html/themes/d3/fonts/robotoslab-light.svg create mode 100644 docs/html/themes/d3/fonts/robotoslab-light.ttf create mode 100644 docs/html/themes/d3/fonts/robotoslab-light.woff create mode 100644 docs/html/themes/d3/fonts/robotoslab-light.woff2 create mode 100644 docs/html/themes/d3/fonts/robotoslab-regular.eot create mode 100644 docs/html/themes/d3/fonts/robotoslab-regular.svg create mode 100644 docs/html/themes/d3/fonts/robotoslab-regular.ttf create mode 100644 docs/html/themes/d3/fonts/robotoslab-regular.woff create mode 100644 docs/html/themes/d3/fonts/robotoslab-regular.woff2 create mode 100644 docs/html/themes/d3/img/favicon.png create mode 100644 docs/html/themes/d3/js/README.md create mode 100644 docs/html/themes/d3/js/daux.js create mode 100644 docs/html/themes/d3/js/fontawesome-all.js create mode 100644 docs/html/themes/d3/js/highlight.pack.js create mode 100644 docs/html/themes/d3/js/html5shiv-3.7.3.min.js create mode 100644 docs/html/themes/d3/js/jquery-1.11.3.min.js create mode 100644 docs/html/tipuesearch/tipuesearch.css create mode 100644 docs/html/tipuesearch/tipuesearch.js create mode 100644 docs/html/tipuesearch/tipuesearch_content.json create mode 100644 docs/migration_to_OXID_6.x.sql create mode 100644 docs/readme.txt create mode 100644 src/.htaccess create mode 100644 src/Application/Controller/Admin/Popups/d3_attribute2category_extsearch_ajax.php create mode 100644 src/Application/Controller/Admin/Popups/d3_attribute2manufacturer_extsearch_ajax.php create mode 100644 src/Application/Controller/Admin/Popups/d3_attribute2vendor_extsearch_ajax.php create mode 100644 src/Application/Controller/Admin/Popups/d3_attribute_extsearch_ajax_abstract.php create mode 100644 src/Application/Controller/Admin/Reports/d3_extsearch_report_base.php create mode 100644 src/Application/Controller/Admin/Reports/d3_extsearch_report_hitless.php create mode 100644 src/Application/Controller/Admin/Reports/d3_extsearch_report_mostsearches.php create mode 100644 src/Application/Controller/Admin/d3_attribute_extsearch.php create mode 100644 src/Application/Controller/Admin/d3_category_extsearch.php create mode 100644 src/Application/Controller/Admin/d3_cfg_extsearch.php create mode 100644 src/Application/Controller/Admin/d3_cfg_extsearch_licence.php create mode 100644 src/Application/Controller/Admin/d3_cfg_extsearch_list.php create mode 100644 src/Application/Controller/Admin/d3_cfg_extsearch_main.php create mode 100644 src/Application/Controller/Admin/d3_cfg_extsearch_navigation.php create mode 100644 src/Application/Controller/Admin/d3_cfg_extsearch_plugins.php create mode 100644 src/Application/Controller/Admin/d3_cfg_extsearch_quicksearch.php create mode 100644 src/Application/Controller/Admin/d3_cfg_extsearch_statistik.php create mode 100644 src/Application/Controller/Admin/d3_cfg_extsearchlog.php create mode 100644 src/Application/Controller/Admin/d3_cfg_extsearchlog_list.php create mode 100644 src/Application/Controller/Admin/d3_cfg_extsearchstat.php create mode 100644 src/Application/Controller/Admin/d3_cfg_extsearchstat_list.php create mode 100644 src/Application/Controller/Admin/d3_cfg_extsearchsyneditor.php create mode 100644 src/Application/Controller/Admin/d3_cfg_extsearchsyneditor_list.php create mode 100644 src/Application/Controller/Admin/d3_cfg_extsearchsyneditor_main.php create mode 100644 src/Application/Controller/Admin/d3_cfg_extsearchsyneditor_manage.php create mode 100644 src/Application/Controller/d3_extsearch_cron_response.php create mode 100644 src/Application/Controller/d3_extsearch_response.php create mode 100644 src/Application/Controller/d3_xlist_extsearch.php create mode 100644 src/Application/Model/Filters/d3AttributeFilter.php create mode 100644 src/Application/Model/Filters/d3CategoryFilter.php create mode 100644 src/Application/Model/Filters/d3FieldIsFilter.php create mode 100644 src/Application/Model/Filters/d3FieldLikeFilter.php create mode 100644 src/Application/Model/Filters/d3Filter.php create mode 100644 src/Application/Model/Filters/d3FilterInterface.php create mode 100644 src/Application/Model/Filters/d3FilterList.php create mode 100644 src/Application/Model/Filters/d3IndexFilter.php create mode 100644 src/Application/Model/Filters/d3ManufacturerFilter.php create mode 100644 src/Application/Model/Filters/d3PriceFilter.php create mode 100644 src/Application/Model/Filters/d3VendorFilter.php create mode 100644 src/Application/Model/d3_extsearch_statisticlog.php create mode 100644 src/Application/Model/d3_extsearch_synset.php create mode 100644 src/Application/Model/d3_extsearch_term.php create mode 100644 src/Application/Model/d3_oxutils_extsearch.php create mode 100644 src/Application/Model/d3_phonetic_de.php create mode 100644 src/Application/Model/d3_phonetic_de_voc.php create mode 100644 src/Application/Model/d3_querygenerator.php create mode 100644 src/Application/Model/d3_search.php create mode 100644 src/Application/Model/d3_search_generator.php create mode 100644 src/Application/Model/d3_semantic.php create mode 100644 src/Application/Model/d3extsearch_attribute2object.php create mode 100644 src/Application/translations/de/d3_extsearch_lang.php create mode 100644 src/Application/translations/en/d3_extsearch_lang.php create mode 100644 src/Application/views/admin/blocks/d3_extsearch_article_extend.tpl create mode 100644 src/Application/views/admin/blocks/d3_extsearch_attribute_main.tpl create mode 100644 src/Application/views/admin/blocks/d3_extsearch_category_main.tpl create mode 100644 src/Application/views/admin/blocks/d3_extsearch_content_main.tpl create mode 100644 src/Application/views/admin/de/d3_extsearch_lang.php create mode 100644 src/Application/views/admin/de/module_options.php create mode 100644 src/Application/views/admin/en/d3_extsearch_lang.php create mode 100644 src/Application/views/admin/en/module_options.php create mode 100644 src/Application/views/admin/tpl/d3_attribute_extsearch.tpl create mode 100644 src/Application/views/admin/tpl/d3_category_extsearch.tpl create mode 100644 src/Application/views/admin/tpl/d3_cfg_extsearch_main.tpl create mode 100644 src/Application/views/admin/tpl/d3_cfg_extsearch_main_sortanalysis.tpl create mode 100644 src/Application/views/admin/tpl/d3_cfg_extsearch_navigation.tpl create mode 100644 src/Application/views/admin/tpl/d3_cfg_extsearch_plugins.tpl create mode 100644 src/Application/views/admin/tpl/d3_cfg_extsearch_quicksearch.tpl create mode 100644 src/Application/views/admin/tpl/d3_cfg_extsearch_statistik.tpl create mode 100644 src/Application/views/admin/tpl/d3_cfg_extsearchsyneditor_list.tpl create mode 100644 src/Application/views/admin/tpl/d3_cfg_extsearchsyneditor_main.tpl create mode 100644 src/Application/views/admin/tpl/d3_cfg_extsearchsyneditor_manage.tpl create mode 100644 src/Application/views/admin/tpl/d3_extsearch_plugin.tpl create mode 100644 src/Application/views/admin/tpl/d3_extsearch_popup.tpl create mode 100644 src/Application/views/admin/tpl/d3_togglegroup_extsearch.tpl create mode 100644 src/Application/views/admin/tpl/popups/d3_attribute_extsearch_ajax.tpl create mode 100644 src/Application/views/admin/tpl/reports/d3_extsearch_report_hitless.tpl create mode 100644 src/Application/views/admin/tpl/reports/d3_extsearch_report_mostsearches.tpl create mode 100644 src/Application/views/blocks/layout/d3_extsearch_css.tpl create mode 100644 src/Application/views/blocks/layout/d3_extsearch_js.tpl create mode 100644 src/Application/views/blocks/page/list/d3extsearch_alist_filters.tpl create mode 100644 src/Application/views/blocks/page/list/d3extsearch_alist_noartfilters.tpl create mode 100644 src/Application/views/blocks/page/search/d3_inc_ext_search.tpl create mode 100644 src/Application/views/blocks/widget/header/d3_extsearch_headersearch.tpl create mode 100644 src/Application/views/blocks/widget/header/d3_extsearch_searchfield.tpl create mode 100644 src/Application/views/blocks/widget/locator/d3_list_disabledefaultfilters.tpl create mode 100644 src/Application/views/blocks/widget/product/d3_extsearch_listitemgrid_flowtitlebox.tpl create mode 100644 src/Application/views/blocks/widget/product/d3_extsearch_listitemgrid_title.tpl create mode 100644 src/Application/views/blocks/widget/product/d3_extsearch_listiteminfogrid_title.tpl create mode 100644 src/Application/views/blocks/widget/product/d3_extsearch_listitemline_description.tpl create mode 100644 src/Application/views/blocks/widget/product/d3_extsearch_listitemline_flowtitlebox.tpl create mode 100644 src/Application/views/blocks/widget/product/d3_extsearch_listitemline_selections.tpl create mode 100644 src/Application/views/tpl/azure/d3_inc_ext_search.tpl create mode 100644 src/Application/views/tpl/azure/d3extsearch_alist_filters.tpl create mode 100644 src/Application/views/tpl/d3_ddoevisualcmsadmin_extsearch.tpl create mode 100644 src/Application/views/tpl/d3_ext_search_filter.tpl create mode 100644 src/Application/views/tpl/d3_ext_search_highlight.tpl create mode 100644 src/Application/views/tpl/d3_ext_search_suggestsearch.tpl create mode 100644 src/Application/views/tpl/filterelements/attribute.tpl create mode 100644 src/Application/views/tpl/filterelements/category.tpl create mode 100644 src/Application/views/tpl/filterelements/inc/multibuttons.tpl create mode 100644 src/Application/views/tpl/filterelements/jqslider.tpl create mode 100644 src/Application/views/tpl/filterelements/manufacturer.tpl create mode 100644 src/Application/views/tpl/filterelements/priceselector.tpl create mode 100644 src/Application/views/tpl/filterelements/vendor.tpl create mode 100644 src/Application/views/tpl/flow/d3_list_filters.tpl create mode 100644 src/Application/views/tpl/flow/d3_search_contents.tpl create mode 100644 src/Application/views/tpl/flow/d3_search_filters.tpl create mode 100644 src/Application/views/tpl/mobile/d3_inc_ext_search.tpl create mode 100644 src/Application/views/tpl/mobile/d3extsearch_alist_filters.tpl create mode 100644 src/Core/Smarty/Plugins/function.d3_extsearch_highlight.php create mode 100644 src/Core/d3_extsearch_conf.php create mode 100644 src/IntelliSenseHelper.php create mode 100644 src/Modules/Application/Component/d3_oxcmp_basket_extsearch.php create mode 100644 src/Modules/Application/Component/d3_oxcmp_utils_extsearch.php create mode 100644 src/Modules/Application/Component/d3_oxwarticlebox_extsearch.php create mode 100644 src/Modules/Application/Component/d3_oxwarticledetails_extsearch.php create mode 100644 src/Modules/Application/Controller/Admin/d3_article_list_extsearch.php create mode 100644 src/Modules/Application/Controller/Admin/d3_ddoevisualcmsadmin_extsearch.php create mode 100644 src/Modules/Application/Controller/d3_alist_extsearch.php create mode 100644 src/Modules/Application/Controller/d3_details_extsearch.php create mode 100644 src/Modules/Application/Controller/d3_ext_search.php create mode 100644 src/Modules/Application/Controller/d3_manufacturerlist_extsearch.php create mode 100644 src/Modules/Application/Controller/d3_oxlocator_extsearch.php create mode 100644 src/Modules/Application/Controller/d3_rss_extsearch.php create mode 100644 src/Modules/Application/Controller/d3_vendorlist_extsearch.php create mode 100644 src/Modules/Application/Model/d3_attribute_extsearch.php create mode 100644 src/Modules/Application/Model/d3_basemodel_extsearch.php create mode 100644 src/Modules/Application/Model/d3_category_extsearch.php create mode 100644 src/Modules/Application/Model/d3_manufacturer_extsearch.php create mode 100644 src/Modules/Application/Model/d3_oxarticle_phonetic.php create mode 100644 src/Modules/Application/Model/d3_oxarticlelist_extsearch.php create mode 100644 src/Modules/Application/Model/d3_oxrssfeed_extsearch.php create mode 100644 src/Modules/Application/Model/d3_oxsearch_extsearch.php create mode 100644 src/Modules/Application/Model/d3_vendor_extsearch.php create mode 100644 src/Modules/Core/d3_oxutilsview_extsearch.php create mode 100644 src/Modules/PsCache/Core/d3_CacheCore_extsearch.php create mode 100644 src/bin/d3_extsearch_cron create mode 100644 src/build/Gruntfile.js create mode 100644 src/build/README.md create mode 100644 src/build/grunt/aliases.yaml create mode 100644 src/build/grunt/clean.js create mode 100644 src/build/grunt/copy.js create mode 100644 src/build/grunt/criticalcss.js create mode 100644 src/build/grunt/cssmin.js create mode 100644 src/build/grunt/jshint.js create mode 100644 src/build/grunt/less.js create mode 100644 src/build/grunt/postcss.js create mode 100644 src/build/grunt/sass.js create mode 100644 src/build/grunt/uglify.js create mode 100644 src/build/grunt/watch.js create mode 100644 src/build/origin/js/.jshintrc create mode 100644 src/build/origin/js/d3extsearch.js create mode 100644 src/build/origin/js/d3extsearch_ias.js create mode 100644 src/build/origin/js/d3extsearch_slider.js create mode 100644 src/build/origin/less/layout/default.less create mode 100644 src/build/origin/less/layout/filters.less create mode 100644 src/build/origin/less/layout/iasbox.less create mode 100644 src/build/origin/less/layout/suggest.less create mode 100644 src/build/origin/less/ressources/copyright.less create mode 100644 src/build/origin/less/ressources/includes.less create mode 100644 src/build/origin/less/ressources/mixins.less create mode 100644 src/build/origin/less/ressources/variables.less create mode 100644 src/build/origin/less/styles_azure.less create mode 100644 src/build/origin/less/styles_flow.less create mode 100644 src/build/origin/less/styles_mobile.less create mode 100644 src/build/origin/less/themes/azure.less create mode 100644 src/build/origin/less/themes/flow.less create mode 100644 src/build/origin/less/themes/flow_lg.less create mode 100644 src/build/origin/less/themes/flow_md.less create mode 100644 src/build/origin/less/themes/flow_sm.less create mode 100644 src/build/origin/less/themes/flow_xs.less create mode 100644 src/build/origin/less/themes/mobile.less create mode 100644 src/build/origin/less/themes/slider.less create mode 100644 src/build/origin/sass/layout/default.scss create mode 100644 src/build/origin/sass/layout/filters.scss create mode 100644 src/build/origin/sass/layout/iasbox.scss create mode 100644 src/build/origin/sass/layout/suggest.scss create mode 100644 src/build/origin/sass/ressources/_variables.scss create mode 100644 src/build/origin/sass/ressources/copyright.scss create mode 100644 src/build/origin/sass/ressources/includes.scss create mode 100644 src/build/origin/sass/ressources/mixins.scss create mode 100644 src/build/origin/sass/styles_wave.scss create mode 100644 src/build/origin/sass/themes/slider.scss create mode 100644 src/build/origin/sass/themes/wave.scss create mode 100644 src/build/origin/sass/themes/wave_lg.scss create mode 100644 src/build/origin/sass/themes/wave_md.scss create mode 100644 src/build/origin/sass/themes/wave_sm.scss create mode 100644 src/build/origin/sass/themes/wave_xl.scss create mode 100644 src/build/origin/sass/themes/wave_xs.scss create mode 100644 src/build/package-lock.json create mode 100644 src/build/package.json create mode 100644 src/d3metadata.php create mode 100644 src/menu.xml create mode 100644 src/metadata.php create mode 100644 src/out/.htaccess create mode 100644 src/out/admin/img/d3_extsearch_quicksearch.jpg create mode 100644 src/out/img/extsearch_slider_left.png create mode 100644 src/out/img/extsearch_slider_right.png create mode 100644 src/out/src/bg/d3extsearch_close.gif create mode 100644 src/out/src/css/d3extsearch_azure.css create mode 100644 src/out/src/css/d3extsearch_azure.min.css create mode 100644 src/out/src/css/d3extsearch_flow.css create mode 100644 src/out/src/css/d3extsearch_flow.min.css create mode 100644 src/out/src/css/d3extsearch_mobile.css create mode 100644 src/out/src/css/d3extsearch_mobile.min.css create mode 100644 src/out/src/css/d3extsearch_wave.css create mode 100644 src/out/src/css/d3extsearch_wave.min.css create mode 100644 src/out/src/js/d3extsearch.min.js create mode 100644 src/out/src/js/d3extsearch_ias.min.js create mode 100644 src/out/src/js/d3extsearch_slider.min.js create mode 100644 src/out/src/js/jquery.ui.touch-punch.min.js create mode 100644 src/picture.png create mode 100644 src/public/.htaccess create mode 100644 src/public/d3_extsearch_cron.php create mode 100644 src/public/d3_extsearch_response.php create mode 100644 src/setup/Events.php create mode 100644 src/setup/d3_extsearch_attribute2object.php create mode 100644 src/setup/d3_extsearch_semantic_synset.php create mode 100644 src/setup/d3_extsearch_semantic_term.php create mode 100644 src/setup/d3_extsearch_semanticstructure.php create mode 100644 src/setup/d3_extsearch_statisticlog.php create mode 100644 src/setup/d3_extsearch_update.php create mode 100644 src/tests/README.md create mode 100644 src/tests/additional.inc.php create mode 100644 src/tests/d3extsearch_config.php create mode 100644 src/tests/integration/assignedFilters/allMultiFilterTest.php create mode 100644 src/tests/integration/assignedFilters/allSingleFilterTest.php create mode 100644 src/tests/integration/assignedFilters/attributeMultiFilterInjectionTest.php create mode 100644 src/tests/integration/assignedFilters/attributeMultiFilterTest.php create mode 100644 src/tests/integration/assignedFilters/attributeSingleFilterInjectionTest.php create mode 100644 src/tests/integration/assignedFilters/attributeSingleFilterTest.php create mode 100644 src/tests/integration/assignedFilters/categoryMultiFilterInjectionTest.php create mode 100644 src/tests/integration/assignedFilters/categoryMultiFilterTest.php create mode 100644 src/tests/integration/assignedFilters/categoryMultiFilterVariantsTest.php create mode 100644 src/tests/integration/assignedFilters/categorySingleFilterInjectionTest.php create mode 100644 src/tests/integration/assignedFilters/categorySingleFilterTest.php create mode 100644 src/tests/integration/assignedFilters/categorySingleFilterVariantsTest.php create mode 100644 src/tests/integration/assignedFilters/d3ExtsearchFilterQueriesIntegrationTestCase.php create mode 100644 src/tests/integration/assignedFilters/fieldIsFilterTest.php create mode 100644 src/tests/integration/assignedFilters/fieldLikeFilterTest.php create mode 100644 src/tests/integration/assignedFilters/indexFilterTest.php create mode 100644 src/tests/integration/assignedFilters/manufacturerMultiFilterInjectionTest.php create mode 100644 src/tests/integration/assignedFilters/manufacturerMultiFilterTest.php create mode 100644 src/tests/integration/assignedFilters/manufacturerSingleFilterInjectionTest.php create mode 100644 src/tests/integration/assignedFilters/manufacturerSingleFilterTest.php create mode 100644 src/tests/integration/assignedFilters/nofilterTest.php create mode 100644 src/tests/integration/assignedFilters/priceArrayFilterInjectionTest.php create mode 100644 src/tests/integration/assignedFilters/priceArrayFilterTest.php create mode 100644 src/tests/integration/assignedFilters/priceSliderFilterInjectionTest.php create mode 100644 src/tests/integration/assignedFilters/priceSliderFilterTest.php create mode 100644 src/tests/integration/assignedFilters/vendorMultiFilterInjectionTest.php create mode 100644 src/tests/integration/assignedFilters/vendorMultiFilterTest.php create mode 100644 src/tests/integration/assignedFilters/vendorSingleFilterInjectionTest.php create mode 100644 src/tests/integration/assignedFilters/vendorSingleFilterTest.php create mode 100644 src/tests/integration/d3ExtsearchIntegrationTestCase.php create mode 100644 src/tests/integration/filterlists/attributeFilterTest.php create mode 100644 src/tests/integration/filterlists/categoryFilterTest.php create mode 100644 src/tests/integration/filterlists/d3ExtsearchFilterlistsIntegrationTestCase.php create mode 100644 src/tests/integration/filterlists/indexFilterTest.php create mode 100644 src/tests/integration/filterlists/manufacturerFilterTest.php create mode 100644 src/tests/integration/filterlists/priceFilterTest.php create mode 100644 src/tests/integration/filterlists/vendorFilterTest.php create mode 100644 src/tests/integration/queryExecute/alistQueryExecuteTest.php create mode 100644 src/tests/integration/queryExecute/d3ExtsearchFilterQueriesIntegrationTestCase.php create mode 100644 src/tests/integration/queryExecute/rssQueryExecuteTest.php create mode 100644 src/tests/integration/queryExecute/searchQueryExecuteTest.php create mode 100644 src/tests/phpunit.xml create mode 100644 src/tests/unit/Application/Model/Filters/d3ManufacturerFilterTest.php create mode 100644 src/tests/unit/Application/Model/d3_querygeneratorTest.php create mode 100644 src/tests/unit/Application/Model/d3semanticTest.php create mode 100644 src/tests/unit/Modules/Application/Model/d3_oxarticlelist_extsearchTest.php create mode 100644 src/tests/unit/Modules/Application/Model/d3_oxsearch_extsearchTest.php create mode 100644 src/tests/unit/d3ExtsearchUnitTestCase.php diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..4c56cb8 --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.tpl text eol=lf \ No newline at end of file diff --git a/README.md b/README.md new file mode 100644 index 0000000..5feb168 --- /dev/null +++ b/README.md @@ -0,0 +1,15 @@ +# D³ erweiterte Suche für OXID eShop +fehlertolerante Suche mit zusätzlichen Filter- und Anzeigemöglichkeiten + +## Systemanforderungen: +- installierter OXID eShop +- PHP-Version, für die Installationspakete verfügbar sind +- Installation via Composer +- ionCubeLoader +- D3 Modul Connector + +Die jeweils geforderten Versionen und sonstige Anforderungen entnehmen Sie bitte der Dokumentation im docs-Verzeichnis dieses Paketes. + +## Installation: + +Eine detaillierte Installationsanleitung finden Sie im docs-Verzeichnis dieses Pakets. \ No newline at end of file diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..ae1eec6 --- /dev/null +++ b/composer.json @@ -0,0 +1,50 @@ +{ + "name": "d3/extsearch", + "description": "Extended search module for OXID eShop.", + "type": "oxideshop-module", + "keywords": [ + "oxid", + "modules", + "eShop", + "d3", + "search" + ], + "authors": [ + { + "name": "D3 Data Development (Inh. Thomas Dartsch)", + "email": "info@shopmodule.com", + "homepage": "https://www.d3data.de", + "role": "Owner" + } + ], + "support": { + "email": "support@shopmodule.com" + }, + "homepage": "https://www.oxidmodule.com/", + "license": [ + "proprietary" + ], + "suggest": { + "oxid-projects/statistics-module": "allows the graphical evaluation of statistics" + }, + "extra": { + "oxideshop": { + "source-directory": "/src", + "target-directory": "d3/extsearch" + } + }, + "require": { + "php": "^8.0", + "ext-sourceguardian": "*", + "oxid-esales/oxideshop-ce": "6.8 - 6.10", + "d3/modcfg": "^6.0", + "d3/oxid-sql-logger": "^1.2.2", + "splitbrain/php-cli": "^1.1" + }, + "autoload": { + "psr-4": { + "D3\\Extsearch\\": "../../../source/modules/d3/extsearch" + } + }, + "bin": ["src/bin/d3_extsearch_cron"] +} diff --git a/docs/Features.txt b/docs/Features.txt new file mode 100644 index 0000000..88c4af5 --- /dev/null +++ b/docs/Features.txt @@ -0,0 +1,114 @@ +"erweiterte Suche" + +Diese Modulversion stellt folgende Funktionen zur Verfgung: + +- Kategorie-, Marken- und Lieferantenlisten + Aus allen Suchtreffern werden die betreffenden Kategorien und Marken aufgelistet, + durch Links darauf knnen die Suchergebnisse eingeschrnkt werden + Optionen: + - Listen knnen alphabetisch bzw. nach Treffern sortiert werden + - Listen knnen ab X Eintrgen eingeschrnkt werden + - Listen knnen bei nur einem Eintrag ausgeblendet werden + - Kategorien knnen einzeln von Verwendung ausgeschlossen werden + - Nicht-Hauptkategorien knnen von der Verwendung ausgeschlossen werden (Version 6.2) + - Filter auch in Kategorien, Hersteller- sowie Markenlisten (Version 5.5) + - Mehrfachauswahl der zu filternden Listen und Werte (Version 5.6) + +- fehlertolerante Suche nach Semantic (Version 3.10) + Es werden Suchtreffer gezeigt, die einen hnlichen Sinn haben. + - Editor fr Semantic-Suche (Version 3.11) + +- fehlertolerante Suche nach Phonetic mit Singular/Plural-Abgleich + Es werden Suchtreffer gezeigt, die einen hnlichen Klang haben. + Optionen: + - diese Treffer werden nur angezeigt, wenn sonst keine Ergebnisse gefunden werden + - diese Treffer werden auch angezeigt, wenn nur wenige Ergebnisse gefunden werden (Anzahl definierbar) + - Definierung eigener fr die Suche genutzter Felder mglich + - auch bei kurzen Suchworten wird eine vereinfachte hnlichkeitssuche verwendet (Version 3.8) + - Phoentic-Syntax mit und ohne Vokalverwendung einstellbar (Version 5.4) + +- automatische Priorittensortierung + Je nachdem,in welchem Datenbankfeld die Suchbegriffe gefunden werden, sind die Treffer sortiert. + Artikel knnen in 3 Stufen nach Ihrer Wichtigkeit sortiert werden um die Position in Suchergebnissen zu beeinflussen (Version 3.10) + Die Relevanz unterscheidet sich weiterhin, ob nur Wortteile oder das einzeln stehende Wort gefunden wird (Version 5.2) + +- Direktsuche + Wenn in der Trefferliste nur ein Artikel oder Text gefunden wird, wechselt der Shop direkt zur Detailseite des gefundenen Artikels bzw. des Textes. + +- Schnellsuche (Suchergebnisse schon whrend der Eingabe als ToolTip) + Bei der Eingabe einzelner Zeichen des Suchwortes werden im Hintergrund schon die ersten Ergebnisse gelistet + und per Ajax dargestellt. Durch Anklicken der angezeigten Artikel wechselt man auf die Detailseite des Artikels. + Optionen: + - durch Templatesteuerung sind gestalterisch und inhaltlich keine Grenzen gesetzt. Denkbar wre zum Beispiel die Anzeige der Artikelbilder + oder auch die Mglichkeit der Direktbestellung in den Ergebnissen der Schnellsuche + - sucht nach Variantenartikeln + - in Verbindung mit der Suche nach Artikelnummern eine praktikable Mglichkeit, ber Katalogauswahlen Bestellungen anzulegen + - bedienbar mit Tastatur und Zeigegert + - auch fehlertolerant (Version 3.7) + - zeigt optional auch Kategorien, Marken und Lieferanten (Version 3.12) + +- Variantensuche + - Statt nur nach regulren Artikeln zu suchen, kann damit auch nach Variantenartikeln gesucht werden. Diese Option funktioniert auch in Verbindung + mit der fehlertoleranten Suche + - es ist einstellbar, ob die Variante selbst oder deren Vaterartikel gezeigt werden soll + +- Kategorie-, Marken-, Lieferantensuche + - Wird eine dem Suchbegriff benannte Kategorie, Marke oder Lieferant gefunden, werden deren Artikel in die Trefferliste aufgenommen (optional ab Version 3.9) + - Kategorien knnen einzeln aus dieser Suche ausgeschlossen werden (Version 5.4) + +- Contentsuche + definierte CMS-Bausteine knnen durchsucht werden + +- Attributsfilterung + - Treffer knnen nach zugeordneten Attributen ausgefiltert werden (Version 3.7) + - Filter auch in Kategorien, Hersteller- sowie Markenlisten (Version 5.5) + - Mehrfachauswahl der zu filternden Attributen und Werten (Version 5.1) + - filterbare Attribute knnen Kategorie-, Hersteller- und Lieferantenspezifisch aktiviert werden (Version 6.2) + +- Preisspannenselektion mglich (Version 3.9) + - Filter auch in Kategorien, Hersteller- sowie Markenlisten (Version 5.5) + - Anzeige als statische Spannen ber Dropdown als auch + - Anzeige als jQuery-Schieberegler + +- Trefferhervorhebung + Die gesuchten Begriffe werden (sofern angezeigt) in den Treffern optisch hervorgehoben. Durch Templatesteuerung sind gestalterisch und funktionell + keine Grenzen gesetzt + +- Browsereinbindung + Der Shop bindet sich in aktuellen Browser als Suchmaschine mit eigenem Namen und Icon ein. Er bietet die One-Click-Installation sowie die + Installation per Link an, EE: separate Einbindung fr jeden Shopmandanten + +- Mehrsprachigkeit + Konfigurieren Sie das Modul fr jede Ihrer Shopsprachen separat. Weiterhin kann fr jede Sprache ein eigener Artikelindex angelegt werden, so da die Suche + sprachoptimiert funktioniert + +- weitere Suchfelder sind definierbar und mit unterschiedlichen Suchtypen whlbar + +- fr Trefferliste wird eine Indexliste erstellt, Treffer knnen nach Anfangsbuchstaben ausgewhlt werden + +- zeichengenaue Suche + +- interaktive Suche bei Doppelklick auf oder Markieren eines oder mehrerer Worte + +- Suchsyntax (Aus- und Einschlu von Suchbegriffen) mglich + +- Suchhistorie + Erfolglose und erfolgreiche Suchanfragen werden fr eine individuelle Nachbearbeitung mitgeloggt. + +- Artikelsuche im Admin nach Varianten mglich (Version 3.8) + +- Individualisierung und Erweiterung mglich, da Standard-Shopmodul + +- Verwendung ohne Templateanpassung im originalen OXID Azure- und Mobile-Theme + +- statistische Auswertung der Suchanfragen + +- Untersttzung fr diese Themes: + - OXID Azure + - OXID Flow (ab Version 5.6.1) + - konfigurierbares Theme-Mapping fr abweichende Themes (ab Version 5.6.2.1) + +- Filter nach Verfgbarkeit (in zuknftigen Versionen) + + +Alle Funktionen sind ber einen eigenen Bereich im Shopadmin zu verwalten. \ No newline at end of file diff --git a/docs/daux/_index.md b/docs/daux/_index.md new file mode 100644 index 0000000..d922133 --- /dev/null +++ b/docs/daux/_index.md @@ -0,0 +1,2 @@ +Weitere Informationen zum Modul **{$modulename}** finden Sie in unserem Shop: +[https://www.oxidmodule.com/OXID-eShop/Module/Erweiterte-Suche-fuer-Oxid-PE.html](https://www.oxidmodule.com/OXID-eShop/Module/Erweiterte-Suche-fuer-Oxid-PE.html) diff --git a/docs/daux/assets/AttributeValueGroups.svg b/docs/daux/assets/AttributeValueGroups.svg new file mode 100644 index 0000000..0818c7d --- /dev/null +++ b/docs/daux/assets/AttributeValueGroups.svg @@ -0,0 +1,2 @@ + +
Wertegruppe "Grün"
[Not supported by viewer]
Wertegruppe "Blau"
[Not supported by viewer]
Türkis
Türkis
Aquamarinblau
Aquamarinblau
helles Seegrün
helles Seegrün
Hellgrün
Hellgrün
Gelbgrün
Gelbgrün
Grün
[Not supported by viewer]
Blaugrün
Blaugrün
Himmelblau
Himmelblau
Blau
Blau
\ No newline at end of file diff --git a/docs/daux/changelog/010_Changelog.md b/docs/daux/changelog/010_Changelog.md new file mode 100644 index 0000000..c8ea0e7 --- /dev/null +++ b/docs/daux/changelog/010_Changelog.md @@ -0,0 +1,639 @@ +--- +title: Changelog +--- + +## 7.1.0.0 (2022-04-29) +### Added +- zusätzliche Templateblöcke zur einfacheren Erweiterbarkeit eingefügt +- zusätzliche CSS-Defintionen zur einfacheren Formatierbarkeit eingefügt + +### Changed +- "Filter abwählen" findet Checkboxen in tiefer verschachtelten HTML-Elementen +- noscript Abwahlbutton wird nur an relevanten Auswahlmöglichkeiten gezeigt +- "nicht wählbare" Attribute werden zu "nicht sicher wählbaren" Attributen + - Wenn aktiviert, sind diese nun vom Shopbesucher zur weiteren Filterung nutzbar. In seltenen Fällen kann es jedoch damit zu ungültigen Filterkombinationen führen. +- Reihenfolge der wählbaren und der "nicht sicher wählbaren" Attribute angepasst +- "nicht zugeordnet"-Filter sind auswählbar + +--- + +## 7.0.1.0 (2022-03-03) +### Added +- Schnellsuche startet Abfrage erst nach 3 Buchstaben (Anzahl ist konfigurierbar) +- Attribut-zu-Objekt-Einträge werden automatisch gelöscht, wenn Attribut oder Objekt selbst gelöscht wird +- Anzahl zum Filter gefunde Artikel kann ausgeblendet werden +- optional können Varianten auch ohne verwendeten Filter gezeigt werden +- Tests ergänzt +- installierbar in OXID 6.4 + +### Changed +- Variantenartikel verwenden Kategoriezuordnung vom Elternartikel +- Debug-Modus für Schnellsuche erweitert +- Variantenartikel werden nur gesucht, wenn Filter verwendet werden (Suche und Kategorien) + +### Fixed +- Parameterhandling korrigiert +- Timeout in Schnellsuche korrigiert +- fehlerhaftes Buttonlayout der Filter korrigiert +- falsche Artikelanzahl bei Variantensuche in Kategorien verhindert Seitennavigation +- Filter können bei Variantensuche in Kategorien angewandt werden +- falsche Artikelanzahl in gefilterten Kategorien korrigiert + +--- + +## 7.0.0.0 (2021-04-30) +### Added +- installierbar in OXID 6.3 + +### Changed +- Datenbankfeldtypen von Bit zu Tinyint wegen Migrationsschwierigkeiten geändert +- Tests angepasst + +### Fixed +- fehlerhafte Querygenerierung korrigiert + +--- + +## 6.6.2.0 (2021-04-30) +### Added +- installierbar in OXID 6.2.4 +- zusätzliche Tests eingefügt +- Cachechecks sind auch in Community und Professional Editions nutzbar +- Controller steuern Cachestatus im psCache Modul + +### Changed +- Sonderzeichenoptimierung in Abfrage für semantische Suche +- fehlende Dateiregsitrierungen eingefügt +- Build Pakete aktualisiert +- + +### fixed +- fehlende Sortierdefinition wird leer gesetzt, um Ausführungsfehler zu vermeiden + +--- + +## 6.6.1.2 (2021-03-03) +### Fixed +- Queryfehler durch unzugeordnetes oxtimestamp-Feld korrigiert +- fehlerhaften Tabellennamengenerierung bei Abfrage in Nicht-Standardsprache korrigiert +- zu große Artikelanzahl bei mit ähnlichen Artikeln aufgefüllte Trefferliste korrigiert + +### Changed +- phonetischer Hash wird ausschließlich in der Datenbank generiert, um Differenzen zwischen PHP- und mySQL-Verhalten zu vermeiden (führte zu ungültigen Updateanforderungen) +- Phonetischer Index wird nicht generiert, wenn kein Generator eingestellt ist +- Bevorzugen der Filtermehrfachauswahl, wenn auch Einfachauswahl gesetzt ist (verhindert ungültige Wertkombinationen) +- Admin-Icon verwendet feste Breite + +--- + +## 6.6.1.1 (2020-12-09) +### Fixed +- fehlerhaften Tabellennamengenerierung bei Abfrage in Nicht-Standardsprache korrigiert + +--- + +## 6.6.1.0 (2020-12-03) +### Added +- installierbar in OXID 6.2.3 + +### Changed +- fehlende Übersetzungsbausteine in Sprache Englisch nachgetragen + +### Fixed +- Indexgenerierung läuft in manchen Fällen in eine Endlosschleife +- fehlerhaften Feldnamen bei Datenbankabfrage in Phonetic Light korrigiert +- Testlauf verwendet keinen Debugmode + +--- + +## 6.6.0.1 (2020-11-09) +### Changed +- unnötige Redirect-Prävention im Falle eines Einzeltreffers beim Debug-Modus entfernt + +### Fixed +- ungültige Tabellenname/Feldname-Kombination in SQL Query korrigiert + +--- + +## 6.6.0.0 (2020-11-06) +### Added +- Wartungsaufgaben über CLI aufrufbar +- Cronjobaufruf generiert fehlende oxartextends-Einträge selbst +- CLI komplett übersetzt und übersetzbar +- Status der Indexgenerierung wird aus Inhalten anstelle des letzten Generierungsdatums ermittelt +- Metadaten mehrsprachig verfügbar + +### Fixed +- Theme-Weichen für passende Produktdarstellung im Wave-Theme korrigiert + +--- + +## 6.5.2.2 (2020-09-29) +### Changed +- Suggest: Submit bei markiertem Eintrag sendet Formular ab, anstatt den Eintrag zu zeigen +- JavaScripts verwenden Strict Mode +### Fixed +- optimiertes Decoding verhindert SQL Injections + +--- + +## 6.5.2.1 (2020-08-20) +### Fixed +- fehlerhaften BaseConfKey getauscht + +--- + +## 6.5.2.0 (2020-07-20) +### Changed +- unnötige Maskierung des Suchbegriffes entfernt + - führte bei Verwendung von Sonderzeichen zu fehlerhaften Ergebnissen +- Build-Komponenten aktualisiert + - vermeidet Verwendung unsicherer Pakete +- Benennung des Source-Verzeichnisses wird automatisch ermittelt + - so kann dieses Verzeichnis auch anders benannt oder an anderer Stelle abgelegt sein +- kleine Layoutanpassungen im Flow- und Wavetheme +- Dokumentation aktualisiert +### Fixed +- fehlende Datenbankfelder in Abfrage ergänzt + - führte in Verwendung der Indexbuchstaben in bestimmter Konstellation zu Fehlern bei der Abfrage +- bei entsprechender Einstellung werden leere Kategorien nicht in Filtern gezeigt + +--- + +## 6.5.1.0 (2020-05-04) +### Added +- Artikellisten (Kategorien, Hersteller, Lieferanten) können ebenfalls Varianten zeigen und zur Filterung verwenden +### Fixed +- ungültige Filterkombinationen zeigen in Artikellisten entsprechende Hinweise und ermöglichen ein Zurücksetzen der gesetzten Filter + +--- + +## 6.5.0.0 (2020-03-31) +### Added +- Kompatibilität zu OXID 6.2 hergestellt +- strukturierte Daten für Suchaktion eingefügt +- erzeuge JS-Fehler, wenn kein Eingabeelement für Suggest gefunden wird +- Build-Umgebung aktualisiert +- Ergebnis-Feld-Analyse in Dokumentation aufgenommen +### Changed +- verhindere wählbarer Attributfilter von Variantenartikeln in Kategorieansicht +- ändere JS Event-Eigenschaft +### Fixed +- Datenbankabfragen für abgewählte Attributsfilter korrigiert +- doppelt selektrierte Felder in Datenbankabfrage korrigiert + +--- + +## 6.4.0.0 (2019-10-21) +### Added +- Support für OXID Wave Theme +- Critical CSS (above the fold) eingefügt (erfordert Generierung im finalen Shop durch Grunt) +### Changed +- Query-Manipulation für die Fälle angepasst, in denen weitere count(*) aus anderen Tabellen außer oxarticles abgefragt werden +- Grunt-Module aktualisiert +- CSS-Optimierung auf PostCSS und NanoCSS umgestellt +- Anordnung der Produktboxen im MD-Viewport des Flow-Themes optimiert +- JavaScript-Dateien erhalten Lizenz-Header +- Slider-CSS in Theme-CSS integriert, spart Requests beim Seitenaufbau +- Generierung des Critical CSS (above the fold) auf criticalcss Plugin umgestellt +### Fixed +- fehlerhaft verwendete HTML-Element-IDs in Klassen korrigert + +--- + +## 6.3.1.0 (2019-09-24) +### Changed +- gefilterte Seiten werden nicht im Dynamic Content Cache aufgenommen +- Debug-Ausgaben von der Browser-Ausgabe zur Browser-Konsole verschoben +- Suggest (Schnellsuche) verwendet ArticleList-Objekt statt natives Array +### Fixed +- setze passende Leerwerte, wenn jeweiliger Filter nicht aktiviert ist, vermeidet warning-Meldungen im Log + +--- + +## 6.3.0.0 (2019-07-22) +### Added +- korrespondierende Attributwerte implementiert +### Changed +- Response-Script ermittelt Pfad der Bootstrap-Datei dynamisch +- Abfrage-Veränderungen für Aggrosoft WaWi-Modul-Anpassungen optimiert +- Unit-Tests angepasst +### Fixed +- fehlende Datei im Dateiregister nachgetragen + +--- + +## 6.2.1.1 (2019-06-04) +### Added +- Dokumentation um Erklärung zur Cache-Verhinderung ergänzt +- Offset-Option für Suggest-Fenster integriert +### Changed +- feste Position des Suggest-Fensters im Azure-Theme geändert +### Fixed +- fehlende Styles für Azure-Theme nachgetragen +- fehlende Netto-/Bruttopreisumrechnung in Artikellisten korrigiert + +--- +## 6.2.1.0 (2019-04-25) +### Added +- Suggest-Suche verhindert die Anzeige veralteter Anfrageergebnisse + +--- +## 6.2.0.1 (2019-03-21) +### Added +- Build-Ressourcen als `export-ignore` markiert, können bei Bedarf mit `--prefer-source` nachgeladen werden +### Changed +- Dokumentation bereinigt +- Einstellungen für Variantensuche wird auch in Artikelnummernsuche berücksichtigt +- semantische Begriffe werden mit Platzhaltern gesucht - Synonymbestandteile wurden nicht gefunden +### Fixed +- Formularparameter werden encoded +- unnötiges UTF8-Decoding entfernt - verhinderte Schnelltreffer mit Sonderzeichen +- phonetischer Index wird schon bei Neuanlage der Artikel generiert +- Notices auf Grund "undefinierten Index" behoben + +--- +## 6.2.0.0 (2018-12-14) +### Added +- individuelle Zuordnung der Filterattribute zu Kategorien ermöglicht +- Kategoriefilter verwendet nur den Artikeln zugeordnete Hauptkategorien +- Optionen werden im Admin ausgeblendet, wenn Feature deaktiviert ist +- Tests hinzugefügt +### Changed +- Korrektur für Verwendung von hochpräzisen Preisangaben (vielfache Nachkommastellen) integriert +- Preisslider verwendet Formatierung der aktuell gewählten Währung +### Fixed +- unvollständige Feldliste in Abfragen der RSS-Seiten ergänzt + +--- +## 6.1.3.0 (2018-11-12) +### Added +- zusätzliche Formatieroptionen zur Suggest-Suche hinzugefügt +- Suggest-Suche wird nur im MD- und LG-Viewport gezeigt +- prepared statements integriert +- Preisslider erhält zufällige ID für mögliche Mehrfachimplementierung +- Relevanzberechnung berücksichtigt auch Synonyme +- Synonyme werden auch zur Ermittlung von Herstellern und Lieferanten verwendet +### Changed +- Analyse-Tool verwendet Klartext-Bezeichnung für Wertespalten +- Preisslider für Brutto/Nettopreise optimiert +- verwende oxescape für zeichensatzabhängiges Maskieren +- Modul verwendet ausschließlich Loglevel-Konstanten +- Dokumentation zum HTML-Format geändert +- Adminhilfetexte aus Dokumentation in den Adminbereich verschoben +### Fixed +- Exception in Analysetool bei inaktivem Modul vermieden +- Datenbankstruktur korrigiert, um Artikel kopieren zu ermöglichen +- Sidebar wird nur hinzugefügt, wenn Modul aktiv ist +- Query-Generierung bei Verwendung des oxtimestamp-Feldes als Sortierkriterium angepasst +- Klartext-Klassennamen zu Namespaces konvertiert +- Anforderungsdefinition angepasst +- doppelte TPL-Blocknamen aufgelöst + +--- +## 6.1.2.0 (2018-08-30) +### Added +- installierbar in OXID Compilation 6.1 +- critical CSS (above the fold) - Generierung und Implementierung +- Anzeigeformat der Filter ist einstellbar +### Changed +- erweitert nur existierende Klassen +### Fixed +- #7384: Bug: Anzeige aller Attribute des Shops als Filter in Artikelliste +- #7471: falsche Preisspannen im Slider bei Eingabe von Nettopreisen +- Mehrfachauswahl der Filter war nur mit Attributfilteroption nutzbar + +--- +## 6.1.1.0 (2018-02-20) +### Added +- installierbar in OXID eShop 6.1 +- Query-Cache-Prüfung integriert +### Changed +- Syntaxgenerierung der Datenbank-Queries optimiert +### Fixed +- auf leeren Artikellistenseiten werden Filter nicht generiert +- Datenbank-Abfragen für CMS-Texte korrigiert + +--- +## 6.1.0.0 (2017-12-15) +### Added +- Installation via Composer +- Neueinträge bei Synonymen verwenden die Admin-Anmeldesprache + +--- +## [6.0.0.0] (2017-11-24) +### Added +- Synonym-Wortgruppen werden auch bei Einzelwortsuche gefunden und als Einzelworte in die Suchparameter eingefügt +- Weiterleitungen sind für jeden Datentyp einzeln einstellbar +- Filter werden (sofern verfügbar) in der Sidebar angezeigt (flow-Theme) +- CSS-Generierung auf Less umgestellt, ermöglicht Erstellung individueller CSS-Dateien +### Changed +- Umarbeitung für OXID 6 +- Layout der Suggest-Suche angepasst + +--- +## [5.6.4.2] (2017-10-20) +- Fehler beim Auftrennen kombinierter Suchbegriffe bei der Verwendung der "Ähnlichkeitssuche für Kurzworte" und Multibyte-Zeichen korrigiert +- leere Hersteller- und Lieferantenlisten korrigiert (#6617) +- fehlerhafte Artikellisten bei Artikellistenergänzung korrigiert (#6812) + +--- +## 5.6.4.1 (2017-07-25) +- fehlende Sortierung der Suchergebnisse korrigiert + +--- +## 5.6.4.0 (2017-07-10) +- sinngleiche Suche wird auch bei Suche in Kategorienamen verwendet +- Synonym-Wortgruppen werden auch bei Einzelwortsuche gefunden und als Einzelworte in die Suchparameter eingefügt +- zusätzliche Templateblöcke für Filter integriert +- fehlende Template-Parameter ergänzt +- Preisschiebegregler für Nettopreise angepasst +- Attributfilterbereinigung optimiert +- Preisstepberechnung korigiert +- Mehrfachfilter werden in Artikellisten +- Bugfix: gewählte Mehrfachfilter werden in Artikellisten-Seiten zurückgegeben + +--- +## [5.6.3.0] (2017-03-14) +- isextsearch-Parameter wird nur bei verwendeter Filterung gesetzt +- mehrfache Kategoriefilter auch in Suchergebnissen verfügbar +- Support für Content-Einstellungen im Visual CMS-Modul (Version 1.0.0) (#6103) +- fehlenden Kategoriefilter in Artikellistenfilter nachgetragen +- Testlizenzen enthalten Artikellistenfilter +- kleine Fehler in der Query-Generierung korrigiert +- Exception bei deaktiviertem Modul korrigiert + +--- +## [5.6.2.1] (2016-10-21) +- Locator auf der Detailansicht korrigiert, wenn Artikel aus direkter Anzeige einer 1-Treffer-Liste stammt (#5554) +- korrigiert: Mehrfachfilter wurden ausgeblendet, wenn Auswahl nur 1 Treffer enthielt (#5552) +- modulspezifische Theme-Mapping-Variablen eingefügt + +--- +## 5.6.2.0 (2016-10-10) +- verwendet Theme-Mapping +- Schnellsuche-Anfragen werden ebenfalls ins Log geschrieben +- .htaccess-Beschränkungen für Apache 2.4 angepasst +- gemeinsame Erweiterung der *list-Klassen aufgelöst +- Funktionsaufrufe für Ajax-Calls geändert +- als "deprecated" gekennzeichnete Methodenaufrufe ersetzt +- Scripts für passende Darstellung des Adminmenütitels im Browser angepasst +- fehlende Template-Erweiterungen für "Flow" nachgetragen +- fehlende Componenten-Klasse in oxwarticledetails-Widget ergänzt +- falschen Formularparameter korrigiert +- Bugfix für fehlerhafte Datenbankabfrage bei aktivierter Variantensuche +- undokumentierte Parameter im Handbuch nachgetragen + +--- +## [5.6.1.0] (2016-08-10) +- Kompatibilität mit OXID-eShop Version 4.10.x / 5.3.x hergestellt +- Template-Anpassungen für "Flow" eingefügt + +--- +## 5.6.0.1 (2017-07-10) + +--- +## [5.6.0.0] (2016-06-27) +- Marken- und Lieferantenfilter sind nun mehrfach wählbar + +--- +## [5.5.4.0] (2016-03-14) +- Filter für Preiskategorien eingefügt +- Artikellisten verwenden Sortierung der Zuordnungstabellen +- Artikelposition innerhalb der Detailseiten-Listennavigation angepasst +- Installation korrigiert + +--- +## [5.5.3.1] (2016-02-17) +- Bugfix für fehlerhafte Datenbankabfrage bei Suche ohne definierte Sortierung + +--- +## [5.5.3.0] (2016-02-16) +- alternative Sortierung bei identischen Relevanzwerten einstellbar +- versteckte Kategorien werden in Attributfilter berücksichtigt +- Attributfilter speichert Auswahl sprachabhängig +- Direktsuche mit leerem Suchparameter korrigiert +- Suggestsuche bei aktiviertem EE-Backend-Cache korrigiert + +--- +## [5.5.2.0] (2016-01-21) +- semantische Datenbank bereinigt +- semantische Suche verwendet gewählte Sprache zur Auswahl der Alternativbegriffe +- Datenbankabfragen optimiert +- modulspezifische Logging-Auswertung eingefügt +- statistische Auswertungen (ohne grafische Auswertung)auch für EE-Installationen verfügbar gemacht +- Handbuch überarbeitet +- Relevanz-Abfrage wird bei leerer Suchabfrage nicht erstellt +- 4.7 / 5.0-Templates entfernt +- 4.9 / 5.2-Templates eingefügt +- vermeide Überladung der Listennavigation bei deaktiviertem aList-Filter +- fehlende PageId in Response-Klasse nachgetragen +- fehlende Template-Blocks nachgetragen +- Hilfelinks korrigiert +- fehlerhafte BreadCrumb auf Artikeldetailseite bei Verwendung des aListFilters korrigiert +- selektive Funktion des Preisschiebereglers in Markenlisten korrigiert +- überlaufender Preisschieberegler bei identischer Selektion korrigiert +- leere Artikellisten bei 0-bis-0-Euro Preisselektion korrigiert +- unvollständige Listennavigation korrigiert + +--- +## [5.5.1.1] (2015-12-21) +- RSS-Feed-Controller auf neue Filter angepasst +- vermeidet Warnungen bei unvollständig übergebenen Formularen + +--- +## [5.5.1.0] (2015-12-14) +- Preisschieberegler verwendet als Auswahl nur den Preisbereich gefundener Artikel +- Preisschieberegler behält initialen Preisbereich für Deselektion auch bei weiterer Einschränkung bei +- Preisfilter verwendet bei Varianten nicht deren 0-Euro-Preis, sondern den Preis der Elternartikel +- Semantic-Tabellen werden in automatischer Installation angelegt -> Semantic auch ohne Lexikon nutzbar +- Synonym-Editor legt Neueinträge passend an +- semantische Begriffe werden optimaler gruppiert +- fehlende JavaScript-Variable bei Nichtanzeige des Preisschiebereglers korrigiert +- Fehlervermeidung bei inaktivem Modul +- Navigationsparamter korrigiert +- Groß-/Kleinschreibung in Synonym-Tabellen korrigiert +- Relevanz-Analyse-Popup ist vergrößerbar + +--- +## 5.5.0.1 (2015-09-01) +- optimierte Zeichensatzbehandlung innerhalb der Suggestsuche +- Artikellistenfilterung verwendet Schnellsortierung der Kategorien +- optionale Parameter der Suggest-Suchlinks deaktivierbar (config-Parameter) +- Fehler bei Extraktion der Log-Parameter in Statistik korrigiert +- vermeidet Warnungen bei unvollständig übergebenen Formularen + +--- +## [5.5.0.0] (2015-08-27) +- Filter können in Kategorie-, Hersteller- und Markenansicht genutzt werden +- bei Attributen können mehrere Filterwerte gewählt werden +- Filter-Löschen-Option eingefügt +- selektierte Attributsfilter werden intern gespeichert, keine Parameterübergabe nötig +- Erweiterbarkeit verbessert (TPL-Block, CSS) +- Mobile-Support auch für Shopversion 4.7 / 5.0 + +--- +## [5.4.0.3] (2015-08-27) +- unvollständig zusammengeführte Templates ergänzt + +--- +## [5.4.0.2] (2015-08-05) +- fehlende Navigationsparameter für Startseite nachgetragen +- Sortierrichtung für Hersteller- und Lieferantenfilter korrigiert +- Inhaltssuche wird nur mit gesetztem Suchparameter ausgeführt +- ModCfg-Prüf-Blöcke korrigiert +- Datenbankabfrage für attributgefilterte Variantenliste korrigiert +- fehlendes getSortId() für ältere Shopversionen nachgetragen + +--- +## [5.4.0.1] (2015-07-14) +- Groß-/Kleinschreibung der Felder der semantischen Datenbank korrigiert + +--- +## [5.4.0.0] (2015-02-04) +- Kategorien können von Verwendung in Suche ausgeschlossen werden +- zusätzlicher Phonetic-Generator für besseres Handling mit Vokalen integriert +- phonetischer Index optimiert +- JavaScript-Code auf bessere Kompatibilität angepasst +- Template der Schnellsuche ist über Template-Block erweiterbar +- kleine Fehler in Abfrage-Generierung behoben + +--- +## 5.3.0.0 +- Unterstützung für OXID Mobile Theme hinzugefügt +- Querygenerierung in Statistikanzeige korrigiert +- Kompatibilität für eShop 4.7.0 + 4.7.1 erweitert + +--- +## 5.2.1.0 +- Attributsortierung in Filtern ermöglicht +- Indexgenerierung prüft vorab auf konsistente oxarticle-oxartextends-Daten +- Hauptsynonyme sind nun auch löschbar +- "Einfügungen und Auslassungen erlauben" auch bei kurzen Suchbegriffen ermöglicht +- explizite Prüfung auf inaktiven Vaterartikel integriert +- kleinere Textkorrekturen und Logikfehler beseitigt + +--- +## 5.2.0.2 +- korrigiert: Abfragegenerierung ohne vorgegebene Artikelsortierung +- korrigiert: inaktives Modul erzeugt Fehler bzgl. mangelnder Ressourcen + +--- +## 5.2.0.1 +- Precheck aktualisiert +- für 4.7.0 + 4.7.1: fehlende getSortIdent-Methode eingefügt +- fehlende Tabellendefinition in Query nachgetragen + +--- +## 5.2.0.0 +- Wortrelevanz wird in Relevanzermittlung zusätzlich berücksichtigt +- Ähnlichkeitssuche berücksichtigt Mehrzahlformen auch bei kurzen Suchworten + +--- +## 5.1.1.1 +- fehlerhafte Datenbankabfrage bei Kombination von "Variantensuche" und Feldern in "oxartextends" korrigiert + +--- +## 5.1.1.0 +- optionales Popup während des Suchvorgangs eingefügt +- DirectShow verwendet nur suchbare Artikel +- Kompatibilität zu OXID eShop 4.8 / 5.0 hergestellt + +--- +## 5.1.0.2 +- Datenbankabfragen korrigiert + +--- +## 5.1.0.1 +- Phonetic-Generator tickerte falsch +- Semantic-Editor war aufgrund undefinierter Sortierung nicht aufrufbar +- fehlendes Template korrigiert +- Attributsortierung geändert + +--- +## 5.1.0.0 +- Attribute können mehrfach gefiltert werden +- nicht zu Attributen zugeordnete Artikel können gefiltert werden +- Templates wurden für einfachere Erweiterung mit Blöcken ausgerüstet +- kleinere Bugfixes + +--- +## 5.0.0.1 +- Query für Attributlisten korrigiert +- Smarty-Variable in Schnellsuche ergänzt +- nicht ausführbarer Debug-Modus unter mySQL 5.5 korrigiert + +--- +## 5.0.0.0 +- Performanceoptimierung bei großen Suchergebnislisten +- Optimierung auf Cluster +- Statistikauswertungen erweitert +- Suchsyntax optimiert + +--- +## 4.0.2.0 +- eigene Suchformularfelder suchen nun auch in Bereich (von / bis-Suche) +- kleiner Fehler bei der Verarbeitung der eigenen Suchformularfelder beseitigt + +--- +## 4.0.1.1 +- OXID-Bug in Artikelsortierung behoben + +--- +## 4.0.1.0 +- automatische Installation korrigiert +- Suchparameter bei Direktanzeige korrigiert +- zusätzliche Modul-Aktiv-Prüfungen integriert +- Treffer in Suggest-List zeigt auf Shopmandant +- "einfügen/auslassen"-Abfrage korrigiert +- Erweiterbarkeit verbessert +- Similar-Light-Suche korrigiert +- Ergebnis-Feld-Analyse eingefügt +- fehlerhafte Suchbegriff-Verknüpfung korrigiert +- fehlerhafte Hersteller-Relevanz korrigiert + +--- +## 4.0.0.1 +- Korrektur auf neue SQL-Query-Syntax + +--- +## 4.0.0.0 +- Umsetzung in neuer Dateistruktur des OXID 4.7 (PE) / 5.0 (EE) + +--- +## 3.12.1 +- geänderte Logik für OXID 4.6.4: Navigationslinks der Suchergebnisseite enthielten unzureichende Parameter + +--- +## 3.12.0 +- bei gruppierten Variantenartikeln wird Kategoriefilter vom Vaterartikel generiert +- bei gruppierten Variantenartikeln wird Preisfilter von ungruppierten Varianten generiert, + Anzahl wird auf Grund differierender Treffermengen am Filter ausgeblendet +- Eingabe des Markennamens im Suchfeld findet Markenartikel (analog Kategorienamen, auch für Lieferanten) +- Schnellsuche findet auch Contents, Marken, Lieferanten und Kategorien +- Artikel der Schnellsuche sind nach Relevanz sortiert +- Direktsuche findet auch Marken und Lieferanten +- Fehler in Ermittlung der phonetischen Länge des Suchbegriffs gefixt +- alte DB-Feldbezeichnungen im Semantic-Editor verhindert Speicherung -> behoben +- Existenzprüfung "getSortingSql" integriert +- getDb()-Syntax-Änderungen aus 4.6.0 eingefügt +- Semantic prüft auch auf leeres Term-Level (nicht nur NULL) +- Templates bis Shopversion 4.6.X + +[6.0.0.0]: https://blog.oxidmodule.com/archives/676-Neues-Upgrade-fuer-Modul-Erweiterte-Suche-auf-Version-6.0.0.0.html +[5.6.4.2]: https://blog.oxidmodule.com/archives/665-Neuer-Patch-fuer-Modul-Erweiterte-Suche-auf-Version-5.6.4.2.html +[5.6.3.0]: https://blog.oxidmodule.com/archives/644-Neues-Update-fuer-Modul-Erweiterte-Suche-auf-Version-5.6.3.0.html +[5.6.2.1]: https://blog.oxidmodule.com/archives/630-Neue-Version-fuer-Modul-Erweiterte-Suche-5.6.2.1.html +[5.6.1.0]: https://blog.oxidmodule.com/archives/614-Neues-Update-fuer-Modul-Erweiterte-Suche-auf-Version-5.6.1.0.html +[5.6.0.0]: https://blog.oxidmodule.com/archives/605-Neues-Update-fuer-Modul-Erweiterte-Suche-auf-Version-5.6.0.0.html +[5.5.4.0]: https://blog.oxidmodule.com/archives/588-Neues-Update-fuer-Modul-Erweiterte-Suche-auf-Version-5.5.4.0.html +[5.5.3.1]: https://blog.oxidmodule.com/archives/578-Neuer-Patch-fuer-Modul-Erweiterte-Suche-auf-Version-5.5.3.1.html +[5.5.3.0]: https://blog.oxidmodule.com/archives/577-Neues-Update-fuer-Modul-Erweiterte-Suche-auf-Version-5.5.3.0.html +[5.5.2.0]: https://blog.oxidmodule.com/archives/571-Neues-Update-fuer-Modul-Erweiterte-Suche-auf-Version-5.5.2.0.html +[5.5.1.1]: https://blog.oxidmodule.com/archives/565-Neuer-Patch-fuer-Modul-Erweiterte-Suche-auf-Version-5.5.1.1.html +[5.5.1.0]: https://blog.oxidmodule.com/archives/563-Neues-Update-fuer-Modul-Erweiterte-Suche-auf-Version-5.5.1.0.html +[5.5.0.0]: https://blog.oxidmodule.com/archives/537-Neue-Versionen-5.5.0.0-und-5.5.0.1-fuer-Modul-Erweiterte-Suche.html +[5.4.0.3]: https://blog.oxidmodule.com/archives/536-Neuer-Patch-fuer-Modul-Erweiterte-Suche-auf-Version-5.4.0.3.html +[5.4.0.2]: https://blog.oxidmodule.com/archives/534-Neuer-Patch-fuer-Modul-Erweiterte-Suche-auf-Version-5.4.0.2.html +[5.4.0.1]: https://blog.oxidmodule.com/archives/524-Neuer-Patch-fuer-Modul-Erweiterte-Suche-auf-Version-5.4.0.1.html +[5.4.0.0]: https://blog.oxidmodule.com/archives/499-Neues-Update-fuer-Modul-Erweiterte-Suche-auf-Version-5.4.0.0.html diff --git a/docs/daux/config.json b/docs/daux/config.json new file mode 100644 index 0000000..8ba91d5 --- /dev/null +++ b/docs/daux/config.json @@ -0,0 +1,74 @@ +{ + "title": " erweiterte Suche", + "moduleversion": "7.1.0.0", + "titledesc": "für den Oxid eShop", + "author": "D³ Data Development", + "moduledate": "29.04.2022", + "editors": "", + "tagline": "", + "image": "", + "ignore": { + "files": [], + "folders": [".idea"] + }, + "live": { + "clean_urls": true + }, + "html": { + "theme": "d3", + "breadcrumbs": true, + "breadcrumb_separator": "Chevrons", + "toggle_code": false, + "date_modified": true, + "date_modified_format": "d.m.Y", + "float": false, + "inherit_index": true, + "auto_landing": true, + + "links": { + "Shop": "https://www.oxidmodule.com" + }, + + "powered_by": "" + }, + "languages": { + "editions": "Editionen", + "installation": "Installation", + "manual": "Handbuch", + "changelog": "Changelog", + "support": "Support" + }, + "processor": "d3processor", + "language": "de", + "strings": { + "de": { + "CodeBlocks_title": "Code-Blöcke", + "CodeBlocks_hide": "Aus", + "CodeBlocks_below": "Unterhalb", + "CodeBlocks_inline": "Linear", + "CodeBlocks_show": "Code-Blöcke anzeigen", + "Search_placeholder": "Suchen...", + "Link_previous": "Zurück", + "Link_next": "Weiter", + "Edit_on": "Bearbeiten bei :name:", + "View_on_github": "Bei GitHub anzeigen", + "View_documentation": "Dokumentation anzeigen", + "Table_of_contents": "Inhaltsverzeichnis", + "author": "Autor", + "moduledate": "Stand", + "version": "Version", + "editors": "Bearbeiter", + "selectversion": "Version wechseln" + } + }, + "variables": { + "modulename" : " erweiterte Suche", + "menutitle" : " erweiterte Suche", + "modulefolder" : "extsearch", + "metadataident" : "d3_extsearch", + "modcfgident" : "d3_extsearch", + "composerident" : "d3/extsearch" + }, + "versionselector": false, + "versiondirectoryindex": 2 +} diff --git a/docs/daux/editions/010_Editionen.md b/docs/daux/editions/010_Editionen.md new file mode 100644 index 0000000..83c9f15 --- /dev/null +++ b/docs/daux/editions/010_Editionen.md @@ -0,0 +1,17 @@ +--- +title: Editionen +--- + +Das Modul **{$modulename}** erhalten Sie in verschiedenen Editionen mit teilweise unterschiedlichem Funktionsumfang. + +Aktuell verfügbare Editionsbereiche sind: + +- Art der Lizenzierung: Der Unterschied liegt in der Art der Lizenzberechnung und der Verfügbarkeit zufünftiger Updates. + - Jahreslizenz + - Kauflizenz + +- Artikellistenfilter: Der Artikellistenfilter stellt die aus den Suchergebnissen bekannten Filter auch in Kategorien, Hersteller- und Lieferantenlisten zur Verfügung. + - ohne Artikellistenfilter + - mit Artikellistenfilter + +Alle Editionsbereiche lassen sich miteinander kombinieren. Mit Ausnahme der Lizenzierungsart lassen sich die Optionen zur Laufzeit ohne Installationsaufwand anpassen. \ No newline at end of file diff --git a/docs/daux/installation/002_Installation.md b/docs/daux/installation/002_Installation.md new file mode 100644 index 0000000..ffa02e6 --- /dev/null +++ b/docs/daux/installation/002_Installation.md @@ -0,0 +1,10 @@ +--- +title: Installation / Update / Deinstallation +--- + +* [Anforderungen](installation/010_Anforderungen/010_Systemanforderungen.md) +* [Neuinstallation](installation/020_Neuinstallation/005_Vorbereitung.md) +* [Update](installation/030_Update/005_Updatedefinition.md) +* [Deinstallation](installation/060_Deinstallation/010_Modulerweiterungen_deaktivieren_und_entfernen.md) + +Bei Bedarf bieten wir Ihnen auch gern die Installation des Moduls in Ihrem Shop an. Geben Sie uns bitte unter den unter [Hilfe und Support](support/010_Hilfe-und-Support.md) genannten Kontaktdaten Bescheid. diff --git a/docs/daux/installation/010_Anforderungen/010_Systemanforderungen.md b/docs/daux/installation/010_Anforderungen/010_Systemanforderungen.md new file mode 100644 index 0000000..b15208a --- /dev/null +++ b/docs/daux/installation/010_Anforderungen/010_Systemanforderungen.md @@ -0,0 +1,28 @@ +--- +title: Systemanforderungen +--- + +* PHP Version + * 7.3.x bis 8.0.x +* PHP Decoder + * installierter ionCube Loader +* Shopeditionen + * OXID eShop Community Edition (CE) + * OXID eShop Professional Edition (PE) + * OXID eShop Enterprise Edition (EE) + * OXID eShop B2B Edition +* Shopversionen + * OXID eShop in Compilation Version + * 6.3.x + * 6.4.x +* Themes + * wave + * flow + * azure + * mobile +* D3 Modul-Connector ([kostenfrei bei D3 erhältlich](https://www.oxidmodule.com/connector/)) ab Version 6.0.0.0 +* Installation via [Composer](https://getcomposer.org) + +Beachten Sie, dass die Ihnen vorliegende Modulversion entsprechend für Ihre genutzte PHP-Version sowie dem auf Ihrem Server vorhandenen Decoder (**ionCube Loader**) kompatibel ist. Im Zweifelsfall kontaktieren Sie uns und nennen den für Ihren Shop genutzten Decoder und die PHP-Version. + +Kontrollieren Sie bitte auch, ob diese Modulversion für die von Ihnen eingesetzte Shopedition (Professional Edition (PE) oder Enterprise Edition (EE)) ausgelegt ist. diff --git a/docs/daux/installation/010_Anforderungen/030_Kompatibilitaet_mit_anderen_Modulen.md b/docs/daux/installation/010_Anforderungen/030_Kompatibilitaet_mit_anderen_Modulen.md new file mode 100644 index 0000000..430deb9 --- /dev/null +++ b/docs/daux/installation/010_Anforderungen/030_Kompatibilitaet_mit_anderen_Modulen.md @@ -0,0 +1,7 @@ +--- +title: Kompatibilität mit anderen Modulen +--- + +Das Modul **{$modulename}** integriert sich auch in die Erweiterung "Visual CMS" von OXID eSales AG & digidesk - media solutions, sofern diese im Shop installiert wurde. Diese Integration wurde für die Version 3.x des "Visual CMS"-Moduls entwickelt. + +Das Modul **{$modulename}** integriert sich auch in die Erweiterung "PsCache" von Proud Sourcing GmbH, sofern diese im Shop installiert wurde. Diese Integration wurde für die Version 3.3.x des "PsCache"-Moduls entwickelt. diff --git a/docs/daux/installation/010_Anforderungen/050_Vorbereitungen.md b/docs/daux/installation/010_Anforderungen/050_Vorbereitungen.md new file mode 100644 index 0000000..c122b72 --- /dev/null +++ b/docs/daux/installation/010_Anforderungen/050_Vorbereitungen.md @@ -0,0 +1,9 @@ +--- +title: Vorbereitungen +--- + +Installieren Sie bitte zuerst unseren Modul-Connector in der erforderlichen Version. +Ob dies evtl. schon geschehen ist, können Sie im Adminbereich Ihres Shops prüfen. Existiert der Punkt [ (D3) Module ] -> [ Modul-Connector ], können Sie die installierte Version unter [ Bibliotheksverwaltung ] ablesen. Fehlt dieser Eintrag, installieren Sie den kostenfreien Connector. +Informationen zu dessen Installation finden Sie auf unserer [Homepage](https://www.oxidmodule.com/Connector/). + +Klicken Sie auf den Reiter [ Downloads ] und wählen dort das für Ihre Installation passende Paket. \ No newline at end of file diff --git a/docs/daux/installation/020_Neuinstallation/005_Vorbereitung.md b/docs/daux/installation/020_Neuinstallation/005_Vorbereitung.md new file mode 100644 index 0000000..36aac51 --- /dev/null +++ b/docs/daux/installation/020_Neuinstallation/005_Vorbereitung.md @@ -0,0 +1,7 @@ +--- +title: Vorbereitungen +--- + +Installieren Sie bitte zuerst unseren Modul-Connector in der erforderlichen Version. Ob dies evtl. schon geschehen ist, können Sie im Adminbereich Ihres Shops prüfen. +Existiert der Punkt [ (D3) Module ] -> [ Modul-Connector ], können Sie die installierte Version unter [ Bibliotheksverwaltung ] ablesen. +Fehlt dieser Eintrag, installieren Sie den Modul-Connector bitte vorab. Hinweise zu dessen Installation finden Sie in der [Modul-Connector Dokumentation](https://docs.oxidmodule.com/Modul_Connector/). \ No newline at end of file diff --git a/docs/daux/installation/020_Neuinstallation/020_Modul_hinzufuegen.md b/docs/daux/installation/020_Neuinstallation/020_Modul_hinzufuegen.md new file mode 100644 index 0000000..a239c1a --- /dev/null +++ b/docs/daux/installation/020_Neuinstallation/020_Modul_hinzufuegen.md @@ -0,0 +1,15 @@ +--- +title: Modul zur Installation hinzufügen +--- + +### **auf der Kommandozeile** + +Führen Sie in der Konsole im Hauptverzeichnis Ihres Shops (oberhalb des `source`- und `vendor`-Verzeichnisses) diesen Befehl aus, um das Modul **{$modulename}** zur Installation hinzuzufügen: + +```bash +php composer require {$composerident}:^{$moduleversion} --update-no-dev +``` + +> [!] Achten Sie darauf, dass Composer für die Installation die selbe PHP-Version verwendet, in der auch Ihr Shop ausgeführt wird. Sie erhalten sonst möglicherweise unpassende Modulpakete. + +> [i] Benötigt Ihre Installation einen anderen Aufruf von Composer, ändern Sie den Befehl bitte entsprechend ab. Für weitere Optionen dieses Befehls lesen Sie bitte die [Dokumentation von Composer](https://getcomposer.org/doc/03-cli.md#require). diff --git a/docs/daux/installation/020_Neuinstallation/030_Verwendung_eigener_Themes.md b/docs/daux/installation/020_Neuinstallation/030_Verwendung_eigener_Themes.md new file mode 100644 index 0000000..1f0f962 --- /dev/null +++ b/docs/daux/installation/020_Neuinstallation/030_Verwendung_eigener_Themes.md @@ -0,0 +1,16 @@ +--- +title: Verwendung eigener Themes +--- + +Das Modul ist für die Verwendung mit den folgenden OXID-Themes vorbereitet: + +* Wave +* Flow +* Azure +* Mobile + +Verwenden Sie in Ihrem Shop ein angepasstes Verzeichnis für Ihre Templates (neues Theme oder CustomTheme), kopieren Sie die Templates und / oder die CSS-Dateien in die neuen Ordner. + +Ähnelt Ihr neues Theme technisch einem der OXID-Originale, können Sie dieses darauf umleiten. Childs von originalen OXID- Themes benötigen keine Umleitung. + +Weitere Informationen zur Umleitung finden Sie in unserer [FAQ](https://faq.d3data.de/oxid-eshop/module-oxid-eshop/anpassungen/template-bloecke-dem-eigenen-theme-zuordnen/). \ No newline at end of file diff --git a/docs/daux/installation/020_Neuinstallation/040_Providerspezifische_Installation.md b/docs/daux/installation/020_Neuinstallation/040_Providerspezifische_Installation.md new file mode 100644 index 0000000..8135008 --- /dev/null +++ b/docs/daux/installation/020_Neuinstallation/040_Providerspezifische_Installation.md @@ -0,0 +1,5 @@ +--- +title: Providerspezifische Installation +--- + +Manche Provider erfordern besondere Einstellungen für installierte Module. Treffen Sie bei der Installation auf spezielle Anforderungen, zu denen Sie Unterstützung benötigen, kontaktieren Sie uns bitte für weiteren Support. \ No newline at end of file diff --git a/docs/daux/installation/020_Neuinstallation/050_Modul_im_Shop_aktivieren.md b/docs/daux/installation/020_Neuinstallation/050_Modul_im_Shop_aktivieren.md new file mode 100644 index 0000000..75c2f3e --- /dev/null +++ b/docs/daux/installation/020_Neuinstallation/050_Modul_im_Shop_aktivieren.md @@ -0,0 +1,19 @@ +--- +title: Modul im Shop aktivieren +--- + +### **im Adminbereich** + +Aktivieren Sie das Modul über den Shopadmin unter [ Erweiterungen ] -> [ Module ]. Klicken Sie nach Auswahl von [ {$menutitle} ] auf den Button [ Aktivieren ]. + +### **oder auf der Kommandozeile** + +Alternativ können Sie die Modulaktivierung auch auf der Kommandozeile (CLI) im Hauptverzeichnis Ihres Shops (oberhalb des `source`- und `vendor`-Verzeichnisses) durchführen. + +```bash +./vendor/bin/oe-console oe:module:activate {$metadataident} +``` + +> [!] **Enterprise Edition**: Achten Sie darauf, dass das Modul in weiteren Shops (Mall) ebenfalls aktiviert werden muss, um dessen Funktion dort auch zu nutzen. + +> [i] **Enterprise Edition**: Zur Aktivierung in einem bestimmten Shopmandanten verwenden Sie das `--shop-id`-Argument (`...oe-console --shop-id 1 oe:module...`) \ No newline at end of file diff --git a/docs/daux/installation/020_Neuinstallation/060_Shopanpassungen_installieren.md b/docs/daux/installation/020_Neuinstallation/060_Shopanpassungen_installieren.md new file mode 100644 index 0000000..6f55278 --- /dev/null +++ b/docs/daux/installation/020_Neuinstallation/060_Shopanpassungen_installieren.md @@ -0,0 +1,21 @@ +--- +title: Shopanpassungen installieren +--- + +### **im Adminbereich** + +Direkt nach der Modulaktivierung startet der Assistent, der Sie durch die Shopanpassung führt. Darin können Sie verschiedene Optionen der Installation wählen. + +Den Installationsassistenten finden Sie auch unter den Menüpunkten [ Admin ] -> [ (D3) Module ] -> [ Modul-Connector ] -> [ Modulverwaltung ] -> [ Modulinstallation ]. + +Bei tiefgreifenden Änderungen an Ihrem Shop (z.B. Hinzufügen weiterer Sprachen oder Mandanten) rufen Sie den Installationsassistenten bitte erneut auf, um dann eventuell notwendige Nacharbeiten für das Modul ausführen zu lassen. + +Möchten Sie die Änderungen manuell installieren, können Sie sich über diesen Assistenten ebenfalls eine Checkliste erstellen. + +### **oder auf der Kommandozeile** + +Der Installationsassistent steht Ihnen ebenfalls auf der Kommandozeile (CLI) zur Verfügung. Führen Sie diesen Befehl im Hauptverzeichnis Ihres Shops (oberhalb des `source`- und `vendor`-Verzeichnisses) aus: + +```bash +./vendor/bin/d3modules_install +``` \ No newline at end of file diff --git a/docs/daux/installation/020_Neuinstallation/070_TMP-Ordner_leeren.md b/docs/daux/installation/020_Neuinstallation/070_TMP-Ordner_leeren.md new file mode 100644 index 0000000..d845b9b --- /dev/null +++ b/docs/daux/installation/020_Neuinstallation/070_TMP-Ordner_leeren.md @@ -0,0 +1,21 @@ +--- +title: TMP-Ordner leeren +--- + +### **im Adminbereich** + +Leeren Sie das Verzeichnis `tmp` über [ Admin ] -> [ (D3) Module ] -> [ Modul-Connector ] -> [ TMP leeren ]. Markieren Sie [ komplett leeren ] und klicken auf [ TMP leeren ]. + +Sofern die Views nicht automatisch aktualisiert werden, führen Sie dies noch durch. + +### **oder auf der Kommandozeile** + +Alle TMP-leeren-Aktionen stehen Ihnen ebenfalls auf der Kommandozeile (CLI) zur Verfügung. Führen Sie diesen Befehl im Hauptverzeichnis Ihres Shops (oberhalb des `source`- und `vendor`-Verzeichnisses) aus: + +```bash +./vendor/bin/d3cleartmp +``` + +> [i] Erfordert Ihre Installation eine andere Vorgehensweise zum Leeren des Caches oder zum Aktualisieren der Datenbank-Viewtabellen, führen Sie diese bitte aus. + +> [i] Beim Kommandozeilenaufruf werden Ihnen weitere Optionen gezeigt, mit denen Sie die Aktion gezielt steuern können. \ No newline at end of file diff --git a/docs/daux/installation/020_Neuinstallation/080_Lizenz_eintragen.md b/docs/daux/installation/020_Neuinstallation/080_Lizenz_eintragen.md new file mode 100644 index 0000000..4a19fe7 --- /dev/null +++ b/docs/daux/installation/020_Neuinstallation/080_Lizenz_eintragen.md @@ -0,0 +1,11 @@ +--- +title: Lizenzschlüssel eintragen +--- + +### **im Adminbereich** + +Das Modul verwendet Lizenzschlüssel, um die Lizenzverwaltung für Sie und auch für uns einfacher zu gestalten. Hierbei haben Sie je nach Modul die Wahl zwischen einer kostenfreien Testlizenz und einer Lizenz für den Einsatz im Livebetrieb. + +Speziell **{$modulename}** wird in unterschiedlichen Editionen für den Livebetrieb angeboten. Besuchen Sie unseren [Moduleshop](https://www.oxidmodule.com/), um mehr darüber zu erfahren. + +Rufen Sie zum Anfordern des Lizenzschlüssels die Modulverwaltung im Adminbereich unter [ (D3) Module ] -> [ Modul-Connector ] -> [ Modulverwaltung ] auf. Klappen Sie den Eintrag des jeweiligen Moduls aus. Sofern erforderlich, können Sie hier den Lizenzassistenten starten, der schnell und einfach ihr Modul aktiviert. \ No newline at end of file diff --git a/docs/daux/installation/020_Neuinstallation/090_Cronjob_einrichten.md b/docs/daux/installation/020_Neuinstallation/090_Cronjob_einrichten.md new file mode 100644 index 0000000..ff7eb59 --- /dev/null +++ b/docs/daux/installation/020_Neuinstallation/090_Cronjob_einrichten.md @@ -0,0 +1,13 @@ +--- +title: Cronjob einrichten +--- + +Legen Sie den Cronjob für die automatische Bearbeitung der eingerichteten Aufträge an. Die für die Anlage benötigten Daten finden Sie im Adminbereich des Moduls unter [ (D3) Module ] -> [ {$menutitle} ] -> [ Einstellungen ] -> [ Grundeinstellungen ]. Weitere Informationen zum Anlegen von Cronjobs finden Sie in unserer [FAQ](https://faq.d3data.de/technik/wie-werden-cronjobs-angelegt/). + +> [!!] Sie sollten unbedingt den Aufruf von `.sh`-Dateien via Browser verhindern, so dass kein Unbefugter die Datei von außen aufrufen kann. Dazu können Sie z.B. die `.htaccess`-Datei des Shops um folgende Zeilen erweitern: + +```htaccess + + Require all denied + +``` \ No newline at end of file diff --git a/docs/daux/installation/020_Neuinstallation/100_Updatefaehigkeit.md b/docs/daux/installation/020_Neuinstallation/100_Updatefaehigkeit.md new file mode 100644 index 0000000..40532b0 --- /dev/null +++ b/docs/daux/installation/020_Neuinstallation/100_Updatefaehigkeit.md @@ -0,0 +1,7 @@ +--- +title: Updatefähigkeit +--- + +Bei individuellen Änderungen von Moduldateien empfehlen wir, jeweils die Überladungsmöglichkeiten des Shops dafür zu verwenden. So brauchen Sie die originalen Moduldateien nicht verändern und erhalten sich so die Updatefähigkeit des Shops und des Moduls. Beachten Sie, dass Moduldateien bei Updateinstallationen überschrieben werden. + +Weitere Informationen zu den Überladungsmöglichkeiten verschiedener Dateien finden Sie in unserer [FAQ](https://faq.d3data.de/category/oxid-eshop/module-oxid-eshop/anpassungen/). \ No newline at end of file diff --git a/docs/daux/installation/020_Neuinstallation/_index.md b/docs/daux/installation/020_Neuinstallation/_index.md new file mode 100644 index 0000000..ea7dc79 --- /dev/null +++ b/docs/daux/installation/020_Neuinstallation/_index.md @@ -0,0 +1,16 @@ +--- +Title: Schnellstart per Composer +--- + +## Schnellstart per Composer + +### **auf der Kommandozeile** + +```bash +php composer require {$composerident}:^{$moduleversion} --update-no-dev +./vendor/bin/oe-console oe:module:activate {$metadataident} +./vendor/bin/d3modules_install +./vendor/bin/d3cleartmp +``` + +Detailliertere Angaben zur Installation entnehmen Sie bitte den folgenden Seiten. diff --git a/docs/daux/installation/030_Update/005_Updatedefinition.md b/docs/daux/installation/030_Update/005_Updatedefinition.md new file mode 100644 index 0000000..3e3e9f3 --- /dev/null +++ b/docs/daux/installation/030_Update/005_Updatedefinition.md @@ -0,0 +1,8 @@ +--- +title: Wann kann ein Update ausgeführt werden? +--- + +Die Updateanweisungen können verwendet werden, wenn dieses Modul schon früher mit Hilfe von Composer installiert wurde. + +Wurde die Installation bisher noch nicht durchgeführt oder die Installation wurde **nicht** über Composer +durchgeführt (weil das Modul dies z.B. früher nicht unterstützte), verwenden Sie bitte die Beschreibung unter [Neuinstallation](../020_Neuinstallation/_index.md). \ No newline at end of file diff --git a/docs/daux/installation/030_Update/010_Modul_deaktivieren.md b/docs/daux/installation/030_Update/010_Modul_deaktivieren.md new file mode 100644 index 0000000..4ba4d78 --- /dev/null +++ b/docs/daux/installation/030_Update/010_Modul_deaktivieren.md @@ -0,0 +1,19 @@ +--- +title: Modul deaktivieren +--- + +### **im Adminbereich** + +Deaktivieren Sie das Modul unter [ Erweiterungen ] -> [ Module ]. Klicken Sie nach Auswahl von [ {$menutitle} ] auf den Button [ Deaktivieren ]. + +### **oder auf der Kommandozeile** + +Alternativ können Sie die Moduldeaktivierung auch über die Kommandozeile (CLI) im Hauptverzeichnis Ihres Shops (oberhalb des `source`- und `vendor`-Verzeichnisses) durchführen. + +```bash +./vendor/bin/oe-console oe:module:deactivate {$metadataident} +``` + +> [!] **Enterprise Edition**: Achten Sie darauf, dass das Modul in allen weiteren Shops (Mall) ebenfalls deaktiviert werden muss. + +> [i] **Enterprise Edition**: Zur Deaktivierung in einem bestimmten Shopmandanten verwenden Sie das `--shop-id`-Argument (`...oe-console --shop-id 1 oe:module...`) \ No newline at end of file diff --git a/docs/daux/installation/030_Update/020_Dateien_erneuern.md b/docs/daux/installation/030_Update/020_Dateien_erneuern.md new file mode 100644 index 0000000..40f05e2 --- /dev/null +++ b/docs/daux/installation/030_Update/020_Dateien_erneuern.md @@ -0,0 +1,18 @@ +--- +title: Dateien erneuern +--- + +### **auf der Kommandozeile** + +Starten Sie die Konsole Ihres Webservers und wechseln in das Hauptverzeichnis Ihres +Shops (oberhalb des `source`- und `vendor`-Verzeichnisses). Führen Sie dort diesen Befehl aus: + +```bash +php composer require {$composerident}:^{$moduleversion} --update-no-dev +``` + +Im weiteren Ablauf werden Sie gefragt, ob die Moduldateien überschrieben werden sollen. Bestätigen Sie dies für den Eintrag `{$composerident}`. + +> [!] Achten Sie darauf, dass Composer für die Installation die selbe PHP-Version verwendet, in der auch Ihr Shop ausgeführt wird. Sie erhalten sonst möglicherweise unpassende Modulpakete. + +> [i] Benötigt Ihre Installation einen anderen Aufruf von Composer, ändern Sie den Befehl bitte entsprechend ab. Für weitere Optionen dieses Befehls lesen Sie bitte die [Dokumentation von Composer](https://getcomposer.org/doc/03-cli.md#require). diff --git a/docs/daux/installation/030_Update/030_Providerspezifische_Installation.md b/docs/daux/installation/030_Update/030_Providerspezifische_Installation.md new file mode 100644 index 0000000..8135008 --- /dev/null +++ b/docs/daux/installation/030_Update/030_Providerspezifische_Installation.md @@ -0,0 +1,5 @@ +--- +title: Providerspezifische Installation +--- + +Manche Provider erfordern besondere Einstellungen für installierte Module. Treffen Sie bei der Installation auf spezielle Anforderungen, zu denen Sie Unterstützung benötigen, kontaktieren Sie uns bitte für weiteren Support. \ No newline at end of file diff --git a/docs/daux/installation/030_Update/040_Modulinformationen_aktualisieren.md b/docs/daux/installation/030_Update/040_Modulinformationen_aktualisieren.md new file mode 100644 index 0000000..157e8fa --- /dev/null +++ b/docs/daux/installation/030_Update/040_Modulinformationen_aktualisieren.md @@ -0,0 +1,19 @@ +--- +title: Modulinformationen aktualisieren +--- + +### **im Adminbereich** + +Wechseln Sie im Adminbereich zu [ Erweiterungen ] -> [ Module ]. Klicken Sie nach Auswahl von [ {$menutitle} ] auf den Button [ Aktivieren ]. + +### **oder auf der Kommandozeile** + +Alternativ können Sie die Modulaktivierung auch über die Kommandozeile (CLI) im Hauptverzeichnis Ihres Shops (oberhalb des `source`- und `vendor`-Verzeichnisses) durchführen. + +```bash +./vendor/bin/oe-console oe:module:activate {$metadataident} +``` + +> [!] **Enterprise Edition**: Achten Sie darauf, dass das Modul in weiteren Shops (Mall) ebenfalls aktiviert werden muss, um dessen Funktion dort auch zu nutzen. + +> [i] **Enterprise Edition**: Zur Aktivierung in einem bestimmten Shopmandanten verwenden Sie das `--shop-id`-Argument (`...oe-console --shop-id 1 oe:module...`) \ No newline at end of file diff --git a/docs/daux/installation/030_Update/050_Shopanpassungen_installieren.md b/docs/daux/installation/030_Update/050_Shopanpassungen_installieren.md new file mode 100644 index 0000000..15880bb --- /dev/null +++ b/docs/daux/installation/030_Update/050_Shopanpassungen_installieren.md @@ -0,0 +1,21 @@ +--- +title: Shopanpassungen installieren +--- + +### **im Adminbereich** + +Ob Shopanpassungen notwendig sind, ist von der Versionsänderung des Moduls abhängig. + +Möglicherweise sehen Sie nach dem Neuaktivieren des Moduls den Installationsassistent, der Sie durch die Änderungen führt. Folgen Sie dann den einzelnen Schritten. Möchten Sie die Änderungen manuell installieren, können Sie sich über diesen Assistenten ebenfalls eine Checkliste erstellen. + +Wird der Assistent nicht gezeigt (Sie sehen wieder die Modulübersicht), waren keine Anpassungen am Shop notwendig. + +Ob erforderliche Updates ausgeführt werden sollen, können Sie jederzeit im Adminbereich unter [ (D3) Module ] -> [ Modul-Connector ] -> [ Modulverwaltung ] -> [ Modulinstallation ] prüfen. + +### **oder auf der Kommandozeile** + +Der Installationsassistent steht Ihnen ebenfalls auf der Kommandozeile (CLI) zur Verfügung. Führen Sie diesen Befehl im Hauptverzeichnis Ihres Shops (oberhalb des `source`- und `vendor`-Verzeichnisses) aus: + +```bash +./vendor/bin/d3modules_install +``` \ No newline at end of file diff --git a/docs/daux/installation/030_Update/060_TMP-Ordner_leeren.md b/docs/daux/installation/030_Update/060_TMP-Ordner_leeren.md new file mode 100644 index 0000000..d845b9b --- /dev/null +++ b/docs/daux/installation/030_Update/060_TMP-Ordner_leeren.md @@ -0,0 +1,21 @@ +--- +title: TMP-Ordner leeren +--- + +### **im Adminbereich** + +Leeren Sie das Verzeichnis `tmp` über [ Admin ] -> [ (D3) Module ] -> [ Modul-Connector ] -> [ TMP leeren ]. Markieren Sie [ komplett leeren ] und klicken auf [ TMP leeren ]. + +Sofern die Views nicht automatisch aktualisiert werden, führen Sie dies noch durch. + +### **oder auf der Kommandozeile** + +Alle TMP-leeren-Aktionen stehen Ihnen ebenfalls auf der Kommandozeile (CLI) zur Verfügung. Führen Sie diesen Befehl im Hauptverzeichnis Ihres Shops (oberhalb des `source`- und `vendor`-Verzeichnisses) aus: + +```bash +./vendor/bin/d3cleartmp +``` + +> [i] Erfordert Ihre Installation eine andere Vorgehensweise zum Leeren des Caches oder zum Aktualisieren der Datenbank-Viewtabellen, führen Sie diese bitte aus. + +> [i] Beim Kommandozeilenaufruf werden Ihnen weitere Optionen gezeigt, mit denen Sie die Aktion gezielt steuern können. \ No newline at end of file diff --git a/docs/daux/installation/030_Update/070_Lizenzschluessel_aktualisieren.md b/docs/daux/installation/030_Update/070_Lizenzschluessel_aktualisieren.md new file mode 100644 index 0000000..41bf6ae --- /dev/null +++ b/docs/daux/installation/030_Update/070_Lizenzschluessel_aktualisieren.md @@ -0,0 +1,7 @@ +--- +title: Lizenzschlüssel aktualisieren +--- + +### **im Adminbereich** + +Wird für die neue Modulversion ein aktualisierter Lizenzschlüssel benötigt, tragen Sie diesen im Adminbereich unter [ (D3) Module ] -> [ Modul-Connector ] -> [ Modulverwaltung ] ein. Klappen Sie dazu den Eintrag des jeweiligen Moduls aus und starten den Lizenzassistent. \ No newline at end of file diff --git a/docs/daux/installation/030_Update/080_Erweiterungen_anpassen.md b/docs/daux/installation/030_Update/080_Erweiterungen_anpassen.md new file mode 100644 index 0000000..5fc0aa2 --- /dev/null +++ b/docs/daux/installation/030_Update/080_Erweiterungen_anpassen.md @@ -0,0 +1,5 @@ +--- +title: Erweiterungen anpassen +--- + +Haben Sie für dieses Modul eigene Erweiterung entwickelt, gleichen Sie dies bitte mit der neuen Fassung des Moduls ab. \ No newline at end of file diff --git a/docs/daux/installation/035_Installationshinweise/010_Cachevermeidung.md b/docs/daux/installation/035_Installationshinweise/010_Cachevermeidung.md new file mode 100644 index 0000000..1f8e904 --- /dev/null +++ b/docs/daux/installation/035_Installationshinweise/010_Cachevermeidung.md @@ -0,0 +1,16 @@ +--- +title: Cachevermeidung +--- + +Serverseitiges Caching kann die Performance der Shopinstallation deutlich verbessern. Jedoch sind die von der Suche generierten Inhalte dynamisch und sollten nicht in den Cache aufgenommen werden. Ansonsten würden die Besucher gegenseitig ihre Ergebnisse sehen. + +Setzen Sie eine Cachelösung ein, definieren Sie bitte speziell für die Suche, wann bestimmte Seiten nicht in den Cache aufgenommen werden sollen. +Mit jeder der folgenden Variablen kann ermittelt werden, ob dynamische Inhalte generiert wurden und ob die Aufnahme in den Cache verhindert werden soll: + +- Request + - `isextsearch` + +- Session + - `d3searchattrib` + - `d3searchattribmulti` + - `d3searchattribmultiselector` diff --git a/docs/daux/installation/040_Installationspruefung.md b/docs/daux/installation/040_Installationspruefung.md new file mode 100644 index 0000000..7183763 --- /dev/null +++ b/docs/daux/installation/040_Installationspruefung.md @@ -0,0 +1,24 @@ +--- +title: Installationsprüfung +--- + +Um die erfolgreiche Installation zu prüfen, können Sie die folgende(n) Checkliste(n) verwenden: + +## Einstellungsunabhängige Prüfungen + +### Backend + +* Modul ist unter [ Erweiterungen ] -> [ Module ] aktiv geschaltet +* Modul ist unter [ (D3) Module ] -> [ Modul-Connector ] -> [ Modulverwaltung ] aktiv geschaltet +* Modul zeigt unter [ (D3) Module ] -> [ {$menutitle} ] einen eigenen Bereich für Einstellungen +* Modul zeigt unter [ Artikel verwalten ] -> [ Artikel ] -> [ Erweitert ] die Einstellung [ Wichtigkeit des Artikels im Sortiment ] +* Modul zeigt unter [ Artikel verwalten ] -> [ Attribute ] -> [ Stamm ] die Einstellung [ Attribut wird in Suche für Filter nicht verwendet ] +* Modul zeigt unter [ Kundeninformationen ] -> [ CMS-Seiten ] -> [ Stamm ] die Einstellung [ CMS kann gesucht werden ] + +## Einstellungsabhängige Prüfungen + +### Frontend + +* Modul zeigt bei Eingabe des Suchbegriffs sofort die Suggest-Suche +* Suchergebnisliste zeigt zusätzliche Filtermöglichkeiten (z.B. nach Kategorie) +* Suchbegriff ist im Artikeltitel der Suchergebnisse hervorgehoben diff --git a/docs/daux/installation/050_Schnellstart.md b/docs/daux/installation/050_Schnellstart.md new file mode 100644 index 0000000..0b45e23 --- /dev/null +++ b/docs/daux/installation/050_Schnellstart.md @@ -0,0 +1,11 @@ +--- +title: Schnellstart +--- + +Das Modul **{$modulename}** bringt einen umfangreichen Adminbereich mit, in dem Sie die Konfigurationseinstellungen des Moduls setzen können. Über das Menü [ (D3) Module ] -> [{$menutitle}] -> [Einstellungen] erreichen Sie die Einstellseiten. Arbeiten Sie idealerweise die Optionen einmal durch. Hinweise zu den einzelnen Einstellungen finden Sie in dem dahinter stehenden Fragezeichenfeld. Durch einen Klick darauf öffnet sich der Hinweistext. + +Die meisten Optionen sind zusätzlich im [Handbuch zum Modul](../manual/010_Optionale_Erweiterungen/010_phonetischer_Index.md) umfangreicher beschrieben. + +Nach Abschluss der Einstellungen ist es notwendig, den Suchindex der eingepflegten Artikel zu generieren. Die Option dafür finden Sie ebenfalls im Adminbereich zum Modul im Tab [ Grundeinstellungen ]. Lesen Sie für weitere Informationen zur Indexgenerierung auch den Abschnitt im Modulhandbuch. + +Im Frontend des Shops werden Sie die Installation des Moduls durch verbesserte Reaktionen des Shops bemerken. Je nach Einstellung öffnet sich bei der Eingabe des Suchwortes das Fenster der Schnellsuche. Senden Sie die Suchanfrage ab, werden zu den Treffern zusätzliche Filtermöglichkeiten angeboten. Kontrollieren Sie die geänderten Reaktionen der Shopsuche, bevor Sie diese für die Shopbesucher aktivieren. diff --git a/docs/daux/installation/060_Deinstallation/010_Modulerweiterungen_deaktivieren_und_entfernen.md b/docs/daux/installation/060_Deinstallation/010_Modulerweiterungen_deaktivieren_und_entfernen.md new file mode 100644 index 0000000..e67e777 --- /dev/null +++ b/docs/daux/installation/060_Deinstallation/010_Modulerweiterungen_deaktivieren_und_entfernen.md @@ -0,0 +1,5 @@ +--- +title: Modulerweiterungen deaktivieren und entfernen +--- + +Deaktivieren Sie alle vorhandenen Erweiterungen, die auf dem Modul **{$modulename}** aufbauen und löschen bitte alle Dateien dieser Erweiterungen. Entfernen Sie ebenfalls alle individuellen Templateanpassungen für dieses Modul. \ No newline at end of file diff --git a/docs/daux/installation/060_Deinstallation/020_Modul_deaktivieren.md b/docs/daux/installation/060_Deinstallation/020_Modul_deaktivieren.md new file mode 100644 index 0000000..4ba4d78 --- /dev/null +++ b/docs/daux/installation/060_Deinstallation/020_Modul_deaktivieren.md @@ -0,0 +1,19 @@ +--- +title: Modul deaktivieren +--- + +### **im Adminbereich** + +Deaktivieren Sie das Modul unter [ Erweiterungen ] -> [ Module ]. Klicken Sie nach Auswahl von [ {$menutitle} ] auf den Button [ Deaktivieren ]. + +### **oder auf der Kommandozeile** + +Alternativ können Sie die Moduldeaktivierung auch über die Kommandozeile (CLI) im Hauptverzeichnis Ihres Shops (oberhalb des `source`- und `vendor`-Verzeichnisses) durchführen. + +```bash +./vendor/bin/oe-console oe:module:deactivate {$metadataident} +``` + +> [!] **Enterprise Edition**: Achten Sie darauf, dass das Modul in allen weiteren Shops (Mall) ebenfalls deaktiviert werden muss. + +> [i] **Enterprise Edition**: Zur Deaktivierung in einem bestimmten Shopmandanten verwenden Sie das `--shop-id`-Argument (`...oe-console --shop-id 1 oe:module...`) \ No newline at end of file diff --git a/docs/daux/installation/060_Deinstallation/030_Modul_aus_der_Installation_entfernen.md b/docs/daux/installation/060_Deinstallation/030_Modul_aus_der_Installation_entfernen.md new file mode 100644 index 0000000..02b3ebe --- /dev/null +++ b/docs/daux/installation/060_Deinstallation/030_Modul_aus_der_Installation_entfernen.md @@ -0,0 +1,13 @@ +--- +title: Modul aus der Installation entfernen +--- + +### **auf der Kommandozeile** + +Starten Sie die Konsole Ihres Webservers und wechseln in das Hauptverzeichnis Ihres Shops (oberhalb des `source`- und `vendor`-Verzeichnisses). Führen Sie Sie dort diesen Befehl aus: + +```Bash +php composer remove {$composerident} --no-update +``` + +> [i] Benötigt Ihre Installation einen anderen Aufruf von Composer, ändern Sie den Befehl bitte entsprechend ab. Für weitere Optionen dieses Befehls lesen Sie bitte die [Dokumentation von Composer](https://getcomposer.org/doc/03-cli.md#remove). \ No newline at end of file diff --git a/docs/daux/installation/060_Deinstallation/040_Dateien_loeschen.md b/docs/daux/installation/060_Deinstallation/040_Dateien_loeschen.md new file mode 100644 index 0000000..f3f8c32 --- /dev/null +++ b/docs/daux/installation/060_Deinstallation/040_Dateien_loeschen.md @@ -0,0 +1,10 @@ +--- +title: Dateien löschen +--- + +Löschen Sie den Ordner `{$modulefolder}` und seine enthaltenen Elemente aus dem Verzeichnis `source/modules/d3` Ihres Shops. +Bestätigen Sie anschließend im Shopadmin unter [ Erweiterungen ] -> [ Module ] -> [ Installierte Shop-Module ] die Nachricht: + +> Es gibt registrierte Erweiterungen im eShop, deren Verzeichnis nicht vorhanden ist. + +> Möchten Sie alle Modulinformationen einschließlich Konfigurationseinstellungen und Blockinformationen für Templates löschen? diff --git a/docs/daux/installation/060_Deinstallation/050_Datenbank_bereinigen.md b/docs/daux/installation/060_Deinstallation/050_Datenbank_bereinigen.md new file mode 100644 index 0000000..95dc01b --- /dev/null +++ b/docs/daux/installation/060_Deinstallation/050_Datenbank_bereinigen.md @@ -0,0 +1,27 @@ +--- +title: Datenbank bereinigen +--- + +Das Modul legt Informationen in der Datenbank ab. Sofern diese Daten nicht mehr benötigt werden, können diese gelöscht werden. + +> [!] Legen Sie sich vorab bitte unbedingt eine Sicherung an, um die Daten im Zweifelsfall wiederherstellen zu können. + +Für das Modul **{$modulename}** sind dies die folgende Tabellen und Felder: + +* die komplette Tabelle `d3_extsearch_statisticlog` +* die komplette Tabelle `d3_extsearch_synset` +* die komplette Tabelle `d3_extsearch_term` + +und diese Felder in bestehenden Tabellen: + +* in Tabelle `oxartextends`: + * das Feld `D3_PHONETIC` + * das Feld `D3_PHONETIC_1` + * das Feld `D3_PHONETIC_...` + +sowie diese Einträge in bestehenden Tabellen: + +* in Tabelle `d3_cfg_mod`: + * den Eintrag `oxmodid = "{$modcfgident}"` **) + +**) Diesen Eintrag gibt es ggf. für jeden Subshop. Entfernen Sie diesen nur für die Mandanten, in denen das Modul **nicht** mehr installiert ist. diff --git a/docs/daux/installation/060_Deinstallation/060_TMP-Ordner_leeren.md b/docs/daux/installation/060_Deinstallation/060_TMP-Ordner_leeren.md new file mode 100644 index 0000000..d845b9b --- /dev/null +++ b/docs/daux/installation/060_Deinstallation/060_TMP-Ordner_leeren.md @@ -0,0 +1,21 @@ +--- +title: TMP-Ordner leeren +--- + +### **im Adminbereich** + +Leeren Sie das Verzeichnis `tmp` über [ Admin ] -> [ (D3) Module ] -> [ Modul-Connector ] -> [ TMP leeren ]. Markieren Sie [ komplett leeren ] und klicken auf [ TMP leeren ]. + +Sofern die Views nicht automatisch aktualisiert werden, führen Sie dies noch durch. + +### **oder auf der Kommandozeile** + +Alle TMP-leeren-Aktionen stehen Ihnen ebenfalls auf der Kommandozeile (CLI) zur Verfügung. Führen Sie diesen Befehl im Hauptverzeichnis Ihres Shops (oberhalb des `source`- und `vendor`-Verzeichnisses) aus: + +```bash +./vendor/bin/d3cleartmp +``` + +> [i] Erfordert Ihre Installation eine andere Vorgehensweise zum Leeren des Caches oder zum Aktualisieren der Datenbank-Viewtabellen, führen Sie diese bitte aus. + +> [i] Beim Kommandozeilenaufruf werden Ihnen weitere Optionen gezeigt, mit denen Sie die Aktion gezielt steuern können. \ No newline at end of file diff --git a/docs/daux/manual/010_Inhalte.md b/docs/daux/manual/010_Inhalte.md new file mode 100644 index 0000000..31fca09 --- /dev/null +++ b/docs/daux/manual/010_Inhalte.md @@ -0,0 +1,7 @@ +--- +title: Inhalte +--- + +Im Modulhandbuch werden weitergehende Inhalte behandelt, mit denen Sie die **erweiterte Suche** konfigurieren oder ergänzen können. + +Die Beschreibung der Adminoptionen finden Sie in den Hilfetexten direkt im Adminbereich des Moduls an der jeweiligen Einstellung im [ ? ]-Schalter. diff --git a/docs/daux/manual/013_Ergebnisanlyse.md b/docs/daux/manual/013_Ergebnisanlyse.md new file mode 100644 index 0000000..0cc4ffe --- /dev/null +++ b/docs/daux/manual/013_Ergebnisanlyse.md @@ -0,0 +1,21 @@ +--- +title: Ergebnisanalyse +--- + +Das Modul bietet diverse Einstellungen, die Trefferlisten zu beeinflussen. Erhalten Sie für Ihre Suchanfragen +ungewollte Treffer oder eine unplausible Sortierung, steht Ihnen unser Analysetool zur Verfügung. +Öffnen Sie bitte unter [ Erweiterte Suche ] -> [ Einstellungen ] -> [ Grundeinstellungen ] -> +[ allgemeine Einstellungen ] die [ Ergebnis-Feld-Analyse ]. Es öffnet sich ein neues Fenster, in das Sie genau +die Suchbegriffe des Frontends eingeben können. Sie erhalten eine umfangreiche Tabelle, die zu jedem Treffer +aufführt, weshalb dieser in der Trefferliste enthalten ist und welche Wertigkeit der Treffer deswegen erhalten hat. + +Die Spalten führen alle Suchbegriffe auf, die in den konfigurierten Feldern entweder ganz oder teilweise +enthalten sind und zeigt die Wertigkeit, die zur Berechnung der Sortierung verwendet wird. Werden Artikel +als Inhalt der Marken oder Kategorien gefunden, wird diese Wertigkeit ebenfalls gezeigt. + +Unter Verwendung der `Wichtigkeit` wird die Sortierkennzahl jedes einzelnen Artikels berechnet und als `d3Priority` angezeigt. +Die hierzu verwendete Formel zeigt Ihnen unser Tool ebenfalls an. + +Passen Sie nun die Moduleinstellungen an und prüfen Sie die Ergebnisse erneut. Beachten Sie bitte, dass Änderungen +der Einstellungen auf alle Suchanfragen gleichermaßen wirken. Kontrollieren Sie demnach bitte immer ein Set aus für +Ihren Shop typischen Suchanfragen. \ No newline at end of file diff --git a/docs/daux/manual/015_optischeAnpassungen.md b/docs/daux/manual/015_optischeAnpassungen.md new file mode 100644 index 0000000..f1c6c17 --- /dev/null +++ b/docs/daux/manual/015_optischeAnpassungen.md @@ -0,0 +1,18 @@ +--- +title: optische Anpassungen +--- + +Die Modulausgaben können durch eigene CSS-Styles angepasst werden. Um die Updatefähigkeit des Moduls zu +erhalten, übernehmen Sie die neuen Stylesheets bitte in modulunabhängige Dateien. + +Die mitgelieferten Assets (CSS, JavaScripts) werden von uns über einen vorkonfigurierten Kompilierungstask +erstellt. Dieser kann via [Grunt](https://gruntjs.com/) ausgeführt werden. Möchten Sie eigene oder +angepasste Inhalte daraus kompilieren lassen, installieren Sie das Modul bitte mit Composer und der +`--prefer-source`-Option. Dann stehen Ihnen die Quelldateien im Ordner `src/build` zur Verfügung. + +Diese können direkt aufgerufen werden, um eventuelle Anpassungen im zu Grunde liegenden Theme zu +integrieren. Alternativ können Sie die Sources auch in eigene Kompilierungsprozesse einbinden, +um projektspezifische Assets zu erstellen. + +Details zur Verwendung des Taskrunners und der Quelldateien entnehmen Sie bitte der `README.md` im +oben erwähnten Build-Ordner. \ No newline at end of file diff --git a/docs/daux/manual/020_Optionale_Erweiterungen/010_phonetischer_Index.md b/docs/daux/manual/020_Optionale_Erweiterungen/010_phonetischer_Index.md new file mode 100644 index 0000000..932906e --- /dev/null +++ b/docs/daux/manual/020_Optionale_Erweiterungen/010_phonetischer_Index.md @@ -0,0 +1,11 @@ +--- +title: phonetischer Index +--- + +Für die fehlertolerante Suche haben wir einen umfangreichen Algorithmus entwickelt, der speziell auf diese Anforderungen zurechtgeschnitten ist. Die Standardentwicklung bezog sich dabei jedoch auf die **deutsche Sprache**. + +# Wie werden nun andere Sprachen abgedeckt? + +Grundsätzlich ist anzumerken, dass, je ähnlicher eine Sprache zum Deutschen ist, umso zuverlässiger auch die deutsche Version der Ähnlichkeitssuche damit funktioniert. Für die englische Sprache wird also die Standardinstallation ein möglicherweise sinnvolles Ergebnis liefern. Spezielle Feinheiten der jeweiligen Sprache werden jedoch nur von dem dafür vorgesehenen Indizierungsschlüssel berücksichtigt. +Für die englische Sprache haben wir die Erweiterung für das Modul schon vorbereitet. Kontaktieren Sie uns bei Bedarf bitte für ein Angebot. Diese Erweiterungen sind nicht standardmäßig im Modul enthalten. +Setzen Sie in Ihrem Shop mehr als eine Sprache ein, können Sie für jede Shopsprache den dafür passenden Indizierungsschlüssel definieren (siehe !!!!!Konfigurationsmöglichkeiten). diff --git a/docs/daux/manual/030_Statistik.md b/docs/daux/manual/030_Statistik.md new file mode 100644 index 0000000..53ae240 --- /dev/null +++ b/docs/daux/manual/030_Statistik.md @@ -0,0 +1,7 @@ +--- +title: Statistik +--- + +In der Statistik werden Ihnen Auswertungen über das Suchverhalten Ihrer Shopbesucher gezeigt. Aktivieren Sie die Statistik vorab in den Einstellungen, um Daten zu erhalten. + +Anhand dieser Daten können Sie Ihre Artikeldaten oder auch die Einstellung der Suche im Shop optimieren. diff --git a/docs/daux/manual/040_Synonym-Editor.md b/docs/daux/manual/040_Synonym-Editor.md new file mode 100644 index 0000000..a9a675f --- /dev/null +++ b/docs/daux/manual/040_Synonym-Editor.md @@ -0,0 +1,34 @@ +--- +title: Synonym-Editor +--- + +Der Synonym-Editor ist Teil der sinngleichen Suche. Diese ermöglicht es Ihnen, shopweit zu den bestehenden Suchbegriffen zu pflegen. + +Hintergrund dieser Option ist, dass es für einen bestimmten Begriff unterschiedliche Worte oder regionale Abweichungen geben kann. + +Haben Sie in Ihrem Shop zum Beispiel eine Reihe `Tassen` im Angebot, können diese über den Suchbegriff `Tasse` oder `Tassen` gefunden werden. Sucht Ihr Kunde jedoch beispielsweise nach `Pott`, erhält er keinen Treffer. Dies lässt sich im Shop zwar lösen, indem Sie den `Pott` an jedem Tassenartikel als Suchbegriff hinterlegen. Je nach Artikelanzahl kann dies jedoch einen enormen Pflegeaufwand bedeuten. Im Synonym-Editor können Sie die Alternativen artikelunabhängig bearbeiten. + +Um die sinnähnliche Suche zu verwenden, aktivieren Sie diese bitte in den Einstellungen der **erweiterten Suche**. + +# Verwendung + +Möchten Sie eine Umschreibung einfügen, wählen Sie im linken Menü des Adminbereichs den Synonym-Editor unter [ D3 Module ] -> [ erweiterte Suche ] -> [ Synonym-Editor ]. + +Ist in der angezeigten Liste schon ein Eintrag farbig hinterlegt, wählen Sie über [ Neues Wort / Wortgruppe ] die Eingabe für einen Neueintrag. Zur Bearbeitung eines bestehenden Eintrages wählen Sie diesen aus der oben gezeigten Liste. + +Hinterlegen Sie dann im Tab [ Stamm ] Ihr gewünschtes Suchwort. Das Kommentarfeld können Sie für interne Hinweise zum Begriff verwenden. Stellen Sie weiterhin die Sprache des Begriffs ein. + +Für die Eingabe der alternativen Beschreibungen wechseln Sie bitte in den [ Synonyme bearbeiten ]-Tab. Tragen Sie dort einzeln die Alternativen ein und speichern diese jeweils. Diese sind nun automatisch mit Ihrem Stammbegriff verknüpft. + +# Tab [ Stamm ] + +Ein Synonym besteht mindestens aus 2 Einträgen, die zueinander zugeordnet sind. Gibt es für Ihre Sinnbeschreibung noch keinen Eintrag, können Sie diesen im Stamm-Reiter anlegen. Auch die Veränderung vorhandener Wörter können Sie dort vornehmen. + +Jede Kombination sinngleicher Worte ist einer gemeinsamen Zahl, der Synonym-ID zugeordnet. Kennen Sie die Synonym-Ident Ihres Begriffes, können Sie diese dort direkt zuordnen. + +# Tab [ Synonyme bearbeiten ] + +Möchten Sie zu einem bestehenden Begriff eine sinngleiche Umschreibung hinzufügen, suchen Sie sich zuerst aus der Liste das schon registrierte Wort. Im Tab [ Synonyme bearbeiten ] können Sie nun weitere sinngleiche Worte hinzufügen, diese bearbeiten oder auch löschen. + +Beachten Sie bitte, dass beim Löschen nur der einzelne Begriff entfernt wird. Andere +Synonyme dieser Gruppe bleiben weiterhin bestehen. diff --git a/docs/daux/manual/045_korrespondierendeAttributswerte.md b/docs/daux/manual/045_korrespondierendeAttributswerte.md new file mode 100644 index 0000000..a55b259 --- /dev/null +++ b/docs/daux/manual/045_korrespondierendeAttributswerte.md @@ -0,0 +1,19 @@ +--- +title: korrespondierende Attributwerte +--- + +Diese Einstellung ist für Sie relevant, wenn Sie Ihre Artikel mit Eigenschaften (Attributen) ausgerüstet haben und Sie diese den Shopbesuchern zur Filterung anbieten. + +Häufig gibt es Produkte, die unterschiedliche Eigenschaften mit der selben oder sehr ähnlichen Bedeutung haben. Das passiert typischerweise bei Kleidergrößen aus unterschiedlichen Regionen oder auch bei fein differenzierten Farbangaben. Bieten Sie zum Beispiel Produkte in den Farben "Lachs", "Koralle" und "helles Korallenrot" an, müsste sich Ihr Shopbesucher zwischen diesen Nuancen entscheiden oder alle ähnlichen Farben wählen. Hierbei können Sie ihm mit den korrespondierenden Attributwerten helfen. + +Durch Verküpfung der einzelnen Angaben miteinander erzeugen Sie Wertegruppen. Sobald der Besucher einen dieser Werte wählt, werden im Hintergrund automatisch alle anderen Werte der selben Gruppe ebenfalls ausgewählt. +Natürlich können Sie einen Wert auch mehreren Gruppen zuordnen (z.B. "Türkis" zur Gruppe "Blau" und auch zur Gruppe "Grün"). So wird "Türkis" zusätzlich mit gewählt, wenn Ihr Besucher blau oder auch grün gewählt hat. + +![Werte-Gruppen-Struktur](../assets/AttributeValueGroups.svg) + +Um solche Wertegruppen einzurichten, gehen Sie bitte so vor: +1. setzen Sie im Admin am betreffenden Attribut die Option [ fügt korrespondierende Attributwerte hinzu ] +2. gehen Sie zum Synonymeditor unter [ D3 Module ] -> [ erweiterte Suche ] -> [ Synonym-Editor ], tragen Sie dort den ersten Attributswert ein und aktivieren die Verwendung für die korrespondierenden Attributwerte. Speichern Sie die Einstellungen. +3. wechseln Sie in den Tab [ Synonyme bearbeiten ] und tragen dort alle dazu passenden Werte ein. + +Für eine zusätzliche Wertegruppe führen Sie die Schritte 2 und 3 erneut aus. Beachten Sie bitte, dass die Synonymbezeichnung genau dem am Artikel hinterlegten Attributswert entsprechen muss (Groß-/Kleinschreibung wird nicht berücksichtigt). diff --git a/docs/daux/manual/050_Logging.md b/docs/daux/manual/050_Logging.md new file mode 100644 index 0000000..e9f0955 --- /dev/null +++ b/docs/daux/manual/050_Logging.md @@ -0,0 +1,5 @@ +--- +title: Logging +--- + +In diesem Bereich werden Ihnen alle vom Modul mitgeschriebenen Meldungen angezeigt. diff --git a/docs/daux/manual/060_externeEinstellungen.md b/docs/daux/manual/060_externeEinstellungen.md new file mode 100644 index 0000000..f62897b --- /dev/null +++ b/docs/daux/manual/060_externeEinstellungen.md @@ -0,0 +1,21 @@ +--- +title: Einstellungen außerhalb des Adminbereichs +--- + +Für wenige Installation sind bestimmte Einstellungen notwendig, um das Modul z.B. an bestimmte Servereinstellungen anzupassen. Diese Optionen werden der Übersichtlichkeit wegen nicht direkt im Adminbereich definiert. Tragen Sie die Einstellungen bei Bedarf bitte direkt in die Datei `config.inc.php` ein. + +# UTF8-Decoding erzwingen + +Werden Suchbegriffe mit Sonderzeichen fehlerhaft dargestellt, kann es nötig sein, dass diese unbedingt decodiert werden müssen. Hierfür ist folgende Einstellung zu verwenden: + +``` +$this->d3extsearch_forceUtf8decode = true; +``` + +# URLs in Artikellisten nicht um Suchparameter ergänzen + +Die folgende Option verhindert, dass Artikeladressen innerhalb der Schnellsuche um Suchparameter ergänzt werden: + +``` +$this->bld3ExtSearchSuggestForceHideUrlParams = true; +``` diff --git a/docs/daux/manual/070_Optimierungen.md b/docs/daux/manual/070_Optimierungen.md new file mode 100644 index 0000000..feee624 --- /dev/null +++ b/docs/daux/manual/070_Optimierungen.md @@ -0,0 +1,31 @@ +--- +title: Optimierungen +--- + +# Systemleistung + +Das Modul stellt Ihnen eine ganze Reihe an Filter- und Suchkriterien zur Verfügung. Wir investieren viel Zeit und Energie in die Optimierung der Optionen. Beachten Sie jedoch bitte, dass trotzdem jedes aktivierte Feature auch Rechenleistung Ihres Servers benötigt. Schauen Sie die Einstellungen daher bitte objektiv durch, welche davon in Ihrem Shop wirklich sinnvoll sind und auf welche Sie möglicherweise verzichten können. Nebenbei fällt es den Kunden auch leichter, sich durch eine überschaubare Trefferliste zu arbeiten, als vor einer riesigen Liste kapitulieren zu müssen. + +Die folgende Übersicht soll Ihnen einen **Anhaltspunkt** liefern, welche Auswirkung die verschiedenen Einstellungen auf die Ladezeit haben kann. Da die tatsächlichen Ausführungszeiten von vielen unterschiedlichen Bedingungen abhängig sind, nutzen wir hierbei Zeiteinheiten. Wie lang solch eine Zeiteinheit ist, hängt von Ihrem System ab. Je kleiner die Zahl, umso schneller ist die Option: + +- Standardsuche => ca. 14 Einheiten +- Ähnliche Artikel (phonetische Suche) => ca. 14 Einheiten +- Auslassungen und Einfügungen => ca. 2 Einheiten +- Indexbuchstaben => ca. 10 Einheiten +- Herstellerliste => ca. 5 Einheiten +- Lieferantenliste => ca. 5 Einheiten +- Kategorieliste => ca. 1 Einheit +- CMS-Suche => ca. 0,1 Einheiten + +Sind Sie sich über die Leistung des Moduls auf Ihrem System nicht sicher, fordern Sie bei uns bitte eine Testlizenz an. Mit dieser können Sie die Funktion und Leistung mit Ihren Artikeln auf Ihrem Server testen. Eine allgemeine Aussage ist schon auf Grund der verschiedenen Systemkonstellationen nicht möglich. + +# Suchtreffer + +Manchmal ist es sinnvoll, Ihrem Kunden weitere Artikel zu zeigen, die er vielleicht gar nicht gesucht hat. Werden aber zu viele Treffer gezeigt, kann das den Besucher verwirren. Im kommenden Abschnitt zeigen wir Ihnen Optionen auf, mit denen Sie die Treffermenge beeinflussen können: + +- Auslassungen oder Einfügungen erlauben: Aktivierung erhöht die Trefferanzahl +- Verwendung mehrerer Suchworte: `jedes Wort wird separat gesucht` erhöht die Treffermenge +- OR-Suche (Oxid Standard-Grundeinstellung): erhöht die Treffermenge +- Phonetische Suche: Aktivierung erhöht die Trefferanzahl +- Shop zeigt zusätzlich ähnliche klingende Treffer, wenn reguläre Suche maximal X Treffer: Aktivierung sowie große Anzahl erhöht die Treffermenge +- Treffergenauigkeit bei kurzen Suchworten: weniger Genauigkeit erhöht die Treffermenge diff --git a/docs/daux/manual/080_Fragen.md b/docs/daux/manual/080_Fragen.md new file mode 100644 index 0000000..8a0052f --- /dev/null +++ b/docs/daux/manual/080_Fragen.md @@ -0,0 +1,11 @@ +--- +title: Grundsätzliche Fragen +--- + +# Wie und wann werden Varianten gesucht? + +Die Varianten stellen unter den Artikeln eine Besonderheit dar. Allgemeine Informationen stehen meist nur am Vaterartikel, variantenspezifische Daten sind an den Varianten hinterlegt. Ist im Shop die Variantensuche nun aktiviert, sucht der Shop neben Vaterartikeln auch nach Varianten. Jedoch müssen die Variantenartikel auch alle gesuchten Informationen enthalten. + +Ein Beispiel: Bieten Sie T-Shirts an, gibt es üblicherweise eine Vaterartikel "T-Shirts". An den Varianten ist dieser Titel nicht mehr hinterlegt, daran steht dann z.B. nur noch die Farbangabe. Wird nun nach "T-Shirt grün" gesucht, wird die Variante möglicherweise nicht gefunden, da der Variantenartikel den Wortlaut "T-Shirt" nicht selbst enthält. Daten aus Vaterartikeln werden bis auf den Artikeltitel nicht vererbt. + +Unsere Empfehlung: Legen Sie solche suchwichtige Begriffe als `Searchkeys` auch noch einmal an den Varianten selbst ab. diff --git a/docs/daux/manual/090_Erweiterungsmoeglichkeiten.md b/docs/daux/manual/090_Erweiterungsmoeglichkeiten.md new file mode 100644 index 0000000..5166835 --- /dev/null +++ b/docs/daux/manual/090_Erweiterungsmoeglichkeiten.md @@ -0,0 +1,23 @@ +--- +title: Erweiterungsmöglichkeiten +--- + +# Allgemein + +Viele Stellen des Frontends lassen sich unkompliziert anpassen. Dies gilt für das Design der angezeigten Fenster und Rahmen, sowie auch bestimmte Funktionalitäten. + +# Schnellsuche + +Die Schnellsuche stellt ein per Ajax-Technologie erstelltes Trefferfenster zur Verfügung. Dieses wird, wie alle anderen Shopseiten auch, aus einem Template erstellt. Möchten Sie dieses Fenster anpassen, verwenden Sie bitte die `modules/d3/extsearch/Application/views/tpl/d3_ext_search_quicksearch.tpl` für inhaltliche Änderungen. Grafische Einstellungen sind in der moduleigenen CSS-Datei `d3_ext_search.css` notiert. + +# Filter-Auswahl + +Die Filter-Auswahl wird oberhalb der Trefferliste angezeigt. Je nach Einstellung werden Ihnen hier Kategorien, Hersteller oder auch die Indexleiste gezeigt. Diese Elemente sind im Template `modules/d3/extsearch/Application/views/tpl/[theme]/d3_inc_extsearch.tpl` definiert. Um die Auswahlfelder der Indexleiste anzupassen, verwenden Sie die include- Aufrufe, die Sie beispielhaft im Template finden. Um die Logik müssen Sie sich hierbei nicht kümmern. Weitere Details zu den Feldern der Indexleiste finden Sie in den "!!!!!Technischen Erläuterungen" dieses Handbuchs. + +# Trefferhervorhebungen + +Welches Format die Hervorhebung der gesuchten Begriffe hat, legen Sie im Template `modules/d3/extsearch/Application/views/tpl/d3_ext_search_highlight.tpl` fest. Hierbei sind alle HTML-Tags erlaubt, die im selben Template auch wieder abgeschlossen werden können. + +# Zusätzliche Formularfelder + +Diese Funktion ist ausführlich in den "!!!!!!Technischen Erläuterungen" beschrieben. diff --git a/docs/daux/manual/100_technische_Erlaeuterungen/010_zusaetzliche_Formularfelder.md b/docs/daux/manual/100_technische_Erlaeuterungen/010_zusaetzliche_Formularfelder.md new file mode 100644 index 0000000..b50c054 --- /dev/null +++ b/docs/daux/manual/100_technische_Erlaeuterungen/010_zusaetzliche_Formularfelder.md @@ -0,0 +1,70 @@ +--- +title: zusätzliche Formularfelder +--- + +Mit den zusätzlichen Formularfeldern haben Sie ein mächtiges Werkzeug an der Hand, um Ihren Kunden die Suche vorzubereiten. Mit regulären Formularfeldern ("Select-Boxen", Textfeldern etc.) können Sie auch shopfremde Felder Ihrer Artikeltabelle in flexibler Art und Weise in Kombination mit den Standardoptionen durchsuchbar machen. + +Als Anschauungsbeispiel möchte ich Ihnen die Verwendung in einem Schuh-Shop erklären. Übertragen Sie dies dann einfach auf Ihre Branche: + +Alle Ihre Schuhe haben die Informationen über die verfügbaren Schuhgrößen in einem speziellen Feld `myShoeSize` in der Tabelle `oxarticles` abgelegt. Für ein Beispiel könnte darin stehen: `40, 41, 45, 46`. Die Werte müssen zwingend mit Komma getrennt sein. + +Ein weiteres Beispielfeld `myShoeColor` könnte so die Farbe des Schuhs beinhalten. So steht in unserem Farbfeld eindeutig `schwarz`, `blau` oder `grün`. + +Mit Hilfe der zusätzlichen Formularfelder können Sie nun in das Template `modules/d3/extsearch/Application/views/blocks/widget/header/d3_extsearch_searchfield.tpl` ein neues Formularfeld einfügen: + +``` + + + + + +``` + +Im Quelltext sind wichtige Stellen farbig markiert: + +### d3searchlike + +Mit diesem Namen des Formularfeldes legen Sie das Verhalten des Suchfeldes fest. Zur Verfügung stehen Ihnen hier: + +- d3searchlike: Der damit übergebene Wert muss als Teil des Inhalts im genannten Tabellenfeld enthalten sein. Wählt der Kunde z.B. die Option `41`, werden alle Artikel gefunden, bei denen die Zahl 41 im Größenfeld mit genannt ist. Da die Werte eindeutig getrennt sind, werden die Artikel sicher selektiert. In unserem Fallbeispiel würde der Schuh gefunden werden, wenn alle anderen Suchoptionen (z.B. der Suchbegriff) auch passt. Bei Option `42` fehlt der Artikel trotz passenden Begriffs in der Trefferliste; die Größe ist nicht mit in dessen Liste aufgeführt. +- d3searchis: Der vom Feld übergebene Wert muss eindeutig in dem Feld am Artikel vorkommen. Wird in das Formular `schwarz` eingegeben, werden auch nur Artikel mit der Farbe schwarz gefunden. Die Farbe `schwarzgrün` würde zum Beispiel ignoriert werden. Um ungenaue Suchen auszuschließen, empfehlen wir, auch hier dem Kunden eine genaue Vorgabe in Form von z.B. Selectboxen, Radiobuttons etc. zu machen. Freitexteingaben sind da sehr fehleranfällig. +- d3searchis mit BETWEEN-Syntax: Mit der BETWEEN-Syntax können Sie Bereiche festlegen, innerhalb derer die Treffer liegen müssen. Die Feldwerte müssen dabei wie folgt aufgebaut sein: +``` +BETWEEN_Wert1_AND_Wert2_ +``` +`Wert1` definiert den Startwert, `Wert2` den Endwert. + +Die beiden Werte sind optional, einer der beiden Werte muss jedoch zwingend angegeben werden. Folgende Konstellationen sind hierbei möglich: + +- `BETWEEN__AND_10_` - Alle Werte bis einschließlich 10 werden gefunden. +- `BETWEEN_11_AND_20_` - Alle Werte zwischen einschließlich 11 bis einschließlich 20 werden gefunden. +- `BETWEEN_21_AND__` - Alle Werte ab einschließlich 21 werden gefunden + +Statt Ganzzahlen können Sie auch Dezimalzahlen angeben. Die Schreibweise muss jedoch den Datenbankwerten entsprechen. + +Ein Beispiel für die verwendete Syntax finden Sie weiter oben und in den beiliegenden Modultemplates. + +#### Legende +Mit `myShoeSize` sind in den Beispielen die Namen der Datenbankfelder benannt. Tragen Sie die Namen eindeutig (so wie in Ihrer Shopdatenbank in der Tabelle `oxarticles` benannt) entsprechend der Beispiele ein. Mit diesem Namen geben Sie vor, in welchem Feld die ausgewählten Inhalte vorkommen müssen. Zugriff haben Sie auf alle Tabellenfelder der Tabelle `oxarticles`, unabhängig ob diese im Standardshop vorhanden oder individuell angelegt wurden. + +Die Werte im `value`-Attribute sind die in der Datenbank abgefragten Werte. In Textfeldern vergeben Sie keine Standardwerte. Im Normalfall (Datenbank-Kollation ist `case-insensitiv`) ist die Groß-/Kleinschreibung der Werte egal. + +Leereinträge werden von der Suche so behandelt, dass derjenige Filter nicht verwendet wird. Damit können Sie also eine Möglichkeit schaffen, eine Filterung komplett zu vermeiden. Im Beispiel der Schuhgrößen würde die Auswahl der ersten Option `alle Größen` alle Schuhe unabhängig der Größe liefern. + +In den Variablen `$aD3SearchIs` und `$aD3SearchLike` sind die Werte enthalten, die der Kunden vorab gewählt hatte. Als Parameter übergeben Sie den Feldnamen. Damit können Sie Ihren Formularfeldern die vom Kunden gewählte Auswahl wieder als Standard setzen. + +In der Praxis hat sich auch bewährt, an prominenter Stelle im Shop ein kleines Suchformular anzubieten und auf einer speziellen Seite Ihrem Kunden ein umfangreiches Suchformular mit vielen Suchkriterien zur Verfügung zu stellen. Kopieren Sie in diesem Fall das komplette Formular aus dem Template `inc/d3_extsearch_form.tpl` in Ihre spezielle Seite und füllen dies mit den möglichen Suchfeldern entsprechend der vorangegangen Beschreibung. + +Beachten Sie bitte, dass zur Auswertung dieser beschriebenen Suchfelder unbedingt die Option `auf zusätzliche Formularfelder prüfen` aktiviert sein muss. diff --git a/docs/daux/manual/100_technische_Erlaeuterungen/020_MultiAttributFilter.md b/docs/daux/manual/100_technische_Erlaeuterungen/020_MultiAttributFilter.md new file mode 100644 index 0000000..2417a63 --- /dev/null +++ b/docs/daux/manual/100_technische_Erlaeuterungen/020_MultiAttributFilter.md @@ -0,0 +1,15 @@ +--- +title: Attributfilter mit Mehrfachauswahl +--- + +Auch dieser Filter ist natürlich frei anpassbar. Die Einfachauswahl (Dropdown aus Select-Element) und die Mehrfachauswahl (Checkboxen) sind unterschiedliche Elemente, die gleichzeitig an den Browser geschickt werden. Über einen Schalter wird die jeweils ungenutzte Option ausgeblendet. + +Soll stattdessen immer nur die Einfach- oder die Mehrfachauswahl allein gezeigt werden, können die anderen Formularfelder entfernt werden. Beachten Sie hierbei Folgendes: + +- Passen Sie die Stylesheet-Angabe so an, dass die gewünschten Eingabefelder sichtbar sind. +- Prüfen Sie, ob die für den Umschalter integrierten JavaScripts noch benötigt werden. +- Ob die Mehrfachauswahl genutzt wird, wird in einem versteckten Formularelement gespeichert (`d3attribmultiselector`). Setzen Sie diesen entsprechend so: + + - Bei Verwendung beider Auswahlmöglichkeiten: dynamisch wie Standardmodul + - Bei ausschließlicher Verwendung der Einfachauswahl: fest auf `nicht gesetzt` + - Bei ausschließlicher Verwendung der Mehrfachauswahl: fest auf `gesetzt` diff --git a/docs/daux/manual/100_technische_Erlaeuterungen/030_Indexleiste.md b/docs/daux/manual/100_technische_Erlaeuterungen/030_Indexleiste.md new file mode 100644 index 0000000..cb66e3b --- /dev/null +++ b/docs/daux/manual/100_technische_Erlaeuterungen/030_Indexleiste.md @@ -0,0 +1,11 @@ +--- +title: Indexleiste +--- + +Die Felder der Indexleiste sind in `modules/d3/extsearch/Application/views/blocks/page/search/d3_inc_extsearch.tpl` aufgeführt. Sie werden durch den folgenden Aufruf darin eingebunden: + +``` +[{include file= $sTplPath|cat:“inc/d3_ext_search_filter.tpl“ d3fparam=“X“ d3fdesc=“Buchstabe X“}] +``` + +Die Logik hinter den Feldern ist im Template `modules/d3/extsearch/Application/views/tpl/d3_ext_search_filter.tpl` realisiert. Zum Aufruf ist der Parameter `d3fparam` zwingend notwendig. Er enthält den Suchparameter. Soll statt des Parameters in der Indexleiste eine andere Ausgabe erfolgen, können Sie diese im optionalen Parameter `d3fdesc` hinterlegen. Hier sind so auch Multilang-Bausteine möglich. diff --git a/docs/daux/manual/100_technische_Erlaeuterungen/040_Relevanz.md b/docs/daux/manual/100_technische_Erlaeuterungen/040_Relevanz.md new file mode 100644 index 0000000..129fed9 --- /dev/null +++ b/docs/daux/manual/100_technische_Erlaeuterungen/040_Relevanz.md @@ -0,0 +1,20 @@ +--- +title: Relevanz und Wichtigkeiten +--- + +Die Suche bietet zwei miteinander kombinierbare Möglichkeiten an, den Artikeln eine automatische Reihenfolge vorzugeben: + +- Je nachdem, in welchem Feld der Treffer vorkommt (Bsp.: Artikel mit dem Suchwort im Titel werden höher gewertet, als Artikel mit dem Suchwort in der Langbeschreibung, hat der Artikel die Suchworte in beiden Feldern, addieren sich beide Relevanzwerte und der Artikel wird noch weiter oben gezeigt. +- Je nach Wichtigkeit am Artikel: jeder Artikel kann als normal, wichtiger und sehr wichtig definiert werden. Entsprechend weit oben wird dieser in den Suchergebnissen gezeigt. + +Die Kombination aus beiden Möglichkeiten wird durch folgende Formel umgesetzt: + +``` +Sortierung = (Teilrelevanz * Wichtigkeit) + (Wortrelevanz * Wichtigkeit) + Wichtigkeit +``` + +So werden wichtige Artikel mit Treffern in unwichtigen Feldern höher bewertet und schieben sich evtl. sogar vor unwichtige Artikel mit Treffern in wichtigen Feldern. + +Die Wortrelevanz trifft zu, wenn der Suchbegriff von Leerzeichen umschlossen im jeweiligen Feld gefunden wird. Für die Teilrelevanz ist das Vorkommen des Suchbegriffes auch als Teil eines anderen Wortes ausreichend. Somit werden Artikel, die genau das gesuchte Wort enthalten, höher bewertet, als wenn das Suchwort nur als Teilbegriff vorkommt. + +Um die Relevanz in einem Suchergebnis analysieren zu können, finden Sie im Adminbereich der **erweiterten Suche** unter [ Grundeinstellungen ] die Ergebnis-Feld-Analyse. Darin wird zu jedem Treffer Ihrer Suchanfrage aufgeschlüsselt, wie sich seine Relevanz ergibt. Mit diesen Informationen können Sie die Relevanz besser beeinflussen. diff --git a/docs/daux/manual/100_technische_Erlaeuterungen/050_Phonetic-Cronjob.md b/docs/daux/manual/100_technische_Erlaeuterungen/050_Phonetic-Cronjob.md new file mode 100644 index 0000000..e2f27ee --- /dev/null +++ b/docs/daux/manual/100_technische_Erlaeuterungen/050_Phonetic-Cronjob.md @@ -0,0 +1,11 @@ +--- +title: Phonetic-Cronjob +--- + +Werden Ihre Artikel außerhalb des OXID-Frameworks gepflegt, muss die Erstellung des phonetischen Indexes (notwendig für die klangähnliche Suche) manuell gestartet werden. Daher haben Sie die Möglichkeit, die Generierung des Suchindex über einen externen Aufruf zu starten. Verwenden Sie dazu den folgenden Aufruf: + +``` +./vendor/bin/d3_extsearch_cron +``` + +Dieser Aufruf listet Ihnen alle möglichen Optionen und Aufgaben. Stellen Sie sich den gewünschten Aufruf damit zusammen und verwenden Sie diesen zum Beispiel als regelmäßig ausgeführter Cronjob. diff --git a/docs/daux/support/010_Hilfe-und-Support.md b/docs/daux/support/010_Hilfe-und-Support.md new file mode 100644 index 0000000..d1609bf --- /dev/null +++ b/docs/daux/support/010_Hilfe-und-Support.md @@ -0,0 +1,16 @@ +--- +title: Hilfe und Support +--- + +Bei Bedarf bieten wir Ihnen auch gern die Installation des Moduls in Ihrem Shop an. Geben Sie uns bitte unter den unten genannten Kontaktdaten Bescheid. + +Haben Sie Fragen oder Unklarheiten in Verbindung mit diesem Modul oder dessen Installation, stehen Ihnen Hilfetexte in unserem [HelpCenter](https://faq.d3data.de/) zur Verfügung. Finden Sie darin die benötigten Antworten nicht, kontaktieren Sie uns bitte unter den folgenden Möglichkeiten: +1. per E-Mail: oder +2. über das Kontaktformular auf [Oxidmodule.com](https://www.oxidmodule.com/) oder +3. per Telefon: (+49) 37 21 / 26 80 90 zu unseren Bürozeiten + +Geben Sie bitte an, wo und wie wir gegebenenfalls vorhandene Schwierigkeiten nachvollziehen können. Sind Ihre Fragen shopspezifisch, benötigen wir möglicherweise Zugangsdaten zum betreffenden Shop. + +Wir wünschen Ihnen mit Ihrem Shop und dem Modul viel Erfolg! + +Ihr D³-Team. diff --git a/docs/html/assets/AttributeValueGroups.svg b/docs/html/assets/AttributeValueGroups.svg new file mode 100644 index 0000000..0818c7d --- /dev/null +++ b/docs/html/assets/AttributeValueGroups.svg @@ -0,0 +1,2 @@ + +
Wertegruppe "Grün"
[Not supported by viewer]
Wertegruppe "Blau"
[Not supported by viewer]
Türkis
Türkis
Aquamarinblau
Aquamarinblau
helles Seegrün
helles Seegrün
Hellgrün
Hellgrün
Gelbgrün
Gelbgrün
Grün
[Not supported by viewer]
Blaugrün
Blaugrün
Himmelblau
Himmelblau
Blau
Blau
\ No newline at end of file diff --git a/docs/html/changelog/Changelog.html b/docs/html/changelog/Changelog.html new file mode 100644 index 0000000..82e2499 --- /dev/null +++ b/docs/html/changelog/Changelog.html @@ -0,0 +1,846 @@ + + + + Changelog - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

7.1.0.0 (2022-04-29)

+

Added

+
    +
  • zusätzliche Templateblöcke zur einfacheren Erweiterbarkeit eingefügt
  • +
  • zusätzliche CSS-Defintionen zur einfacheren Formatierbarkeit eingefügt
  • +
+

Changed

+
    +
  • "Filter abwählen" findet Checkboxen in tiefer verschachtelten HTML-Elementen
  • +
  • noscript Abwahlbutton wird nur an relevanten Auswahlmöglichkeiten gezeigt
  • +
  • "nicht wählbare" Attribute werden zu "nicht sicher wählbaren" Attributen +
      +
    • Wenn aktiviert, sind diese nun vom Shopbesucher zur weiteren Filterung nutzbar. In seltenen Fällen kann es jedoch damit zu ungültigen Filterkombinationen führen.
    • +
    +
  • +
  • Reihenfolge der wählbaren und der "nicht sicher wählbaren" Attribute angepasst
  • +
  • "nicht zugeordnet"-Filter sind auswählbar
  • +
+
+

7.0.1.0 (2022-03-03)

+

Added

+
    +
  • Schnellsuche startet Abfrage erst nach 3 Buchstaben (Anzahl ist konfigurierbar)
  • +
  • Attribut-zu-Objekt-Einträge werden automatisch gelöscht, wenn Attribut oder Objekt selbst gelöscht wird
  • +
  • Anzahl zum Filter gefunde Artikel kann ausgeblendet werden
  • +
  • optional können Varianten auch ohne verwendeten Filter gezeigt werden
  • +
  • Tests ergänzt
  • +
  • installierbar in OXID 6.4
  • +
+

Changed

+
    +
  • Variantenartikel verwenden Kategoriezuordnung vom Elternartikel
  • +
  • Debug-Modus für Schnellsuche erweitert
  • +
  • Variantenartikel werden nur gesucht, wenn Filter verwendet werden (Suche und Kategorien)
  • +
+

Fixed

+
    +
  • Parameterhandling korrigiert
  • +
  • Timeout in Schnellsuche korrigiert
  • +
  • fehlerhaftes Buttonlayout der Filter korrigiert
  • +
  • falsche Artikelanzahl bei Variantensuche in Kategorien verhindert Seitennavigation
  • +
  • Filter können bei Variantensuche in Kategorien angewandt werden
  • +
  • falsche Artikelanzahl in gefilterten Kategorien korrigiert
  • +
+
+

7.0.0.0 (2021-04-30)

+

Added

+
    +
  • installierbar in OXID 6.3
  • +
+

Changed

+
    +
  • Datenbankfeldtypen von Bit zu Tinyint wegen Migrationsschwierigkeiten geändert
  • +
  • Tests angepasst
  • +
+

Fixed

+
    +
  • fehlerhafte Querygenerierung korrigiert
  • +
+
+

6.6.2.0 (2021-04-30)

+

Added

+
    +
  • installierbar in OXID 6.2.4
  • +
  • zusätzliche Tests eingefügt
  • +
  • Cachechecks sind auch in Community und Professional Editions nutzbar
  • +
  • Controller steuern Cachestatus im psCache Modul
  • +
+

Changed

+
    +
  • Sonderzeichenoptimierung in Abfrage für semantische Suche
  • +
  • fehlende Dateiregsitrierungen eingefügt
  • +
  • Build Pakete aktualisiert
  • +
  • +
+

fixed

+
    +
  • fehlende Sortierdefinition wird leer gesetzt, um Ausführungsfehler zu vermeiden
  • +
+
+

6.6.1.2 (2021-03-03)

+

Fixed

+
    +
  • Queryfehler durch unzugeordnetes oxtimestamp-Feld korrigiert
  • +
  • fehlerhaften Tabellennamengenerierung bei Abfrage in Nicht-Standardsprache korrigiert
  • +
  • zu große Artikelanzahl bei mit ähnlichen Artikeln aufgefüllte Trefferliste korrigiert
  • +
+

Changed

+
    +
  • phonetischer Hash wird ausschließlich in der Datenbank generiert, um Differenzen zwischen PHP- und mySQL-Verhalten zu vermeiden (führte zu ungültigen Updateanforderungen)
  • +
  • Phonetischer Index wird nicht generiert, wenn kein Generator eingestellt ist
  • +
  • Bevorzugen der Filtermehrfachauswahl, wenn auch Einfachauswahl gesetzt ist (verhindert ungültige Wertkombinationen)
  • +
  • Admin-Icon verwendet feste Breite
  • +
+
+

6.6.1.1 (2020-12-09)

+

Fixed

+
    +
  • fehlerhaften Tabellennamengenerierung bei Abfrage in Nicht-Standardsprache korrigiert
  • +
+
+

6.6.1.0 (2020-12-03)

+

Added

+
    +
  • installierbar in OXID 6.2.3
  • +
+

Changed

+
    +
  • fehlende Übersetzungsbausteine in Sprache Englisch nachgetragen
  • +
+

Fixed

+
    +
  • Indexgenerierung läuft in manchen Fällen in eine Endlosschleife
  • +
  • fehlerhaften Feldnamen bei Datenbankabfrage in Phonetic Light korrigiert
  • +
  • Testlauf verwendet keinen Debugmode
  • +
+
+

6.6.0.1 (2020-11-09)

+

Changed

+
    +
  • unnötige Redirect-Prävention im Falle eines Einzeltreffers beim Debug-Modus entfernt
  • +
+

Fixed

+
    +
  • ungültige Tabellenname/Feldname-Kombination in SQL Query korrigiert
  • +
+
+

6.6.0.0 (2020-11-06)

+

Added

+
    +
  • Wartungsaufgaben über CLI aufrufbar
  • +
  • Cronjobaufruf generiert fehlende oxartextends-Einträge selbst
  • +
  • CLI komplett übersetzt und übersetzbar
  • +
  • Status der Indexgenerierung wird aus Inhalten anstelle des letzten Generierungsdatums ermittelt
  • +
  • Metadaten mehrsprachig verfügbar
  • +
+

Fixed

+
    +
  • Theme-Weichen für passende Produktdarstellung im Wave-Theme korrigiert
  • +
+
+

6.5.2.2 (2020-09-29)

+

Changed

+
    +
  • Suggest: Submit bei markiertem Eintrag sendet Formular ab, anstatt den Eintrag zu zeigen
  • +
  • JavaScripts verwenden Strict Mode
  • +
+

Fixed

+
    +
  • optimiertes Decoding verhindert SQL Injections
  • +
+
+

6.5.2.1 (2020-08-20)

+

Fixed

+
    +
  • fehlerhaften BaseConfKey getauscht
  • +
+
+

6.5.2.0 (2020-07-20)

+

Changed

+
    +
  • unnötige Maskierung des Suchbegriffes entfernt +
      +
    • führte bei Verwendung von Sonderzeichen zu fehlerhaften Ergebnissen
    • +
    +
  • +
  • Build-Komponenten aktualisiert +
      +
    • vermeidet Verwendung unsicherer Pakete
    • +
    +
  • +
  • Benennung des Source-Verzeichnisses wird automatisch ermittelt +
      +
    • so kann dieses Verzeichnis auch anders benannt oder an anderer Stelle abgelegt sein
    • +
    +
  • +
  • kleine Layoutanpassungen im Flow- und Wavetheme
  • +
  • Dokumentation aktualisiert
  • +
+

Fixed

+
    +
  • fehlende Datenbankfelder in Abfrage ergänzt +
      +
    • führte in Verwendung der Indexbuchstaben in bestimmter Konstellation zu Fehlern bei der Abfrage
    • +
    +
  • +
  • bei entsprechender Einstellung werden leere Kategorien nicht in Filtern gezeigt
  • +
+
+

6.5.1.0 (2020-05-04)

+

Added

+
    +
  • Artikellisten (Kategorien, Hersteller, Lieferanten) können ebenfalls Varianten zeigen und zur Filterung verwenden
  • +
+

Fixed

+
    +
  • ungültige Filterkombinationen zeigen in Artikellisten entsprechende Hinweise und ermöglichen ein Zurücksetzen der gesetzten Filter
  • +
+
+

6.5.0.0 (2020-03-31)

+

Added

+
    +
  • Kompatibilität zu OXID 6.2 hergestellt
  • +
  • strukturierte Daten für Suchaktion eingefügt
  • +
  • erzeuge JS-Fehler, wenn kein Eingabeelement für Suggest gefunden wird
  • +
  • Build-Umgebung aktualisiert
  • +
  • Ergebnis-Feld-Analyse in Dokumentation aufgenommen
  • +
+

Changed

+
    +
  • verhindere wählbarer Attributfilter von Variantenartikeln in Kategorieansicht
  • +
  • ändere JS Event-Eigenschaft
  • +
+

Fixed

+
    +
  • Datenbankabfragen für abgewählte Attributsfilter korrigiert
  • +
  • doppelt selektrierte Felder in Datenbankabfrage korrigiert
  • +
+
+

6.4.0.0 (2019-10-21)

+

Added

+
    +
  • Support für OXID Wave Theme
  • +
  • Critical CSS (above the fold) eingefügt (erfordert Generierung im finalen Shop durch Grunt)
  • +
+

Changed

+
    +
  • Query-Manipulation für die Fälle angepasst, in denen weitere count(*) aus anderen Tabellen außer oxarticles abgefragt werden
  • +
  • Grunt-Module aktualisiert
  • +
  • CSS-Optimierung auf PostCSS und NanoCSS umgestellt
  • +
  • Anordnung der Produktboxen im MD-Viewport des Flow-Themes optimiert
  • +
  • JavaScript-Dateien erhalten Lizenz-Header
  • +
  • Slider-CSS in Theme-CSS integriert, spart Requests beim Seitenaufbau
  • +
  • Generierung des Critical CSS (above the fold) auf criticalcss Plugin umgestellt
  • +
+

Fixed

+
    +
  • fehlerhaft verwendete HTML-Element-IDs in Klassen korrigert
  • +
+
+

6.3.1.0 (2019-09-24)

+

Changed

+
    +
  • gefilterte Seiten werden nicht im Dynamic Content Cache aufgenommen
  • +
  • Debug-Ausgaben von der Browser-Ausgabe zur Browser-Konsole verschoben
  • +
  • Suggest (Schnellsuche) verwendet ArticleList-Objekt statt natives Array
  • +
+

Fixed

+
    +
  • setze passende Leerwerte, wenn jeweiliger Filter nicht aktiviert ist, vermeidet warning-Meldungen im Log
  • +
+
+

6.3.0.0 (2019-07-22)

+

Added

+
    +
  • korrespondierende Attributwerte implementiert
  • +
+

Changed

+
    +
  • Response-Script ermittelt Pfad der Bootstrap-Datei dynamisch
  • +
  • Abfrage-Veränderungen für Aggrosoft WaWi-Modul-Anpassungen optimiert
  • +
  • Unit-Tests angepasst
  • +
+

Fixed

+
    +
  • fehlende Datei im Dateiregister nachgetragen
  • +
+
+

6.2.1.1 (2019-06-04)

+

Added

+
    +
  • Dokumentation um Erklärung zur Cache-Verhinderung ergänzt
  • +
  • Offset-Option für Suggest-Fenster integriert
  • +
+

Changed

+
    +
  • feste Position des Suggest-Fensters im Azure-Theme geändert
  • +
+

Fixed

+
    +
  • fehlende Styles für Azure-Theme nachgetragen
  • +
  • fehlende Netto-/Bruttopreisumrechnung in Artikellisten korrigiert
  • +
+
+

6.2.1.0 (2019-04-25)

+

Added

+
    +
  • Suggest-Suche verhindert die Anzeige veralteter Anfrageergebnisse
  • +
+
+

6.2.0.1 (2019-03-21)

+

Added

+
    +
  • Build-Ressourcen als export-ignore markiert, können bei Bedarf mit --prefer-source nachgeladen werden
  • +
+

Changed

+
    +
  • Dokumentation bereinigt
  • +
  • Einstellungen für Variantensuche wird auch in Artikelnummernsuche berücksichtigt
  • +
  • semantische Begriffe werden mit Platzhaltern gesucht - Synonymbestandteile wurden nicht gefunden
  • +
+

Fixed

+
    +
  • Formularparameter werden encoded
  • +
  • unnötiges UTF8-Decoding entfernt - verhinderte Schnelltreffer mit Sonderzeichen
  • +
  • phonetischer Index wird schon bei Neuanlage der Artikel generiert
  • +
  • Notices auf Grund "undefinierten Index" behoben
  • +
+
+

6.2.0.0 (2018-12-14)

+

Added

+
    +
  • individuelle Zuordnung der Filterattribute zu Kategorien ermöglicht
  • +
  • Kategoriefilter verwendet nur den Artikeln zugeordnete Hauptkategorien
  • +
  • Optionen werden im Admin ausgeblendet, wenn Feature deaktiviert ist
  • +
  • Tests hinzugefügt
  • +
+

Changed

+
    +
  • Korrektur für Verwendung von hochpräzisen Preisangaben (vielfache Nachkommastellen) integriert
  • +
  • Preisslider verwendet Formatierung der aktuell gewählten Währung
  • +
+

Fixed

+
    +
  • unvollständige Feldliste in Abfragen der RSS-Seiten ergänzt
  • +
+
+

6.1.3.0 (2018-11-12)

+

Added

+
    +
  • zusätzliche Formatieroptionen zur Suggest-Suche hinzugefügt
  • +
  • Suggest-Suche wird nur im MD- und LG-Viewport gezeigt
  • +
  • prepared statements integriert
  • +
  • Preisslider erhält zufällige ID für mögliche Mehrfachimplementierung
  • +
  • Relevanzberechnung berücksichtigt auch Synonyme
  • +
  • Synonyme werden auch zur Ermittlung von Herstellern und Lieferanten verwendet
  • +
+

Changed

+
    +
  • Analyse-Tool verwendet Klartext-Bezeichnung für Wertespalten
  • +
  • Preisslider für Brutto/Nettopreise optimiert
  • +
  • verwende oxescape für zeichensatzabhängiges Maskieren
  • +
  • Modul verwendet ausschließlich Loglevel-Konstanten
  • +
  • Dokumentation zum HTML-Format geändert
  • +
  • Adminhilfetexte aus Dokumentation in den Adminbereich verschoben
  • +
+

Fixed

+
    +
  • Exception in Analysetool bei inaktivem Modul vermieden
  • +
  • Datenbankstruktur korrigiert, um Artikel kopieren zu ermöglichen
  • +
  • Sidebar wird nur hinzugefügt, wenn Modul aktiv ist
  • +
  • Query-Generierung bei Verwendung des oxtimestamp-Feldes als Sortierkriterium angepasst
  • +
  • Klartext-Klassennamen zu Namespaces konvertiert
  • +
  • Anforderungsdefinition angepasst
  • +
  • doppelte TPL-Blocknamen aufgelöst
  • +
+
+

6.1.2.0 (2018-08-30)

+

Added

+
    +
  • installierbar in OXID Compilation 6.1
  • +
  • critical CSS (above the fold) - Generierung und Implementierung
  • +
  • Anzeigeformat der Filter ist einstellbar
  • +
+

Changed

+
    +
  • erweitert nur existierende Klassen
  • +
+

Fixed

+
    +
  • #7384: Bug: Anzeige aller Attribute des Shops als Filter in Artikelliste
  • +
  • #7471: falsche Preisspannen im Slider bei Eingabe von Nettopreisen
  • +
  • Mehrfachauswahl der Filter war nur mit Attributfilteroption nutzbar
  • +
+
+

6.1.1.0 (2018-02-20)

+

Added

+
    +
  • installierbar in OXID eShop 6.1
  • +
  • Query-Cache-Prüfung integriert
  • +
+

Changed

+
    +
  • Syntaxgenerierung der Datenbank-Queries optimiert
  • +
+

Fixed

+
    +
  • auf leeren Artikellistenseiten werden Filter nicht generiert
  • +
  • Datenbank-Abfragen für CMS-Texte korrigiert
  • +
+
+

6.1.0.0 (2017-12-15)

+

Added

+
    +
  • Installation via Composer
  • +
  • Neueinträge bei Synonymen verwenden die Admin-Anmeldesprache
  • +
+
+

6.0.0.0 (2017-11-24)

+

Added

+
    +
  • Synonym-Wortgruppen werden auch bei Einzelwortsuche gefunden und als Einzelworte in die Suchparameter eingefügt
  • +
  • Weiterleitungen sind für jeden Datentyp einzeln einstellbar
  • +
  • Filter werden (sofern verfügbar) in der Sidebar angezeigt (flow-Theme)
  • +
  • CSS-Generierung auf Less umgestellt, ermöglicht Erstellung individueller CSS-Dateien
  • +
+

Changed

+
    +
  • Umarbeitung für OXID 6
  • +
  • Layout der Suggest-Suche angepasst
  • +
+
+

5.6.4.2 (2017-10-20)

+
    +
  • Fehler beim Auftrennen kombinierter Suchbegriffe bei der Verwendung der "Ähnlichkeitssuche für Kurzworte" und Multibyte-Zeichen korrigiert
  • +
  • leere Hersteller- und Lieferantenlisten korrigiert (#6617)
  • +
  • fehlerhafte Artikellisten bei Artikellistenergänzung korrigiert (#6812)
  • +
+
+

5.6.4.1 (2017-07-25)

+
    +
  • fehlende Sortierung der Suchergebnisse korrigiert
  • +
+
+

5.6.4.0 (2017-07-10)

+
    +
  • sinngleiche Suche wird auch bei Suche in Kategorienamen verwendet
  • +
  • Synonym-Wortgruppen werden auch bei Einzelwortsuche gefunden und als Einzelworte in die Suchparameter eingefügt
  • +
  • zusätzliche Templateblöcke für Filter integriert
  • +
  • fehlende Template-Parameter ergänzt
  • +
  • Preisschiebegregler für Nettopreise angepasst
  • +
  • Attributfilterbereinigung optimiert
  • +
  • Preisstepberechnung korigiert
  • +
  • Mehrfachfilter werden in Artikellisten
  • +
  • Bugfix: gewählte Mehrfachfilter werden in Artikellisten-Seiten zurückgegeben
  • +
+
+

5.6.3.0 (2017-03-14)

+
    +
  • isextsearch-Parameter wird nur bei verwendeter Filterung gesetzt
  • +
  • mehrfache Kategoriefilter auch in Suchergebnissen verfügbar
  • +
  • Support für Content-Einstellungen im Visual CMS-Modul (Version 1.0.0) (#6103)
  • +
  • fehlenden Kategoriefilter in Artikellistenfilter nachgetragen
  • +
  • Testlizenzen enthalten Artikellistenfilter
  • +
  • kleine Fehler in der Query-Generierung korrigiert
  • +
  • Exception bei deaktiviertem Modul korrigiert
  • +
+
+

5.6.2.1 (2016-10-21)

+
    +
  • Locator auf der Detailansicht korrigiert, wenn Artikel aus direkter Anzeige einer 1-Treffer-Liste stammt (#5554)
  • +
  • korrigiert: Mehrfachfilter wurden ausgeblendet, wenn Auswahl nur 1 Treffer enthielt (#5552)
  • +
  • modulspezifische Theme-Mapping-Variablen eingefügt
  • +
+
+

5.6.2.0 (2016-10-10)

+
    +
  • verwendet Theme-Mapping
  • +
  • Schnellsuche-Anfragen werden ebenfalls ins Log geschrieben
  • +
  • .htaccess-Beschränkungen für Apache 2.4 angepasst
  • +
  • gemeinsame Erweiterung der *list-Klassen aufgelöst
  • +
  • Funktionsaufrufe für Ajax-Calls geändert
  • +
  • als "deprecated" gekennzeichnete Methodenaufrufe ersetzt
  • +
  • Scripts für passende Darstellung des Adminmenütitels im Browser angepasst
  • +
  • fehlende Template-Erweiterungen für "Flow" nachgetragen
  • +
  • fehlende Componenten-Klasse in oxwarticledetails-Widget ergänzt
  • +
  • falschen Formularparameter korrigiert
  • +
  • Bugfix für fehlerhafte Datenbankabfrage bei aktivierter Variantensuche
  • +
  • undokumentierte Parameter im Handbuch nachgetragen
  • +
+
+

5.6.1.0 (2016-08-10)

+
    +
  • Kompatibilität mit OXID-eShop Version 4.10.x / 5.3.x hergestellt
  • +
  • Template-Anpassungen für "Flow" eingefügt
  • +
+
+

5.6.0.1 (2017-07-10)

+
+

5.6.0.0 (2016-06-27)

+
    +
  • Marken- und Lieferantenfilter sind nun mehrfach wählbar
  • +
+
+

5.5.4.0 (2016-03-14)

+
    +
  • Filter für Preiskategorien eingefügt
  • +
  • Artikellisten verwenden Sortierung der Zuordnungstabellen
  • +
  • Artikelposition innerhalb der Detailseiten-Listennavigation angepasst
  • +
  • Installation korrigiert
  • +
+
+

5.5.3.1 (2016-02-17)

+
    +
  • Bugfix für fehlerhafte Datenbankabfrage bei Suche ohne definierte Sortierung
  • +
+
+

5.5.3.0 (2016-02-16)

+
    +
  • alternative Sortierung bei identischen Relevanzwerten einstellbar
  • +
  • versteckte Kategorien werden in Attributfilter berücksichtigt
  • +
  • Attributfilter speichert Auswahl sprachabhängig
  • +
  • Direktsuche mit leerem Suchparameter korrigiert
  • +
  • Suggestsuche bei aktiviertem EE-Backend-Cache korrigiert
  • +
+
+

5.5.2.0 (2016-01-21)

+
    +
  • semantische Datenbank bereinigt
  • +
  • semantische Suche verwendet gewählte Sprache zur Auswahl der Alternativbegriffe
  • +
  • Datenbankabfragen optimiert
  • +
  • modulspezifische Logging-Auswertung eingefügt
  • +
  • statistische Auswertungen (ohne grafische Auswertung)auch für EE-Installationen verfügbar gemacht
  • +
  • Handbuch überarbeitet
  • +
  • Relevanz-Abfrage wird bei leerer Suchabfrage nicht erstellt
  • +
  • 4.7 / 5.0-Templates entfernt
  • +
  • 4.9 / 5.2-Templates eingefügt
  • +
  • vermeide Überladung der Listennavigation bei deaktiviertem aList-Filter
  • +
  • fehlende PageId in Response-Klasse nachgetragen
  • +
  • fehlende Template-Blocks nachgetragen
  • +
  • Hilfelinks korrigiert
  • +
  • fehlerhafte BreadCrumb auf Artikeldetailseite bei Verwendung des aListFilters korrigiert
  • +
  • selektive Funktion des Preisschiebereglers in Markenlisten korrigiert
  • +
  • überlaufender Preisschieberegler bei identischer Selektion korrigiert
  • +
  • leere Artikellisten bei 0-bis-0-Euro Preisselektion korrigiert
  • +
  • unvollständige Listennavigation korrigiert
  • +
+
+

5.5.1.1 (2015-12-21)

+
    +
  • RSS-Feed-Controller auf neue Filter angepasst
  • +
  • vermeidet Warnungen bei unvollständig übergebenen Formularen
  • +
+
+

5.5.1.0 (2015-12-14)

+
    +
  • Preisschieberegler verwendet als Auswahl nur den Preisbereich gefundener Artikel
  • +
  • Preisschieberegler behält initialen Preisbereich für Deselektion auch bei weiterer Einschränkung bei
  • +
  • Preisfilter verwendet bei Varianten nicht deren 0-Euro-Preis, sondern den Preis der Elternartikel
  • +
  • Semantic-Tabellen werden in automatischer Installation angelegt -> Semantic auch ohne Lexikon nutzbar
  • +
  • Synonym-Editor legt Neueinträge passend an
  • +
  • semantische Begriffe werden optimaler gruppiert
  • +
  • fehlende JavaScript-Variable bei Nichtanzeige des Preisschiebereglers korrigiert
  • +
  • Fehlervermeidung bei inaktivem Modul
  • +
  • Navigationsparamter korrigiert
  • +
  • Groß-/Kleinschreibung in Synonym-Tabellen korrigiert
  • +
  • Relevanz-Analyse-Popup ist vergrößerbar
  • +
+
+

5.5.0.1 (2015-09-01)

+
    +
  • optimierte Zeichensatzbehandlung innerhalb der Suggestsuche
  • +
  • Artikellistenfilterung verwendet Schnellsortierung der Kategorien
  • +
  • optionale Parameter der Suggest-Suchlinks deaktivierbar (config-Parameter)
  • +
  • Fehler bei Extraktion der Log-Parameter in Statistik korrigiert
  • +
  • vermeidet Warnungen bei unvollständig übergebenen Formularen
  • +
+
+

5.5.0.0 (2015-08-27)

+
    +
  • Filter können in Kategorie-, Hersteller- und Markenansicht genutzt werden
  • +
  • bei Attributen können mehrere Filterwerte gewählt werden
  • +
  • Filter-Löschen-Option eingefügt
  • +
  • selektierte Attributsfilter werden intern gespeichert, keine Parameterübergabe nötig
  • +
  • Erweiterbarkeit verbessert (TPL-Block, CSS)
  • +
  • Mobile-Support auch für Shopversion 4.7 / 5.0
  • +
+
+

5.4.0.3 (2015-08-27)

+
    +
  • unvollständig zusammengeführte Templates ergänzt
  • +
+
+

5.4.0.2 (2015-08-05)

+
    +
  • fehlende Navigationsparameter für Startseite nachgetragen
  • +
  • Sortierrichtung für Hersteller- und Lieferantenfilter korrigiert
  • +
  • Inhaltssuche wird nur mit gesetztem Suchparameter ausgeführt
  • +
  • ModCfg-Prüf-Blöcke korrigiert
  • +
  • Datenbankabfrage für attributgefilterte Variantenliste korrigiert
  • +
  • fehlendes getSortId() für ältere Shopversionen nachgetragen
  • +
+
+

5.4.0.1 (2015-07-14)

+
    +
  • Groß-/Kleinschreibung der Felder der semantischen Datenbank korrigiert
  • +
+
+

5.4.0.0 (2015-02-04)

+
    +
  • Kategorien können von Verwendung in Suche ausgeschlossen werden
  • +
  • zusätzlicher Phonetic-Generator für besseres Handling mit Vokalen integriert
  • +
  • phonetischer Index optimiert
  • +
  • JavaScript-Code auf bessere Kompatibilität angepasst
  • +
  • Template der Schnellsuche ist über Template-Block erweiterbar
  • +
  • kleine Fehler in Abfrage-Generierung behoben
  • +
+
+

5.3.0.0

+
    +
  • Unterstützung für OXID Mobile Theme hinzugefügt
  • +
  • Querygenerierung in Statistikanzeige korrigiert
  • +
  • Kompatibilität für eShop 4.7.0 + 4.7.1 erweitert
  • +
+
+

5.2.1.0

+
    +
  • Attributsortierung in Filtern ermöglicht
  • +
  • Indexgenerierung prüft vorab auf konsistente oxarticle-oxartextends-Daten
  • +
  • Hauptsynonyme sind nun auch löschbar
  • +
  • "Einfügungen und Auslassungen erlauben" auch bei kurzen Suchbegriffen ermöglicht
  • +
  • explizite Prüfung auf inaktiven Vaterartikel integriert
  • +
  • kleinere Textkorrekturen und Logikfehler beseitigt
  • +
+
+

5.2.0.2

+
    +
  • korrigiert: Abfragegenerierung ohne vorgegebene Artikelsortierung
  • +
  • korrigiert: inaktives Modul erzeugt Fehler bzgl. mangelnder Ressourcen
  • +
+
+

5.2.0.1

+
    +
  • Precheck aktualisiert
  • +
  • für 4.7.0 + 4.7.1: fehlende getSortIdent-Methode eingefügt
  • +
  • fehlende Tabellendefinition in Query nachgetragen
  • +
+
+

5.2.0.0

+
    +
  • Wortrelevanz wird in Relevanzermittlung zusätzlich berücksichtigt
  • +
  • Ähnlichkeitssuche berücksichtigt Mehrzahlformen auch bei kurzen Suchworten
  • +
+
+

5.1.1.1

+
    +
  • fehlerhafte Datenbankabfrage bei Kombination von "Variantensuche" und Feldern in "oxartextends" korrigiert
  • +
+
+

5.1.1.0

+
    +
  • optionales Popup während des Suchvorgangs eingefügt
  • +
  • DirectShow verwendet nur suchbare Artikel
  • +
  • Kompatibilität zu OXID eShop 4.8 / 5.0 hergestellt
  • +
+
+

5.1.0.2

+
    +
  • Datenbankabfragen korrigiert
  • +
+
+

5.1.0.1

+
    +
  • Phonetic-Generator tickerte falsch
  • +
  • Semantic-Editor war aufgrund undefinierter Sortierung nicht aufrufbar
  • +
  • fehlendes Template korrigiert
  • +
  • Attributsortierung geändert
  • +
+
+

5.1.0.0

+
    +
  • Attribute können mehrfach gefiltert werden
  • +
  • nicht zu Attributen zugeordnete Artikel können gefiltert werden
  • +
  • Templates wurden für einfachere Erweiterung mit Blöcken ausgerüstet
  • +
  • kleinere Bugfixes
  • +
+
+

5.0.0.1

+
    +
  • Query für Attributlisten korrigiert
  • +
  • Smarty-Variable in Schnellsuche ergänzt
  • +
  • nicht ausführbarer Debug-Modus unter mySQL 5.5 korrigiert
  • +
+
+

5.0.0.0

+
    +
  • Performanceoptimierung bei großen Suchergebnislisten
  • +
  • Optimierung auf Cluster
  • +
  • Statistikauswertungen erweitert
  • +
  • Suchsyntax optimiert
  • +
+
+

4.0.2.0

+
    +
  • eigene Suchformularfelder suchen nun auch in Bereich (von / bis-Suche)
  • +
  • kleiner Fehler bei der Verarbeitung der eigenen Suchformularfelder beseitigt
  • +
+
+

4.0.1.1

+
    +
  • OXID-Bug in Artikelsortierung behoben
  • +
+
+

4.0.1.0

+
    +
  • automatische Installation korrigiert
  • +
  • Suchparameter bei Direktanzeige korrigiert
  • +
  • zusätzliche Modul-Aktiv-Prüfungen integriert
  • +
  • Treffer in Suggest-List zeigt auf Shopmandant
  • +
  • "einfügen/auslassen"-Abfrage korrigiert
  • +
  • Erweiterbarkeit verbessert
  • +
  • Similar-Light-Suche korrigiert
  • +
  • Ergebnis-Feld-Analyse eingefügt
  • +
  • fehlerhafte Suchbegriff-Verknüpfung korrigiert
  • +
  • fehlerhafte Hersteller-Relevanz korrigiert
  • +
+
+

4.0.0.1

+
    +
  • Korrektur auf neue SQL-Query-Syntax
  • +
+
+

4.0.0.0

+
    +
  • Umsetzung in neuer Dateistruktur des OXID 4.7 (PE) / 5.0 (EE)
  • +
+
+

3.12.1

+
    +
  • geänderte Logik für OXID 4.6.4: Navigationslinks der Suchergebnisseite enthielten unzureichende Parameter
  • +
+
+

3.12.0

+
    +
  • bei gruppierten Variantenartikeln wird Kategoriefilter vom Vaterartikel generiert
  • +
  • bei gruppierten Variantenartikeln wird Preisfilter von ungruppierten Varianten generiert, +Anzahl wird auf Grund differierender Treffermengen am Filter ausgeblendet
  • +
  • Eingabe des Markennamens im Suchfeld findet Markenartikel (analog Kategorienamen, auch für Lieferanten)
  • +
  • Schnellsuche findet auch Contents, Marken, Lieferanten und Kategorien
  • +
  • Artikel der Schnellsuche sind nach Relevanz sortiert
  • +
  • Direktsuche findet auch Marken und Lieferanten
  • +
  • Fehler in Ermittlung der phonetischen Länge des Suchbegriffs gefixt
  • +
  • alte DB-Feldbezeichnungen im Semantic-Editor verhindert Speicherung -> behoben
  • +
  • Existenzprüfung "getSortingSql" integriert
  • +
  • getDb()-Syntax-Änderungen aus 4.6.0 eingefügt
  • +
  • Semantic prüft auch auf leeres Term-Level (nicht nur NULL)
  • +
  • Templates bis Shopversion 4.6.X
  • +
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/editions/Editionen.html b/docs/html/editions/Editionen.html new file mode 100644 index 0000000..1c685d1 --- /dev/null +++ b/docs/html/editions/Editionen.html @@ -0,0 +1,127 @@ + + + + Editionen - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Das Modul erweiterte Suche erhalten Sie in verschiedenen Editionen mit teilweise unterschiedlichem Funktionsumfang.

+

Aktuell verfügbare Editionsbereiche sind:

+
    +
  • +

    Art der Lizenzierung: Der Unterschied liegt in der Art der Lizenzberechnung und der Verfügbarkeit zufünftiger Updates.

    +
      +
    • Jahreslizenz
    • +
    • Kauflizenz
    • +
    +
  • +
  • +

    Artikellistenfilter: Der Artikellistenfilter stellt die aus den Suchergebnissen bekannten Filter auch in Kategorien, Hersteller- und Lieferantenlisten zur Verfügung.

    +
      +
    • ohne Artikellistenfilter
    • +
    • mit Artikellistenfilter
    • +
    +
  • +
+

Alle Editionsbereiche lassen sich miteinander kombinieren. Mit Ausnahme der Lizenzierungsart lassen sich die Optionen zur Laufzeit ohne Installationsaufwand anpassen.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/index.html b/docs/html/index.html new file mode 100644 index 0000000..0038d8b --- /dev/null +++ b/docs/html/index.html @@ -0,0 +1,107 @@ + + + + erweiterte Suche + + + + + + + + + + + + + + + + + + + + + + + + + +
+
+
+

erweiterte Suche

für den Oxid eShop
+ + +
+
Autor: D³ Data Development
Stand: 29.04.2022
+
Version: 7.1.0.0
+
+
+ + +
+ +
+
+
+
+

Weitere Informationen zum Modul erweiterte Suche finden Sie in unserem Shop: +https://www.oxidmodule.com/OXID-eShop/Module/Erweiterte-Suche-fuer-Oxid-PE.html

+
+
+
+
+ + + + + + + + + + + + + + diff --git a/docs/html/installation/Anforderungen/Kompatibilitaet_mit_anderen_Modulen.html b/docs/html/installation/Anforderungen/Kompatibilitaet_mit_anderen_Modulen.html new file mode 100644 index 0000000..4859688 --- /dev/null +++ b/docs/html/installation/Anforderungen/Kompatibilitaet_mit_anderen_Modulen.html @@ -0,0 +1,110 @@ + + + + Kompatibilität mit anderen Modulen - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Das Modul erweiterte Suche integriert sich auch in die Erweiterung "Visual CMS" von OXID eSales AG & digidesk - media solutions, sofern diese im Shop installiert wurde. Diese Integration wurde für die Version 3.x des "Visual CMS"-Moduls entwickelt.

+

Das Modul erweiterte Suche integriert sich auch in die Erweiterung "PsCache" von Proud Sourcing GmbH, sofern diese im Shop installiert wurde. Diese Integration wurde für die Version 3.3.x des "PsCache"-Moduls entwickelt.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Anforderungen/Systemanforderungen.html b/docs/html/installation/Anforderungen/Systemanforderungen.html new file mode 100644 index 0000000..ee076eb --- /dev/null +++ b/docs/html/installation/Anforderungen/Systemanforderungen.html @@ -0,0 +1,151 @@ + + + + Systemanforderungen - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+
    +
  • PHP Version +
      +
    • 7.3.x bis 8.0.x
    • +
    +
  • +
  • PHP Decoder +
      +
    • installierter ionCube Loader
    • +
    +
  • +
  • Shopeditionen +
      +
    • OXID eShop Community Edition (CE)
    • +
    • OXID eShop Professional Edition (PE)
    • +
    • OXID eShop Enterprise Edition (EE)
    • +
    • OXID eShop B2B Edition
    • +
    +
  • +
  • Shopversionen +
      +
    • OXID eShop in Compilation Version +
        +
      • 6.3.x
      • +
      • 6.4.x
      • +
      +
    • +
    +
  • +
  • Themes +
      +
    • wave
    • +
    • flow
    • +
    • azure
    • +
    • mobile
    • +
    +
  • +
  • D3 Modul-Connector (kostenfrei bei D3 erhältlich) ab Version 6.0.0.0
  • +
  • Installation via Composer +
  • +
+

Beachten Sie, dass die Ihnen vorliegende Modulversion entsprechend für Ihre genutzte PHP-Version sowie dem auf Ihrem Server vorhandenen Decoder (ionCube Loader) kompatibel ist. Im Zweifelsfall kontaktieren Sie uns und nennen den für Ihren Shop genutzten Decoder und die PHP-Version.

+

Kontrollieren Sie bitte auch, ob diese Modulversion für die von Ihnen eingesetzte Shopedition (Professional Edition (PE) oder Enterprise Edition (EE)) ausgelegt ist.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Anforderungen/Vorbereitungen.html b/docs/html/installation/Anforderungen/Vorbereitungen.html new file mode 100644 index 0000000..6cf4652 --- /dev/null +++ b/docs/html/installation/Anforderungen/Vorbereitungen.html @@ -0,0 +1,112 @@ + + + + Vorbereitungen - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Installieren Sie bitte zuerst unseren Modul-Connector in der erforderlichen Version. +Ob dies evtl. schon geschehen ist, können Sie im Adminbereich Ihres Shops prüfen. Existiert der Punkt Module -> Modul-Connector, können Sie die installierte Version unter Bibliotheksverwaltung ablesen. Fehlt dieser Eintrag, installieren Sie den kostenfreien Connector. +Informationen zu dessen Installation finden Sie auf unserer Homepage.

+

Klicken Sie auf den Reiter Downloads und wählen dort das für Ihre Installation passende Paket.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Deinstallation/Dateien_loeschen.html b/docs/html/installation/Deinstallation/Dateien_loeschen.html new file mode 100644 index 0000000..754be46 --- /dev/null +++ b/docs/html/installation/Deinstallation/Dateien_loeschen.html @@ -0,0 +1,116 @@ + + + + Dateien löschen - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Löschen Sie den Ordner extsearch und seine enthaltenen Elemente aus dem Verzeichnis source/modules/d3 Ihres Shops. +Bestätigen Sie anschließend im Shopadmin unter Erweiterungen -> Module -> Installierte Shop-Module die Nachricht:

+
+

Es gibt registrierte Erweiterungen im eShop, deren Verzeichnis nicht vorhanden ist.

+
+
+

Möchten Sie alle Modulinformationen einschließlich Konfigurationseinstellungen und Blockinformationen für Templates löschen?

+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Deinstallation/Datenbank_bereinigen.html b/docs/html/installation/Deinstallation/Datenbank_bereinigen.html new file mode 100644 index 0000000..a16c819 --- /dev/null +++ b/docs/html/installation/Deinstallation/Datenbank_bereinigen.html @@ -0,0 +1,143 @@ + + + + Datenbank bereinigen - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Das Modul legt Informationen in der Datenbank ab. Sofern diese Daten nicht mehr benötigt werden, können diese gelöscht werden.

+
+

Legen Sie sich vorab bitte unbedingt eine Sicherung an, um die Daten im Zweifelsfall wiederherstellen zu können.

+
+

Für das Modul erweiterte Suche sind dies die folgende Tabellen und Felder:

+
    +
  • die komplette Tabelle d3_extsearch_statisticlog +
  • +
  • die komplette Tabelle d3_extsearch_synset +
  • +
  • die komplette Tabelle d3_extsearch_term +
  • +
+

und diese Felder in bestehenden Tabellen:

+
    +
  • in Tabelle oxartextends: +
      +
    • das Feld D3_PHONETIC +
    • +
    • das Feld D3_PHONETIC_1 +
    • +
    • das Feld D3_PHONETIC_... +
    • +
    +
  • +
+

sowie diese Einträge in bestehenden Tabellen:

+
    +
  • in Tabelle d3_cfg_mod: +
      +
    • den Eintrag oxmodid = "d3_extsearch" **)
    • +
    +
  • +
+

**) Diesen Eintrag gibt es ggf. für jeden Subshop. Entfernen Sie diesen nur für die Mandanten, in denen das Modul nicht mehr installiert ist.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Deinstallation/Modul_aus_der_Installation_entfernen.html b/docs/html/installation/Deinstallation/Modul_aus_der_Installation_entfernen.html new file mode 100644 index 0000000..f321b0e --- /dev/null +++ b/docs/html/installation/Deinstallation/Modul_aus_der_Installation_entfernen.html @@ -0,0 +1,115 @@ + + + + Modul aus der Installation entfernen - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

auf der Kommandozeile

+

Starten Sie die Konsole Ihres Webservers und wechseln in das Hauptverzeichnis Ihres Shops (oberhalb des source- und vendor-Verzeichnisses). Führen Sie Sie dort diesen Befehl aus:

+
php composer remove d3/extsearch --no-update
+
+
+

Benötigt Ihre Installation einen anderen Aufruf von Composer, ändern Sie den Befehl bitte entsprechend ab. Für weitere Optionen dieses Befehls lesen Sie bitte die Dokumentation von Composer.

+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Deinstallation/Modul_deaktivieren.html b/docs/html/installation/Deinstallation/Modul_deaktivieren.html new file mode 100644 index 0000000..f79a919 --- /dev/null +++ b/docs/html/installation/Deinstallation/Modul_deaktivieren.html @@ -0,0 +1,120 @@ + + + + Modul deaktivieren - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

im Adminbereich

+

Deaktivieren Sie das Modul unter Erweiterungen -> Module. Klicken Sie nach Auswahl von erweiterte Suche auf den Button Deaktivieren.

+

oder auf der Kommandozeile

+

Alternativ können Sie die Moduldeaktivierung auch über die Kommandozeile (CLI) im Hauptverzeichnis Ihres Shops (oberhalb des source- und vendor-Verzeichnisses) durchführen.

+
./vendor/bin/oe-console oe:module:deactivate d3_extsearch
+
+
+

Enterprise Edition: Achten Sie darauf, dass das Modul in allen weiteren Shops (Mall) ebenfalls deaktiviert werden muss.

+
+
+

Enterprise Edition: Zur Deaktivierung in einem bestimmten Shopmandanten verwenden Sie das --shop-id-Argument (...oe-console --shop-id 1 oe:module...)

+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Deinstallation/Modulerweiterungen_deaktivieren_und_entfernen.html b/docs/html/installation/Deinstallation/Modulerweiterungen_deaktivieren_und_entfernen.html new file mode 100644 index 0000000..209e148 --- /dev/null +++ b/docs/html/installation/Deinstallation/Modulerweiterungen_deaktivieren_und_entfernen.html @@ -0,0 +1,109 @@ + + + + Modulerweiterungen deaktivieren und entfernen - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/installation/Deinstallation/TMP-Ordner_leeren.html b/docs/html/installation/Deinstallation/TMP-Ordner_leeren.html new file mode 100644 index 0000000..4a5feaf --- /dev/null +++ b/docs/html/installation/Deinstallation/TMP-Ordner_leeren.html @@ -0,0 +1,121 @@ + + + + TMP-Ordner leeren - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

im Adminbereich

+

Leeren Sie das Verzeichnis tmp über Admin -> Module -> Modul-Connector -> TMP leeren. Markieren Sie komplett leeren und klicken auf TMP leeren.

+

Sofern die Views nicht automatisch aktualisiert werden, führen Sie dies noch durch.

+

oder auf der Kommandozeile

+

Alle TMP-leeren-Aktionen stehen Ihnen ebenfalls auf der Kommandozeile (CLI) zur Verfügung. Führen Sie diesen Befehl im Hauptverzeichnis Ihres Shops (oberhalb des source- und vendor-Verzeichnisses) aus:

+
./vendor/bin/d3cleartmp
+
+
+

Erfordert Ihre Installation eine andere Vorgehensweise zum Leeren des Caches oder zum Aktualisieren der Datenbank-Viewtabellen, führen Sie diese bitte aus.

+
+
+

Beim Kommandozeilenaufruf werden Ihnen weitere Optionen gezeigt, mit denen Sie die Aktion gezielt steuern können.

+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Installation.html b/docs/html/installation/Installation.html new file mode 100644 index 0000000..b8dd80f --- /dev/null +++ b/docs/html/installation/Installation.html @@ -0,0 +1,123 @@ + + + + Installation / Update / Deinstallation - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/installation/Installationshinweise/Cachevermeidung.html b/docs/html/installation/Installationshinweise/Cachevermeidung.html new file mode 100644 index 0000000..6f69a29 --- /dev/null +++ b/docs/html/installation/Installationshinweise/Cachevermeidung.html @@ -0,0 +1,135 @@ + + + + Cachevermeidung - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Serverseitiges Caching kann die Performance der Shopinstallation deutlich verbessern. Jedoch sind die von der Suche generierten Inhalte dynamisch und sollten nicht in den Cache aufgenommen werden. Ansonsten würden die Besucher gegenseitig ihre Ergebnisse sehen.

+

Setzen Sie eine Cachelösung ein, definieren Sie bitte speziell für die Suche, wann bestimmte Seiten nicht in den Cache aufgenommen werden sollen. +Mit jeder der folgenden Variablen kann ermittelt werden, ob dynamische Inhalte generiert wurden und ob die Aufnahme in den Cache verhindert werden soll:

+
    +
  • +

    Request

    +
      +
    • +isextsearch +
    • +
    +
  • +
  • +

    Session

    +
      +
    • +d3searchattrib +
    • +
    • +d3searchattribmulti +
    • +
    • +d3searchattribmultiselector +
    • +
    +
  • +
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Installationspruefung.html b/docs/html/installation/Installationspruefung.html new file mode 100644 index 0000000..eec56ea --- /dev/null +++ b/docs/html/installation/Installationspruefung.html @@ -0,0 +1,129 @@ + + + + Installationsprüfung - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Um die erfolgreiche Installation zu prüfen, können Sie die folgende(n) Checkliste(n) verwenden:

+

Einstellungsunabhängige Prüfungen

+

Backend

+
    +
  • Modul ist unter Erweiterungen -> Module aktiv geschaltet
  • +
  • Modul ist unter Module -> Modul-Connector -> Modulverwaltung aktiv geschaltet
  • +
  • Modul zeigt unter Module -> erweiterte Suche einen eigenen Bereich für Einstellungen
  • +
  • Modul zeigt unter Artikel verwalten -> Artikel -> Erweitert die Einstellung Wichtigkeit des Artikels im Sortiment +
  • +
  • Modul zeigt unter Artikel verwalten -> Attribute -> Stamm die Einstellung Attribut wird in Suche für Filter nicht verwendet +
  • +
  • Modul zeigt unter Kundeninformationen -> CMS-Seiten -> Stamm die Einstellung CMS kann gesucht werden +
  • +
+

Einstellungsabhängige Prüfungen

+

Frontend

+
    +
  • Modul zeigt bei Eingabe des Suchbegriffs sofort die Suggest-Suche
  • +
  • Suchergebnisliste zeigt zusätzliche Filtermöglichkeiten (z.B. nach Kategorie)
  • +
  • Suchbegriff ist im Artikeltitel der Suchergebnisse hervorgehoben
  • +
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Neuinstallation/Cronjob_einrichten.html b/docs/html/installation/Neuinstallation/Cronjob_einrichten.html new file mode 100644 index 0000000..940e011 --- /dev/null +++ b/docs/html/installation/Neuinstallation/Cronjob_einrichten.html @@ -0,0 +1,116 @@ + + + + Cronjob einrichten - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Legen Sie den Cronjob für die automatische Bearbeitung der eingerichteten Aufträge an. Die für die Anlage benötigten Daten finden Sie im Adminbereich des Moduls unter Module -> erweiterte Suche -> Einstellungen -> Grundeinstellungen. Weitere Informationen zum Anlegen von Cronjobs finden Sie in unserer FAQ.

+
+

Sie sollten unbedingt den Aufruf von .sh-Dateien via Browser verhindern, so dass kein Unbefugter die Datei von außen aufrufen kann. Dazu können Sie z.B. die .htaccess-Datei des Shops um folgende Zeilen erweitern:

+
+
    <Files *.sh>
+      Require all denied
+    </Files>
+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Neuinstallation/Lizenz_eintragen.html b/docs/html/installation/Neuinstallation/Lizenz_eintragen.html new file mode 100644 index 0000000..fd851bd --- /dev/null +++ b/docs/html/installation/Neuinstallation/Lizenz_eintragen.html @@ -0,0 +1,112 @@ + + + + Lizenzschlüssel eintragen - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

im Adminbereich

+

Das Modul verwendet Lizenzschlüssel, um die Lizenzverwaltung für Sie und auch für uns einfacher zu gestalten. Hierbei haben Sie je nach Modul die Wahl zwischen einer kostenfreien Testlizenz und einer Lizenz für den Einsatz im Livebetrieb.

+

Speziell erweiterte Suche wird in unterschiedlichen Editionen für den Livebetrieb angeboten. Besuchen Sie unseren Moduleshop, um mehr darüber zu erfahren.

+

Rufen Sie zum Anfordern des Lizenzschlüssels die Modulverwaltung im Adminbereich unter Module -> Modul-Connector -> Modulverwaltung auf. Klappen Sie den Eintrag des jeweiligen Moduls aus. Sofern erforderlich, können Sie hier den Lizenzassistenten starten, der schnell und einfach ihr Modul aktiviert.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Neuinstallation/Modul_hinzufuegen.html b/docs/html/installation/Neuinstallation/Modul_hinzufuegen.html new file mode 100644 index 0000000..c0e15f4 --- /dev/null +++ b/docs/html/installation/Neuinstallation/Modul_hinzufuegen.html @@ -0,0 +1,118 @@ + + + + Modul zur Installation hinzufügen - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

auf der Kommandozeile

+

Führen Sie in der Konsole im Hauptverzeichnis Ihres Shops (oberhalb des source- und vendor-Verzeichnisses) diesen Befehl aus, um das Modul erweiterte Suche zur Installation hinzuzufügen:

+
php composer require d3/extsearch:^7.1.0.0 --update-no-dev
+
+
+

Achten Sie darauf, dass Composer für die Installation die selbe PHP-Version verwendet, in der auch Ihr Shop ausgeführt wird. Sie erhalten sonst möglicherweise unpassende Modulpakete.

+
+
+

Benötigt Ihre Installation einen anderen Aufruf von Composer, ändern Sie den Befehl bitte entsprechend ab. Für weitere Optionen dieses Befehls lesen Sie bitte die Dokumentation von Composer.

+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Neuinstallation/Modul_im_Shop_aktivieren.html b/docs/html/installation/Neuinstallation/Modul_im_Shop_aktivieren.html new file mode 100644 index 0000000..85477ec --- /dev/null +++ b/docs/html/installation/Neuinstallation/Modul_im_Shop_aktivieren.html @@ -0,0 +1,120 @@ + + + + Modul im Shop aktivieren - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

im Adminbereich

+

Aktivieren Sie das Modul über den Shopadmin unter Erweiterungen -> Module. Klicken Sie nach Auswahl von erweiterte Suche auf den Button Aktivieren.

+

oder auf der Kommandozeile

+

Alternativ können Sie die Modulaktivierung auch auf der Kommandozeile (CLI) im Hauptverzeichnis Ihres Shops (oberhalb des source- und vendor-Verzeichnisses) durchführen.

+
./vendor/bin/oe-console oe:module:activate d3_extsearch
+
+
+

Enterprise Edition: Achten Sie darauf, dass das Modul in weiteren Shops (Mall) ebenfalls aktiviert werden muss, um dessen Funktion dort auch zu nutzen.

+
+
+

Enterprise Edition: Zur Aktivierung in einem bestimmten Shopmandanten verwenden Sie das --shop-id-Argument (...oe-console --shop-id 1 oe:module...)

+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Neuinstallation/Providerspezifische_Installation.html b/docs/html/installation/Neuinstallation/Providerspezifische_Installation.html new file mode 100644 index 0000000..0be70eb --- /dev/null +++ b/docs/html/installation/Neuinstallation/Providerspezifische_Installation.html @@ -0,0 +1,109 @@ + + + + Providerspezifische Installation - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/installation/Neuinstallation/Shopanpassungen_installieren.html b/docs/html/installation/Neuinstallation/Shopanpassungen_installieren.html new file mode 100644 index 0000000..0f92231 --- /dev/null +++ b/docs/html/installation/Neuinstallation/Shopanpassungen_installieren.html @@ -0,0 +1,117 @@ + + + + Shopanpassungen installieren - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

im Adminbereich

+

Direkt nach der Modulaktivierung startet der Assistent, der Sie durch die Shopanpassung führt. Darin können Sie verschiedene Optionen der Installation wählen.

+

Den Installationsassistenten finden Sie auch unter den Menüpunkten Admin -> Module -> Modul-Connector -> Modulverwaltung -> Modulinstallation.

+

Bei tiefgreifenden Änderungen an Ihrem Shop (z.B. Hinzufügen weiterer Sprachen oder Mandanten) rufen Sie den Installationsassistenten bitte erneut auf, um dann eventuell notwendige Nacharbeiten für das Modul ausführen zu lassen.

+

Möchten Sie die Änderungen manuell installieren, können Sie sich über diesen Assistenten ebenfalls eine Checkliste erstellen.

+

oder auf der Kommandozeile

+

Der Installationsassistent steht Ihnen ebenfalls auf der Kommandozeile (CLI) zur Verfügung. Führen Sie diesen Befehl im Hauptverzeichnis Ihres Shops (oberhalb des source- und vendor-Verzeichnisses) aus:

+
./vendor/bin/d3modules_install
+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Neuinstallation/TMP-Ordner_leeren.html b/docs/html/installation/Neuinstallation/TMP-Ordner_leeren.html new file mode 100644 index 0000000..d682369 --- /dev/null +++ b/docs/html/installation/Neuinstallation/TMP-Ordner_leeren.html @@ -0,0 +1,121 @@ + + + + TMP-Ordner leeren - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

im Adminbereich

+

Leeren Sie das Verzeichnis tmp über Admin -> Module -> Modul-Connector -> TMP leeren. Markieren Sie komplett leeren und klicken auf TMP leeren.

+

Sofern die Views nicht automatisch aktualisiert werden, führen Sie dies noch durch.

+

oder auf der Kommandozeile

+

Alle TMP-leeren-Aktionen stehen Ihnen ebenfalls auf der Kommandozeile (CLI) zur Verfügung. Führen Sie diesen Befehl im Hauptverzeichnis Ihres Shops (oberhalb des source- und vendor-Verzeichnisses) aus:

+
./vendor/bin/d3cleartmp
+
+
+

Erfordert Ihre Installation eine andere Vorgehensweise zum Leeren des Caches oder zum Aktualisieren der Datenbank-Viewtabellen, führen Sie diese bitte aus.

+
+
+

Beim Kommandozeilenaufruf werden Ihnen weitere Optionen gezeigt, mit denen Sie die Aktion gezielt steuern können.

+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Neuinstallation/Updatefaehigkeit.html b/docs/html/installation/Neuinstallation/Updatefaehigkeit.html new file mode 100644 index 0000000..4a60dfc --- /dev/null +++ b/docs/html/installation/Neuinstallation/Updatefaehigkeit.html @@ -0,0 +1,110 @@ + + + + Updatefähigkeit - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Bei individuellen Änderungen von Moduldateien empfehlen wir, jeweils die Überladungsmöglichkeiten des Shops dafür zu verwenden. So brauchen Sie die originalen Moduldateien nicht verändern und erhalten sich so die Updatefähigkeit des Shops und des Moduls. Beachten Sie, dass Moduldateien bei Updateinstallationen überschrieben werden.

+

Weitere Informationen zu den Überladungsmöglichkeiten verschiedener Dateien finden Sie in unserer FAQ.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Neuinstallation/Verwendung_eigener_Themes.html b/docs/html/installation/Neuinstallation/Verwendung_eigener_Themes.html new file mode 100644 index 0000000..7215179 --- /dev/null +++ b/docs/html/installation/Neuinstallation/Verwendung_eigener_Themes.html @@ -0,0 +1,118 @@ + + + + Verwendung eigener Themes - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Das Modul ist für die Verwendung mit den folgenden OXID-Themes vorbereitet:

+
    +
  • Wave
  • +
  • Flow
  • +
  • Azure
  • +
  • Mobile
  • +
+

Verwenden Sie in Ihrem Shop ein angepasstes Verzeichnis für Ihre Templates (neues Theme oder CustomTheme), kopieren Sie die Templates und / oder die CSS-Dateien in die neuen Ordner.

+

Ähnelt Ihr neues Theme technisch einem der OXID-Originale, können Sie dieses darauf umleiten. Childs von originalen OXID- Themes benötigen keine Umleitung.

+

Weitere Informationen zur Umleitung finden Sie in unserer FAQ.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Neuinstallation/Vorbereitung.html b/docs/html/installation/Neuinstallation/Vorbereitung.html new file mode 100644 index 0000000..dcb494b --- /dev/null +++ b/docs/html/installation/Neuinstallation/Vorbereitung.html @@ -0,0 +1,111 @@ + + + + Vorbereitungen - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Installieren Sie bitte zuerst unseren Modul-Connector in der erforderlichen Version. Ob dies evtl. schon geschehen ist, können Sie im Adminbereich Ihres Shops prüfen. +Existiert der Punkt Module -> Modul-Connector, können Sie die installierte Version unter Bibliotheksverwaltung ablesen. +Fehlt dieser Eintrag, installieren Sie den Modul-Connector bitte vorab. Hinweise zu dessen Installation finden Sie in der Modul-Connector Dokumentation.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Neuinstallation/index.html b/docs/html/installation/Neuinstallation/index.html new file mode 100644 index 0000000..88605a3 --- /dev/null +++ b/docs/html/installation/Neuinstallation/index.html @@ -0,0 +1,116 @@ + + + + Neuinstallation - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/installation/Schnellstart.html b/docs/html/installation/Schnellstart.html new file mode 100644 index 0000000..c9c74e4 --- /dev/null +++ b/docs/html/installation/Schnellstart.html @@ -0,0 +1,112 @@ + + + + Schnellstart - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Das Modul erweiterte Suche bringt einen umfangreichen Adminbereich mit, in dem Sie die Konfigurationseinstellungen des Moduls setzen können. Über das Menü Module -> erweiterte Suche -> Einstellungen erreichen Sie die Einstellseiten. Arbeiten Sie idealerweise die Optionen einmal durch. Hinweise zu den einzelnen Einstellungen finden Sie in dem dahinter stehenden Fragezeichenfeld. Durch einen Klick darauf öffnet sich der Hinweistext.

+

Die meisten Optionen sind zusätzlich im Handbuch zum Modul umfangreicher beschrieben.

+

Nach Abschluss der Einstellungen ist es notwendig, den Suchindex der eingepflegten Artikel zu generieren. Die Option dafür finden Sie ebenfalls im Adminbereich zum Modul im Tab Grundeinstellungen. Lesen Sie für weitere Informationen zur Indexgenerierung auch den Abschnitt im Modulhandbuch.

+

Im Frontend des Shops werden Sie die Installation des Moduls durch verbesserte Reaktionen des Shops bemerken. Je nach Einstellung öffnet sich bei der Eingabe des Suchwortes das Fenster der Schnellsuche. Senden Sie die Suchanfrage ab, werden zu den Treffern zusätzliche Filtermöglichkeiten angeboten. Kontrollieren Sie die geänderten Reaktionen der Shopsuche, bevor Sie diese für die Shopbesucher aktivieren.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Update/Dateien_erneuern.html b/docs/html/installation/Update/Dateien_erneuern.html new file mode 100644 index 0000000..e4edc96 --- /dev/null +++ b/docs/html/installation/Update/Dateien_erneuern.html @@ -0,0 +1,120 @@ + + + + Dateien erneuern - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

auf der Kommandozeile

+

Starten Sie die Konsole Ihres Webservers und wechseln in das Hauptverzeichnis Ihres +Shops (oberhalb des source- und vendor-Verzeichnisses). Führen Sie dort diesen Befehl aus:

+
php composer require d3/extsearch:^7.1.0.0 --update-no-dev
+
+

Im weiteren Ablauf werden Sie gefragt, ob die Moduldateien überschrieben werden sollen. Bestätigen Sie dies für den Eintrag d3/extsearch.

+
+

Achten Sie darauf, dass Composer für die Installation die selbe PHP-Version verwendet, in der auch Ihr Shop ausgeführt wird. Sie erhalten sonst möglicherweise unpassende Modulpakete.

+
+
+

Benötigt Ihre Installation einen anderen Aufruf von Composer, ändern Sie den Befehl bitte entsprechend ab. Für weitere Optionen dieses Befehls lesen Sie bitte die Dokumentation von Composer.

+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Update/Erweiterungen_anpassen.html b/docs/html/installation/Update/Erweiterungen_anpassen.html new file mode 100644 index 0000000..34bb5e1 --- /dev/null +++ b/docs/html/installation/Update/Erweiterungen_anpassen.html @@ -0,0 +1,109 @@ + + + + Erweiterungen anpassen - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/installation/Update/Lizenzschluessel_aktualisieren.html b/docs/html/installation/Update/Lizenzschluessel_aktualisieren.html new file mode 100644 index 0000000..12da843 --- /dev/null +++ b/docs/html/installation/Update/Lizenzschluessel_aktualisieren.html @@ -0,0 +1,110 @@ + + + + Lizenzschlüssel aktualisieren - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/installation/Update/Modul_deaktivieren.html b/docs/html/installation/Update/Modul_deaktivieren.html new file mode 100644 index 0000000..5d3c235 --- /dev/null +++ b/docs/html/installation/Update/Modul_deaktivieren.html @@ -0,0 +1,120 @@ + + + + Modul deaktivieren - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

im Adminbereich

+

Deaktivieren Sie das Modul unter Erweiterungen -> Module. Klicken Sie nach Auswahl von erweiterte Suche auf den Button Deaktivieren.

+

oder auf der Kommandozeile

+

Alternativ können Sie die Moduldeaktivierung auch über die Kommandozeile (CLI) im Hauptverzeichnis Ihres Shops (oberhalb des source- und vendor-Verzeichnisses) durchführen.

+
./vendor/bin/oe-console oe:module:deactivate d3_extsearch
+
+
+

Enterprise Edition: Achten Sie darauf, dass das Modul in allen weiteren Shops (Mall) ebenfalls deaktiviert werden muss.

+
+
+

Enterprise Edition: Zur Deaktivierung in einem bestimmten Shopmandanten verwenden Sie das --shop-id-Argument (...oe-console --shop-id 1 oe:module...)

+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Update/Modulinformationen_aktualisieren.html b/docs/html/installation/Update/Modulinformationen_aktualisieren.html new file mode 100644 index 0000000..78a4c86 --- /dev/null +++ b/docs/html/installation/Update/Modulinformationen_aktualisieren.html @@ -0,0 +1,120 @@ + + + + Modulinformationen aktualisieren - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

im Adminbereich

+

Wechseln Sie im Adminbereich zu Erweiterungen -> Module. Klicken Sie nach Auswahl von erweiterte Suche auf den Button Aktivieren.

+

oder auf der Kommandozeile

+

Alternativ können Sie die Modulaktivierung auch über die Kommandozeile (CLI) im Hauptverzeichnis Ihres Shops (oberhalb des source- und vendor-Verzeichnisses) durchführen.

+
./vendor/bin/oe-console oe:module:activate d3_extsearch
+
+
+

Enterprise Edition: Achten Sie darauf, dass das Modul in weiteren Shops (Mall) ebenfalls aktiviert werden muss, um dessen Funktion dort auch zu nutzen.

+
+
+

Enterprise Edition: Zur Aktivierung in einem bestimmten Shopmandanten verwenden Sie das --shop-id-Argument (...oe-console --shop-id 1 oe:module...)

+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Update/Providerspezifische_Installation.html b/docs/html/installation/Update/Providerspezifische_Installation.html new file mode 100644 index 0000000..32f5191 --- /dev/null +++ b/docs/html/installation/Update/Providerspezifische_Installation.html @@ -0,0 +1,109 @@ + + + + Providerspezifische Installation - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/installation/Update/Shopanpassungen_installieren.html b/docs/html/installation/Update/Shopanpassungen_installieren.html new file mode 100644 index 0000000..aad0bab --- /dev/null +++ b/docs/html/installation/Update/Shopanpassungen_installieren.html @@ -0,0 +1,117 @@ + + + + Shopanpassungen installieren - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

im Adminbereich

+

Ob Shopanpassungen notwendig sind, ist von der Versionsänderung des Moduls abhängig.

+

Möglicherweise sehen Sie nach dem Neuaktivieren des Moduls den Installationsassistent, der Sie durch die Änderungen führt. Folgen Sie dann den einzelnen Schritten. Möchten Sie die Änderungen manuell installieren, können Sie sich über diesen Assistenten ebenfalls eine Checkliste erstellen.

+

Wird der Assistent nicht gezeigt (Sie sehen wieder die Modulübersicht), waren keine Anpassungen am Shop notwendig.

+

Ob erforderliche Updates ausgeführt werden sollen, können Sie jederzeit im Adminbereich unter Module -> Modul-Connector -> Modulverwaltung -> Modulinstallation prüfen.

+

oder auf der Kommandozeile

+

Der Installationsassistent steht Ihnen ebenfalls auf der Kommandozeile (CLI) zur Verfügung. Führen Sie diesen Befehl im Hauptverzeichnis Ihres Shops (oberhalb des source- und vendor-Verzeichnisses) aus:

+
./vendor/bin/d3modules_install
+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Update/TMP-Ordner_leeren.html b/docs/html/installation/Update/TMP-Ordner_leeren.html new file mode 100644 index 0000000..547a998 --- /dev/null +++ b/docs/html/installation/Update/TMP-Ordner_leeren.html @@ -0,0 +1,121 @@ + + + + TMP-Ordner leeren - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

im Adminbereich

+

Leeren Sie das Verzeichnis tmp über Admin -> Module -> Modul-Connector -> TMP leeren. Markieren Sie komplett leeren und klicken auf TMP leeren.

+

Sofern die Views nicht automatisch aktualisiert werden, führen Sie dies noch durch.

+

oder auf der Kommandozeile

+

Alle TMP-leeren-Aktionen stehen Ihnen ebenfalls auf der Kommandozeile (CLI) zur Verfügung. Führen Sie diesen Befehl im Hauptverzeichnis Ihres Shops (oberhalb des source- und vendor-Verzeichnisses) aus:

+
./vendor/bin/d3cleartmp
+
+
+

Erfordert Ihre Installation eine andere Vorgehensweise zum Leeren des Caches oder zum Aktualisieren der Datenbank-Viewtabellen, führen Sie diese bitte aus.

+
+
+

Beim Kommandozeilenaufruf werden Ihnen weitere Optionen gezeigt, mit denen Sie die Aktion gezielt steuern können.

+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/installation/Update/Updatedefinition.html b/docs/html/installation/Update/Updatedefinition.html new file mode 100644 index 0000000..b57dc8d --- /dev/null +++ b/docs/html/installation/Update/Updatedefinition.html @@ -0,0 +1,111 @@ + + + + Wann kann ein Update ausgeführt werden? - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/manual/Ergebnisanlyse.html b/docs/html/manual/Ergebnisanlyse.html new file mode 100644 index 0000000..1dcaa60 --- /dev/null +++ b/docs/html/manual/Ergebnisanlyse.html @@ -0,0 +1,122 @@ + + + + Ergebnisanalyse - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Das Modul bietet diverse Einstellungen, die Trefferlisten zu beeinflussen. Erhalten Sie für Ihre Suchanfragen +ungewollte Treffer oder eine unplausible Sortierung, steht Ihnen unser Analysetool zur Verfügung. +Öffnen Sie bitte unter Erweiterte Suche -> Einstellungen -> Grundeinstellungen -> +allgemeine Einstellungen die Ergebnis-Feld-Analyse. Es öffnet sich ein neues Fenster, in das Sie genau +die Suchbegriffe des Frontends eingeben können. Sie erhalten eine umfangreiche Tabelle, die zu jedem Treffer +aufführt, weshalb dieser in der Trefferliste enthalten ist und welche Wertigkeit der Treffer deswegen erhalten hat.

+

Die Spalten führen alle Suchbegriffe auf, die in den konfigurierten Feldern entweder ganz oder teilweise +enthalten sind und zeigt die Wertigkeit, die zur Berechnung der Sortierung verwendet wird. Werden Artikel +als Inhalt der Marken oder Kategorien gefunden, wird diese Wertigkeit ebenfalls gezeigt.

+

Unter Verwendung der Wichtigkeit wird die Sortierkennzahl jedes einzelnen Artikels berechnet und als d3Priority angezeigt. +Die hierzu verwendete Formel zeigt Ihnen unser Tool ebenfalls an.

+

Passen Sie nun die Moduleinstellungen an und prüfen Sie die Ergebnisse erneut. Beachten Sie bitte, dass Änderungen +der Einstellungen auf alle Suchanfragen gleichermaßen wirken. Kontrollieren Sie demnach bitte immer ein Set aus für +Ihren Shop typischen Suchanfragen.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/manual/Erweiterungsmoeglichkeiten.html b/docs/html/manual/Erweiterungsmoeglichkeiten.html new file mode 100644 index 0000000..276f378 --- /dev/null +++ b/docs/html/manual/Erweiterungsmoeglichkeiten.html @@ -0,0 +1,118 @@ + + + + Erweiterungsmöglichkeiten - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Allgemein

+

Viele Stellen des Frontends lassen sich unkompliziert anpassen. Dies gilt für das Design der angezeigten Fenster und Rahmen, sowie auch bestimmte Funktionalitäten.

+

Schnellsuche

+

Die Schnellsuche stellt ein per Ajax-Technologie erstelltes Trefferfenster zur Verfügung. Dieses wird, wie alle anderen Shopseiten auch, aus einem Template erstellt. Möchten Sie dieses Fenster anpassen, verwenden Sie bitte die modules/d3/extsearch/Application/views/tpl/d3_ext_search_quicksearch.tpl für inhaltliche Änderungen. Grafische Einstellungen sind in der moduleigenen CSS-Datei d3_ext_search.css notiert.

+

Filter-Auswahl

+

Die Filter-Auswahl wird oberhalb der Trefferliste angezeigt. Je nach Einstellung werden Ihnen hier Kategorien, Hersteller oder auch die Indexleiste gezeigt. Diese Elemente sind im Template modules/d3/extsearch/Application/views/tpl/theme/d3_inc_extsearch.tpl definiert. Um die Auswahlfelder der Indexleiste anzupassen, verwenden Sie die include- Aufrufe, die Sie beispielhaft im Template finden. Um die Logik müssen Sie sich hierbei nicht kümmern. Weitere Details zu den Feldern der Indexleiste finden Sie in den "!!!!!Technischen Erläuterungen" dieses Handbuchs.

+

Trefferhervorhebungen

+

Welches Format die Hervorhebung der gesuchten Begriffe hat, legen Sie im Template modules/d3/extsearch/Application/views/tpl/d3_ext_search_highlight.tpl fest. Hierbei sind alle HTML-Tags erlaubt, die im selben Template auch wieder abgeschlossen werden können.

+

Zusätzliche Formularfelder

+

Diese Funktion ist ausführlich in den "!!!!!!Technischen Erläuterungen" beschrieben.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/manual/Fragen.html b/docs/html/manual/Fragen.html new file mode 100644 index 0000000..ba930e6 --- /dev/null +++ b/docs/html/manual/Fragen.html @@ -0,0 +1,112 @@ + + + + Grundsätzliche Fragen - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Wie und wann werden Varianten gesucht?

+

Die Varianten stellen unter den Artikeln eine Besonderheit dar. Allgemeine Informationen stehen meist nur am Vaterartikel, variantenspezifische Daten sind an den Varianten hinterlegt. Ist im Shop die Variantensuche nun aktiviert, sucht der Shop neben Vaterartikeln auch nach Varianten. Jedoch müssen die Variantenartikel auch alle gesuchten Informationen enthalten.

+

Ein Beispiel: Bieten Sie T-Shirts an, gibt es üblicherweise eine Vaterartikel "T-Shirts". An den Varianten ist dieser Titel nicht mehr hinterlegt, daran steht dann z.B. nur noch die Farbangabe. Wird nun nach "T-Shirt grün" gesucht, wird die Variante möglicherweise nicht gefunden, da der Variantenartikel den Wortlaut "T-Shirt" nicht selbst enthält. Daten aus Vaterartikeln werden bis auf den Artikeltitel nicht vererbt.

+

Unsere Empfehlung: Legen Sie solche suchwichtige Begriffe als Searchkeys auch noch einmal an den Varianten selbst ab.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/manual/Inhalte.html b/docs/html/manual/Inhalte.html new file mode 100644 index 0000000..31590a9 --- /dev/null +++ b/docs/html/manual/Inhalte.html @@ -0,0 +1,110 @@ + + + + Inhalte - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Im Modulhandbuch werden weitergehende Inhalte behandelt, mit denen Sie die erweiterte Suche konfigurieren oder ergänzen können.

+

Die Beschreibung der Adminoptionen finden Sie in den Hilfetexten direkt im Adminbereich des Moduls an der jeweiligen Einstellung im ? -Schalter.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/manual/Logging.html b/docs/html/manual/Logging.html new file mode 100644 index 0000000..5291bca --- /dev/null +++ b/docs/html/manual/Logging.html @@ -0,0 +1,109 @@ + + + + Logging - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/html/manual/Optimierungen.html b/docs/html/manual/Optimierungen.html new file mode 100644 index 0000000..98f84b7 --- /dev/null +++ b/docs/html/manual/Optimierungen.html @@ -0,0 +1,132 @@ + + + + Optimierungen - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Systemleistung

+

Das Modul stellt Ihnen eine ganze Reihe an Filter- und Suchkriterien zur Verfügung. Wir investieren viel Zeit und Energie in die Optimierung der Optionen. Beachten Sie jedoch bitte, dass trotzdem jedes aktivierte Feature auch Rechenleistung Ihres Servers benötigt. Schauen Sie die Einstellungen daher bitte objektiv durch, welche davon in Ihrem Shop wirklich sinnvoll sind und auf welche Sie möglicherweise verzichten können. Nebenbei fällt es den Kunden auch leichter, sich durch eine überschaubare Trefferliste zu arbeiten, als vor einer riesigen Liste kapitulieren zu müssen.

+

Die folgende Übersicht soll Ihnen einen Anhaltspunkt liefern, welche Auswirkung die verschiedenen Einstellungen auf die Ladezeit haben kann. Da die tatsächlichen Ausführungszeiten von vielen unterschiedlichen Bedingungen abhängig sind, nutzen wir hierbei Zeiteinheiten. Wie lang solch eine Zeiteinheit ist, hängt von Ihrem System ab. Je kleiner die Zahl, umso schneller ist die Option:

+
    +
  • Standardsuche => ca. 14 Einheiten
  • +
  • Ähnliche Artikel (phonetische Suche) => ca. 14 Einheiten
  • +
  • Auslassungen und Einfügungen => ca. 2 Einheiten
  • +
  • Indexbuchstaben => ca. 10 Einheiten
  • +
  • Herstellerliste => ca. 5 Einheiten
  • +
  • Lieferantenliste => ca. 5 Einheiten
  • +
  • Kategorieliste => ca. 1 Einheit
  • +
  • CMS-Suche => ca. 0,1 Einheiten
  • +
+

Sind Sie sich über die Leistung des Moduls auf Ihrem System nicht sicher, fordern Sie bei uns bitte eine Testlizenz an. Mit dieser können Sie die Funktion und Leistung mit Ihren Artikeln auf Ihrem Server testen. Eine allgemeine Aussage ist schon auf Grund der verschiedenen Systemkonstellationen nicht möglich.

+

Suchtreffer

+

Manchmal ist es sinnvoll, Ihrem Kunden weitere Artikel zu zeigen, die er vielleicht gar nicht gesucht hat. Werden aber zu viele Treffer gezeigt, kann das den Besucher verwirren. Im kommenden Abschnitt zeigen wir Ihnen Optionen auf, mit denen Sie die Treffermenge beeinflussen können:

+
    +
  • Auslassungen oder Einfügungen erlauben: Aktivierung erhöht die Trefferanzahl
  • +
  • Verwendung mehrerer Suchworte: jedes Wort wird separat gesucht erhöht die Treffermenge
  • +
  • OR-Suche (Oxid Standard-Grundeinstellung): erhöht die Treffermenge
  • +
  • Phonetische Suche: Aktivierung erhöht die Trefferanzahl
  • +
  • Shop zeigt zusätzlich ähnliche klingende Treffer, wenn reguläre Suche maximal X Treffer: Aktivierung sowie große Anzahl erhöht die Treffermenge
  • +
  • Treffergenauigkeit bei kurzen Suchworten: weniger Genauigkeit erhöht die Treffermenge
  • +
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/manual/Optionale_Erweiterungen/phonetischer_Index.html b/docs/html/manual/Optionale_Erweiterungen/phonetischer_Index.html new file mode 100644 index 0000000..27f9c04 --- /dev/null +++ b/docs/html/manual/Optionale_Erweiterungen/phonetischer_Index.html @@ -0,0 +1,113 @@ + + + + phonetischer Index - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Für die fehlertolerante Suche haben wir einen umfangreichen Algorithmus entwickelt, der speziell auf diese Anforderungen zurechtgeschnitten ist. Die Standardentwicklung bezog sich dabei jedoch auf die deutsche Sprache.

+

Wie werden nun andere Sprachen abgedeckt?

+

Grundsätzlich ist anzumerken, dass, je ähnlicher eine Sprache zum Deutschen ist, umso zuverlässiger auch die deutsche Version der Ähnlichkeitssuche damit funktioniert. Für die englische Sprache wird also die Standardinstallation ein möglicherweise sinnvolles Ergebnis liefern. Spezielle Feinheiten der jeweiligen Sprache werden jedoch nur von dem dafür vorgesehenen Indizierungsschlüssel berücksichtigt. +Für die englische Sprache haben wir die Erweiterung für das Modul schon vorbereitet. Kontaktieren Sie uns bei Bedarf bitte für ein Angebot. Diese Erweiterungen sind nicht standardmäßig im Modul enthalten. +Setzen Sie in Ihrem Shop mehr als eine Sprache ein, können Sie für jede Shopsprache den dafür passenden Indizierungsschlüssel definieren (siehe !!!!!Konfigurationsmöglichkeiten).

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/manual/Statistik.html b/docs/html/manual/Statistik.html new file mode 100644 index 0000000..2927ebd --- /dev/null +++ b/docs/html/manual/Statistik.html @@ -0,0 +1,110 @@ + + + + Statistik - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

In der Statistik werden Ihnen Auswertungen über das Suchverhalten Ihrer Shopbesucher gezeigt. Aktivieren Sie die Statistik vorab in den Einstellungen, um Daten zu erhalten.

+

Anhand dieser Daten können Sie Ihre Artikeldaten oder auch die Einstellung der Suche im Shop optimieren.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/manual/Synonym-Editor.html b/docs/html/manual/Synonym-Editor.html new file mode 100644 index 0000000..049b4aa --- /dev/null +++ b/docs/html/manual/Synonym-Editor.html @@ -0,0 +1,124 @@ + + + + Synonym-Editor - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Der Synonym-Editor ist Teil der sinngleichen Suche. Diese ermöglicht es Ihnen, shopweit zu den bestehenden Suchbegriffen zu pflegen.

+

Hintergrund dieser Option ist, dass es für einen bestimmten Begriff unterschiedliche Worte oder regionale Abweichungen geben kann.

+

Haben Sie in Ihrem Shop zum Beispiel eine Reihe Tassen im Angebot, können diese über den Suchbegriff Tasse oder Tassen gefunden werden. Sucht Ihr Kunde jedoch beispielsweise nach Pott, erhält er keinen Treffer. Dies lässt sich im Shop zwar lösen, indem Sie den Pott an jedem Tassenartikel als Suchbegriff hinterlegen. Je nach Artikelanzahl kann dies jedoch einen enormen Pflegeaufwand bedeuten. Im Synonym-Editor können Sie die Alternativen artikelunabhängig bearbeiten.

+

Um die sinnähnliche Suche zu verwenden, aktivieren Sie diese bitte in den Einstellungen der erweiterten Suche.

+

Verwendung

+

Möchten Sie eine Umschreibung einfügen, wählen Sie im linken Menü des Adminbereichs den Synonym-Editor unter D3 Module -> erweiterte Suche -> Synonym-Editor.

+

Ist in der angezeigten Liste schon ein Eintrag farbig hinterlegt, wählen Sie über Neues Wort / Wortgruppe die Eingabe für einen Neueintrag. Zur Bearbeitung eines bestehenden Eintrages wählen Sie diesen aus der oben gezeigten Liste.

+

Hinterlegen Sie dann im Tab Stamm Ihr gewünschtes Suchwort. Das Kommentarfeld können Sie für interne Hinweise zum Begriff verwenden. Stellen Sie weiterhin die Sprache des Begriffs ein.

+

Für die Eingabe der alternativen Beschreibungen wechseln Sie bitte in den Synonyme bearbeiten-Tab. Tragen Sie dort einzeln die Alternativen ein und speichern diese jeweils. Diese sind nun automatisch mit Ihrem Stammbegriff verknüpft.

+

Tab [ Stamm ]

+

Ein Synonym besteht mindestens aus 2 Einträgen, die zueinander zugeordnet sind. Gibt es für Ihre Sinnbeschreibung noch keinen Eintrag, können Sie diesen im Stamm-Reiter anlegen. Auch die Veränderung vorhandener Wörter können Sie dort vornehmen.

+

Jede Kombination sinngleicher Worte ist einer gemeinsamen Zahl, der Synonym-ID zugeordnet. Kennen Sie die Synonym-Ident Ihres Begriffes, können Sie diese dort direkt zuordnen.

+

Tab [ Synonyme bearbeiten ]

+

Möchten Sie zu einem bestehenden Begriff eine sinngleiche Umschreibung hinzufügen, suchen Sie sich zuerst aus der Liste das schon registrierte Wort. Im Tab Synonyme bearbeiten können Sie nun weitere sinngleiche Worte hinzufügen, diese bearbeiten oder auch löschen.

+

Beachten Sie bitte, dass beim Löschen nur der einzelne Begriff entfernt wird. Andere +Synonyme dieser Gruppe bleiben weiterhin bestehen.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/manual/externeEinstellungen.html b/docs/html/manual/externeEinstellungen.html new file mode 100644 index 0000000..7cc27e1 --- /dev/null +++ b/docs/html/manual/externeEinstellungen.html @@ -0,0 +1,117 @@ + + + + Einstellungen außerhalb des Adminbereichs - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Für wenige Installation sind bestimmte Einstellungen notwendig, um das Modul z.B. an bestimmte Servereinstellungen anzupassen. Diese Optionen werden der Übersichtlichkeit wegen nicht direkt im Adminbereich definiert. Tragen Sie die Einstellungen bei Bedarf bitte direkt in die Datei config.inc.php ein.

+

UTF8-Decoding erzwingen

+

Werden Suchbegriffe mit Sonderzeichen fehlerhaft dargestellt, kann es nötig sein, dass diese unbedingt decodiert werden müssen. Hierfür ist folgende Einstellung zu verwenden:

+
$this->d3extsearch_forceUtf8decode = true;
+
+

URLs in Artikellisten nicht um Suchparameter ergänzen

+

Die folgende Option verhindert, dass Artikeladressen innerhalb der Schnellsuche um Suchparameter ergänzt werden:

+
$this->bld3ExtSearchSuggestForceHideUrlParams = true;
+
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/manual/korrespondierendeAttributswerte.html b/docs/html/manual/korrespondierendeAttributswerte.html new file mode 100644 index 0000000..46a7317 --- /dev/null +++ b/docs/html/manual/korrespondierendeAttributswerte.html @@ -0,0 +1,121 @@ + + + + korrespondierende Attributwerte - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Diese Einstellung ist für Sie relevant, wenn Sie Ihre Artikel mit Eigenschaften (Attributen) ausgerüstet haben und Sie diese den Shopbesuchern zur Filterung anbieten.

+

Häufig gibt es Produkte, die unterschiedliche Eigenschaften mit der selben oder sehr ähnlichen Bedeutung haben. Das passiert typischerweise bei Kleidergrößen aus unterschiedlichen Regionen oder auch bei fein differenzierten Farbangaben. Bieten Sie zum Beispiel Produkte in den Farben "Lachs", "Koralle" und "helles Korallenrot" an, müsste sich Ihr Shopbesucher zwischen diesen Nuancen entscheiden oder alle ähnlichen Farben wählen. Hierbei können Sie ihm mit den korrespondierenden Attributwerten helfen.

+

Durch Verküpfung der einzelnen Angaben miteinander erzeugen Sie Wertegruppen. Sobald der Besucher einen dieser Werte wählt, werden im Hintergrund automatisch alle anderen Werte der selben Gruppe ebenfalls ausgewählt. +Natürlich können Sie einen Wert auch mehreren Gruppen zuordnen (z.B. "Türkis" zur Gruppe "Blau" und auch zur Gruppe "Grün"). So wird "Türkis" zusätzlich mit gewählt, wenn Ihr Besucher blau oder auch grün gewählt hat.

+

Werte-Gruppen-Struktur

+

Um solche Wertegruppen einzurichten, gehen Sie bitte so vor:

+
    +
  1. setzen Sie im Admin am betreffenden Attribut die Option fügt korrespondierende Attributwerte hinzu +
  2. +
  3. gehen Sie zum Synonymeditor unter D3 Module -> erweiterte Suche -> Synonym-Editor, tragen Sie dort den ersten Attributswert ein und aktivieren die Verwendung für die korrespondierenden Attributwerte. Speichern Sie die Einstellungen.
  4. +
  5. wechseln Sie in den Tab Synonyme bearbeiten und tragen dort alle dazu passenden Werte ein.
  6. +
+

Für eine zusätzliche Wertegruppe führen Sie die Schritte 2 und 3 erneut aus. Beachten Sie bitte, dass die Synonymbezeichnung genau dem am Artikel hinterlegten Attributswert entsprechen muss (Groß-/Kleinschreibung wird nicht berücksichtigt).

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/manual/optischeAnpassungen.html b/docs/html/manual/optischeAnpassungen.html new file mode 100644 index 0000000..c294cc0 --- /dev/null +++ b/docs/html/manual/optischeAnpassungen.html @@ -0,0 +1,119 @@ + + + + optische Anpassungen - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Die Modulausgaben können durch eigene CSS-Styles angepasst werden. Um die Updatefähigkeit des Moduls zu +erhalten, übernehmen Sie die neuen Stylesheets bitte in modulunabhängige Dateien.

+

Die mitgelieferten Assets (CSS, JavaScripts) werden von uns über einen vorkonfigurierten Kompilierungstask +erstellt. Dieser kann via Grunt ausgeführt werden. Möchten Sie eigene oder +angepasste Inhalte daraus kompilieren lassen, installieren Sie das Modul bitte mit Composer und der +--prefer-source-Option. Dann stehen Ihnen die Quelldateien im Ordner src/build zur Verfügung.

+

Diese können direkt aufgerufen werden, um eventuelle Anpassungen im zu Grunde liegenden Theme zu +integrieren. Alternativ können Sie die Sources auch in eigene Kompilierungsprozesse einbinden, +um projektspezifische Assets zu erstellen.

+

Details zur Verwendung des Taskrunners und der Quelldateien entnehmen Sie bitte der README.md im +oben erwähnten Build-Ordner.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/manual/technische_Erlaeuterungen/Indexleiste.html b/docs/html/manual/technische_Erlaeuterungen/Indexleiste.html new file mode 100644 index 0000000..72ae24b --- /dev/null +++ b/docs/html/manual/technische_Erlaeuterungen/Indexleiste.html @@ -0,0 +1,112 @@ + + + + Indexleiste - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Die Felder der Indexleiste sind in modules/d3/extsearch/Application/views/blocks/page/search/d3_inc_extsearch.tpl aufgeführt. Sie werden durch den folgenden Aufruf darin eingebunden:

+
[{include file= $sTplPath|cat:“inc/d3_ext_search_filter.tpl“ d3fparam=“X“ d3fdesc=“Buchstabe X“}]
+
+

Die Logik hinter den Feldern ist im Template modules/d3/extsearch/Application/views/tpl/d3_ext_search_filter.tpl realisiert. Zum Aufruf ist der Parameter d3fparam zwingend notwendig. Er enthält den Suchparameter. Soll statt des Parameters in der Indexleiste eine andere Ausgabe erfolgen, können Sie diese im optionalen Parameter d3fdesc hinterlegen. Hier sind so auch Multilang-Bausteine möglich.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/manual/technische_Erlaeuterungen/MultiAttributFilter.html b/docs/html/manual/technische_Erlaeuterungen/MultiAttributFilter.html new file mode 100644 index 0000000..2771b94 --- /dev/null +++ b/docs/html/manual/technische_Erlaeuterungen/MultiAttributFilter.html @@ -0,0 +1,128 @@ + + + + Attributfilter mit Mehrfachauswahl - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Auch dieser Filter ist natürlich frei anpassbar. Die Einfachauswahl (Dropdown aus Select-Element) und die Mehrfachauswahl (Checkboxen) sind unterschiedliche Elemente, die gleichzeitig an den Browser geschickt werden. Über einen Schalter wird die jeweils ungenutzte Option ausgeblendet.

+

Soll stattdessen immer nur die Einfach- oder die Mehrfachauswahl allein gezeigt werden, können die anderen Formularfelder entfernt werden. Beachten Sie hierbei Folgendes:

+
    +
  • +

    Passen Sie die Stylesheet-Angabe so an, dass die gewünschten Eingabefelder sichtbar sind.

    +
  • +
  • +

    Prüfen Sie, ob die für den Umschalter integrierten JavaScripts noch benötigt werden.

    +
  • +
  • +

    Ob die Mehrfachauswahl genutzt wird, wird in einem versteckten Formularelement gespeichert (d3attribmultiselector). Setzen Sie diesen entsprechend so:

    +
      +
    • Bei Verwendung beider Auswahlmöglichkeiten: dynamisch wie Standardmodul
    • +
    • Bei ausschließlicher Verwendung der Einfachauswahl: fest auf nicht gesetzt +
    • +
    • Bei ausschließlicher Verwendung der Mehrfachauswahl: fest auf gesetzt +
    • +
    +
  • +
+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/manual/technische_Erlaeuterungen/Phonetic-Cronjob.html b/docs/html/manual/technische_Erlaeuterungen/Phonetic-Cronjob.html new file mode 100644 index 0000000..c268cd3 --- /dev/null +++ b/docs/html/manual/technische_Erlaeuterungen/Phonetic-Cronjob.html @@ -0,0 +1,112 @@ + + + + Phonetic-Cronjob - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Werden Ihre Artikel außerhalb des OXID-Frameworks gepflegt, muss die Erstellung des phonetischen Indexes (notwendig für die klangähnliche Suche) manuell gestartet werden. Daher haben Sie die Möglichkeit, die Generierung des Suchindex über einen externen Aufruf zu starten. Verwenden Sie dazu den folgenden Aufruf:

+
./vendor/bin/d3_extsearch_cron
+
+

Dieser Aufruf listet Ihnen alle möglichen Optionen und Aufgaben. Stellen Sie sich den gewünschten Aufruf damit zusammen und verwenden Sie diesen zum Beispiel als regelmäßig ausgeführter Cronjob.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/manual/technische_Erlaeuterungen/Relevanz.html b/docs/html/manual/technische_Erlaeuterungen/Relevanz.html new file mode 100644 index 0000000..51efe26 --- /dev/null +++ b/docs/html/manual/technische_Erlaeuterungen/Relevanz.html @@ -0,0 +1,119 @@ + + + + Relevanz und Wichtigkeiten - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Die Suche bietet zwei miteinander kombinierbare Möglichkeiten an, den Artikeln eine automatische Reihenfolge vorzugeben:

+
    +
  • Je nachdem, in welchem Feld der Treffer vorkommt (Bsp.: Artikel mit dem Suchwort im Titel werden höher gewertet, als Artikel mit dem Suchwort in der Langbeschreibung, hat der Artikel die Suchworte in beiden Feldern, addieren sich beide Relevanzwerte und der Artikel wird noch weiter oben gezeigt.
  • +
  • Je nach Wichtigkeit am Artikel: jeder Artikel kann als normal, wichtiger und sehr wichtig definiert werden. Entsprechend weit oben wird dieser in den Suchergebnissen gezeigt.
  • +
+

Die Kombination aus beiden Möglichkeiten wird durch folgende Formel umgesetzt:

+
Sortierung = (Teilrelevanz * Wichtigkeit) + (Wortrelevanz * Wichtigkeit) + Wichtigkeit
+
+

So werden wichtige Artikel mit Treffern in unwichtigen Feldern höher bewertet und schieben sich evtl. sogar vor unwichtige Artikel mit Treffern in wichtigen Feldern.

+

Die Wortrelevanz trifft zu, wenn der Suchbegriff von Leerzeichen umschlossen im jeweiligen Feld gefunden wird. Für die Teilrelevanz ist das Vorkommen des Suchbegriffes auch als Teil eines anderen Wortes ausreichend. Somit werden Artikel, die genau das gesuchte Wort enthalten, höher bewertet, als wenn das Suchwort nur als Teilbegriff vorkommt.

+

Um die Relevanz in einem Suchergebnis analysieren zu können, finden Sie im Adminbereich der erweiterten Suche unter Grundeinstellungen die Ergebnis-Feld-Analyse. Darin wird zu jedem Treffer Ihrer Suchanfrage aufgeschlüsselt, wie sich seine Relevanz ergibt. Mit diesen Informationen können Sie die Relevanz besser beeinflussen.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/manual/technische_Erlaeuterungen/zusaetzliche_Formularfelder.html b/docs/html/manual/technische_Erlaeuterungen/zusaetzliche_Formularfelder.html new file mode 100644 index 0000000..679851b --- /dev/null +++ b/docs/html/manual/technische_Erlaeuterungen/zusaetzliche_Formularfelder.html @@ -0,0 +1,160 @@ + + + + zusätzliche Formularfelder - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Mit den zusätzlichen Formularfeldern haben Sie ein mächtiges Werkzeug an der Hand, um Ihren Kunden die Suche vorzubereiten. Mit regulären Formularfeldern ("Select-Boxen", Textfeldern etc.) können Sie auch shopfremde Felder Ihrer Artikeltabelle in flexibler Art und Weise in Kombination mit den Standardoptionen durchsuchbar machen.

+

Als Anschauungsbeispiel möchte ich Ihnen die Verwendung in einem Schuh-Shop erklären. Übertragen Sie dies dann einfach auf Ihre Branche:

+

Alle Ihre Schuhe haben die Informationen über die verfügbaren Schuhgrößen in einem speziellen Feld myShoeSize in der Tabelle oxarticles abgelegt. Für ein Beispiel könnte darin stehen: 40, 41, 45, 46. Die Werte müssen zwingend mit Komma getrennt sein.

+

Ein weiteres Beispielfeld myShoeColor könnte so die Farbe des Schuhs beinhalten. So steht in unserem Farbfeld eindeutig schwarz, blau oder grün.

+

Mit Hilfe der zusätzlichen Formularfelder können Sie nun in das Template modules/d3/extsearch/Application/views/blocks/widget/header/d3_extsearch_searchfield.tpl ein neues Formularfeld einfügen:

+
<select name="d3searchlike[myShoeSize]">
+  <option value=""> - alle Größen - </option>
+  <option value="40" [{if $aD3SearchLike.myShoeSize == "40"}]selected[{/if}]> Größe 40 </option>
+  <option value="41" [{if $aD3SearchLike.myShoeSize == "41"}]selected[{/if}]> Größe 41 </option>
+  <option value="42" [{if $aD3SearchLike.myShoeSize ==  "42"}]selected[{/if}]> Größe 42 </option>
+  <option value="..." [{if $aD3SearchLike.myShoeSize == "..."}]selected[{/if}]> ... </option>
+  <option value="47" [{if $aD3SearchLike.myShoeSize == "47"}]selected[{/if}]> Größe 47 </option>
+</select>
+
+<input type="text" name="d3searchis[myShoeColor]" value="[{$aD3SearchIs.myShoeSize}]">
+
+<select name="d3searchis[myShoeSize]">
+  <option value=""> - alle Größen - </option>
+  <option value="BETWEEN__AND_35_" [{if $aD3SearchIs.myShoeSize == " BETWEEN__AND_35_"}]selected[{/if}]> bis Größe 35 </option>
+  <option value="BETWEEN_36_AND_40_" [{if $aD3SearchIs.myShoeSize == " BETWEEN_36_AND_40_"}]selected[{/if}]> von Größe 36 bis 40 </option>
+  <option value="BETWEEN_41_AND__" [{if $aD3SearchIs.myShoeSize == " BETWEEN_41_AND__"}]selected[{/if}]> ab Größe 41 </option>
+</select>
+
+

Im Quelltext sind wichtige Stellen farbig markiert:

+

d3searchlike

+

Mit diesem Namen des Formularfeldes legen Sie das Verhalten des Suchfeldes fest. Zur Verfügung stehen Ihnen hier:

+
    +
  • d3searchlike: Der damit übergebene Wert muss als Teil des Inhalts im genannten Tabellenfeld enthalten sein. Wählt der Kunde z.B. die Option 41, werden alle Artikel gefunden, bei denen die Zahl 41 im Größenfeld mit genannt ist. Da die Werte eindeutig getrennt sind, werden die Artikel sicher selektiert. In unserem Fallbeispiel würde der Schuh gefunden werden, wenn alle anderen Suchoptionen (z.B. der Suchbegriff) auch passt. Bei Option 42 fehlt der Artikel trotz passenden Begriffs in der Trefferliste; die Größe ist nicht mit in dessen Liste aufgeführt.
  • +
  • d3searchis: Der vom Feld übergebene Wert muss eindeutig in dem Feld am Artikel vorkommen. Wird in das Formular schwarz eingegeben, werden auch nur Artikel mit der Farbe schwarz gefunden. Die Farbe schwarzgrün würde zum Beispiel ignoriert werden. Um ungenaue Suchen auszuschließen, empfehlen wir, auch hier dem Kunden eine genaue Vorgabe in Form von z.B. Selectboxen, Radiobuttons etc. zu machen. Freitexteingaben sind da sehr fehleranfällig.
  • +
  • d3searchis mit BETWEEN-Syntax: Mit der BETWEEN-Syntax können Sie Bereiche festlegen, innerhalb derer die Treffer liegen müssen. Die Feldwerte müssen dabei wie folgt aufgebaut sein:
  • +
+
BETWEEN_Wert1_AND_Wert2_
+
+

Wert1 definiert den Startwert, Wert2 den Endwert.

+

Die beiden Werte sind optional, einer der beiden Werte muss jedoch zwingend angegeben werden. Folgende Konstellationen sind hierbei möglich:

+
    +
  • +BETWEEN__AND_10_ - Alle Werte bis einschließlich 10 werden gefunden.
  • +
  • +BETWEEN_11_AND_20_ - Alle Werte zwischen einschließlich 11 bis einschließlich 20 werden gefunden.
  • +
  • +BETWEEN_21_AND__ - Alle Werte ab einschließlich 21 werden gefunden
  • +
+

Statt Ganzzahlen können Sie auch Dezimalzahlen angeben. Die Schreibweise muss jedoch den Datenbankwerten entsprechen.

+

Ein Beispiel für die verwendete Syntax finden Sie weiter oben und in den beiliegenden Modultemplates.

+

Legende

+

Mit myShoeSize sind in den Beispielen die Namen der Datenbankfelder benannt. Tragen Sie die Namen eindeutig (so wie in Ihrer Shopdatenbank in der Tabelle oxarticles benannt) entsprechend der Beispiele ein. Mit diesem Namen geben Sie vor, in welchem Feld die ausgewählten Inhalte vorkommen müssen. Zugriff haben Sie auf alle Tabellenfelder der Tabelle oxarticles, unabhängig ob diese im Standardshop vorhanden oder individuell angelegt wurden.

+

Die Werte im value-Attribute sind die in der Datenbank abgefragten Werte. In Textfeldern vergeben Sie keine Standardwerte. Im Normalfall (Datenbank-Kollation ist case-insensitiv) ist die Groß-/Kleinschreibung der Werte egal.

+

Leereinträge werden von der Suche so behandelt, dass derjenige Filter nicht verwendet wird. Damit können Sie also eine Möglichkeit schaffen, eine Filterung komplett zu vermeiden. Im Beispiel der Schuhgrößen würde die Auswahl der ersten Option alle Größen alle Schuhe unabhängig der Größe liefern.

+

In den Variablen $aD3SearchIs und $aD3SearchLike sind die Werte enthalten, die der Kunden vorab gewählt hatte. Als Parameter übergeben Sie den Feldnamen. Damit können Sie Ihren Formularfeldern die vom Kunden gewählte Auswahl wieder als Standard setzen.

+

In der Praxis hat sich auch bewährt, an prominenter Stelle im Shop ein kleines Suchformular anzubieten und auf einer speziellen Seite Ihrem Kunden ein umfangreiches Suchformular mit vielen Suchkriterien zur Verfügung zu stellen. Kopieren Sie in diesem Fall das komplette Formular aus dem Template inc/d3_extsearch_form.tpl in Ihre spezielle Seite und füllen dies mit den möglichen Suchfeldern entsprechend der vorangegangen Beschreibung.

+

Beachten Sie bitte, dass zur Auswertung dieser beschriebenen Suchfelder unbedingt die Option auf zusätzliche Formularfelder prüfen aktiviert sein muss.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/support/Hilfe-und-Support.html b/docs/html/support/Hilfe-und-Support.html new file mode 100644 index 0000000..5f7c3ff --- /dev/null +++ b/docs/html/support/Hilfe-und-Support.html @@ -0,0 +1,118 @@ + + + + Hilfe und Support - erweiterte Suche + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +
+

Bei Bedarf bieten wir Ihnen auch gern die Installation des Moduls in Ihrem Shop an. Geben Sie uns bitte unter den unten genannten Kontaktdaten Bescheid.

+

Haben Sie Fragen oder Unklarheiten in Verbindung mit diesem Modul oder dessen Installation, stehen Ihnen Hilfetexte in unserem HelpCenter zur Verfügung. Finden Sie darin die benötigten Antworten nicht, kontaktieren Sie uns bitte unter den folgenden Möglichkeiten:

+
    +
  1. per E-Mail: support@shopmodule.com oder
  2. +
  3. über das Kontaktformular auf Oxidmodule.com oder
  4. +
  5. per Telefon: (+49) 37 21 / 26 80 90 zu unseren Bürozeiten
  6. +
+

Geben Sie bitte an, wo und wie wir gegebenenfalls vorhandene Schwierigkeiten nachvollziehen können. Sind Ihre Fragen shopspezifisch, benötigen wir möglicherweise Zugangsdaten zum betreffenden Shop.

+

Wir wünschen Ihnen mit Ihrem Shop und dem Modul viel Erfolg!

+

Ihr D³-Team.

+
+ + +
+ +
+
+
+
+ + + + + + + + + + + diff --git a/docs/html/themes/d3/css/d3.css b/docs/html/themes/d3/css/d3.css new file mode 100644 index 0000000..203e48c --- /dev/null +++ b/docs/html/themes/d3/css/d3.css @@ -0,0 +1,210 @@ +.s-content table th{ + //background-color: #336ed6; +} + +.Brand{ + color: #fff; +} + +.s-content p { + margin-bottom: 1.0em; +} + +body, +.Homepage { + background-color: #f7f7f7; +} + +.HomepageFooter{ + color : #fff; +} + +.HomepageFooter__links a{ + color : #fff; +} + +.HomepageFooter__links li{ + color : #fff; +} + +.SearchResults .SearchResults__url a, +a{ + color: #028fe8; +} + +.s-content pre { + background : #f5f5f5; +} + +.svg-inline--fa.d3fa-color-blue, .fa.fa-d3color-blue { + color: #028fe8; +} + +.Navbar .svg-inline--fa.d3fa-color-blue, .Navbar .fa.fa-d3color-blue, +.Brand .svg-inline--fa.d3fa-color-blue, .Brand .fa.fa-d3color-blue{ + color: white; +} + +.HomepageFooter__links li{ + float: left; + min-width: 70px; +} + +.HomepageFooter__links li a { + padding-right: 40px; +} + +blockquote.alert a { + text-decoration: none !important; + font-weight: 700; +} + +blockquote.alert.alert-danger { + color: #ce2c2c; + background-color: #f2dede; + border-color: #ce2c2c; + +} + +blockquote.alert.alert-danger a { + color: #843534; +} + +blockquote.alert.alert-warning { + color: #e39c37; + background-color: #fcf8e3; + border-color: #e39c37; +} + +blockquote.alert.alert-warning a { + color: #66512c; +} + +blockquote.alert.alert-info { + color: #31708f; + background-color: #d9edf7; + border-color: #31708f; +} + +blockquote.alert.alert-info a { + color: #245269; +} + +blockquote.alert.alert-success { + color: #3c763d; + background-color: #dff0d8; + border-color: #d6e9c6; +} + +blockquote.alert.alert-success a { + color: #2b542c; +} + +.s-content blockquote.alert svg { + float: left; + margin: 4px 12px 0 0; +} + +.HomepageTitle .title, +.HomepageTitle .details { + width: 80%; + margin: 40px auto; + max-width: 500px; +} + +.HomepageTitle h2, +.HomepageTitle div { + width: auto; + margin: unset; + text-align: left; +} + +.HomepageTitle h2 { + font-size: 43px; +} + +.HomepageTitle div { + font-size: 24px; +} + +.HomepageTitle .details div { + font-size: 15px; +} + +aside .Links a { + font-size: 14px; +} + +.Navbar, +.Brand, +.Links, +.Columns__left.Collapsible { + background-color: #028fe8; +} + +.Navbar { + height: auto; + min-height: 50px; + display: inline-table; + width: 100%; +} + +span.navi_element { + border: 1px #c5c5cb; + border-style: solid solid none; + border-radius: 5px 5px 0 0; + padding: 0 5px; + background-color: #f7f7f7; +} + +.Nav { + background-color: #f7f7f7; +} + +.Links a{ + color: #f7f7f7; +} + +.Links a:hover { + text-decoration: underline; +} + +.Links hr { + border-color: #028fe8; +} + +.HomepageFooter, +.Search { + background-color: #028fe8; +} + +.Search { + margin: 10px; +} + +li { + margin-bottom: 7px; +} + +.Search__field { + border-radius: 4px; +} + +.versionselector { + padding: 0 20px; + font-family: "Roboto Slab",-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif; + font-size: 14px; + color: #f7f7f7; +} + +@media (max-width:768px){ + .HomepageTitle h2 { + font-size: 30px; + } +} + +@media (max-width:571px){ + .HomepageTitle h2 { + font-size: 24px; + } +} \ No newline at end of file diff --git a/docs/html/themes/d3/css/theme-blue.min.css b/docs/html/themes/d3/css/theme-blue.min.css new file mode 100644 index 0000000..e2a1fb4 --- /dev/null +++ b/docs/html/themes/d3/css/theme-blue.min.css @@ -0,0 +1,10 @@ +/*! + * DAUX.IO + * https://dauxio.github.io/ + * MIT License + */ +/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */ +html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}progress,sub,sup{vertical-align:baseline}[hidden],template{display:none}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;-webkit-text-decoration:underline dotted;-moz-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}figure{margin:1em 40px}hr{-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;height:0}button,input,select,textarea{font:inherit;margin:0}optgroup{font-weight:700}button,hr,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{color:inherit;display:table;max-width:100%;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio],legend{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit} +/*! Generated by Font Squirrel (https://www.fontsquirrel.com) */ +@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:300;src:url(../fonts/robotoslab-light.eot);src:url(../fonts/robotoslab-light.eot?#iefix) format("embedded-opentype"),url(../fonts/robotoslab-light.woff2) format("woff2"),url(../fonts/robotoslab-light.woff) format("woff"),url(../fonts/robotoslab-light.ttf) format("truetype"),url(../fonts/robotoslab-light.svg#roboto_slablight) format("svg");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2212,U+2215}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:400;src:url(../fonts/robotoslab-regular.eot);src:url(../fonts/robotoslab-regular.eot?#iefix) format("embedded-opentype"),url(../fonts/robotoslab-regular.woff2) format("woff2"),url(../fonts/robotoslab-regular.woff) format("woff"),url(../fonts/robotoslab-regular.ttf) format("truetype"),url(../fonts/robotoslab-regular.svg#roboto_slabregular) format("svg");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2212,U+2215}@font-face{font-family:"Roboto Slab";font-style:normal;font-weight:700;src:url(../fonts/robotoslab-bold.eot);src:url(../fonts/robotoslab-bold.eot?#iefix) format("embedded-opentype"),url(../fonts/robotoslab-bold.woff2) format("woff2"),url(../fonts/robotoslab-bold.woff) format("woff"),url(../fonts/robotoslab-bold.ttf) format("truetype"),url(../fonts/robotoslab-bold.svg#roboto_slabbold) format("svg");unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02C6,U+02DA,U+02DC,U+2000-206F,U+2074,U+20AC,U+2212,U+2215}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body{margin:0;padding:0}html{font-size:14px}@media (min-width:850px){html{font-size:16px}}body,html{height:100%;background-color:#fff;color:#222}.Columns__left{background-color:#f7f7f7}.Columns__right__content{padding:10px;background-color:#fff}.Collapsible__content,.s-content pre code:after,.s-content pre code:before{display:none}.Collapsible__trigger{margin:12px;padding:7px 10px;background-color:transparent;border:0;float:right;background-image:none;-webkit-filter:none;filter:none;-webkit-box-shadow:none;box-shadow:none}.Collapsible__trigger__bar{display:block;width:18px;height:2px;margin-top:2px;margin-bottom:3px;background-color:#82becd}.Collapsible__trigger:hover{background-color:#82becd;-webkit-box-shadow:none;box-shadow:none}.Collapsible__trigger:hover .Collapsible__trigger__bar{background-color:#3f4657}@media screen and (min-width:769px){body{background-color:#82becd}.Navbar{position:fixed;z-index:1030;width:100%}.Collapsible__trigger{display:none!important}.Collapsible__content{display:block!important}.Columns{height:100%}.Columns:after,.Columns:before{content:" ";display:table}.Columns:after{clear:both}.Columns__left,.Columns__right{position:relative;min-height:1px;float:left;overflow:auto;height:100%}.Columns__left{width:25%;border-right:1px solid #e7e7e9;overflow-x:hidden}.Columns__right{width:75%}.Columns__right__content{padding:0 20px 20px;min-height:100%}}body{line-height:1.5;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;-webkit-font-feature-settings:"kern" 1,"kern";-moz-font-feature-settings:"kern" 1,"kern";font-feature-settings:"kern" 1,"kern";-webkit-font-kerning:normal;font-kerning:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1,h2,h3,h4,h5,h6{font-family:"Roboto Slab",-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-weight:300}.s-content h1,.s-content h2,.s-content h3,.s-content h4,.s-content h5,.s-content h6{cursor:text;line-height:1.4em;margin:2em 0 .5em}.s-content h1 code,.s-content h1 tt,.s-content h2 code,.s-content h2 tt,.s-content h3 code,.s-content h3 tt,.s-content h4 code,.s-content h4 tt,.s-content h5 code,.s-content h5 tt,.s-content h6 code,.s-content h6 tt{font-size:inherit}.s-content h1 i,.s-content h2 i,.s-content h3 i,.s-content h4 i,.s-content h5 i,.s-content h6 i{font-size:.7em}.s-content h1 p,.s-content h2 p,.s-content h3 p,.s-content h4 p,.s-content h5 p,.s-content h6 p{margin-top:0}.s-content h1{margin-top:0;font-size:21.881px;font-size:1.563rem}.s-content h2{font-size:17.5px;font-size:1.25rem}.s-content h3{font-size:14px;font-size:1rem}.s-content h4,.s-content h5,.s-content h6,.s-content small{font-size:10.5px;font-size:.75rem}.s-content a{text-decoration:underline}.s-content p{margin-bottom:1.3em}.s-content ol,.s-content ul{padding-left:2em}.s-content ul p,.s-content ul ul{margin:0}.s-content dl{padding:0}.s-content dl dt{font-weight:700;font-style:italic;padding:0;margin:15px 0 5px}.s-content dl dt:first-child{padding:0}.s-content dl dd{margin:0 0 15px;padding:0 15px}.s-content blockquote{margin:.75em 2em;padding:.5em 1em;font-style:italic;border-left:.25em solid #3f4657}.s-content blockquote cite{font-style:italic}.s-content blockquote cite:before{content:"\2014";padding-right:.5em}.s-content table{width:100%;padding:0;margin-bottom:1em;border-collapse:collapse;font-size:10.5px;font-size:.75rem}.s-content table+table{margin-top:1em}.s-content table tr{border-top:1px solid #eee;background-color:#fff;margin:0;padding:0}.s-content table tr:nth-child(2n){background-color:#f2f3f3}.s-content table th{font-weight:700;border:1px solid #bdc1c4;background:#d7dadb;margin:0;padding:.5em}.s-content table td{border:1px solid #d7dadb;margin:0;padding:.5em}.s-content blockquote>:first-child,.s-content dl dd>:first-child,.s-content dl dt>:first-child,.s-content ol>:first-child,.s-content table td>:first-child,.s-content table th>:first-child,.s-content ul>:first-child{margin-top:0}.s-content blockquote>:last-child,.s-content dl dd>:last-child,.s-content dl dt>:last-child,.s-content ol>:last-child,.s-content table td>:last-child,.s-content table th>:last-child,.s-content ul>:last-child{margin-bottom:0}.s-content img{max-width:100%;display:block;margin:0 auto}.s-content code{font-family:Monaco,Menlo,Consolas,"Lucida Console","Courier New",monospace;padding-top:1.4px;padding-top:.1rem;padding-bottom:1.4px;padding-bottom:.1rem;background:#fafafa;border:1px solid #bdc1c4;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.125);box-shadow:0 1px 1px rgba(0,0,0,.125)}.s-content code:after,.s-content code:before{letter-spacing:-.2em;content:"\00a0"}.s-content pre{background:#fdf6e3;color:#657b83;line-height:1.5em;overflow:auto;border:0;border-radius:0;padding:.75em 2em;margin:0 -20px 20px}.s-content pre code{margin:0;padding:0;white-space:pre;-webkit-box-shadow:none;box-shadow:none}.s-content pre code,.s-content pre tt{background-color:transparent;border:0}.s-content ins,.s-content u{text-decoration:none;border-bottom:1px solid #222}.s-content del a,.s-content ins a,.s-content u a{color:inherit}@media (min-width:1150px){.Columns__right--float .Columns__right__content{height:100%;overflow:auto;padding:0!important;background-color:transparent!important;position:relative}.Columns__right--float .Columns__right__content article{width:100%;min-height:100%;overflow:auto;position:relative;z-index:1}.Columns__right--float .Columns__right__content article:before{content:"";width:50%;min-height:100%;overflow:auto;background-color:#fff;display:block;margin:0;position:absolute;z-index:-1}.Columns__right--float .Page__header,.Columns__right--float .Pager,.Columns__right--float .s-content blockquote,.Columns__right--float .s-content dl,.Columns__right--float .s-content h2,.Columns__right--float .s-content h3,.Columns__right--float .s-content h4,.Columns__right--float .s-content h5,.Columns__right--float .s-content h6,.Columns__right--float .s-content hr,.Columns__right--float .s-content ol,.Columns__right--float .s-content p,.Columns__right--float .s-content table,.Columns__right--float .s-content ul{float:left;clear:left;width:47%;margin-left:1.5%;margin-right:1.5%}.Columns__right--float .s-content table{background-color:#fff;white-space:normal}.Columns__right--float .s-content table code,.Columns__right--float .s-content table pre{white-space:normal}.Columns__right--float .s-content blockquote:before,.Columns__right--float .s-content dl:before,.Columns__right--float .s-content h2:before,.Columns__right--float .s-content h3:before,.Columns__right--float .s-content h4:before,.Columns__right--float .s-content h5:before,.Columns__right--float .s-content h6:before,.Columns__right--float .s-content hr:before,.Columns__right--float .s-content ol:before,.Columns__right--float .s-content p:before,.Columns__right--float .s-content ul:before{width:100%;height:10px;display:block;clear:both}.Columns__right--float .s-content blockquote p,.Columns__right--float .s-content blockquote pre{float:none;display:block}.Columns__right--float .s-content blockquote dl,.Columns__right--float .s-content blockquote h2,.Columns__right--float .s-content blockquote h3,.Columns__right--float .s-content blockquote h4,.Columns__right--float .s-content blockquote h5,.Columns__right--float .s-content blockquote h6,.Columns__right--float .s-content blockquote hr,.Columns__right--float .s-content blockquote ol,.Columns__right--float .s-content blockquote ul,.Columns__right--float .s-content dl dl,.Columns__right--float .s-content dl h2,.Columns__right--float .s-content dl h3,.Columns__right--float .s-content dl h4,.Columns__right--float .s-content dl h5,.Columns__right--float .s-content dl h6,.Columns__right--float .s-content dl hr,.Columns__right--float .s-content dl ol,.Columns__right--float .s-content dl p,.Columns__right--float .s-content dl pre,.Columns__right--float .s-content dl ul,.Columns__right--float .s-content h2 dl,.Columns__right--float .s-content h2 h2,.Columns__right--float .s-content h2 h3,.Columns__right--float .s-content h2 h4,.Columns__right--float .s-content h2 h5,.Columns__right--float .s-content h2 h6,.Columns__right--float .s-content h2 hr,.Columns__right--float .s-content h2 ol,.Columns__right--float .s-content h2 p,.Columns__right--float .s-content h2 pre,.Columns__right--float .s-content h2 ul,.Columns__right--float .s-content h3 dl,.Columns__right--float .s-content h3 h2,.Columns__right--float .s-content h3 h3,.Columns__right--float .s-content h3 h4,.Columns__right--float .s-content h3 h5,.Columns__right--float .s-content h3 h6,.Columns__right--float .s-content h3 hr,.Columns__right--float .s-content h3 ol,.Columns__right--float .s-content h3 p,.Columns__right--float .s-content h3 pre,.Columns__right--float .s-content h3 ul,.Columns__right--float .s-content h4 dl,.Columns__right--float .s-content h4 h2,.Columns__right--float .s-content h4 h3,.Columns__right--float .s-content h4 h4,.Columns__right--float .s-content h4 h5,.Columns__right--float .s-content h4 h6,.Columns__right--float .s-content h4 hr,.Columns__right--float .s-content h4 ol,.Columns__right--float .s-content h4 p,.Columns__right--float .s-content h4 pre,.Columns__right--float .s-content h4 ul,.Columns__right--float .s-content h5 dl,.Columns__right--float .s-content h5 h2,.Columns__right--float .s-content h5 h3,.Columns__right--float .s-content h5 h4,.Columns__right--float .s-content h5 h5,.Columns__right--float .s-content h5 h6,.Columns__right--float .s-content h5 hr,.Columns__right--float .s-content h5 ol,.Columns__right--float .s-content h5 p,.Columns__right--float .s-content h5 pre,.Columns__right--float .s-content h5 ul,.Columns__right--float .s-content h6 dl,.Columns__right--float .s-content h6 h2,.Columns__right--float .s-content h6 h3,.Columns__right--float .s-content h6 h4,.Columns__right--float .s-content h6 h5,.Columns__right--float .s-content h6 h6,.Columns__right--float .s-content h6 hr,.Columns__right--float .s-content h6 ol,.Columns__right--float .s-content h6 p,.Columns__right--float .s-content h6 pre,.Columns__right--float .s-content h6 ul,.Columns__right--float .s-content hr dl,.Columns__right--float .s-content hr h2,.Columns__right--float .s-content hr h3,.Columns__right--float .s-content hr h4,.Columns__right--float .s-content hr h5,.Columns__right--float .s-content hr h6,.Columns__right--float .s-content hr hr,.Columns__right--float .s-content hr ol,.Columns__right--float .s-content hr p,.Columns__right--float .s-content hr pre,.Columns__right--float .s-content hr ul,.Columns__right--float .s-content ol dl,.Columns__right--float .s-content ol h2,.Columns__right--float .s-content ol h3,.Columns__right--float .s-content ol h4,.Columns__right--float .s-content ol h5,.Columns__right--float .s-content ol h6,.Columns__right--float .s-content ol hr,.Columns__right--float .s-content ol ol,.Columns__right--float .s-content ol p,.Columns__right--float .s-content ol pre,.Columns__right--float .s-content ol ul,.Columns__right--float .s-content p dl,.Columns__right--float .s-content p h2,.Columns__right--float .s-content p h3,.Columns__right--float .s-content p h4,.Columns__right--float .s-content p h5,.Columns__right--float .s-content p h6,.Columns__right--float .s-content p hr,.Columns__right--float .s-content p ol,.Columns__right--float .s-content p p,.Columns__right--float .s-content p pre,.Columns__right--float .s-content p ul,.Columns__right--float .s-content ul dl,.Columns__right--float .s-content ul h2,.Columns__right--float .s-content ul h3,.Columns__right--float .s-content ul h4,.Columns__right--float .s-content ul h5,.Columns__right--float .s-content ul h6,.Columns__right--float .s-content ul hr,.Columns__right--float .s-content ul ol,.Columns__right--float .s-content ul p,.Columns__right--float .s-content ul pre,.Columns__right--float .s-content ul ul{width:auto;float:none;display:block}.Columns__right--float .s-content hr{border-color:#ddd}.Columns__right--float .s-content blockquote p,.Columns__right--float .s-content blockquote pre,.Columns__right--float .s-content li p,.Columns__right--float .s-content li pre{width:100%}.Columns__right--float .s-content pre{float:left;clear:right;width:50%;border:0;border-left:10px solid #fff;margin:0 0 10px;padding:0}.Columns__right--float .s-content pre code{padding:0 .5em}}a{text-decoration:none;color:#82becd}a.Link--external:after{content:" " url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAVklEQVR4Xn3PgQkAMQhDUXfqTu7kTtkpd5RA8AInfArtQ2iRXFWT2QedAfttj2FsPIOE1eCOlEuoWWjgzYaB/IkeGOrxXhqB+uA9Bfcm0lAZuh+YIeAD+cAqSz4kCMUAAAAASUVORK5CYII=)}a.Link--broken{color:red}p{margin:0 0 1em}hr{clear:both;margin:1em 0;border:0;border-top:1px solid #ddd}.Button{display:inline-block;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;border-radius:4px}.Button--small{font-size:12px;line-height:1.5;border-radius:3px}.Button--default{color:#333;background-color:#fff;border-color:#ccc}.Button--default.Button--active{color:#333;background-color:#e6e6e6;border-color:#adadad}.ButtonGroup{position:relative;display:inline-block;vertical-align:middle}.ButtonGroup .Button+.Button{margin-left:-1px}.ButtonGroup>.Button{position:relative;float:left}.ButtonGroup>.Button:focus,.ButtonGroup>.Button:hover{z-index:2}.ButtonGroup>.Button.Button--active,.ButtonGroup>.Button:active{z-index:3}.ButtonGroup>.Button:not(:first-child):not(:last-child){border-radius:0}.ButtonGroup>.Button:first-child{margin-left:0}.ButtonGroup>.Button:first-child:not(:last-child){border-bottom-right-radius:0;border-top-right-radius:0}.ButtonGroup>.Button:last-child:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.Brand,.Navbar{background-color:#3f4657}.Brand{display:block;padding:.75em .6em;font-size:17.5px;font-size:1.25rem;text-shadow:none;font-family:"Roboto Slab",-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-weight:700;color:#82becd}.Navbar{height:50px;-webkit-box-shadow:0 1px 5px rgba(0,0,0,.25);box-shadow:0 1px 5px rgba(0,0,0,.25);margin-bottom:0}.Navbar .Brand{float:left;line-height:20px;height:50px}.CodeToggler{padding:0 20px}.CodeToggler__text{font-size:12px;line-height:1.5;padding:6px 10px 6px 0;display:inline-block;vertical-align:middle}.Nav,.Page__header h1{margin:0;padding:0}.Nav__arrow{display:inline-block;position:relative;width:16px;margin-left:-16px}.Nav__arrow:before{position:absolute;display:block;content:"";margin:-.25em 0 0 -.4em;left:50%;top:50%;width:.5em;height:.5em;border-right:.15em solid #3f4657;border-top:.15em solid #3f4657;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);-webkit-transition-duration:.3s;-o-transition-duration:.3s;transition-duration:.3s}.Nav__item,.Nav__item a{display:block}.Nav__item a{margin:0;padding:6px 15px 6px 20px;font-family:"Roboto Slab",-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-weight:400;text-shadow:none}.Nav__item a:hover{color:#3f4657;text-shadow:none}.Nav .Nav{display:none;margin-left:15px}.Nav .Nav .Nav__item a{margin:0 0 0 -15px;padding:3px 30px;font-family:-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;color:#222;opacity:.7}.Nav .Nav .Nav__item a:hover{opacity:1}.Nav .Nav .Nav__item--active a,.Nav__item a{color:#3f4657}.Nav__item a:hover,.Nav__item--active>a,.Nav__item--open>a{background-color:#c5c5cb}.Nav__item--open>.Nav{display:block}.Nav__item--open>a>.Nav__arrow:before{margin-left:-.25em;-webkit-transform:rotate(135deg);-ms-transform:rotate(135deg);transform:rotate(135deg)}.Page__header{margin:0 0 10px;padding:0;border-bottom:1px solid #eee}.Page__header:after,.Page__header:before{content:" ";display:table}.Page__header:after{clear:both}.Page__header h1{line-height:57px}.Page__header--separator{height:.6em}.Page__header a,ul.TableOfContents a{text-decoration:none}.Page__header .EditOn,.Page__header .ModifiedDate{float:left;font-size:10px;color:gray}.Page__header .EditOn{float:right}.Links,.PoweredBy,.Twitter{padding:0 20px}.Links a{font-family:"Roboto Slab",-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-weight:400;color:#3f4657;line-height:2em}.PoweredBy{font-size:10.5px;font-size:.75rem}.Search{position:relative}.Search__field{display:block;width:100%;height:34px;padding:6px 30px 6px 20px;color:#555;border-width:0 0 1px;border-bottom:1px solid #ccc;background:#fff;-webkit-transition:border-color ease-in-out .15s;-o-transition:border-color ease-in-out .15s;transition:border-color ease-in-out .15s}.Search__field:focus{border-color:#82becd;outline:0}.Search__icon{position:absolute;right:9px;top:9px;width:16px;height:16px}.Navbar .Search{float:right;margin:8px 20px}.Navbar .Search__field{-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);border-width:0;border-radius:4px;padding-left:10px}.TableOfContentsContainer__title{border-bottom:4px solid #efefef;margin-bottom:0!important}.TableOfContentsContainer__content>.TableOfContents{margin-top:0}ul.TableOfContents{float:none;font-size:16px;padding-left:1.5em;border-left:6px solid #efefef}ul.TableOfContents p{margin-bottom:0}ul.TableOfContents .TableOfContents{border-left-width:0}.Columns__right--full .TableOfContentsContainer{float:right;min-width:300px;max-width:25%;padding-left:1em}.Columns__right--full .TableOfContentsContainer .TableOfContentsContainer__content>.TableOfContents{border-right:2px solid #efefef}.Columns__right--full .TableOfContentsContainer .TableOfContents{list-style-type:none;padding-left:0}.Columns__right--full .TableOfContentsContainer a{display:block;border-bottom:1px solid #ddd;padding:.2em 0}.Columns__right--full .TableOfContentsContainer li a{padding-left:.75em}.Columns__right--full .TableOfContentsContainer li li a{padding-left:1.5em}.Columns__right--full .TableOfContentsContainer li li li a{padding-left:2.25em}.Columns__right--full .TableOfContentsContainer li li li li a{padding-left:3em}.Pager{padding-left:0;margin:1em 0;list-style:none;text-align:center}.Pager:after,.Pager:before{content:" ";display:table}.Pager,.Pager:after{clear:both}.Pager li{display:inline}.Pager li>a{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.Pager li>a:focus,.Pager li>a:hover{text-decoration:none;background-color:#eee}.Pager--next>a{float:right}.Pager--prev>a{float:left}.Checkbox{position:relative;display:block;padding-left:30px;cursor:pointer}.Checkbox input{position:absolute;z-index:-1;opacity:0}.Checkbox__indicator{position:absolute;top:50%;left:0;width:20px;height:20px;margin-top:-10px;background:#e6e6e6}.Checkbox__indicator:after{position:absolute;display:none;content:""}.Checkbox input:focus~.Checkbox__indicator,.Checkbox:hover input~.Checkbox__indicator{background:#ccc}.Checkbox input:checked~.Checkbox__indicator{background:#3f4657}.Checkbox input:checked~.Checkbox__indicator:after{display:block}.Checkbox input:checked:focus~.Checkbox__indicator,.Checkbox:hover input:not([disabled]):checked~.Checkbox__indicator{background:#82becd}.Checkbox input:disabled~.Checkbox__indicator{pointer-events:none;opacity:.6;background:#e6e6e6}.Checkbox .Checkbox__indicator:after{top:4px;left:8px;width:5px;height:10px;-webkit-transform:rotate(45deg);-ms-transform:rotate(45deg);transform:rotate(45deg);border:solid #fff;border-width:0 2px 2px 0}.Checkbox input:disabled~.Checkbox__indicator:after{border-color:#7b7b7b}.Collapsible__content{padding-bottom:14px;padding-bottom:1rem}.Hidden{display:none}.Container{margin-right:auto;margin-left:auto}.Container--inner{width:80%;margin:0 auto}@media (min-width:1200px){.Container{width:1170px}}@media (min-width:992px){.Container{width:970px}}@media (min-width:769px){.Container{width:750px}}@media (min-width:1200px){.Container{width:1170px}}.Homepage{padding-top:60px!important;background-color:#82becd;border-radius:0;border:0;color:#3f4657;overflow:hidden;padding-bottom:0;margin-bottom:0;-webkit-box-shadow:none;box-shadow:none}.HomepageTitle h2{width:80%;font-size:30px;margin:20px auto;text-align:center}.HomepageImage img{display:block;max-width:80%;margin:0 auto;height:auto}.HomepageButtons{padding:20px 0;background-color:#c5c5cb;text-align:center}.HomepageButtons:after,.HomepageButtons:before{content:" ";display:table}.HomepageButtons:after{clear:both}.HomepageButtons .Button--hero{padding:20px 30px;border-radius:0;text-shadow:none;opacity:.8;margin:0 10px;text-transform:uppercase;border:5px solid #3f4657;font-family:"Roboto Slab",-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;font-weight:700;background-image:none;-webkit-filter:none;filter:none;-webkit-box-shadow:none;box-shadow:none}@media (max-width:768px){.HomepageButtons .Button--hero{display:block;margin-bottom:10px}}.HomepageButtons .Button--hero:hover{opacity:1}.HomepageButtons .Button--hero.Button--secondary{background-color:#c5c5cb;color:#3f4657}.HomepageButtons .Button--hero.Button--primary{background-color:#3f4657;color:#f7f7f7}.HomepageContent{background-color:#fff;padding:40px 0}.HomepageContent ol li,.HomepageContent ul li{list-style:none;margin-bottom:.5em;position:relative}.HomepageContent ol li:before,.HomepageContent ul li:before{position:absolute;top:50%;left:-1.5em;content:"";width:0;height:0;border:.5em solid transparent;border-left:.5em solid #82becd;float:left;display:block;margin-top:-.5em}.HomepageContent .HeroText,.HomepageFooter__links li a{font-size:16px;font-family:"Roboto Slab",-apple-system,".SFNSText-Regular","San Francisco","Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif}.HomepageContent .HeroText{margin-bottom:20px;font-weight:300;line-height:1.4}@media (min-width:769px){.HomepageContent{padding:40px 20px}.HomepageContent .HeroText{font-size:21px}.HomepageContent .Row{margin:0 -15px}.HomepageContent .Row__half,.HomepageContent .Row__quarter,.HomepageContent .Row__third{float:left;position:relative;min-height:1px;padding-left:15px;padding-right:15px}.HomepageContent .Row__third{width:33.333333%}.HomepageContent .Row__half{width:50%}.HomepageContent .Row__quarter{width:25%}}.HomepageFooter{background-color:#3f4657;color:#82becd;border:0;-webkit-box-shadow:none;box-shadow:none}.HomepageFooter:after,.HomepageFooter:before{content:" ";display:table}.HomepageFooter:after{clear:both}@media (max-width:768px){.HomepageFooter{padding:0 20px;text-align:center}.HomepageFooter .HomepageFooter__links{padding-left:0;list-style-type:none}}@media (min-width:769px){.HomepageFooter .HomepageFooter__links{float:left}.HomepageFooter .HomepageFooter__twitter{float:right}}.HomepageFooter__links,.HomepageFooter__twitter{margin:40px 0}.HomepageFooter__links li a{line-height:32px;font-weight:700}.HomepageFooter__links li a:hover{text-decoration:underline}.HomepageFooter .Twitter{margin-bottom:20px}.hljs{display:block;overflow-x:auto;padding:.5em;background:#fdf6e3;color:#657b83}.hljs-comment,.hljs-quote{color:#93a1a1}.hljs-addition,.hljs-keyword,.hljs-selector-tag{color:#859900}.hljs-doctag,.hljs-literal,.hljs-meta .hljs-meta-string,.hljs-number,.hljs-regexp,.hljs-string{color:#2aa198}.hljs-name,.hljs-section,.hljs-selector-class,.hljs-selector-id,.hljs-title{color:#268bd2}.hljs-attr,.hljs-attribute,.hljs-class .hljs-title,.hljs-template-variable,.hljs-type,.hljs-variable{color:#b58900}.hljs-bullet,.hljs-link,.hljs-meta,.hljs-meta .hljs-keyword,.hljs-selector-attr,.hljs-selector-pseudo,.hljs-subst,.hljs-symbol{color:#cb4b16}.hljs-built_in,.hljs-deletion{color:#dc322f}.hljs-formula{background:#eee8d5}.hljs-emphasis{font-style:italic}.hljs-strong{font-weight:700} +/*# sourceMappingURL=theme-blue.min.css.map */ diff --git a/docs/html/themes/d3/css/theme-blue.min.css.map b/docs/html/themes/d3/css/theme-blue.min.css.map new file mode 100644 index 0000000..ff53a9a --- /dev/null +++ b/docs/html/themes/d3/css/theme-blue.min.css.map @@ -0,0 +1 @@ +{"version":3,"sources":["theme.scss","vendor/normalize.scss","_fonts.scss","_structure.scss","_mixins.scss","_typography.scss","_components.scss","","_homepage.scss","vendor/highlight.scss"],"names":[],"mappings":"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","file":"theme-blue.min.css","sourcesContent":["/*!\n * DAUX.IO\n * https://dauxio.github.io/\n * MIT License\n */\n\n// Daux Style\n@import \"vendor/normalize.scss\";\n@import \"_fonts.scss\";\n@import \"_variables.scss\";\n@import \"_mixins.scss\";\n\n// Layout\n@import \"_structure.scss\";\n\n// Content presentation\n@import \"_typography.scss\";\n@import \"_components.scss\";\n@import \"_homepage.scss\";\n@import \"vendor/highlight.scss\";\n\n@media print {\n @import \"_print.scss\";\n}\n","/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */\n\n/**\n * 1. Change the default font family in all browsers (opinionated).\n * 2. Prevent adjustments of font size after orientation changes in IE and iOS.\n */\n\nhtml {\n font-family: sans-serif; /* 1 */\n -ms-text-size-adjust: 100%; /* 2 */\n -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/**\n * Remove the margin in all browsers (opinionated).\n */\n\nbody {\n margin: 0;\n}\n\n/* HTML5 display definitions\n ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n * 1. Add the correct display in Edge, IE, and Firefox.\n * 2. Add the correct display in IE.\n */\n\narticle,\naside,\ndetails, /* 1 */\nfigcaption,\nfigure,\nfooter,\nheader,\nmain, /* 2 */\nmenu,\nnav,\nsection,\nsummary { /* 1 */\n display: block;\n}\n\n/**\n * Add the correct display in IE 9-.\n */\n\naudio,\ncanvas,\nprogress,\nvideo {\n display: inline-block;\n}\n\n/**\n * Add the correct display in iOS 4-7.\n */\n\naudio:not([controls]) {\n display: none;\n height: 0;\n}\n\n/**\n * Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n vertical-align: baseline;\n}\n\n/**\n * Add the correct display in IE 10-.\n * 1. Add the correct display in IE.\n */\n\ntemplate, /* 1 */\n[hidden] {\n display: none;\n}\n\n/* Links\n ========================================================================== */\n\n/**\n * 1. Remove the gray background on active links in IE 10.\n * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.\n */\n\na {\n background-color: transparent; /* 1 */\n -webkit-text-decoration-skip: objects; /* 2 */\n}\n\n/**\n * Remove the outline on focused links when they are also active or hovered\n * in all browsers (opinionated).\n */\n\na:active,\na:hover {\n outline-width: 0;\n}\n\n/* Text-level semantics\n ========================================================================== */\n\n/**\n * 1. Remove the bottom border in Firefox 39-.\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n border-bottom: none; /* 1 */\n text-decoration: underline; /* 2 */\n text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Prevent the duplicate application of `bolder` by the next rule in Safari 6.\n */\n\nb,\nstrong {\n font-weight: inherit;\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n font-weight: bolder;\n}\n\n/**\n * Add the correct font style in Android 4.3-.\n */\n\ndfn {\n font-style: italic;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n font-size: 2em;\n margin: 0.67em 0;\n}\n\n/**\n * Add the correct background and color in IE 9-.\n */\n\nmark {\n background-color: #ff0;\n color: #000;\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n font-size: 75%;\n line-height: 0;\n position: relative;\n vertical-align: baseline;\n}\n\nsub {\n bottom: -0.25em;\n}\n\nsup {\n top: -0.5em;\n}\n\n/* Embedded content\n ========================================================================== */\n\n/**\n * Remove the border on images inside links in IE 10-.\n */\n\nimg {\n border-style: none;\n}\n\n/**\n * Hide the overflow in IE.\n */\n\nsvg:not(:root) {\n overflow: hidden;\n}\n\n/* Grouping content\n ========================================================================== */\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\npre,\nsamp {\n font-family: monospace, monospace; /* 1 */\n font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct margin in IE 8.\n */\n\nfigure {\n margin: 1em 40px;\n}\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n box-sizing: content-box; /* 1 */\n height: 0; /* 1 */\n overflow: visible; /* 2 */\n}\n\n/* Forms\n ========================================================================== */\n\n/**\n * 1. Change font properties to `inherit` in all browsers (opinionated).\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\nselect,\ntextarea {\n font: inherit; /* 1 */\n margin: 0; /* 2 */\n}\n\n/**\n * Restore the font weight unset by the previous rule.\n */\n\noptgroup {\n font-weight: bold;\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n text-transform: none;\n}\n\n/**\n * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n * controls in Android 4.\n * 2. Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\nhtml [type=\"button\"], /* 1 */\n[type=\"reset\"],\n[type=\"submit\"] {\n -webkit-appearance: button; /* 2 */\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n border-style: none;\n padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n outline: 1px dotted ButtonText;\n}\n\n/**\n * Change the border, margin, and padding in all browsers (opinionated).\n */\n\nfieldset {\n border: 1px solid #c0c0c0;\n margin: 0 2px;\n padding: 0.35em 0.625em 0.75em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n * `fieldset` elements in all browsers.\n */\n\nlegend {\n box-sizing: border-box; /* 1 */\n color: inherit; /* 2 */\n display: table; /* 1 */\n max-width: 100%; /* 1 */\n padding: 0; /* 3 */\n white-space: normal; /* 1 */\n}\n\n/**\n * Remove the default vertical scrollbar in IE.\n */\n\ntextarea {\n overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10-.\n * 2. Remove the padding in IE 10-.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n box-sizing: border-box; /* 1 */\n padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n -webkit-appearance: textfield; /* 1 */\n outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding and cancel buttons in Chrome and Safari on OS X.\n */\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n -webkit-appearance: none;\n}\n\n/**\n * Correct the text style of placeholders in Chrome, Edge, and Safari.\n */\n\n::-webkit-input-placeholder {\n color: inherit;\n opacity: 0.54;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n -webkit-appearance: button; /* 1 */\n font: inherit; /* 2 */\n}\n","\n:root {\n --font-family-text: -apple-system,\n \".SFNSText-Regular\",\n \"San Francisco\",\n \"Roboto\",\n \"Segoe UI\",\n \"Helvetica Neue\",\n \"Lucida Grande\",\n Arial,\n sans-serif;\n --font-family-monospace: Monaco, Menlo, Consolas, \"Lucida Console\", \"Courier New\", monospace;\n --font-family-heading: \"Roboto Slab\", var(--font-family-text);\n}\n\n/*! Generated by Font Squirrel (https://www.fontsquirrel.com) */\n\n@font-face {\n font-family: \"Roboto Slab\";\n font-style: normal;\n font-weight: 300;\n src: url(\"../fonts/robotoslab-light.eot\");\n src:\n url(\"../fonts/robotoslab-light.eot?#iefix\") format(\"embedded-opentype\"),\n url(\"../fonts/robotoslab-light.woff2\") format(\"woff2\"),\n url(\"../fonts/robotoslab-light.woff\") format(\"woff\"),\n url(\"../fonts/robotoslab-light.ttf\") format(\"truetype\"),\n url(\"../fonts/robotoslab-light.svg#roboto_slablight\") format(\"svg\");\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;\n}\n\n@font-face {\n font-family: \"Roboto Slab\";\n font-style: normal;\n font-weight: 400;\n src: url(\"../fonts/robotoslab-regular.eot\");\n src:\n url(\"../fonts/robotoslab-regular.eot?#iefix\") format(\"embedded-opentype\"),\n url(\"../fonts/robotoslab-regular.woff2\") format(\"woff2\"),\n url(\"../fonts/robotoslab-regular.woff\") format(\"woff\"),\n url(\"../fonts/robotoslab-regular.ttf\") format(\"truetype\"),\n url(\"../fonts/robotoslab-regular.svg#roboto_slabregular\") format(\"svg\");\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;\n}\n\n@font-face {\n font-family: \"Roboto Slab\";\n font-style: normal;\n font-weight: 700;\n src: url(\"../fonts/robotoslab-bold.eot\");\n src:\n url(\"../fonts/robotoslab-bold.eot?#iefix\") format(\"embedded-opentype\"),\n url(\"../fonts/robotoslab-bold.woff2\") format(\"woff2\"),\n url(\"../fonts/robotoslab-bold.woff\") format(\"woff\"),\n url(\"../fonts/robotoslab-bold.ttf\") format(\"truetype\"),\n url(\"../fonts/robotoslab-bold.svg#roboto_slabbold\") format(\"svg\");\n unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215;\n}\n","\n*, *:after, *:before {\n box-sizing: border-box;\n}\n\nbody {\n margin: 0;\n padding: 0;\n}\n\n/* ============================================================================\nDocs Body & Page Structure\n============================================================================ */\n\nhtml {\n font-size: 14px;\n\n @media (--viewport-large) {\n font-size: 16px;\n }\n}\n\nhtml, body {\n height: 100%;\n background-color: #fff;\n color: var(--text);\n}\n\n.Columns {\n &__left {\n background-color: var(--sidebar-background);\n }\n\n &__right {\n &__content {\n padding: 10px;\n background-color: #fff;\n }\n }\n}\n\n// mobile friendly sub-nav\n.Collapsible__content {\n display: none;\n}\n\n.Collapsible__trigger {\n margin: 12px;\n padding: 7px 10px;\n background-color: transparent;\n border: none;\n float: right;\n\n @include kill-background-image;\n @include kill-box-shadow;\n\n &__bar {\n display: block;\n width: 18px;\n height: 2px;\n margin-top: 2px;\n margin-bottom: 3px;\n background-color: var(--sidebar-collapsible--hamburger-color);\n }\n\n &:hover {\n background-color: var(--sidebar-collapsible--hamburger-hover-background);\n\n @include kill-box-shadow;\n\n .Collapsible__trigger__bar {\n background-color: var(--sidebar-collapsible--hamburger-hover-color);\n }\n }\n}\n\n@media screen and (min-width: 769px) {\n body {\n //Needed only for floating code blocks\n background-color: var(--content-floating-blocks-background);\n }\n\n .Navbar {\n position: fixed;\n z-index: 1030;\n width: 100%;\n }\n\n .Collapsible {\n &__trigger {\n display: none !important;\n }\n\n &__content {\n display: block !important;\n }\n }\n\n .Columns {\n height: 100%;\n\n &:after,\n &:before {\n content: \" \";\n display: table;\n }\n\n &:after {\n clear: both;\n }\n\n &__left, &__right {\n position: relative;\n min-height: 1px;\n float: left;\n overflow: auto;\n height: 100%;\n }\n\n &__left {\n width: 25%;\n border-right: 1px solid var(--sidebar-border);\n overflow-x: hidden;\n }\n\n &__right {\n width: 75%;\n\n &__content {\n padding: 0 20px 20px;\n min-height: 100%;\n }\n }\n }\n}\n","/* ============================================================================\nMixins\n============================================================================ */\n\n@mixin kill-background-image {\n background-image: none;\n filter: none;\n}\n\n@mixin kill-box-shadow {\n box-shadow: none;\n}\n\n// Clearfix\n//\n// For modern browsers\n// 1. The space content is one way to avoid an Opera bug when the\n// contenteditable attribute is included anywhere else in the document.\n// Otherwise it causes space to appear at the top and bottom of elements\n// that are clearfixed.\n// 2. The use of `table` rather than `block` is only necessary if using\n// `:before` to contain the top-margins of child elements.\n//\n// Source: http://nicolasgallagher.com/micro-clearfix-hack/\n\n@mixin clearfix {\n &:before,\n &:after {\n content: \" \"; // 1\n display: table; // 2\n }\n\n &:after {\n clear: both;\n }\n}\n","/* ============================================================================\nBase CSS\n============================================================================ */\n\nbody {\n line-height: 1.5;\n\n font-family: var(--font-family-text);\n font-feature-settings: \"kern\" 1;\n font-kerning: normal;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\nh1, h2, h3, h4, h5, h6 {\n font-family: var(--font-family-heading);\n font-weight: 300;\n}\n\n.s-content {\n h1, h2, h3, h4, h5, h6 {\n cursor: text;\n line-height: 1.4em;\n margin: 2em 0 0.5em;\n\n tt, code {\n font-size: inherit;\n }\n\n i {\n font-size: 0.7em;\n }\n\n p {\n margin-top: 0;\n }\n }\n\n h1 {\n margin-top: 0;\n font-size: var(--type-size-3);\n }\n\n h2 {\n font-size: var(--type-size-4);\n }\n\n h3 {\n font-size: var(--type-size-5);\n }\n\n h4 {\n font-size: var(--type-size-6);\n }\n\n h5 {\n font-size: var(--type-size-6);\n }\n\n h6 {\n font-size: var(--type-size-6);\n }\n\n a {\n text-decoration: underline;\n }\n\n small {\n font-size: var(--type-size-6);\n }\n\n p {\n margin-bottom: 1.3em;\n }\n\n ul, ol {\n padding-left: 2em;\n }\n\n ul p {\n margin: 0;\n }\n\n ul ul {\n margin: 0;\n }\n\n dl {\n padding: 0;\n\n dt {\n font-weight: bold;\n font-style: italic;\n padding: 0;\n margin: 15px 0 5px;\n }\n\n dt:first-child {\n padding: 0;\n }\n\n dd {\n margin: 0 0 15px;\n padding: 0 15px;\n }\n }\n\n blockquote {\n margin: 0.75em 2em;\n padding: 0.5em 1em;\n font-style: italic;\n border-left: 0.25em solid var(--blockquote-border-color);\n\n cite {\n font-style: italic;\n }\n\n cite:before {\n content: \"\\2014\";\n padding-right: 0.5em;\n }\n }\n\n table {\n width: 100%;\n padding: 0;\n margin-bottom: 1em;\n border-collapse: collapse;\n\n font-size: var(--type-size-6);\n\n + table {\n margin-top: 1em;\n }\n\n tr {\n border-top: 1px solid #eee;\n background-color: white;\n margin: 0;\n padding: 0;\n }\n\n tr:nth-child(2n) {\n background-color: var(--lightest-gray);\n }\n\n th {\n font-weight: bold;\n border: 1px solid var(--light-gray);\n background: var(--lighter-gray);\n margin: 0;\n padding: 0.5em;\n }\n\n td {\n border: 1px solid var(--lighter-gray);\n margin: 0;\n padding: 0.5em;\n }\n }\n\n ul,\n ol,\n blockquote,\n dl dt,\n dl dd,\n table th,\n table td {\n > :first-child {\n margin-top: 0;\n }\n\n > :last-child {\n margin-bottom: 0;\n }\n }\n\n img {\n max-width: 100%;\n display: block;\n margin: 0 auto;\n }\n\n code {\n font-family: var(--font-family-monospace);\n padding-top: 0.1rem;\n padding-bottom: 0.1rem;\n background: var(--code-tag-background-color);\n border: 1px solid var(--light-gray);\n border-radius: var(--code-tag-border-radius);\n box-shadow: var(--code-tag-box-shadow);\n\n &:before,\n &:after {\n letter-spacing: -0.2em;\n content: \"\\00a0\"; /* non-breaking space*/\n }\n }\n\n pre {\n background: #fdf6e3;\n color: #657b83;\n line-height: 1.5em;\n overflow: auto;\n border: none;\n border-radius: 0;\n padding: 0.75em 2em;\n margin: 0 -20px 20px -20px;\n\n code {\n margin: 0;\n padding: 0;\n white-space: pre;\n box-shadow: none;\n }\n\n code:before,\n code:after {\n display: none;\n }\n\n code, tt {\n background-color: transparent;\n border: none;\n }\n }\n\n u,\n ins {\n text-decoration: none;\n border-bottom: 1px solid var(--text);\n\n a {\n color: inherit;\n }\n }\n\n del a {\n color: inherit;\n }\n}\n\n//Content pages float view\n@media (min-width: 1150px) {\n .Columns__right--float .Columns__right__content {\n height: 100%;\n overflow: auto;\n padding: 0 !important;\n background-color: transparent !important;\n position: relative;\n\n article {\n width: 100%;\n min-height: 100%;\n overflow: auto;\n position: relative;\n z-index: 1;\n }\n\n article:before {\n content: \"\";\n width: 50%;\n min-height: 100%;\n overflow: auto;\n background-color: white;\n display: block;\n margin: 0;\n position: absolute;\n z-index: -1;\n }\n }\n\n .Columns__right--float {\n .Pager,\n .Page__header,\n .s-content blockquote,\n .s-content p,\n .s-content ul,\n .s-content ol,\n .s-content dl,\n .s-content h2,\n .s-content h3,\n .s-content h4,\n .s-content h5,\n .s-content h6,\n .s-content hr,\n .s-content table {\n float: left;\n clear: left;\n width: 47%;\n margin-left: 1.5%;\n margin-right: 1.5%;\n }\n }\n\n .Columns__right--float .s-content {\n table {\n background-color: white;\n white-space: normal;\n\n pre, code {\n white-space: normal;\n }\n }\n\n blockquote, p, ul, ol, dl, h2, h3, h4, h5, h6, hr {\n &:before {\n width: 100%;\n height: 10px;\n display: block;\n clear: both;\n }\n\n p, ul, ol, dl, h2, h3, h4, h5, h6, pre, hr {\n width: auto;\n float: none;\n display: block;\n }\n }\n\n hr {\n border-color: #ddd;\n }\n\n // Paragraphs and code inside lists and\n // blockquotes should have 100% width\n li, blockquote {\n p, pre {\n width: 100%;\n }\n }\n\n pre {\n float: left;\n clear: right;\n width: 50%;\n border: none;\n border-left: 10px solid white;\n margin: 0 0 10px;\n padding: 0;\n\n code {\n padding: 0 0.5em;\n }\n }\n }\n}\n","/* ============================================================================\nBase tags\n============================================================================ */\n\na {\n text-decoration: none;\n color: var(--link-color);\n\n &.Link--external:after {\n content: \" \" url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAAVklEQVR4Xn3PgQkAMQhDUXfqTu7kTtkpd5RA8AInfArtQ2iRXFWT2QedAfttj2FsPIOE1eCOlEuoWWjgzYaB/IkeGOrxXhqB+uA9Bfcm0lAZuh+YIeAD+cAqSz4kCMUAAAAASUVORK5CYII=);\n }\n\n &.Link--broken {\n color: red;\n }\n}\n\np {\n margin: 0 0 1em;\n}\n\nhr {\n clear: both;\n margin: 1em 0;\n border: 0;\n border-top: 1px solid #ddd;\n}\n\n/* ============================================================================\nComponents\n============================================================================ */\n\n.Button {\n display: inline-block;\n text-align: center;\n vertical-align: middle;\n touch-action: manipulation;\n cursor: pointer;\n background-image: none; // Reset unusual Firefox-on-Android default style; see https://github.com/necolas/normalize.css/issues/214\n border: 1px solid transparent;\n white-space: nowrap;\n border-radius: 4px;\n\n &--small {\n font-size: 12px;\n line-height: 1.5;\n border-radius: 3px;\n }\n\n &--default {\n color: #333;\n background-color: #fff;\n border-color: #ccc;\n\n &.Button--active {\n color: #333;\n background-color: #e6e6e6;\n border-color: #adadad;\n }\n }\n}\n\n.ButtonGroup {\n position: relative;\n display: inline-block;\n vertical-align: middle; // match .Button alignment given font-size hack above\n\n .Button + .Button {\n margin-left: -1px;\n }\n\n > .Button {\n position: relative;\n float: left;\n\n // Bring the \"active\" button to the front\n &:hover,\n &:focus {\n z-index: 2;\n }\n\n &:active,\n &.Button--active {\n z-index: 3;\n }\n\n &:not(:first-child):not(:last-child) {\n border-radius: 0;\n }\n\n // Set corners individually because sometimes \n // a single button can be in a .ButtonGroup\n // and we need :first-child and :last-child to both match\n &:first-child {\n margin-left: 0;\n }\n\n &:first-child:not(:last-child) {\n border-bottom-right-radius: 0;\n border-top-right-radius: 0;\n }\n\n &:last-child:not(:first-child) {\n border-bottom-left-radius: 0;\n border-top-left-radius: 0;\n }\n }\n}\n\n.Brand {\n display: block;\n background-color: var(--brand-background);\n padding: 0.75em 0.6em;\n font-size: var(--type-size-4);\n text-shadow: none;\n font-family: var(--font-family-heading);\n font-weight: 700;\n color: var(--brand-color);\n}\n\n.Navbar {\n height: 50px;\n box-shadow: 0 1px 5px rgba(0, 0, 0, 0.25);\n background-color: var(--homepage-navbar-background);\n margin-bottom: 0;\n\n .Brand {\n float: left;\n line-height: 20px;\n height: 50px;\n }\n}\n\n.CodeToggler {\n padding: 0 20px;\n\n &__text {\n font-size: 12px;\n line-height: 1.5;\n padding: 6px 10px 6px 0;\n display: inline-block;\n vertical-align: middle;\n }\n}\n\n// Sidebar navigation\n.Nav {\n margin: 0;\n padding: 0;\n\n &__arrow {\n display: inline-block;\n position: relative;\n width: 16px;\n margin-left: -16px;\n\n &:before {\n position: absolute;\n display: block;\n content: \"\";\n margin: -0.25em 0 0 -0.4em;\n left: 50%;\n top: 50%;\n width: 0.5em;\n height: 0.5em;\n border-right: 0.15em solid var(--sidebar-link-arrow-color);\n border-top: 0.15em solid var(--sidebar-link-arrow-color);\n transform: rotate(45deg);\n transition-duration: 0.3s;\n }\n }\n\n &__item {\n display: block;\n\n a {\n display: block;\n margin: 0;\n padding: 6px 15px 6px 20px;\n font-family: var(--font-family-heading);\n font-weight: 400;\n color: var(--sidebar-link-color);\n text-shadow: none;\n }\n\n a:hover {\n color: var(--sidebar-link-color);\n text-shadow: none;\n background-color: var(--sidebar-link-hover-background);\n }\n }\n}\n\n.Nav .Nav {\n display: none;\n margin-left: 15px;\n\n .Nav__item a {\n margin: 0;\n margin-left: -15px;\n padding: 3px 30px;\n font-family: var(--font-family-text);\n color: var(--sidebar-link-secondary-color);\n opacity: 0.7;\n\n &:hover {\n opacity: 1;\n }\n }\n\n .Nav__item--active a {\n color: var(--sidebar-link-color);\n }\n}\n\n.Nav__item {\n &--open,\n &--active {\n > a {\n background-color: var(--sidebar-link-active-background);\n }\n }\n\n &--open {\n > .Nav {\n display: block;\n }\n\n > a > .Nav__arrow:before {\n margin-left: -0.25em;\n transform: rotate(135deg);\n }\n }\n}\n\n.Page__header {\n margin: 0 0 10px;\n padding: 0;\n border-bottom: 1px solid #eee;\n\n @include clearfix();\n\n h1 {\n margin: 0;\n padding: 0;\n line-height: 57px;\n }\n\n &--separator {\n height: 0.6em;\n }\n\n a {\n text-decoration: none;\n }\n\n .ModifiedDate {\n float: left;\n font-size: 10px;\n color: gray;\n }\n\n .EditOn {\n float: right;\n font-size: 10px;\n color: gray;\n }\n}\n\n.Links {\n padding: 0 20px;\n\n a {\n font-family: var(--font-family-heading);\n font-weight: 400;\n color: var(--sidebar-link-color);\n line-height: 2em;\n }\n}\n\n.Twitter {\n padding: 0 20px;\n}\n\n.PoweredBy {\n padding: 0 20px;\n font-size: var(--type-size-6);\n}\n\n.Search {\n position: relative;\n\n &__field {\n display: block;\n width: 100%;\n height: 34px;\n padding: 6px 30px 6px 20px;\n color: var(--search-field-color);\n border-width: 0 0 1px;\n border-bottom: 1px solid var(--search-field-border-color);\n background: var(--search-field-background);\n transition: border-color ease-in-out 0.15s;\n\n &:focus {\n border-color: var(--search-field-hover-border-color);\n outline: 0;\n }\n }\n\n &__icon {\n position: absolute;\n right: 9px;\n top: 9px;\n width: 16px;\n height: 16px;\n }\n}\n\n.Navbar .Search {\n float: right;\n margin: 8px 20px;\n\n &__field {\n box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075);\n border-width: 0;\n border-radius: 4px;\n padding-left: 10px;\n }\n}\n\n.TableOfContentsContainer {\n &__title {\n border-bottom: 4px solid #efefef;\n margin-bottom: 0 !important;\n }\n\n &__content > .TableOfContents {\n margin-top: 0;\n }\n}\n\nul.TableOfContents {\n float: none;\n font-size: 16px;\n padding-left: 1.5em;\n border-left: 6px solid #efefef;\n\n p {\n margin-bottom: 0;\n }\n\n a {\n text-decoration: none;\n }\n\n .TableOfContents {\n border-left-width: 0;\n }\n}\n\n.Columns__right--full .TableOfContentsContainer {\n float: right;\n min-width: 300px;\n max-width: 25%;\n padding-left: 1em;\n\n .TableOfContentsContainer__content > .TableOfContents {\n border-right: 2px solid #efefef;\n }\n\n .TableOfContents {\n list-style-type: none;\n padding-left: 0;\n }\n\n a {\n display: block;\n border-bottom: 1px solid #ddd;\n padding: 0.2em 0;\n }\n\n li a {\n padding-left: 0.75em;\n }\n\n li li a {\n padding-left: 1.5em;\n }\n\n li li li a {\n padding-left: 2.25em;\n }\n\n li li li li a {\n padding-left: 3em;\n }\n}\n\n.Pager {\n padding-left: 0;\n margin: 1em 0;\n list-style: none;\n text-align: center;\n clear: both;\n\n @include clearfix();\n\n li {\n display: inline;\n\n > a {\n display: inline-block;\n padding: 5px 14px;\n background-color: #fff;\n border: 1px solid #ddd;\n border-radius: 15px;\n }\n\n > a:hover,\n > a:focus {\n text-decoration: none;\n background-color: #eee;\n }\n }\n\n &--next > a {\n float: right;\n }\n\n &--prev > a {\n float: left;\n }\n}\n\n.Checkbox {\n position: relative;\n display: block;\n padding-left: 30px;\n cursor: pointer;\n\n input {\n position: absolute;\n z-index: -1;\n opacity: 0;\n }\n}\n\n.Checkbox__indicator {\n position: absolute;\n top: 50%;\n left: 0;\n width: 20px;\n height: 20px;\n margin-top: -10px;\n background: var(--checkbox-background);\n\n /* Check mark */\n &:after {\n position: absolute;\n display: none;\n content: \"\";\n }\n\n /* Hover and focus states */\n .Checkbox:hover input ~ &,\n .Checkbox input:focus ~ & {\n background: var(--checkbox-hover-background);\n }\n\n /* Checked state */\n .Checkbox input:checked ~ & {\n background: var(--checkbox-checked-background);\n\n /* Show check mark */\n &:after {\n display: block;\n }\n }\n\n /* Hover state whilst checked */\n .Checkbox:hover input:not([disabled]):checked ~ &, .Checkbox input:checked:focus ~ & {\n background: var(--checkbox-checked-hover-background);\n }\n\n /* Disabled state */\n .Checkbox input:disabled ~ & {\n pointer-events: none;\n opacity: 0.6;\n background: var(--checkbox-disabled-background);\n }\n\n /* Checkbox tick */\n .Checkbox &:after {\n top: 4px;\n left: 8px;\n width: 5px;\n height: 10px;\n transform: rotate(45deg);\n border: solid var(--checkbox-tick-color);\n border-width: 0 2px 2px 0;\n }\n\n /* Disabled tick colour */\n .Checkbox input:disabled ~ &:after {\n border-color: var(--checkbox-disabled-tick-color);\n }\n}\n\n.Collapsible__content {\n padding-bottom: 1rem;\n}\n\n.Hidden {\n display: none;\n}\n",null,"/* ============================================================================\nHomepage\n============================================================================ */\n\n.Container {\n margin-right: auto;\n margin-left: auto;\n\n &--inner {\n width: 80%;\n margin: 0 auto;\n }\n}\n\n@media (min-width: 1200px) {\n .Container {\n width: 1170px;\n }\n}\n\n@media (min-width: 992px) {\n .Container {\n width: 970px;\n }\n}\n\n@media (min-width: 769px) {\n .Container {\n width: 750px;\n }\n}\n\n@media (min-width: 1200px) {\n .Container {\n width: 1170px;\n }\n}\n\n.Homepage {\n padding-top: 60px !important;\n background-color: var(--homepage-hero-background);\n border-radius: 0;\n border: none;\n color: var(--homepage-hero-color);\n overflow: hidden;\n padding-bottom: 0;\n margin-bottom: 0;\n\n @include kill-box-shadow;\n}\n\n.HomepageTitle {\n h2 {\n width: 80%;\n font-size: 30px;\n margin: 20px auto;\n text-align: center;\n }\n}\n\n.HomepageImage {\n img {\n display: block;\n max-width: 80%;\n margin: 0 auto;\n height: auto;\n }\n}\n\n.HomepageButtons {\n padding: 20px 0;\n background-color: var(--hero-button-block-background);\n text-align: center;\n\n @include clearfix;\n\n .Button--hero {\n padding: 20px 30px;\n border-radius: 0;\n text-shadow: none;\n opacity: 0.8;\n margin: 0 10px;\n text-transform: uppercase;\n border: 5px solid var(--hero-button-border-color);\n font-family: var(--font-family-heading);\n font-weight: 700;\n\n @include kill-background-image;\n @include kill-box-shadow;\n\n @media (max-width: 768px) {\n display: block;\n margin-bottom: 10px;\n }\n\n &:hover {\n opacity: 1;\n }\n\n &.Button--secondary {\n background-color: var(--hero-button-secondary-background);\n color: var(--hero-button-secondary-color);\n }\n\n &.Button--primary {\n background-color: var(--hero-buttom-primary-background);\n color: var(--hero-button-primary-color);\n }\n }\n}\n\n.HomepageContent {\n background-color: white;\n padding: 40px 0;\n\n ul, ol {\n li {\n list-style: none;\n margin-bottom: 0.5em;\n position: relative;\n }\n\n li:before {\n position: absolute;\n top: 50%;\n left: -1.5em;\n content: \"\";\n width: 0;\n height: 0;\n border: 0.5em solid transparent;\n border-left: 0.5em solid var(--homepage-bullet-color);\n float: left;\n display: block;\n margin-top: -0.5em;\n }\n }\n\n .HeroText {\n font-family: var(--font-family-heading);\n font-weight: 300;\n font-size: 16px;\n margin-bottom: 20px;\n line-height: 1.4;\n }\n\n @media (min-width: 769px) {\n padding: 40px 20px;\n\n .HeroText {\n font-size: 21px;\n }\n\n .Row {\n margin: 0 -15px;\n }\n\n .Row__third, .Row__half, .Row__quarter {\n float: left;\n position: relative;\n min-height: 1px;\n padding-left: 15px;\n padding-right: 15px;\n }\n\n .Row__third {\n width: 33.333333%;\n }\n\n .Row__half {\n width: 50%;\n }\n\n .Row__quarter {\n width: 25%;\n }\n }\n}\n\n.HomepageFooter {\n background-color: var(--homepage-footer-background);\n color: var(--homepage-footer-color);\n border: none;\n\n @include kill-box-shadow;\n @include clearfix;\n\n @media (max-width: 768px) {\n padding: 0 20px;\n text-align: center;\n\n .HomepageFooter__links {\n padding-left: 0;\n list-style-type: none;\n }\n }\n\n @media (min-width: 769px) {\n .HomepageFooter__links {\n float: left;\n }\n\n .HomepageFooter__twitter {\n float: right;\n }\n }\n\n &__links {\n margin: 40px 0;\n\n li a {\n line-height: 32px;\n font-size: 16px;\n font-family: var(--font-family-heading);\n font-weight: 700;\n }\n\n li a:hover {\n text-decoration: underline;\n }\n }\n\n &__twitter {\n margin: 40px 0;\n }\n\n .Twitter {\n margin-bottom: 20px;\n }\n}\n","/* ===========================================================================================\nCode Highlighting\n============================================================================================== */\n\n/*\n\nOrginal Style from ethanschoonover.com/solarized (c) Jeremy Hull \n\n*/\n\n.hljs {\n display: block;\n overflow-x: auto;\n padding: 0.5em;\n background: #fdf6e3;\n color: #657b83;\n}\n\n.hljs-comment,\n.hljs-quote {\n color: #93a1a1;\n}\n\n/* Solarized Green */\n.hljs-keyword,\n.hljs-selector-tag,\n.hljs-addition {\n color: #859900;\n}\n\n/* Solarized Cyan */\n.hljs-number,\n.hljs-string,\n.hljs-meta .hljs-meta-string,\n.hljs-literal,\n.hljs-doctag,\n.hljs-regexp {\n color: #2aa198;\n}\n\n/* Solarized Blue */\n.hljs-title,\n.hljs-section,\n.hljs-name,\n.hljs-selector-id,\n.hljs-selector-class {\n color: #268bd2;\n}\n\n/* Solarized Yellow */\n.hljs-attribute,\n.hljs-attr,\n.hljs-variable,\n.hljs-template-variable,\n.hljs-class .hljs-title,\n.hljs-type {\n color: #b58900;\n}\n\n/* Solarized Orange */\n.hljs-symbol,\n.hljs-bullet,\n.hljs-subst,\n.hljs-meta,\n.hljs-meta .hljs-keyword,\n.hljs-selector-attr,\n.hljs-selector-pseudo,\n.hljs-link {\n color: #cb4b16;\n}\n\n/* Solarized Red */\n.hljs-built_in,\n.hljs-deletion {\n color: #dc322f;\n}\n\n.hljs-formula {\n background: #eee8d5;\n}\n\n.hljs-emphasis {\n font-style: italic;\n}\n\n.hljs-strong {\n font-weight: bold;\n}\n"]} \ No newline at end of file diff --git a/docs/html/themes/d3/fonts/robotoslab-bold.eot b/docs/html/themes/d3/fonts/robotoslab-bold.eot new file mode 100644 index 0000000000000000000000000000000000000000..4e88b6cfeb0c6dcef692a784ed7a62e322634273 GIT binary patch literal 39370 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 J_r)5b{{l>b;dlT5 literal 0 HcmV?d00001 diff --git a/docs/html/themes/d3/fonts/robotoslab-bold.svg b/docs/html/themes/d3/fonts/robotoslab-bold.svg new file mode 100644 index 0000000..0c83053 --- /dev/null +++ b/docs/html/themes/d3/fonts/robotoslab-bold.svg @@ -0,0 +1,688 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/html/themes/d3/fonts/robotoslab-bold.ttf b/docs/html/themes/d3/fonts/robotoslab-bold.ttf new file mode 100644 index 0000000000000000000000000000000000000000..b5120e7f3caa028717c7440eaaf6edd7846ce08c GIT binary patch literal 39120 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%0A0+ao8+W(Tg8N8ykwxbQ$0a#nur&_ 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 literal 0 HcmV?d00001 diff --git a/docs/html/themes/d3/fonts/robotoslab-bold.woff b/docs/html/themes/d3/fonts/robotoslab-bold.woff new file mode 100644 index 0000000000000000000000000000000000000000..9e98b2d356be062c31c97ec55f36eabafe514c44 GIT binary patch literal 23812 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 literal 0 HcmV?d00001 diff --git a/docs/html/themes/d3/fonts/robotoslab-bold.woff2 b/docs/html/themes/d3/fonts/robotoslab-bold.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..a0e46d686e5410b7bdf6a084d7a33b31957fb5d4 GIT binary patch literal 18720 zcmV)9K*hgzPew8T0RR9107)PK6951J0GQAK07$a{0RR9100000000000000000000 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

_eRa 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 z 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 j{xNC$epx7z7L`7PLiqVVV_#6U@HC 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 literal 0 HcmV?d00001 diff --git a/docs/html/themes/d3/fonts/robotoslab-light.svg b/docs/html/themes/d3/fonts/robotoslab-light.svg new file mode 100644 index 0000000..bf7f6a7 --- /dev/null +++ b/docs/html/themes/d3/fonts/robotoslab-light.svg @@ -0,0 +1,687 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/html/themes/d3/fonts/robotoslab-light.ttf b/docs/html/themes/d3/fonts/robotoslab-light.ttf new file mode 100644 index 0000000000000000000000000000000000000000..067e1e58b0729e758f737c5c1cc70cace6f4c734 GIT binary patch literal 40392 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 Chiqg3 literal 0 HcmV?d00001 diff --git a/docs/html/themes/d3/fonts/robotoslab-light.woff b/docs/html/themes/d3/fonts/robotoslab-light.woff new file mode 100644 index 0000000000000000000000000000000000000000..1cbe7902b7c7722c5f984d2933a76f962248ed21 GIT binary patch literal 24224 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 OD;59%0a>}9VE_OV(@IGI literal 0 HcmV?d00001 diff --git a/docs/html/themes/d3/fonts/robotoslab-light.woff2 b/docs/html/themes/d3/fonts/robotoslab-light.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..b954cfdc867b95a2755e7cd6601cab227c4091f6 GIT binary patch literal 19112 zcmV)7K*zs#Pew8T0RR9107|F;6951J0G+%507^Ol0RR9100000000000000000000 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 literal 0 HcmV?d00001 diff --git a/docs/html/themes/d3/fonts/robotoslab-regular.eot b/docs/html/themes/d3/fonts/robotoslab-regular.eot new file mode 100644 index 0000000000000000000000000000000000000000..10a7a2b6d2d836dcd1501f7d8fec3dcaba773e9c GIT binary patch literal 39066 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/html/themes/d3/fonts/robotoslab-regular.ttf b/docs/html/themes/d3/fonts/robotoslab-regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..9c36f36071729ae3ea3e8d5f1875a09729b44301 GIT binary patch literal 38804 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 T{)-s=)*Ow;-L0K>i!prwlD(7=Kk;_r0 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",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){var b=g.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=$.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",P)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=$.test(o.compareDocumentPosition),t=b||$.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===g||a.ownerDocument===v&&t(v,a)?-1:b===g||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,h=[a],i=[b];if(!e||!f)return a===g?-1:b===g?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)h.unshift(c);c=b;while(c=c.parentNode)i.unshift(c);while(h[d]===i[d])d++;return d?la(h[d],i[d]):h[d]===v?-1:i[d]===v?1:0},g):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(U,"='$1']"),!(!c.matchesSelector||!p||r&&r.test(b)||q&&q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:X,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ca,da),a[3]=(a[3]||a[4]||a[5]||"").replace(ca,da),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return X.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&V.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ca,da).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(Q," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h;if(q){if(f){while(p){l=b;while(l=l[p])if(h?l.nodeName.toLowerCase()===r:1===l.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){k=q[u]||(q[u]={}),j=k[a]||[],n=j[0]===w&&j[1],m=j[0]===w&&j[2],l=n&&q.childNodes[n];while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if(1===l.nodeType&&++m&&l===b){k[a]=[w,n,m];break}}else if(s&&(j=(b[u]||(b[u]={}))[a])&&j[0]===w)m=j[1];else while(l=++n&&l&&l[p]||(m=n=0)||o.pop())if((h?l.nodeName.toLowerCase()===r:1===l.nodeType)&&++m&&(s&&((l[u]||(l[u]={}))[a]=[w,m]),l===b))break;return m-=e,m===d||m%d===0&&m/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(R,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(ca,da),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return W.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(ca,da).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Z.test(a.nodeName)},input:function(a){return Y.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:oa(function(){return[0]}),last:oa(function(a,b){return[b-1]}),eq:oa(function(a,b,c){return[0>c?c+b:c]}),even:oa(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:oa(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:oa(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:oa(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function sa(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(i=b[u]||(b[u]={}),(h=i[d])&&h[0]===w&&h[1]===f)return j[2]=h[2];if(i[d]=j,j[2]=a(b,c,g))return!0}}}function ta(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ua(a,b,c){for(var d=0,e=b.length;e>d;d++)ga(a,b[d],c);return c}function va(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function wa(a,b,c,d,e,f){return d&&!d[u]&&(d=wa(d)),e&&!e[u]&&(e=wa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ua(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:va(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=va(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=va(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function xa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=sa(function(a){return a===b},h,!0),l=sa(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[sa(ta(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return wa(i>1&&ta(m),i>1&&ra(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(R,"$1"),c,e>i&&xa(a.slice(i,e)),f>e&&xa(a=a.slice(e)),f>e&&ra(a))}m.push(c)}return ta(m)}function ya(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,m,o,p=0,q="0",r=f&&[],s=[],t=j,u=f||e&&d.find.TAG("*",k),v=w+=null==t?1:Math.random()||.1,x=u.length;for(k&&(j=g!==n&&g);q!==x&&null!=(l=u[q]);q++){if(e&&l){m=0;while(o=a[m++])if(o(l,g,h)){i.push(l);break}k&&(w=v)}c&&((l=!o&&l)&&p--,f&&r.push(l))}if(p+=q,c&&q!==p){m=0;while(o=b[m++])o(r,s,g,h);if(f){if(p>0)while(q--)r[q]||s[q]||(s[q]=F.call(i));s=va(s)}H.apply(i,s),k&&!f&&s.length>0&&p+b.length>1&&ga.uniqueSort(i)}return k&&(w=v,j=t),r};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=xa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,ya(e,d)),f.selector=a}return f},i=ga.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ca,da),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=X.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ca,da),aa.test(j[0].type)&&pa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&ra(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,aa.test(a)&&pa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ja(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);m.find=s,m.expr=s.selectors,m.expr[":"]=m.expr.pseudos,m.unique=s.uniqueSort,m.text=s.getText,m.isXMLDoc=s.isXML,m.contains=s.contains;var t=m.expr.match.needsContext,u=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,v=/^.[^:#\[\.,]*$/;function w(a,b,c){if(m.isFunction(b))return m.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return m.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(v.test(b))return m.filter(b,a,c);b=m.filter(b,a)}return m.grep(a,function(a){return m.inArray(a,b)>=0!==c})}m.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?m.find.matchesSelector(d,a)?[d]:[]:m.find.matches(a,m.grep(b,function(a){return 1===a.nodeType}))},m.fn.extend({find:function(a){var b,c=[],d=this,e=d.length;if("string"!=typeof a)return this.pushStack(m(a).filter(function(){for(b=0;e>b;b++)if(m.contains(d[b],this))return!0}));for(b=0;e>b;b++)m.find(a,d[b],c);return c=this.pushStack(e>1?m.unique(c):c),c.selector=this.selector?this.selector+" "+a:a,c},filter:function(a){return this.pushStack(w(this,a||[],!1))},not:function(a){return this.pushStack(w(this,a||[],!0))},is:function(a){return!!w(this,"string"==typeof a&&t.test(a)?m(a):a||[],!1).length}});var x,y=a.document,z=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,A=m.fn.init=function(a,b){var c,d;if(!a)return this;if("string"==typeof a){if(c="<"===a.charAt(0)&&">"===a.charAt(a.length-1)&&a.length>=3?[null,a,null]:z.exec(a),!c||!c[1]&&b)return!b||b.jquery?(b||x).find(a):this.constructor(b).find(a);if(c[1]){if(b=b instanceof m?b[0]:b,m.merge(this,m.parseHTML(c[1],b&&b.nodeType?b.ownerDocument||b:y,!0)),u.test(c[1])&&m.isPlainObject(b))for(c in b)m.isFunction(this[c])?this[c](b[c]):this.attr(c,b[c]);return this}if(d=y.getElementById(c[2]),d&&d.parentNode){if(d.id!==c[2])return x.find(a);this.length=1,this[0]=d}return this.context=y,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):m.isFunction(a)?"undefined"!=typeof x.ready?x.ready(a):a(m):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),m.makeArray(a,this))};A.prototype=m.fn,x=m(y);var B=/^(?:parents|prev(?:Until|All))/,C={children:!0,contents:!0,next:!0,prev:!0};m.extend({dir:function(a,b,c){var d=[],e=a[b];while(e&&9!==e.nodeType&&(void 0===c||1!==e.nodeType||!m(e).is(c)))1===e.nodeType&&d.push(e),e=e[b];return d},sibling:function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c}}),m.fn.extend({has:function(a){var b,c=m(a,this),d=c.length;return this.filter(function(){for(b=0;d>b;b++)if(m.contains(this,c[b]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=t.test(a)||"string"!=typeof a?m(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&m.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?m.unique(f):f)},index:function(a){return a?"string"==typeof a?m.inArray(this[0],m(a)):m.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(m.unique(m.merge(this.get(),m(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function D(a,b){do a=a[b];while(a&&1!==a.nodeType);return a}m.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return m.dir(a,"parentNode")},parentsUntil:function(a,b,c){return m.dir(a,"parentNode",c)},next:function(a){return D(a,"nextSibling")},prev:function(a){return D(a,"previousSibling")},nextAll:function(a){return m.dir(a,"nextSibling")},prevAll:function(a){return m.dir(a,"previousSibling")},nextUntil:function(a,b,c){return m.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return m.dir(a,"previousSibling",c)},siblings:function(a){return m.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return m.sibling(a.firstChild)},contents:function(a){return m.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:m.merge([],a.childNodes)}},function(a,b){m.fn[a]=function(c,d){var e=m.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=m.filter(d,e)),this.length>1&&(C[a]||(e=m.unique(e)),B.test(a)&&(e=e.reverse())),this.pushStack(e)}});var E=/\S+/g,F={};function G(a){var b=F[a]={};return m.each(a.match(E)||[],function(a,c){b[c]=!0}),b}m.Callbacks=function(a){a="string"==typeof a?F[a]||G(a):m.extend({},a);var b,c,d,e,f,g,h=[],i=!a.once&&[],j=function(l){for(c=a.memory&&l,d=!0,f=g||0,g=0,e=h.length,b=!0;h&&e>f;f++)if(h[f].apply(l[0],l[1])===!1&&a.stopOnFalse){c=!1;break}b=!1,h&&(i?i.length&&j(i.shift()):c?h=[]:k.disable())},k={add:function(){if(h){var d=h.length;!function f(b){m.each(b,function(b,c){var d=m.type(c);"function"===d?a.unique&&k.has(c)||h.push(c):c&&c.length&&"string"!==d&&f(c)})}(arguments),b?e=h.length:c&&(g=d,j(c))}return this},remove:function(){return h&&m.each(arguments,function(a,c){var d;while((d=m.inArray(c,h,d))>-1)h.splice(d,1),b&&(e>=d&&e--,f>=d&&f--)}),this},has:function(a){return a?m.inArray(a,h)>-1:!(!h||!h.length)},empty:function(){return h=[],e=0,this},disable:function(){return h=i=c=void 0,this},disabled:function(){return!h},lock:function(){return i=void 0,c||k.disable(),this},locked:function(){return!i},fireWith:function(a,c){return!h||d&&!i||(c=c||[],c=[a,c.slice?c.slice():c],b?i.push(c):j(c)),this},fire:function(){return k.fireWith(this,arguments),this},fired:function(){return!!d}};return k},m.extend({Deferred:function(a){var b=[["resolve","done",m.Callbacks("once memory"),"resolved"],["reject","fail",m.Callbacks("once memory"),"rejected"],["notify","progress",m.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return m.Deferred(function(c){m.each(b,function(b,f){var g=m.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&m.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?m.extend(a,d):d}},e={};return d.pipe=d.then,m.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=d.call(arguments),e=c.length,f=1!==e||a&&m.isFunction(a.promise)?e:0,g=1===f?a:m.Deferred(),h=function(a,b,c){return function(e){b[a]=this,c[a]=arguments.length>1?d.call(arguments):e,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(e>1)for(i=new Array(e),j=new Array(e),k=new Array(e);e>b;b++)c[b]&&m.isFunction(c[b].promise)?c[b].promise().done(h(b,k,c)).fail(g.reject).progress(h(b,j,i)):--f;return f||g.resolveWith(k,c),g.promise()}});var H;m.fn.ready=function(a){return m.ready.promise().done(a),this},m.extend({isReady:!1,readyWait:1,holdReady:function(a){a?m.readyWait++:m.ready(!0)},ready:function(a){if(a===!0?!--m.readyWait:!m.isReady){if(!y.body)return setTimeout(m.ready);m.isReady=!0,a!==!0&&--m.readyWait>0||(H.resolveWith(y,[m]),m.fn.triggerHandler&&(m(y).triggerHandler("ready"),m(y).off("ready")))}}});function I(){y.addEventListener?(y.removeEventListener("DOMContentLoaded",J,!1),a.removeEventListener("load",J,!1)):(y.detachEvent("onreadystatechange",J),a.detachEvent("onload",J))}function J(){(y.addEventListener||"load"===event.type||"complete"===y.readyState)&&(I(),m.ready())}m.ready.promise=function(b){if(!H)if(H=m.Deferred(),"complete"===y.readyState)setTimeout(m.ready);else if(y.addEventListener)y.addEventListener("DOMContentLoaded",J,!1),a.addEventListener("load",J,!1);else{y.attachEvent("onreadystatechange",J),a.attachEvent("onload",J);var c=!1;try{c=null==a.frameElement&&y.documentElement}catch(d){}c&&c.doScroll&&!function e(){if(!m.isReady){try{c.doScroll("left")}catch(a){return setTimeout(e,50)}I(),m.ready()}}()}return H.promise(b)};var K="undefined",L;for(L in m(k))break;k.ownLast="0"!==L,k.inlineBlockNeedsLayout=!1,m(function(){var a,b,c,d;c=y.getElementsByTagName("body")[0],c&&c.style&&(b=y.createElement("div"),d=y.createElement("div"),d.style.cssText="position:absolute;border:0;width:0;height:0;top:0;left:-9999px",c.appendChild(d).appendChild(b),typeof b.style.zoom!==K&&(b.style.cssText="display:inline;margin:0;border:0;padding:1px;width:1px;zoom:1",k.inlineBlockNeedsLayout=a=3===b.offsetWidth,a&&(c.style.zoom=1)),c.removeChild(d))}),function(){var a=y.createElement("div");if(null==k.deleteExpando){k.deleteExpando=!0;try{delete a.test}catch(b){k.deleteExpando=!1}}a=null}(),m.acceptData=function(a){var b=m.noData[(a.nodeName+" ").toLowerCase()],c=+a.nodeType||1;return 1!==c&&9!==c?!1:!b||b!==!0&&a.getAttribute("classid")===b};var M=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,N=/([A-Z])/g;function O(a,b,c){if(void 0===c&&1===a.nodeType){var d="data-"+b.replace(N,"-$1").toLowerCase();if(c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:M.test(c)?m.parseJSON(c):c}catch(e){}m.data(a,b,c)}else c=void 0}return c}function P(a){var b;for(b in a)if(("data"!==b||!m.isEmptyObject(a[b]))&&"toJSON"!==b)return!1; + +return!0}function Q(a,b,d,e){if(m.acceptData(a)){var f,g,h=m.expando,i=a.nodeType,j=i?m.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=i?a[h]=c.pop()||m.guid++:h),j[k]||(j[k]=i?{}:{toJSON:m.noop}),("object"==typeof b||"function"==typeof b)&&(e?j[k]=m.extend(j[k],b):j[k].data=m.extend(j[k].data,b)),g=j[k],e||(g.data||(g.data={}),g=g.data),void 0!==d&&(g[m.camelCase(b)]=d),"string"==typeof b?(f=g[b],null==f&&(f=g[m.camelCase(b)])):f=g,f}}function R(a,b,c){if(m.acceptData(a)){var d,e,f=a.nodeType,g=f?m.cache:a,h=f?a[m.expando]:m.expando;if(g[h]){if(b&&(d=c?g[h]:g[h].data)){m.isArray(b)?b=b.concat(m.map(b,m.camelCase)):b in d?b=[b]:(b=m.camelCase(b),b=b in d?[b]:b.split(" ")),e=b.length;while(e--)delete d[b[e]];if(c?!P(d):!m.isEmptyObject(d))return}(c||(delete g[h].data,P(g[h])))&&(f?m.cleanData([a],!0):k.deleteExpando||g!=g.window?delete g[h]:g[h]=null)}}}m.extend({cache:{},noData:{"applet ":!0,"embed ":!0,"object ":"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000"},hasData:function(a){return a=a.nodeType?m.cache[a[m.expando]]:a[m.expando],!!a&&!P(a)},data:function(a,b,c){return Q(a,b,c)},removeData:function(a,b){return R(a,b)},_data:function(a,b,c){return Q(a,b,c,!0)},_removeData:function(a,b){return R(a,b,!0)}}),m.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=m.data(f),1===f.nodeType&&!m._data(f,"parsedAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=m.camelCase(d.slice(5)),O(f,d,e[d])));m._data(f,"parsedAttrs",!0)}return e}return"object"==typeof a?this.each(function(){m.data(this,a)}):arguments.length>1?this.each(function(){m.data(this,a,b)}):f?O(f,a,m.data(f,a)):void 0},removeData:function(a){return this.each(function(){m.removeData(this,a)})}}),m.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=m._data(a,b),c&&(!d||m.isArray(c)?d=m._data(a,b,m.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=m.queue(a,b),d=c.length,e=c.shift(),f=m._queueHooks(a,b),g=function(){m.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return m._data(a,c)||m._data(a,c,{empty:m.Callbacks("once memory").add(function(){m._removeData(a,b+"queue"),m._removeData(a,c)})})}}),m.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.lengthh;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},W=/^(?:checkbox|radio)$/i;!function(){var a=y.createElement("input"),b=y.createElement("div"),c=y.createDocumentFragment();if(b.innerHTML="
a",k.leadingWhitespace=3===b.firstChild.nodeType,k.tbody=!b.getElementsByTagName("tbody").length,k.htmlSerialize=!!b.getElementsByTagName("link").length,k.html5Clone="<:nav>"!==y.createElement("nav").cloneNode(!0).outerHTML,a.type="checkbox",a.checked=!0,c.appendChild(a),k.appendChecked=a.checked,b.innerHTML="",k.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue,c.appendChild(b),b.innerHTML="",k.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,k.noCloneEvent=!0,b.attachEvent&&(b.attachEvent("onclick",function(){k.noCloneEvent=!1}),b.cloneNode(!0).click()),null==k.deleteExpando){k.deleteExpando=!0;try{delete b.test}catch(d){k.deleteExpando=!1}}}(),function(){var b,c,d=y.createElement("div");for(b in{submit:!0,change:!0,focusin:!0})c="on"+b,(k[b+"Bubbles"]=c in a)||(d.setAttribute(c,"t"),k[b+"Bubbles"]=d.attributes[c].expando===!1);d=null}();var X=/^(?:input|select|textarea)$/i,Y=/^key/,Z=/^(?:mouse|pointer|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=/^([^.]*)(?:\.(.+)|)$/;function aa(){return!0}function ba(){return!1}function ca(){try{return y.activeElement}catch(a){}}m.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m._data(a);if(r){c.handler&&(i=c,c=i.handler,e=i.selector),c.guid||(c.guid=m.guid++),(g=r.events)||(g=r.events={}),(k=r.handle)||(k=r.handle=function(a){return typeof m===K||a&&m.event.triggered===a.type?void 0:m.event.dispatch.apply(k.elem,arguments)},k.elem=a),b=(b||"").match(E)||[""],h=b.length;while(h--)f=_.exec(b[h])||[],o=q=f[1],p=(f[2]||"").split(".").sort(),o&&(j=m.event.special[o]||{},o=(e?j.delegateType:j.bindType)||o,j=m.event.special[o]||{},l=m.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&m.expr.match.needsContext.test(e),namespace:p.join(".")},i),(n=g[o])||(n=g[o]=[],n.delegateCount=0,j.setup&&j.setup.call(a,d,p,k)!==!1||(a.addEventListener?a.addEventListener(o,k,!1):a.attachEvent&&a.attachEvent("on"+o,k))),j.add&&(j.add.call(a,l),l.handler.guid||(l.handler.guid=c.guid)),e?n.splice(n.delegateCount++,0,l):n.push(l),m.event.global[o]=!0);a=null}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,n,o,p,q,r=m.hasData(a)&&m._data(a);if(r&&(k=r.events)){b=(b||"").match(E)||[""],j=b.length;while(j--)if(h=_.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=m.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,n=k[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),i=f=n.length;while(f--)g=n[f],!e&&q!==g.origType||c&&c.guid!==g.guid||h&&!h.test(g.namespace)||d&&d!==g.selector&&("**"!==d||!g.selector)||(n.splice(f,1),g.selector&&n.delegateCount--,l.remove&&l.remove.call(a,g));i&&!n.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||m.removeEvent(a,o,r.handle),delete k[o])}else for(o in k)m.event.remove(a,o+b[j],c,d,!0);m.isEmptyObject(k)&&(delete r.handle,m._removeData(a,"events"))}},trigger:function(b,c,d,e){var f,g,h,i,k,l,n,o=[d||y],p=j.call(b,"type")?b.type:b,q=j.call(b,"namespace")?b.namespace.split("."):[];if(h=l=d=d||y,3!==d.nodeType&&8!==d.nodeType&&!$.test(p+m.event.triggered)&&(p.indexOf(".")>=0&&(q=p.split("."),p=q.shift(),q.sort()),g=p.indexOf(":")<0&&"on"+p,b=b[m.expando]?b:new m.Event(p,"object"==typeof b&&b),b.isTrigger=e?2:3,b.namespace=q.join("."),b.namespace_re=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=d),c=null==c?[b]:m.makeArray(c,[b]),k=m.event.special[p]||{},e||!k.trigger||k.trigger.apply(d,c)!==!1)){if(!e&&!k.noBubble&&!m.isWindow(d)){for(i=k.delegateType||p,$.test(i+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),l=h;l===(d.ownerDocument||y)&&o.push(l.defaultView||l.parentWindow||a)}n=0;while((h=o[n++])&&!b.isPropagationStopped())b.type=n>1?i:k.bindType||p,f=(m._data(h,"events")||{})[b.type]&&m._data(h,"handle"),f&&f.apply(h,c),f=g&&h[g],f&&f.apply&&m.acceptData(h)&&(b.result=f.apply(h,c),b.result===!1&&b.preventDefault());if(b.type=p,!e&&!b.isDefaultPrevented()&&(!k._default||k._default.apply(o.pop(),c)===!1)&&m.acceptData(d)&&g&&d[p]&&!m.isWindow(d)){l=d[g],l&&(d[g]=null),m.event.triggered=p;try{d[p]()}catch(r){}m.event.triggered=void 0,l&&(d[g]=l)}return b.result}},dispatch:function(a){a=m.event.fix(a);var b,c,e,f,g,h=[],i=d.call(arguments),j=(m._data(this,"events")||{})[a.type]||[],k=m.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=m.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,g=0;while((e=f.handlers[g++])&&!a.isImmediatePropagationStopped())(!a.namespace_re||a.namespace_re.test(e.namespace))&&(a.handleObj=e,a.data=e.data,c=((m.event.special[e.origType]||{}).handle||e.handler).apply(f.elem,i),void 0!==c&&(a.result=c)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&(!a.button||"click"!==a.type))for(;i!=this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(e=[],f=0;h>f;f++)d=b[f],c=d.selector+" ",void 0===e[c]&&(e[c]=d.needsContext?m(c,this).index(i)>=0:m.find(c,this,null,[i]).length),e[c]&&e.push(d);e.length&&g.push({elem:i,handlers:e})}return h]","i"),ha=/^\s+/,ia=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,ja=/<([\w:]+)/,ka=/\s*$/g,ra={option:[1,""],legend:[1,"

","
"],area:[1,"",""],param:[1,"",""],thead:[1,"","
"],tr:[2,"","
"],col:[2,"","
"],td:[3,"","
"],_default:k.htmlSerialize?[0,"",""]:[1,"X
","
"]},sa=da(y),ta=sa.appendChild(y.createElement("div"));ra.optgroup=ra.option,ra.tbody=ra.tfoot=ra.colgroup=ra.caption=ra.thead,ra.th=ra.td;function ua(a,b){var c,d,e=0,f=typeof a.getElementsByTagName!==K?a.getElementsByTagName(b||"*"):typeof a.querySelectorAll!==K?a.querySelectorAll(b||"*"):void 0;if(!f)for(f=[],c=a.childNodes||a;null!=(d=c[e]);e++)!b||m.nodeName(d,b)?f.push(d):m.merge(f,ua(d,b));return void 0===b||b&&m.nodeName(a,b)?m.merge([a],f):f}function va(a){W.test(a.type)&&(a.defaultChecked=a.checked)}function wa(a,b){return m.nodeName(a,"table")&&m.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function xa(a){return a.type=(null!==m.find.attr(a,"type"))+"/"+a.type,a}function ya(a){var b=pa.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function za(a,b){for(var c,d=0;null!=(c=a[d]);d++)m._data(c,"globalEval",!b||m._data(b[d],"globalEval"))}function Aa(a,b){if(1===b.nodeType&&m.hasData(a)){var c,d,e,f=m._data(a),g=m._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;e>d;d++)m.event.add(b,c,h[c][d])}g.data&&(g.data=m.extend({},g.data))}}function Ba(a,b){var c,d,e;if(1===b.nodeType){if(c=b.nodeName.toLowerCase(),!k.noCloneEvent&&b[m.expando]){e=m._data(b);for(d in e.events)m.removeEvent(b,d,e.handle);b.removeAttribute(m.expando)}"script"===c&&b.text!==a.text?(xa(b).text=a.text,ya(b)):"object"===c?(b.parentNode&&(b.outerHTML=a.outerHTML),k.html5Clone&&a.innerHTML&&!m.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):"input"===c&&W.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):"option"===c?b.defaultSelected=b.selected=a.defaultSelected:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}}m.extend({clone:function(a,b,c){var d,e,f,g,h,i=m.contains(a.ownerDocument,a);if(k.html5Clone||m.isXMLDoc(a)||!ga.test("<"+a.nodeName+">")?f=a.cloneNode(!0):(ta.innerHTML=a.outerHTML,ta.removeChild(f=ta.firstChild)),!(k.noCloneEvent&&k.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||m.isXMLDoc(a)))for(d=ua(f),h=ua(a),g=0;null!=(e=h[g]);++g)d[g]&&Ba(e,d[g]);if(b)if(c)for(h=h||ua(a),d=d||ua(f),g=0;null!=(e=h[g]);g++)Aa(e,d[g]);else Aa(a,f);return d=ua(f,"script"),d.length>0&&za(d,!i&&ua(a,"script")),d=h=e=null,f},buildFragment:function(a,b,c,d){for(var e,f,g,h,i,j,l,n=a.length,o=da(b),p=[],q=0;n>q;q++)if(f=a[q],f||0===f)if("object"===m.type(f))m.merge(p,f.nodeType?[f]:f);else if(la.test(f)){h=h||o.appendChild(b.createElement("div")),i=(ja.exec(f)||["",""])[1].toLowerCase(),l=ra[i]||ra._default,h.innerHTML=l[1]+f.replace(ia,"<$1>")+l[2],e=l[0];while(e--)h=h.lastChild;if(!k.leadingWhitespace&&ha.test(f)&&p.push(b.createTextNode(ha.exec(f)[0])),!k.tbody){f="table"!==i||ka.test(f)?""!==l[1]||ka.test(f)?0:h:h.firstChild,e=f&&f.childNodes.length;while(e--)m.nodeName(j=f.childNodes[e],"tbody")&&!j.childNodes.length&&f.removeChild(j)}m.merge(p,h.childNodes),h.textContent="";while(h.firstChild)h.removeChild(h.firstChild);h=o.lastChild}else p.push(b.createTextNode(f));h&&o.removeChild(h),k.appendChecked||m.grep(ua(p,"input"),va),q=0;while(f=p[q++])if((!d||-1===m.inArray(f,d))&&(g=m.contains(f.ownerDocument,f),h=ua(o.appendChild(f),"script"),g&&za(h),c)){e=0;while(f=h[e++])oa.test(f.type||"")&&c.push(f)}return h=null,o},cleanData:function(a,b){for(var d,e,f,g,h=0,i=m.expando,j=m.cache,l=k.deleteExpando,n=m.event.special;null!=(d=a[h]);h++)if((b||m.acceptData(d))&&(f=d[i],g=f&&j[f])){if(g.events)for(e in g.events)n[e]?m.event.remove(d,e):m.removeEvent(d,e,g.handle);j[f]&&(delete j[f],l?delete d[i]:typeof d.removeAttribute!==K?d.removeAttribute(i):d[i]=null,c.push(f))}}}),m.fn.extend({text:function(a){return V(this,function(a){return void 0===a?m.text(this):this.empty().append((this[0]&&this[0].ownerDocument||y).createTextNode(a))},null,a,arguments.length)},append:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.appendChild(a)}})},prepend:function(){return this.domManip(arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=wa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return this.domManip(arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},remove:function(a,b){for(var c,d=a?m.filter(a,this):this,e=0;null!=(c=d[e]);e++)b||1!==c.nodeType||m.cleanData(ua(c)),c.parentNode&&(b&&m.contains(c.ownerDocument,c)&&za(ua(c,"script")),c.parentNode.removeChild(c));return this},empty:function(){for(var a,b=0;null!=(a=this[b]);b++){1===a.nodeType&&m.cleanData(ua(a,!1));while(a.firstChild)a.removeChild(a.firstChild);a.options&&m.nodeName(a,"select")&&(a.options.length=0)}return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return m.clone(this,a,b)})},html:function(a){return V(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a)return 1===b.nodeType?b.innerHTML.replace(fa,""):void 0;if(!("string"!=typeof a||ma.test(a)||!k.htmlSerialize&&ga.test(a)||!k.leadingWhitespace&&ha.test(a)||ra[(ja.exec(a)||["",""])[1].toLowerCase()])){a=a.replace(ia,"<$1>");try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(m.cleanData(ua(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=arguments[0];return this.domManip(arguments,function(b){a=this.parentNode,m.cleanData(ua(this)),a&&a.replaceChild(b,this)}),a&&(a.length||a.nodeType)?this:this.remove()},detach:function(a){return this.remove(a,!0)},domManip:function(a,b){a=e.apply([],a);var c,d,f,g,h,i,j=0,l=this.length,n=this,o=l-1,p=a[0],q=m.isFunction(p);if(q||l>1&&"string"==typeof p&&!k.checkClone&&na.test(p))return this.each(function(c){var d=n.eq(c);q&&(a[0]=p.call(this,c,d.html())),d.domManip(a,b)});if(l&&(i=m.buildFragment(a,this[0].ownerDocument,!1,this),c=i.firstChild,1===i.childNodes.length&&(i=c),c)){for(g=m.map(ua(i,"script"),xa),f=g.length;l>j;j++)d=i,j!==o&&(d=m.clone(d,!0,!0),f&&m.merge(g,ua(d,"script"))),b.call(this[j],d,j);if(f)for(h=g[g.length-1].ownerDocument,m.map(g,ya),j=0;f>j;j++)d=g[j],oa.test(d.type||"")&&!m._data(d,"globalEval")&&m.contains(h,d)&&(d.src?m._evalUrl&&m._evalUrl(d.src):m.globalEval((d.text||d.textContent||d.innerHTML||"").replace(qa,"")));i=c=null}return this}}),m.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){m.fn[a]=function(a){for(var c,d=0,e=[],g=m(a),h=g.length-1;h>=d;d++)c=d===h?this:this.clone(!0),m(g[d])[b](c),f.apply(e,c.get());return this.pushStack(e)}});var Ca,Da={};function Ea(b,c){var d,e=m(c.createElement(b)).appendTo(c.body),f=a.getDefaultComputedStyle&&(d=a.getDefaultComputedStyle(e[0]))?d.display:m.css(e[0],"display");return e.detach(),f}function Fa(a){var b=y,c=Da[a];return c||(c=Ea(a,b),"none"!==c&&c||(Ca=(Ca||m("