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
Audit Current State
- List all custom modules
- Check extension compatibility
- Identify KnockoutJS usage
Plan Migration
- Prioritize compatible modules
- Create compatibility layers
- Plan testing phases
Implement
- Install Hyvä theme
- Override templates
- Create compatibility modules
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
Find Alternative
- Search for Hyvä-compatible replacement
- Check Hyvä marketplace
Create Compatibility
- Build compatibility layer
- Override templates
Replace Functionality
- Implement with Alpine.js
- Use native Magento features
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ä?
2. What is a compatibility layer?
3. What should you do first when migrating to Hyvä?
Flashcards
Question
How do you check extension compatibility?
Click to reveal answer
Answer
Look for Hyvä compatibility module or check vendor docs
Question
What is a compatibility layer?
Click to reveal answer
Answer
Code that converts legacy output to Hyvä-compatible format
Question
What is the first step in migration?
Click to reveal answer
Answer
Audit current extensions and identify compatibility needs
Question
How do you handle incompatible extensions?
Click to reveal answer
Answer
Find alternative, create compatibility, or replace functionality
Question
Where to find Hyvä-compatible extensions?
Click to reveal answer
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