Files

206 lines
9.3 KiB
PHP

<?php
declare(strict_types=1);
namespace Lts\HomePage\Setup\Patch\Data;
use Magento\Cms\Model\BlockFactory;
use Magento\Cms\Model\PageFactory;
use Magento\Framework\Setup\ModuleDataSetupInterface;
use Magento\Framework\Setup\Patch\DataPatchInterface;
class InstallHomePageContent implements DataPatchInterface
{
public function __construct(
private readonly ModuleDataSetupInterface $moduleDataSetup,
private readonly BlockFactory $blockFactory,
private readonly PageFactory $pageFactory
) {
}
public function apply(): self
{
$this->moduleDataSetup->getConnection()->startSetup();
$this->saveBlock(
'lts-home-announcement',
'LTS Home - Top Announcement',
$this->announcementContent()
);
$this->saveBlock(
'lts-home-dealer-pricing',
'LTS Home - Dealer Pricing',
$this->dealerPricingContent()
);
$this->saveBlock(
'lts-home-product-lines',
'LTS Home - Shop By Product Line',
$this->productLinesContent()
);
$this->saveBlock(
'lts-home-shop-by-category',
'LTS Home - Shop By Category',
$this->shopByCategoryContent()
);
$page = $this->pageFactory->create()->getCollection()
->addFieldToFilter('identifier', 'athlete2-home-greece')
->addStoreFilter(0, false)
->setPageSize(1)
->getFirstItem();
if ($page->getId()) {
$page->setContent($this->homePageContent());
$page->setPageLayout('1column');
$page->setIsActive(true);
$page->save();
}
$this->moduleDataSetup->getConnection()->endSetup();
return $this;
}
private function saveBlock(string $identifier, string $title, string $content): void
{
$block = $this->blockFactory->create()->getCollection()
->addFieldToFilter('identifier', $identifier)
->setPageSize(1)
->getFirstItem();
if (!$block->getId()) {
$block = $this->blockFactory->create();
}
$block->setTitle($title)
->setIdentifier($identifier)
->setContent($content)
->setIsActive(true)
->setStores([0])
->save();
}
private function announcementContent(): string
{
return <<<'HTML'
<div class="lts-announcement" role="region" aria-label="Store announcements" data-mage-init='{"Magento_Theme/js/lts-announcement":{"delay":3000,"duration":1200}}'>
<div class="lts-announcement__inner">
<div class="lts-announcement__viewport" aria-live="off">
<div class="lts-announcement__track">
<a class="lts-announcement__item is-active" href="{{store url='promotions'}}">LTS Summer Savings Event&nbsp; &ndash; &nbsp;Save up to 40%</a>
<a class="lts-announcement__item" href="{{store url='products/4k'}}">Explore LTS 4K Security Solutions</a>
<a class="lts-announcement__item" href="{{store url='customer/account/login'}}">Sign In For Dealer Pricing, Availability &amp; Checkout</a>
</div>
</div>
<span class="lts-announcement__links">
<a href="{{store url='request-a-quote'}}">Request a Quote</a>
<a href="{{store url='contacts'}}">Help</a>
</span>
</div>
</div>
HTML;
}
private function dealerPricingContent(): string
{
return <<<'HTML'
<section class="lts-dealer" aria-labelledby="lts-dealer-title">
<div class="lts-dealer__icon" aria-hidden="true">
<img src="{{view url='Magento_Theme::images/lts-home-v2/dealer-sign-in.png'}}" alt="">
</div>
<div class="lts-dealer__content">
<h2 id="lts-dealer-title">Sign In For Dealer Pricing</h2>
<p>Unlock Dealer Pricing, Availability, And Checkout.</p>
<div class="lts-dealer__actions">
<a class="lts-dealer__button" href="{{store url='customer/account/login'}}">Sign In</a>
<span class="lts-dealer__divider" aria-hidden="true"></span>
<div class="lts-dealer__new">
<span>New To LTS?</span>
<a href="{{store url='customer/account/create'}}">Become A Customer Today <span aria-hidden="true">&longrightarrow;</span></a>
</div>
</div>
</div>
</section>
HTML;
}
private function productLinesContent(): string
{
return <<<'HTML'
<section class="lts-product-lines" aria-labelledby="lts-product-lines-title">
<h2 id="lts-product-lines-title" class="lts-home-heading">Shop By Product Line</h2>
<div class="lts-product-lines__grid">
<a class="lts-line-card lts-line-card--platinum" href="{{store url='products/product-lines/platinum.html'}}">
<img src="{{view url='Magento_Theme::images/lts-home-v2/platinum.png'}}" alt="Platinum Plus cameras and recorder">
<span class="lts-line-card__copy">
<strong>Platinum</strong>
<i></i>
<span>Our flagship line delivering maximum performance, reliability, and innovation.</span>
<b>Explore&nbsp; &longrightarrow;</b>
</span>
</a>
<a class="lts-line-card lts-line-card--prox" href="{{store url='products/product-lines/pro-x.html'}}">
<img src="{{view url='Magento_Theme::images/lts-home-v2/pro-x.png'}}" alt="Pro-X cameras and recorder">
<span class="lts-line-card__copy">
<strong>PRO-<em>X</em></strong>
<i></i>
<span>Advanced solutions for professionals who demand more.</span>
<b>Explore&nbsp; &longrightarrow;</b>
</span>
</a>
<a class="lts-line-card lts-line-card--defendas" href="{{store url='products/product-lines/defendas.html'}}">
<img src="{{view url='Magento_Theme::images/lts-home-v2/defendas.png'}}" alt="Defendas integrated access control system">
<span class="lts-line-card__copy">
<strong>DEFENDAS</strong>
<i></i>
<span>Integrated security systems for access control and device management.</span>
<b>Explore&nbsp; &longrightarrow;</b>
</span>
</a>
</div>
</section>
HTML;
}
private function homePageContent(): string
{
return <<<'HTML'
<div class="lts-home-content">
{{block class="Magento\Cms\Block\Block" block_id="lts-home-dealer-pricing"}}
{{block class="Magento\Cms\Block\Block" block_id="lts-home-product-lines"}}
{{block class="Magento\Cms\Block\Block" block_id="lts-home-shop-by-category"}}
{{block class="Magento\Cms\Block\Block" block_id="lts-home-resources"}}
<a class="lts-feedback" href="{{store url='contacts'}}">Feedback</a>
</div>
HTML;
}
private function shopByCategoryContent(): string
{
return <<<'HTML'
<section class="lts-categories" aria-labelledby="lts-categories-title">
<h2 id="lts-categories-title" class="lts-home-heading">Shop By Category</h2>
<div class="lts-categories__grid">
<a class="lts-category" href="{{store url='products/product-categories/ip-solutions/ip-network-cameras'}}"><span class="lts-category__image"><img src="{{view url='Magento_Theme::images/lts-home-v2/ip-camera.png'}}" alt=""></span><strong>IP Cameras</strong></a>
<a class="lts-category" href="{{store url='products/product-categories/ip-solutions/network-video-recorders'}}"><span class="lts-category__image"><img src="{{view url='Magento_Theme::images/lts-home-v2/nvr.png'}}" alt=""></span><strong>NVR</strong></a>
<a class="lts-category lts-category--featured" href="{{store url='products/product-categories/hd-tvi-solutions/hd-tvi-camera'}}"><span class="lts-category__image"><img src="{{view url='Magento_Theme::images/lts-home-v2/tvi-camera.png'}}" alt=""></span><strong>TVI Cameras</strong></a>
<a class="lts-category" href="{{store url='products/product-categories/hd-tvi-solutions/hd-tvi-dvr'}}"><span class="lts-category__image"><img src="{{view url='Magento_Theme::images/lts-home-v2/dvr.png'}}" alt=""></span><strong>DVR</strong></a>
<a class="lts-category" href="{{store url='products/news/access-control'}}"><span class="lts-category__image"><img src="{{view url='Magento_Theme::images/lts-home-v2/access-control.png'}}" alt=""></span><strong>Access Control</strong></a>
<a class="lts-category" href="{{store url='products/product-categories/ip-video-system-accessories/cable'}}"><span class="lts-category__image"><img src="{{view url='Magento_Theme::images/lts-home-v2/cable.png'}}" alt=""></span><strong>Cable</strong></a>
<a class="lts-category" href="{{store url='products/product-categories/ip-video-system-accessories/storage-devices'}}"><span class="lts-category__image"><img src="{{view url='Magento_Theme::images/lts-home-v2/hdd.png'}}" alt=""></span><strong>HDD</strong></a>
<a class="lts-category" href="{{store url='products/product-categories/ip-video-system-accessories/poe-switches'}}"><span class="lts-category__image"><img src="{{view url='Magento_Theme::images/lts-home-v2/accessories.png'}}" alt=""></span><strong>Accessories</strong></a>
</div>
</section>
HTML;
}
public static function getDependencies(): array
{
return [];
}
public function getAliases(): array
{
return [];
}
}