feat: mapping of hotel detail pages to products
This commit is contained in:
@@ -361,11 +361,13 @@ class ProductRepository extends AbstractRepository
|
||||
'room.name as roomName', 'room.pax as roomPax', 'room.price as roomPrice',
|
||||
'room.available as available',
|
||||
'hotel.detail_page as hotelDetailPageUid', 'hotel.short_name as hotelShortName',
|
||||
'hotel.show_as_teaser as hotelShowAsTeaser'
|
||||
'hotel.show_as_teaser as hotelShowAsTeaser',
|
||||
'hotel_mapping.detail_page as hotelMappingDetailPageUid',
|
||||
)
|
||||
->from('tx_epproducts_domain_model_date', 'date')
|
||||
->innerJoin('date', 'tx_epproducts_domain_model_room', 'room', 'room.date = date.uid')
|
||||
->innerJoin('date', 'tx_epproducts_domain_model_hotel', 'hotel', 'hotel.uid = date.hotel')
|
||||
->leftJoin('hotel', 'tx_epproducts_domain_model_hotel_mapping', 'hotel_mapping', 'hotel_mapping.product = date.product AND hotel_mapping.hotel = date.hotel')
|
||||
->where($qb->expr()->eq(
|
||||
'date.product',
|
||||
$qb->createNamedParameter($product->getUid(), Connection::PARAM_INT))
|
||||
|
||||
@@ -357,12 +357,13 @@ class DateService implements SingletonInterface
|
||||
$hotelUid = $row['hotelUid'];
|
||||
|
||||
if (!array_key_exists($hotelUid, $priceTable[$categoryUid])) {
|
||||
|
||||
$priceTable[$categoryUid][$hotelUid] = [
|
||||
'category' => $categoryUid,
|
||||
'hotelName' => $row['hotelName'],
|
||||
'hotelShortName' => $row['hotelShortName'],
|
||||
'hotelTitle' => $row['hotelTitle'],
|
||||
'hotelDetailPageUid' => $row['hotelDetailPageUid'],
|
||||
'hotelDetailPageUid' => $row['hotelMappingDetailPageUid'] ?? $row['hotelDetailPageUid'],
|
||||
'bookingUrl' => BookingUrlUtility::generateUrl([
|
||||
'bookingId' => $row['dateBusProId'],
|
||||
'hotelId' => $row['hotelBusProId'],
|
||||
|
||||
+19
-1
@@ -28,7 +28,7 @@ return [
|
||||
'showitem' => '--palette--;;top, --palette--;;name, --palette--;;geolocation,
|
||||
--palette--;;destinations, --palette--;;categories, keywords,
|
||||
--div--;Texte, teaser, description, features, room_types, additional_information,
|
||||
--div--;Verknüpfungen, facts, teamer, additional_codes,
|
||||
--div--;Verknüpfungen, facts, teamer, additional_codes, mappings,
|
||||
--div--;Bilder/Dateien, teaser_images, header_images, images, reseller_images,
|
||||
--div--;Gruppenhaus Preise, --palette--;;season,--palette--;;others, groups_price_configs,
|
||||
groups_price_boards, groups_price_options',
|
||||
@@ -590,6 +590,24 @@ return [
|
||||
],
|
||||
],
|
||||
],
|
||||
'mappings' => [
|
||||
'exclude' => 0,
|
||||
'label' => 'abweichende Detailseiten',
|
||||
'config' => [
|
||||
'type' => 'inline',
|
||||
'foreign_table' => 'tx_epproducts_domain_model_hotel_mapping',
|
||||
'foreign_field' => 'hotel',
|
||||
'maxitems' => 10,
|
||||
'appearance' => [
|
||||
'collapseAll' => 1,
|
||||
'levelLinksPosition' => 'top',
|
||||
'showSynchronizationLink' => 0,
|
||||
'showPossibleLocalizationRecords' => 0,
|
||||
'showAllLocalizationLink' => 0,
|
||||
'expandSingle' => 1,
|
||||
],
|
||||
],
|
||||
],
|
||||
'latitude' => [
|
||||
'exclude' => 0,
|
||||
'label' => 'Breitengrad',
|
||||
|
||||
+139
@@ -0,0 +1,139 @@
|
||||
<?php
|
||||
return [
|
||||
'ctrl' => [
|
||||
'title' => 'Hotelmapping',
|
||||
'label' => 'product',
|
||||
'tstamp' => 'tstamp',
|
||||
'crdate' => 'crdate',
|
||||
'cruser_id' => 'cruser_id',
|
||||
'dividers2tabs' => true,
|
||||
'versioningWS' => true,
|
||||
'languageField' => 'sys_language_uid',
|
||||
'transOrigPointerField' => 'l10n_parent',
|
||||
'transOrigDiffSourceField' => 'l10n_diffsource',
|
||||
'delete' => 'deleted',
|
||||
'enablecolumns' => [
|
||||
'disabled' => 'hidden',
|
||||
'starttime' => 'starttime',
|
||||
'endtime' => 'endtime',
|
||||
],
|
||||
'searchFields' => 'product',
|
||||
'iconfile' => 'EXT:ep_theme/Resources/Public/images/icon_ce.svg',
|
||||
'hideTable' => true,
|
||||
],
|
||||
'types' => [
|
||||
'1' => [
|
||||
'showitem' => 'product,detail_page',
|
||||
],
|
||||
],
|
||||
'palettes' => [],
|
||||
'columns' => [
|
||||
|
||||
'sys_language_uid' => [
|
||||
'exclude' => 0,
|
||||
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.language',
|
||||
'config' => [
|
||||
'type' => 'select',
|
||||
'renderType' => 'selectSingle',
|
||||
'foreign_table' => 'sys_language',
|
||||
'foreign_table_where' => 'ORDER BY sys_language.title',
|
||||
'items' => [
|
||||
['LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.allLanguages', -1],
|
||||
['LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.default_value', 0]
|
||||
],
|
||||
'default' => 0,
|
||||
],
|
||||
],
|
||||
'l10n_parent' => [
|
||||
'displayCond' => 'FIELD:sys_language_uid:>:0',
|
||||
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.l18n_parent',
|
||||
'config' => [
|
||||
'type' => 'select',
|
||||
'renderType' => 'selectSingle',
|
||||
'items' => [
|
||||
['', 0],
|
||||
],
|
||||
'foreign_table' => 'tx_epproducts_domain_model_infobox',
|
||||
'foreign_table_where' => 'AND tx_epproducts_domain_model_infobox.pid=###CURRENT_PID### AND tx_epproducts_domain_model_infobox.sys_language_uid IN (-1,0)',
|
||||
],
|
||||
],
|
||||
'l10n_diffsource' => [
|
||||
'config' => [
|
||||
'type' => 'passthrough',
|
||||
],
|
||||
],
|
||||
|
||||
't3ver_label' => [
|
||||
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.versionLabel',
|
||||
'config' => [
|
||||
'type' => 'input',
|
||||
'size' => 30,
|
||||
'max' => 255,
|
||||
]
|
||||
],
|
||||
|
||||
'hidden' => [
|
||||
'exclude' => 0,
|
||||
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.hidden',
|
||||
'config' => [
|
||||
'type' => 'check',
|
||||
],
|
||||
],
|
||||
'starttime' => [
|
||||
'exclude' => 0,
|
||||
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.starttime',
|
||||
'config' => [
|
||||
'type' => 'input',
|
||||
'size' => 13,
|
||||
'eval' => 'datetime',
|
||||
'checkbox' => 0,
|
||||
'default' => 0,
|
||||
'behaviour' => [
|
||||
'allowLanguageSynchronization' => true,
|
||||
],
|
||||
'renderType' => 'inputDateTime',
|
||||
],
|
||||
],
|
||||
'endtime' => [
|
||||
'exclude' => 0,
|
||||
'label' => 'LLL:EXT:core/Resources/Private/Language/locallang_general.xlf:LGL.endtime',
|
||||
'config' => [
|
||||
'type' => 'input',
|
||||
'size' => 13,
|
||||
'eval' => 'datetime',
|
||||
'checkbox' => 0,
|
||||
'default' => 0,
|
||||
'behaviour' => [
|
||||
'allowLanguageSynchronization' => true,
|
||||
],
|
||||
'renderType' => 'inputDateTime',
|
||||
],
|
||||
],
|
||||
'product' => [
|
||||
'exclude' => 0,
|
||||
'label' => 'Produkt',
|
||||
'config' => [
|
||||
'type' => 'select',
|
||||
'renderType' => 'selectSingle',
|
||||
'foreign_table' => 'tx_epproducts_domain_model_product',
|
||||
'minitems' => 1,
|
||||
'maxitems' => 1,
|
||||
'multiple' => 0,
|
||||
],
|
||||
],
|
||||
'detail_page' => [
|
||||
'exclude' => 0,
|
||||
'label' => 'Detailseite',
|
||||
'config' => [
|
||||
'type' => 'input',
|
||||
'size' => 30,
|
||||
'renderType' => 'inputLink',
|
||||
]
|
||||
],
|
||||
'hotel' => [
|
||||
'config' => [
|
||||
'type' => 'passthrough',
|
||||
],
|
||||
],
|
||||
],
|
||||
];
|
||||
@@ -249,6 +249,7 @@ CREATE TABLE tx_epproducts_domain_model_hotel
|
||||
rooms int(11) unsigned DEFAULT '0' NOT NULL,
|
||||
facts int(11) unsigned DEFAULT '0' NOT NULL,
|
||||
additional_codes int(11) unsigned DEFAULT '0' NOT NULL,
|
||||
mappings int(11) unsigned DEFAULT '0' NOT NULL,
|
||||
address varchar(255) DEFAULT '' NOT NULL,
|
||||
latitude varchar(255) DEFAULT '' NOT NULL,
|
||||
longitude varchar(255) DEFAULT '' NOT NULL,
|
||||
@@ -1518,6 +1519,48 @@ CREATE TABLE tx_epproducts_domain_model_travelinfolink
|
||||
|
||||
);
|
||||
|
||||
#
|
||||
# Table structure for table 'tx_epproducts_domain_model_hotel_mapping'
|
||||
#
|
||||
CREATE TABLE tx_epproducts_domain_model_hotel_mapping
|
||||
(
|
||||
|
||||
uid int(11) NOT NULL auto_increment,
|
||||
pid int(11) DEFAULT '0' NOT NULL,
|
||||
|
||||
product int(11) unsigned DEFAULT '0' NOT NULL,
|
||||
detail_page varchar(255) DEFAULT '' NOT NULL,
|
||||
hotel int(11) unsigned DEFAULT '0',
|
||||
|
||||
tstamp int(11) unsigned DEFAULT '0' NOT NULL,
|
||||
crdate int(11) unsigned DEFAULT '0' NOT NULL,
|
||||
cruser_id int(11) unsigned DEFAULT '0' NOT NULL,
|
||||
deleted tinyint(4) unsigned DEFAULT '0' NOT NULL,
|
||||
hidden tinyint(4) unsigned DEFAULT '0' NOT NULL,
|
||||
starttime int(11) unsigned DEFAULT '0' NOT NULL,
|
||||
endtime int(11) unsigned DEFAULT '0' NOT NULL,
|
||||
|
||||
t3ver_oid int(11) DEFAULT '0' NOT NULL,
|
||||
t3ver_id int(11) DEFAULT '0' NOT NULL,
|
||||
t3ver_wsid int(11) DEFAULT '0' NOT NULL,
|
||||
t3ver_label varchar(255) DEFAULT '' NOT NULL,
|
||||
t3ver_state tinyint(4) DEFAULT '0' NOT NULL,
|
||||
t3ver_stage int(11) DEFAULT '0' NOT NULL,
|
||||
t3ver_count int(11) DEFAULT '0' NOT NULL,
|
||||
t3ver_tstamp int(11) DEFAULT '0' NOT NULL,
|
||||
t3ver_move_id int(11) DEFAULT '0' NOT NULL,
|
||||
|
||||
sys_language_uid int(11) DEFAULT '0' NOT NULL,
|
||||
l10n_parent int(11) DEFAULT '0' NOT NULL,
|
||||
l10n_diffsource mediumblob,
|
||||
|
||||
PRIMARY KEY (uid),
|
||||
KEY parent (pid),
|
||||
KEY t3ver_oid (t3ver_oid, t3ver_wsid),
|
||||
KEY language (l10n_parent, sys_language_uid)
|
||||
|
||||
);
|
||||
|
||||
#
|
||||
# Table structure for table 'sys_domain'
|
||||
#
|
||||
|
||||
Reference in New Issue
Block a user