1

Magento 1 Way :-

https://inchoo.net/magento/injecting-variables-into-a-magento-cms-static-block/

I need the same in Magento 2, how can I achieve? it's urgent.

Here is my afford:-

<?php
namespace Test\Clientform\Controller\Show;
use Magento\Framework\App\ObjectManager;
class Index extends \Magento\Framework\App\Action\Action
{
 protected $_filterProvider;
 protected $_storeManager;
 protected $_blockFactory;
 protected $_filterFactory;
 public function __construct(
 \Magento\Framework\App\Action\Context $context,
 \Magento\Cms\Model\Template\FilterProvider $filterProvider,
 \Magento\Store\Model\StoreManagerInterface $storeManager,
 \Magento\Cms\Model\BlockFactory $blockFactory,
 \Magento\Framework\Filter\Template $filterFactory,
 array $data = []
 )
 {
 parent::__construct($context, $data);
 $this->_filterProvider = $filterProvider;
 $this->_storeManager = $storeManager;
 $this->_blockFactory = $blockFactory;
 $this->_filterFactory = $filterFactory;
 }
 public function execute()
 {
 $blockId = 'client_intake_form';
 $html = '';
 if ($blockId) {
 $storeId = $this->_storeManager->getStore()->getId();
 /** @var \Magento\Cms\Model\Block $block */
 $block = $this->_blockFactory->create();
 $block->setStoreId($storeId)->load($blockId);
 $array['full_name'] = 'test';
 $this->_filterFactory->setVariables($array);
 // exit;
 //exit;
 $html = $this->_filterProvider->getBlockFilter()->setStoreId($storeId)->filter($block->getContent());
 }
 echo $html;
 // $resultPage = $this->_resultPageFactory->create();
 // return $resultPage;
 }
}
?>

When I'm hitting controller:-

http://127.0.0.1/Magento2/test/show/index

still not able to set value.

you can check here:-

http://nimb.ws/TEZVRp

To set value I've used \Magento\Framework\Filter\Template $filterFactory,

& calling setVariables() method.

When I'm setting values directly in the core class:-

\Magento\Framework\Filter\Template $filterFactory

e.g-

public function setVariables(array $variables)
 {
 $variables['full_name'] = 'test'; // added this line staticaly
 foreach ($variables as $name => $value) {
 $this->templateVars[$name] = $value;
 }
 return $this;
 }

Then value gets set, you can check here:-

http://nimb.ws/ytvcRV

so please let me know why I'm not able to set value from the controller.

asked Jul 31, 2018 at 6:38

2 Answers 2

4

I have created a sample code and its working fine for me:

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$content = $objectManager->create('\Magento\Cms\Model\BlockFactory')->create();
$content->load('test_block', 'identifier'); // Load static block
$array['test'] = 'Test Block'; //Set variables
$filter = $objectManager->create('\Magento\Email\Model\Template\Filter');
$filter->setVariables($array);
$html = $filter->filter($content->getContent());
return $html;

Stati block code for test_block:

<p>{{var test}}</p>

You need to manage to add this your function.

answered Jul 31, 2018 at 12:54
1
  • You welcome. Happy Coding! Commented Jul 31, 2018 at 13:21
3

With the help of @Sukumar finally, I reach to the solution.

Here it is:-

<?php
namespace Test\Clientform\Controller\Show;
use Magento\Framework\App\ObjectManager;
class Index extends \Magento\Framework\App\Action\Action
{
 protected $_filterProvider;
 protected $_storeManager;
 protected $_blockFactory;
 protected $_filterTemplate;
 public function __construct(
 \Magento\Framework\App\Action\Context $context,
 \Magento\Cms\Model\Template\FilterProvider $filterProvider,
 \Magento\Store\Model\StoreManagerInterface $storeManager,
 \Magento\Cms\Model\BlockFactory $blockFactory,
 \Magento\Framework\Filter\Template $filterTemplate,
 // \Magento\Email\Model\Template\Filter $filterTemplate, // OR you can also use it
 array $data = []
 )
 {
 parent::__construct($context, $data);
 $this->_filterProvider = $filterProvider;
 $this->_storeManager = $storeManager;
 $this->_blockFactory = $blockFactory;
 $this->_filterTemplate = $filterTemplate;
 }
 public function execute()
 {
 $blockId = 'client_intake_form';
 $html = '';
 if ($blockId) {
 $storeId = $this->_storeManager->getStore()->getId();
 /** @var \Magento\Cms\Model\Block $block */
 $block = $this->_blockFactory->create();
 $block->setStoreId($storeId)->load($blockId);
 $array['full_name'] = 'test';
 $this->_filterTemplate->setVariables($array);
 $html = $this->_filterTemplate->filter($block->getContent());
 }
 echo $html;
 }
}
?>
answered Jul 31, 2018 at 13:17

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.