Add optional min-price badge to product pricetable
This commit is contained in:
@@ -270,6 +270,11 @@ class Product extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity implements
|
|||||||
*/
|
*/
|
||||||
protected $nonBookableDates;
|
protected $nonBookableDates;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var int
|
||||||
|
*/
|
||||||
|
protected $minPrice;
|
||||||
|
|
||||||
public function __construct()
|
public function __construct()
|
||||||
{
|
{
|
||||||
$this->initStorageObjects();
|
$this->initStorageObjects();
|
||||||
@@ -1090,4 +1095,20 @@ class Product extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity implements
|
|||||||
return $this->nonBookableDates;
|
return $this->nonBookableDates;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return int
|
||||||
|
*/
|
||||||
|
public function getMinPrice(): int
|
||||||
|
{
|
||||||
|
return $this->minPrice;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param int $minPrice
|
||||||
|
*/
|
||||||
|
public function setMinPrice($minPrice)
|
||||||
|
{
|
||||||
|
$this->minPrice = $minPrice;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-1
@@ -37,7 +37,7 @@ return [
|
|||||||
'palettes' => [
|
'palettes' => [
|
||||||
'destinations' => ['showitem' => 'country,region,city'],
|
'destinations' => ['showitem' => 'country,region,city'],
|
||||||
'top' => ['showitem' => 'searchable, bookable, hide_booking_button, daytrip, important, skipass_included,
|
'top' => ['showitem' => 'searchable, bookable, hide_booking_button, daytrip, important, skipass_included,
|
||||||
season, detail_page, external_link, path_segment'],
|
season, detail_page, external_link, path_segment, min_price'],
|
||||||
'name' => ['showitem' => 'name,code'],
|
'name' => ['showitem' => 'name,code'],
|
||||||
'alternative' => ['showitem' => 'alt_product, alt_label'],
|
'alternative' => ['showitem' => 'alt_product, alt_label'],
|
||||||
'header' => ['showitem' => 'headline, subline, --linebreak--, header_title, header_subtitle'],
|
'header' => ['showitem' => 'headline, subline, --linebreak--, header_title, header_subtitle'],
|
||||||
@@ -840,5 +840,13 @@ return [
|
|||||||
'itemsProcFunc' => \EP\EpProducts\UserFunc\TcaProcFunc::class.'->getDateItemsForProduct',
|
'itemsProcFunc' => \EP\EpProducts\UserFunc\TcaProcFunc::class.'->getDateItemsForProduct',
|
||||||
]
|
]
|
||||||
],
|
],
|
||||||
|
'min_price' => [
|
||||||
|
'exclude' => 0,
|
||||||
|
'label' => 'Ab-Preis',
|
||||||
|
'config' => [
|
||||||
|
'type' => 'input',
|
||||||
|
'eval' => 'int'
|
||||||
|
],
|
||||||
|
]
|
||||||
],
|
],
|
||||||
];
|
];
|
||||||
|
|||||||
@@ -61,6 +61,7 @@ CREATE TABLE tx_epproducts_domain_model_product
|
|||||||
banner int(11) unsigned NOT NULL default '0',
|
banner int(11) unsigned NOT NULL default '0',
|
||||||
badge int(11) unsigned NOT NULL default '0',
|
badge int(11) unsigned NOT NULL default '0',
|
||||||
non_bookable_dates varchar(255) DEFAULT '' NOT NULL,
|
non_bookable_dates varchar(255) DEFAULT '' NOT NULL,
|
||||||
|
min_price int(11) unsigned NOT NULL default '0',
|
||||||
tstamp int(11) unsigned DEFAULT '0' NOT NULL,
|
tstamp int(11) unsigned DEFAULT '0' NOT NULL,
|
||||||
crdate int(11) unsigned DEFAULT '0' NOT NULL,
|
crdate int(11) unsigned DEFAULT '0' NOT NULL,
|
||||||
cruser_id int(11) unsigned DEFAULT '0' NOT NULL,
|
cruser_id int(11) unsigned DEFAULT '0' NOT NULL,
|
||||||
|
|||||||
+18
-2
@@ -205,8 +205,8 @@
|
|||||||
<div class="headline--3 headline--underlined">
|
<div class="headline--3 headline--underlined">
|
||||||
Inklusivleistungen
|
Inklusivleistungen
|
||||||
</div>
|
</div>
|
||||||
<div class="bg-gray-50 p-4 mb-8">
|
<div class="bg-gray-50 p-4 mb-8 flex items-center">
|
||||||
<ul class="list-none m-0 p-0">
|
<ul class="list-none m-0 p-0 flex-1">
|
||||||
<f:for each="{servicesIncluded}" as="service">
|
<f:for each="{servicesIncluded}" as="service">
|
||||||
<li class="flex items-center space-x-2">
|
<li class="flex items-center space-x-2">
|
||||||
<svg class="w-6 h-6 text-ep-primary">
|
<svg class="w-6 h-6 text-ep-primary">
|
||||||
@@ -216,6 +216,22 @@
|
|||||||
</li>
|
</li>
|
||||||
</f:for>
|
</f:for>
|
||||||
</ul>
|
</ul>
|
||||||
|
<f:if condition="{product.minPrice} > 0">
|
||||||
|
<div class="pl-4">
|
||||||
|
<div class="relative w-32 h-32 md:w-48 md:h-48 transform rotate-3">
|
||||||
|
<svg viewBox="0 0 200 200"
|
||||||
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
|
preserveAspectRatio="xMinYMin meet"
|
||||||
|
class="w-full h-full">
|
||||||
|
<circle fill="currentColor" class="text-ep-pink-50" cx="100" cy="100" r="100"/>
|
||||||
|
<circle fill="currentColor" class="text-ep-pink" cx="100" cy="100" r="70"/>
|
||||||
|
</svg>
|
||||||
|
<div class="absolute top-0 left-0 inset-0 flex flex-col items-center justify-center p-8">
|
||||||
|
<span class="block text-center text-white uppercase font-bold leading-none text-2xl md:text-3xl">ab {product.minPrice} €</span>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</f:if>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -92,6 +92,8 @@ module.exports = {
|
|||||||
'primary-dark-80': tinycolor('#18527b').setAlpha(0.8).toRgbString(),
|
'primary-dark-80': tinycolor('#18527b').setAlpha(0.8).toRgbString(),
|
||||||
'secondary-10': tinycolor('#f0bc44').setAlpha(0.1).toRgbString(),
|
'secondary-10': tinycolor('#f0bc44').setAlpha(0.1).toRgbString(),
|
||||||
'secondary-80': tinycolor('#f0bc44').setAlpha(0.8).toRgbString(),
|
'secondary-80': tinycolor('#f0bc44').setAlpha(0.8).toRgbString(),
|
||||||
|
pink: '#fa1a8c',
|
||||||
|
'pink-50': tinycolor('#fa1a8c').setAlpha(0.5).toRgbString(),
|
||||||
},
|
},
|
||||||
sbw: {
|
sbw: {
|
||||||
primary: '#f0bc44',
|
primary: '#f0bc44',
|
||||||
|
|||||||
Reference in New Issue
Block a user