logo
down
shadow

Magento widget rendering in non-CMS content


Magento widget rendering in non-CMS content

Content Index :

Magento widget rendering in non-CMS content
Tag : magento , By : adrianmooreuk
Date : November 25 2020, 07:27 PM


Comments
No Comments Right Now !

Boards Message :
You Must Login Or Sign Up to Add Your Comments .

Share : facebook icon twitter icon

magento : render external html using magento rendering engine


Tag : magento , By : zdyne
Date : March 29 2020, 07:55 AM
I wish this helpful for you I can't speak to Drupal specifically, but since you asked generically about another CMS, I'll answer to that. Since Magento pages are built out in a modular way, you can absolutely replace chunks of the page with ones generated elsewhere. The general approach would be something like this:
Identify a block that you want to generate in the other CMS Use Magento's layout files to remove the old block and render a new block that you specify Create your block and pass any necessary parameters into it Have your block's _toHtml method make a call to the other CMS for content

Magento: Flush widget from block / fullpage cache if widget parameters change


Tag : php , By : oiyto
Date : March 29 2020, 07:55 AM
Hope this helps EE Full Page Cache and Widget Instances Caching (no rewrites, unlimited cache life time) Overview
The first step is to create the frontend widget itself, but providing some additional info the full page cache can use.
<widgets>
    <netzarbeiter_test type="netzarbeiter_test/widget_test">
        <name>FPC Holepunch Cache Test</name>
        <description>Dummy test widget</description>
        <parameters>
            <!-- This is the important parameter here: -->
            <unique_id>
                <required>1</required>
            </unique_id>
            <example_text>
                <visible>1</visible>
                <label>Example Text Parameter</label>
                <type>text</type>
            </example_text>
        </parameters>
    </netzarbeiter_test>
</widgets>
    // Excerpt from Mage_Widget_Block_Adminhtml_Widget_Options::_addField()

    if ($values = $this->getWidgetValues()) {
        $data['value'] = (isset($values[$fieldName]) ? $values[$fieldName] : '');
    }
    else {
        $data['value'] = $parameter->getValue();
        //prepare unique id value
        if ($fieldName == 'unique_id' && $data['value'] == '') {
            $data['value'] = md5(microtime(1));
        }
    }
class Netzarbeiter_Test_Block_Widget_Test
    extends Mage_Core_Block_Abstract
    implements Mage_Widget_Block_Interface
{
    public function getCacheKeyInfo()
    {
        $info = parent::getCacheKeyInfo();
        if ($id = $this->getData('unique_id')) {
            // Because the array key is a string, it will be added to the FPC placeholder
            // parameters. That is how the FPC container can access it (see below).
            $info['unique_id'] =  (string) $id;
        }
        return $info;
    }

    protected function _toHtml()
    {
        // The FPC was completely cleared (or not created yet), 
        // recreate the widget parameter cache
        if (! $this->getFullPageCacheEnvironment() && $this->getUniqueId()) {
            $id = Netzarbeiter_Test_Model_Fpc_Container_Widget_Test::CACHE_PREFIX . $this->getUniqueId() . '_params';
            Enterprise_PageCache_Model_Cache::getCacheInstance()->save(serialize($this->getData()), $id);
        }
        // Just some dummy output to display the text parameter and the render time
        $time = now();
        $textParam = $this->escapeHtml($this->getExampleText());
        return <<<EOF
<p><b>Render Time:</b> {$time}<br/>
<b>Example Text:</b> {$textParam}<br/></p>
EOF;
    }
}
SELECT layout_update_id, handle, xml FROM core_layout_update;
+------------------+--------------------------+----------------------------------------------------------------------------------------------------+
| layout_update_id | handle                   | xml                                                                                                |
+------------------+--------------------------+----------------------------------------------------------------------------------------------------+
|               17 | catalog_category_layered | <reference name="left">
|                  |                          |     <block type="netzarbeiter_test/widget_test" name="2a3b55e13549e176709fc6c67a4a7bd8">
|                  |                          |         <action method="setData">
|                  |                          |             <name>unique_id</name>
|                  |                          |             <value>7fa2574145ef204fb6d179cfc604ac76</value>
|                  |                          |         </action>
|                  |                          |         <action method="setData">
|                  |                          |             <name>example_text</name>
|                  |                          |             <value>This is a String!</value>
|                  |                          |         </action>
|                  |                          |     </block>
|                  |                          | </reference>
+------------------+--------------------------+----------------------------------------------------------------------------------------------------+
<config>
    <placeholders>
        <cms_block_widget>
            <block>netzarbeiter_test/widget_test</block>
            <placeholder>WIDGET_FPC_TEST</placeholder>
            <container>Netzarbeiter_Test_Model_Fpc_Container_Widget_Test</container>
        </cms_block_widget>
    </placeholders>
</config>
class Netzarbeiter_Test_Model_Fpc_Container_Widget_Test
    extends Enterprise_PageCache_Model_Container_Abstract
{
    const CACHE_PREFIX = 'TEST_WIDGET_';

    protected function _getCacheId()
    {
        return self::CACHE_PREFIX . $this->_placeholder->getAttribute('unique_id');
    }

    protected function _renderBlock()
    {
        $block = $this->_getPlaceHolderBlock();
        // Set any parameters from the placeholder on the block as needed.
        // See observer below where the current parameters are cached.
        $id = $this->_getCacheId() . '_params';
        if ($parameters = Enterprise_PageCache_Model_Cache::getCacheInstance()->load($id)) {
            $block->addData(unserialize($parameters));
            // Set environment information on block (used in _toHtml,
            // the params cache is recreated when not set)
            $block->setFullPageCacheEnvironment(true);
        }
        Mage::dispatchEvent('render_block', array('block' => $block, 'placeholder' => $this->_placeholder));
        return $block->toHtml();
    }
}
<adminhtml>
    <events>
        <widget_widget_instance_save_commit_after>
            <observers>
                <netzarbeiter_test>
                    <model>netzarbeiter_test/observer</model>
                    <method>widgetWidgetInstanceSaveCommitAfter</method>
                </netzarbeiter_test>
            </observers>
        </widget_widget_instance_save_commit_after>
    </events>
</adminhtml>
public function widgetWidgetInstanceSaveCommitAfter(Varien_Event_Observer $observer)
{
    /** @var $widget Mage_Widget_Model_Widget_Instance */
    $widget = $observer->getEvent()->getObject();
    $parameters = $widget->getWidgetParameters();
    $uniqueId = isset($parameters['unique_id']) ? $parameters['unique_id'] : '';
    if (strlen($uniqueId)) {
        $id = Netzarbeiter_Test_Model_Fpc_Container_Widget_Test::CACHE_PREFIX . $uniqueId;
        Enterprise_PageCache_Model_Cache::getCacheInstance()->remove($id);
        $id = Netzarbeiter_Test_Model_Fpc_Container_Widget_Test::CACHE_PREFIX . $uniqueId . '_params';
        Enterprise_PageCache_Model_Cache::getCacheInstance()->save(serialize($parameters), $id);
    }
}

What are the benefits of explicitly rendering reCAPTCHA widget as opposed to automatically rendering?


Tag : development , By : Antony Briggs
Date : March 29 2020, 07:55 AM
wish help you to fix your issue There are some things that Google allows you to do when you load it manually, like setting the language. This I believe is not the case in automatic rendering. Also, based on performance aspects, a site may not want to load the captcha automatically and want the control with itself on when to load it.

How to prevent rendering of a given widget when some other widget is on top of it in flutter?


Tag : list , By : CrookedNumber
Date : March 29 2020, 07:55 AM
wish of those help I managed to accomplish this using ShaderMask. The idea is that i calculate where is the header in my list item and mask this part out.
The crucial part of the list widget is this:
  @override
  Widget build(BuildContext context) => ListView.builder(
      padding: _padding, itemCount: _sectionCount, itemBuilder: _sectionHeader);

  StickyHeader _sectionHeader(BuildContext context, int sectionIndex) {
    final GlobalKey eventListHeaderKey = GlobalKey();
    final GlobalKey shaderMaskKey = GlobalKey();
    final AppStyle appStyle = AppStyle.of(context);

    return StickyHeader(
        header: Container(
            key: eventListHeaderKey,
            child: _sectionHeaderBuilder(context, sectionIndex)),
        content: ShaderMask(
            key: shaderMaskKey,
            shaderCallback: (Rect rect) =>
                _listShader(appStyle, eventListHeaderKey, shaderMaskKey, rect),
            blendMode: BlendMode.dstIn,
            child: Container(
                child: ListView.builder(
                    physics: const NeverScrollableScrollPhysics(),
                    shrinkWrap: true,
                    itemCount: _sectionElementsCountHandler(sectionIndex),
                    itemBuilder: (BuildContext context, int index) =>
                        _elementBuilder(context, sectionIndex, index)))));
  }

  Shader _listShader(AppStyle appStyle, GlobalKey listHeaderKey,
      GlobalKey shaderMaskKey, Rect rect) {
    final RenderBox listHeaderRenderBox =
        listHeaderKey.currentContext.findRenderObject();
    final Offset offset = listHeaderRenderBox.localToGlobal(Offset.zero);

    final RenderBox shaderMaskRenderBox =
        shaderMaskKey.currentContext.findRenderObject();
    final Offset offset2 = shaderMaskRenderBox.globalToLocal(offset);

    return LinearGradient(
        begin: Alignment.topCenter,
        end: Alignment.bottomCenter,
        stops: <double>[
          0,
          (rect.top + offset2.dy) / rect.height,
          (rect.top + offset2.dy) / rect.height,
          1
        ],
        colors: <Color>[
          appStyle.colors.transparent,
          appStyle.colors.transparent,
          appStyle.colors.white,
          appStyle.colors.white
        ]).createShader(Rect.fromLTWH(0, 0, rect.width, rect.height));
  }

Add Magento Widget parameters to the Add Widget Instance editor


Tag : magento , By : user183442
Date : March 29 2020, 07:55 AM
Related Posts Related QUESTIONS :
shadow
Privacy Policy - Terms - Contact Us © scrbit.com