Skip to content
intermediate Phase 58 · Frontend Strategy

Hyvä Compatibility

Understanding Hyvä extension compatibility: supported extensions, compatibility layers, and migration approach

45m
0 problems
Topic Progress 0%

Extension Compatibility

Compatibility Categories

Category Description
Hyvä Ready Officially supports Hyvä
Compatible Works with compatibility module
Partial Some features work
Incompatible Does not work with Hyvä

Checking Compatibility

# Search for Hyvä compatibility
composer show --available | grep hyva

# Check specific extension
composer show vendor/extension

# Look for compatibility module
composer require hyva-themes/magento2-compatibility-vendor

Popular Extensions Compatibility

Extension Hyvä Support
Magento SEO Ready
Magento PageBuilder Ready
Amasty Shopby Compatible
Mirasvit Search Compatible
Aheadworks extensions Partial
Custom modules Check individually

Hyvä Compatibility Modules

# Official compatibility modules
composer require hyva-themes/magento2-compatibility-amasty
composer require hyva-themes/magento2-compatibility-mirasvit
composer require hyva-themes/magento2-compatibility-aheadworks

Compatibility Layers

What is a Compatibility Layer?

A compatibility layer converts legacy KnockoutJS/RequireJS output to Hyvä-compatible HTML.

Create Compatibility Layer

<?php
namespace Vendor\HyvaCompat\Renderer;

class LegacyRenderer
{
    public function renderLegacyBlock(
        \Magento\Framework\View\Element\Template $block
    ): string {
        $html = $block->toHtml();
        
        // Convert KnockoutJS to Alpine.js
        $html = $this->convertKnockoutToAlpine($html);
        
        // Add Tailwind classes
        $html = $this->addTailwindClasses($html);
        
        return $html;
    }
    
    private function convertKnockoutToAlpine(string $html): string
    {
        // Replace data-bind with Alpine directives
        $html = str_replace(
            'data-bind="text: name"',
            'x-text="name"',
            $html
        );
        
        return $html;
    }
}

Plugin Approach

<?php
namespace Vendor\HyvaCompat\Plugin;

class BlockPlugin
{
    public function afterToHtml(
        \Magento\Framework\View\Element\Template $subject,
        $result
    ): string {
        if ($this->isLegacyBlock($subject)) {
            return $this->convertToHyva($result);
        }
        return $result;
    }
}

Layout XML Override

<!-- Override legacy block -->
<referenceBlock name="legacy.block" remove="true"/>

<referenceContainer name="content">
    <block class="Vendor\HyvaCompat\Block\HyvaBlock"
           name="hyva.compatible.block"
           template="hyva_template.phtml"/>
</referenceContainer>

Migration Approach

Migration Steps

  1. Audit Current State

    • List all custom modules
    • Check extension compatibility
    • Identify KnockoutJS usage
  2. Plan Migration

    • Prioritize compatible modules
    • Create compatibility layers
    • Plan testing phases
  3. Implement

    • Install Hyvä theme
    • Override templates
    • Create compatibility modules
  4. Test

    • Functional testing
    • Performance testing
    • User acceptance testing

Audit Checklist

- [ ] List all custom modules
- [ ] Check each module's frontend
- [ ] Identify KnockoutJS usage
- [ ] Check RequireJS dependencies
- [ ] Test CSS/LESS customizations
- [ ] Review JavaScript components

Phased Migration

Phase 1: Install Hyvä, test basic functionality
Phase 2: Override critical templates
Phase 3: Create compatibility layers
Phase 4: Migrate custom modules
Phase 5: Performance optimization

Handling Incompatible Extensions

Options for Incompatible Extensions

  1. Find Alternative

    • Search for Hyvä-compatible replacement
    • Check Hyvä marketplace
  2. Create Compatibility

    • Build compatibility layer
    • Override templates
  3. Replace Functionality

    • Implement with Alpine.js
    • Use native Magento features
  4. Keep Legacy

    • Run mixed frontend (not recommended)

Replacement Strategy

// If extension provides widget
// Replace with Alpine.js component

class HyvaWidget extends Template
{
    public function getData(): array
    {
        return [
            'items' => $this->legacyExtension->getItems()
        ];
    }
}
<!-- Hyva template -->
<div x-data="{ items: <?= $block->escapeHtml(json_encode($block->getData())) ?> }">
    <template x-for="item in items" :key="item.id">
        <div x-text="item.name"></div>
    </template>
</div>

Decision Matrix

Scenario Action
Extension has Hyvä module Install compatibility module
Extension is simple Rewrite with Alpine.js
Extension is complex Find alternative or keep
Extension is critical Invest in compatibility layer

Quiz

1. How do you check if an extension supports Hyvä?

Question 1 options

2. What is a compatibility layer?

Question 2 options

3. What should you do first when migrating to Hyvä?

Question 3 options

Flashcards

Question

How do you check extension compatibility?

Answer

Look for Hyvä compatibility module or check vendor docs

Question

What is a compatibility layer?

Answer

Code that converts legacy output to Hyvä-compatible format

Question

What is the first step in migration?

Answer

Audit current extensions and identify compatibility needs

Question

How do you handle incompatible extensions?

Answer

Find alternative, create compatibility, or replace functionality

Question

Where to find Hyvä-compatible extensions?

Answer

Hyvä marketplace or vendor compatibility modules

Revision Notes

Key Takeaways

  • 1. Check extension compatibility before migration
  • 2. Compatibility layers convert legacy to Hyvä format
  • 3. Plan migration in phases
  • 4. Find alternatives for incompatible extensions
  • 5. Test thoroughly after each phase

Interview Tips

  • Explain the migration approach
  • Know how to check compatibility
  • Discuss handling incompatible extensions
  • Be ready to plan a Hyvä migration

Cheat Sheet

Compatibility check:
  composer require hyva-themes/magento2-compatibility-*

Migration:
  1. Audit extensions
  2. Install Hyvä
  3. Create compatibility layers
  4. Override templates
  5. Test

Options for incompatible:
  - Find alternative
  - Create compatibility layer
  - Replace with Alpine.js