Initial commit: Free Shipping Message module

This commit is contained in:
shopkeeperdev
2025-11-20 12:01:53 -05:00
commit f07db21ac4
7 changed files with 252 additions and 0 deletions

10
.gitignore vendored Normal file
View File

@@ -0,0 +1,10 @@
# IDE
.idea/
.vscode/
*.swp
*.swo
*~
# OS
.DS_Store
Thumbs.db

View File

@@ -0,0 +1,86 @@
<?php
/**
* Shopkeeper FreeShippingMessage Block
*/
namespace Shopkeeper\FreeShippingMessage\Block\Product\View;
use Magento\Framework\View\Element\Template;
use Magento\Framework\View\Element\Template\Context;
use Magento\Cms\Model\BlockFactory;
use Magento\Cms\Model\Template\FilterProvider;
class Message extends Template
{
/**
* @var BlockFactory
*/
protected $blockFactory;
/**
* @var FilterProvider
*/
protected $filterProvider;
/**
* @param Context $context
* @param BlockFactory $blockFactory
* @param FilterProvider $filterProvider
* @param array $data
*/
public function __construct(
Context $context,
BlockFactory $blockFactory,
FilterProvider $filterProvider,
array $data = []
) {
$this->blockFactory = $blockFactory;
$this->filterProvider = $filterProvider;
parent::__construct($context, $data);
}
/**
* Get CMS block HTML content
*
* @return string
*/
public function getCmsBlockHtml()
{
$blockId = $this->getData('cms_block_id');
if (!$blockId) {
return '';
}
$block = $this->blockFactory->create();
$block->load($blockId, 'identifier');
if (!$block->getId() || !$block->isActive()) {
return '';
}
$html = $this->filterProvider->getBlockFilter()
->setStoreId($this->_storeManager->getStore()->getId())
->filter($block->getContent());
return $html;
}
/**
* Check if CMS block exists and is active
*
* @return bool
*/
public function hasCmsBlock()
{
$blockId = $this->getData('cms_block_id');
if (!$blockId) {
return false;
}
$block = $this->blockFactory->create();
$block->load($blockId, 'identifier');
return $block->getId() && $block->isActive();
}
}

101
README.md Normal file
View File

@@ -0,0 +1,101 @@
# Shopkeeper Free Shipping Message
A Magento 2 module that displays a customizable CMS block message below the "Add to Cart" button on product pages.
## Features
- Displays a CMS block on product pages
- Positioned below the "Add to Cart" button
- Fully customizable content through Magento admin
- Only displays when the CMS block is active
## Installation
### Via Composer (Recommended)
```bash
composer require shopkeeper/module-free-shipping-message
php bin/magento module:enable Shopkeeper_FreeShippingMessage
php bin/magento setup:upgrade
php bin/magento cache:flush
```
### Manual Installation
1. Create directory: `app/code/Shopkeeper/FreeShippingMessage`
2. Copy all files to the directory
3. Run the following commands:
```bash
php bin/magento module:enable Shopkeeper_FreeShippingMessage
php bin/magento setup:upgrade
php bin/magento cache:flush
```
## Configuration
1. Log into Magento Admin
2. Navigate to **Content > Blocks**
3. Create a new CMS block with the following settings:
- **Block Title**: Free Shipping Message (or your preferred title)
- **Identifier**: `free_shipping_message`
- **Status**: Enabled
- **Store View**: Select appropriate store views
- **Content**: Add your free shipping message content
## Module Structure
```
FreeShippingMessage/
├── Block/
│ └── Product/
│ └── View/
│ └── Message.php
├── etc/
│ └── module.xml
├── view/
│ └── frontend/
│ ├── layout/
│ │ └── catalog_product_view.xml
│ └── templates/
│ └── product/
│ └── view/
│ └── message.phtml
├── registration.php
└── README.md
```
## Customization
### Change CMS Block Identifier
To use a different CMS block, modify the `cms_block_id` argument in `view/frontend/layout/catalog_product_view.xml`:
```xml
<argument name="cms_block_id" xsi:type="string">your_block_identifier</argument>
```
### Styling
The message is wrapped in a `<div class="free-shipping-message">` element. Add custom CSS to your theme to style it:
```css
.free-shipping-message {
margin-top: 15px;
padding: 10px;
background-color: #f0f0f0;
}
```
## Requirements
- Magento 2.3.x or higher
- PHP 7.3 or higher
## License
Proprietary
## Support
For support, contact Shopkeeper development team.

14
etc/module.xml Normal file
View File

@@ -0,0 +1,14 @@
<?xml version="1.0"?>
<!--
/**
* Shopkeeper FreeShippingMessage Module Configuration
*/
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Shopkeeper_FreeShippingMessage" setup_version="1.0.0">
<sequence>
<module name="Magento_Catalog"/>
<module name="Magento_Cms"/>
</sequence>
</module>
</config>

10
registration.php Normal file
View File

@@ -0,0 +1,10 @@
<?php
/**
* Shopkeeper FreeShippingMessage Module Registration
*/
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'Shopkeeper_FreeShippingMessage',
__DIR__
);

View File

@@ -0,0 +1,21 @@
<?xml version="1.0"?>
<!--
/**
* Shopkeeper FreeShippingMessage Layout
* Adds CMS block widget below the add to cart button
*/
-->
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceContainer name="product.info.form.content">
<block class="Shopkeeper\FreeShippingMessage\Block\Product\View\Message"
name="product.free.shipping.message"
template="Shopkeeper_FreeShippingMessage::product/view/message.phtml"
after="addtocart">
<arguments>
<argument name="cms_block_id" xsi:type="string">free_shipping_message</argument>
</arguments>
</block>
</referenceContainer>
</body>
</page>

View File

@@ -0,0 +1,10 @@
<?php
/**
* @var \Shopkeeper\FreeShippingMessage\Block\Product\View\Message $block
*/
?>
<?php if ($block->hasCmsBlock()): ?>
<div class="free-shipping-message">
<?= /* @noEscape */ $block->getCmsBlockHtml() ?>
</div>
<?php endif; ?>