Agency Access to All Magento 2 On-Demand Training

In stock
SKU
v15
€3,199.00

Assign all our Magento 2 On-Demand courses to your employees (what we call an "attendee" aka "seat") with a single package.

  • Courses included: 23
  • Total video time: 91 hours
  • Access period: 1Y
  • € 3199 for 1 year
  • € 35 per hour of video available to you

If you have a team of developers and want to educate all of them on the topic of Magento, this package is for you. It includes multiple "seats": Once ordered, you can navigate the courses under "My Attendance" and then assign the right course to the right person (with her/his name and email address). Each attendee that you manage, is then able to login under their account and follow the available courses (including bookmarks, lesson completion and assignments), while you have a helicopter view from your own management account.

More Information
Price €3,199.00
Access period 1 year

Included courses

Frontend development generics

Status: Complete
Last updated: 2024-06-08
Number of lessons: 45
Number of slides: 205
Videos: 5.1 hours

PHP Basics

Status: Complete
Last updated: 2024-09-25
Number of lessons: 39
Number of slides: 109
Videos: 0 hours

PHP Advanced Programming

Status: Complete
Last updated: 2024-09-26
Number of lessons: 83
Number of slides: 533
Videos: 1.5 hours

JavaScript Basics

Status: Complete
Last updated: 2024-07-03
Number of lessons: 9
Number of slides: 39
Videos: 0.1 hours

JavaScript Advanced

Status: Complete
Last updated: 2024-06-12
Number of lessons: 59
Number of slides: 269
Videos: 0.3 hours

Linux Fundamentals

Status: Complete
Last updated: 2024-05-23
Number of lessons: 33
Number of slides: 155
Videos: 0 hours

Docker Essentials

Status: Complete
Last updated: 2024-05-23
Number of lessons: 26
Number of slides: 144
Videos: 0 hours

Magento Performance

Status: Complete
Last updated: 2024-05-23
Number of lessons: 0
Number of slides: 0
Videos: 0 hours

Adobe PWA Studio Development

Status: Complete
Last updated: 2024-07-03
Number of lessons: 63
Number of slides: 300
Videos: 10 hours

Magento 2 Technical Architecture

Status: Complete
Last updated: 2024-06-08
Number of lessons: 40
Number of slides: 155
Videos: 0.3 hours

Magento 2 Backend Development I

Status: Complete
Last updated: 2024-09-25
Number of lessons: 84
Number of slides: 334
Videos: 11.1 hours

Magento 2 Backend Development II

Status: Complete
Last updated: 2024-09-17
Number of lessons: 102
Number of slides: 412
Videos: 10.2 hours

Magento 2 GraphQL Development

Status: Complete
Last updated: 2024-07-03
Number of lessons: 21
Number of slides: 84
Videos: 2.2 hours

Magento 2 Hyvä Theme Development

Status: Complete
Last updated: 2024-09-25
Number of lessons: 81
Number of slides: 325
Videos: 10.8 hours

Magento 2 Hyvä Checkout Development

Status: Complete
Last updated: 2024-07-03
Number of lessons: 36
Number of slides: 127
Videos: 4.2 hours

Magento 2 Installation

Status: Complete
Last updated: 2024-09-25
Number of lessons: 67
Number of slides: 270
Videos: 2.7 hours

Magento 2 Magewire Development

Status: Complete
Last updated: 2024-07-03
Number of lessons: 42
Number of slides: 160
Videos: 6.7 hours

Magento 2 Merchant

Status: Complete
Last updated: 2024-05-23
Number of lessons: 32
Number of slides: 171
Videos: 0 hours

Magento 2 Migration

Status: Complete
Last updated: 2024-05-23
Number of lessons: 0
Number of slides: 0
Videos: 0 hours

Magento 2 Testing

Status: Complete
Last updated: 2024-10-07
Number of lessons: 127
Number of slides: 431
Videos: 0 hours

Magento 2 Luma Frontend Development

Status: Complete
Last updated: 2024-07-03
Number of lessons: 118
Number of slides: 369
Videos: 11.8 hours

Magento 2 Luma JavaScript Development

Status: Complete
Last updated: 2024-07-03
Number of lessons: 76
Number of slides: 335
Videos: 14 hours

Preview this course

Want to see what this course is like? Checkout our Courseware Demo to preview this course and others.

Preview all courses

Course content

Frontend development generics

  • Introduction to webdesign
  • The difference between frontend and backend
  • Roles in webdevelopment
  • HTML
  • HTML overview
  • HTML 5 boilerplate
  • HTML elements
  • HTML attributes
  • Browser tools
  • Using the Browser its Developer Tools
  • Using the Error Console
  • Monitoring the network requests
  • Dealing with browser caching
  • Elements pane vs HTML source
  • Browser tools
  • Toggling the mobile view
  • Adding some temporary CSS code
  • Forcing an element its state
  • Going incognito
  • Preserving logs
  • Throttling networking traffic
  • Running a Lighthouse scan
  • Inspecting the Application state
  • Blocking requests
  • Troubleshooting webpages
  • CSS
  • CSS basics
  • Responsiveness
  • Sizes in CSS
  • Advanced CSS topics
  • CSS animations
  • Font families
  • CSS Grids
  • CSS Flexbox
  • CSS preprocessors
  • LESS
  • SASS
  • Building tools
  • CSS modules
  • Working with PostCSS
  • Introducing Tailwind
  • Tailwind
  • Colors in CSS
  • JavaScript and jQuery
  • jQuery
  • Images
  • Images
  • SVG
  • overview
  • Characters and encodings
  • Characters and encoding
  • Performance
  • How browser caching works
  • Core Web Vitals

PHP Basics

  • Introduction
  • PHP community
  • Basic syntax
  • PHP basics
  • Working with arrays
  • Operators
  • Comments
  • Hinting
  • Global constants
  • Lambdas & closures
  • Coding standards
  • Reviewing code
  • PHP and MySQL
  • MySQL basics
  • Assignment: Create a new database table
  • Filesystem
  • Handling files
  • Dealing with JSON
  • Dealing with CSV
  • Dealing with XML
  • Regular expressions
  • Regular expressions
  • PhpStorm
  • Getting a PhpStorm license
  • Overview of PhpStorm
  • Requirements for running PhpStorm
  • Installing PhpStorm
  • Opening a project in PhpStorm
  • Changing the PHP version in PhpStorm
  • Composer settings in PhpStorm
  • Using PhpStorm plugins
  • Enabling the Magento plugin in PhpStorm
  • Opening up the context menu
  • Formatting your code in PhpStorm
  • PhpStorm and its 1000 shortcuts
  • Excluding Magento files from your PhpStorm project
  • Run Configurations in PhpStorm
  • Running a PHP built-in server from PhpStorm
  • Working with PhpStorm File Templates
  • Working with PhpStorm Live Templates
  • Configuring PHPUnit within PhpStorm
  • Generating code via AI
  • Tuning PhpStorm for performance
  • Working with JetBrains Gateway remotely
  • Tips and tricks

PHP Advanced Programming

  • Introduction
  • Learning curve
  • Development environment
  • Syntax
  • PHP 7.0 syntax
  • PHP 7.1 syntax
  • PHP 7.2 syntax
  • PHP 7.3 syntax
  • PHP 7.4 syntax
  • PHP 8.0 syntax
  • PHP 8.1 syntax
  • PHP 8.2 syntax
  • PHP 8.3 features
  • PHP 8.4 features
  • PHP 7.X syntax
  • PHP 8.0
  • PHP 8.1 syntax
  • Generics
  • Classes
  • Objects and classes
  • Exercice: Create classes for a Author-library
  • Class elements
  • Class types
  • Namespaces
  • Assignment: Use namespaces
  • Predefined classes and interfaces
  • Tools
  • Tools overview
  • Composer
  • Assignment: Implement composer
  • Assignment: Add simple templating
  • Composer
  • Requiring a composer package
  • Semantic versioning
  • install vs update
  • Dealing with composer repositories
  • Local composer repositories
  • Class autoloading
  • Popular Composer packages
  • Assignment: Autoloading your classes
  • Assignment: Add Symfony console
  • Assignment: Add logging
  • Assignment: Install the wrong composer package
  • Coding patterns
  • Coding principles
  • PSR Standards
  • SOLID
  • Object calisthenics
  • Design patterns
  • Assignment: Add MVC to your Author app
  • Dependency Injection (DI)
  • Other patterns
  • Event sourcing
  • Imperative vs Declarative
  • MVC
  • Value objects
  • Testing
  • Testing
  • PHPUnit
  • Assignment: Add a functional test to your app
  • Unit testing
  • Assignment: Test your library with PHPUnit
  • Advanced testing
  • Miscellaneous
  • Deployment
  • Behat
  • Codeception
  • Cypress
  • Debugging
  • Debugging basics
  • PHP errors
  • Assignment: Endless loop
  • Assignment: Detect PHP errors in Magento module `Yireo_FaultyViewModels`
  • Assignment: Memory limit
  • Assignment: Unreadable files
  • PHP internals
  • Code analysis
  • Xdebug basics
  • Xdebug
  • Assignment: Debug the FrontController
  • Xdebug profiling
  • Xdebug tracing
  • Exception basics
  • Troubleshooting Magento issues
  • Assignment: Dangers of running root
  • SonarQube
  • Debugging tips
  • Miscellaneous
  • Output
  • Performance
  • Security
  • Modernizing WordPress

JavaScript Basics

  • Basics
  • JavaScript built-in objects
  • JavaScript encapsulation
  • Working with objects
  • Casting
  • Using the DOM
  • Other browser APIs
  • Basic concepts
  • Read-only objects
  • JavaScript engines

JavaScript Advanced

  • Syntax
  • The problem of JavaScript syntax
  • ES6 Template literals
  • Transpilers
  • TypeScript
  • Node basics
  • Useful JavaScript tools
  • Installing NodeJS
  • Adding NPM packages
  • Some package suggestions
  • Assignment: Create your own CLI
  • Scripts in your `package.json` file
  • Applications
  • Frameworks
  • React JS
  • Assignment: Create a simple React application
  • Vue JS
  • Assignment: Create a simple Vue application
  • Svelte JS
  • Invocation patterns
  • Invocation patterns
  • Binding the keyword `this`
  • Module pattern
  • Internals
  • Strict Mode
  • Understandig the prototype chain
  • Prototyping
  • Object properties
  • Proxy
  • Monads
  • Collections
  • Event loop overview
  • Asynchronous calls
  • AJAX example with React
  • Assignment: Create a React app for your Author AJAX API
  • AJAX call in Vue
  • Assignment: Create an Vue app for your Author AJAX API
  • Promises
  • Assignment: Create a CLI script that makes an AJAX call
  • Events
  • Events
  • Events in Node
  • Node applications
  • Node overview
  • Utilities for CLI scripts
  • Assignment: Create a CLI script to navigate the filesystem
  • Other Node topics
  • NPM workspaces
  • NPM packages
  • Module formats
  • Bundlers
  • Bundlers
  • Webpack
  • Vite
  • Rollup
  • Parcel
  • Node in production
  • Assignment: Create an Express-based proxy for your Author AJAX API
  • Process managers
  • Express middleware
  • SSR
  • Serviceworkers
  • Serviceworkers
  • ServiceWorker events
  • Other topics
  • Webcomponents
  • Web Components
  • Testing
  • Basic of testing
  • Tape
  • Cypress end-to-end testing
  • Debugging
  • Debugging basics

Linux Fundamentals

  • Introduction
  • About Linux
  • Resources
  • Users and groups
  • Commands
  • Basic shell commands
  • Linux permissions
  • Creating shell scripts
  • Small bits
  • Assignment: Diffing and patching
  • Configuration formats
  • UNIX timestamp
  • Networking
  • Networking
  • Services
  • SSH
  • Ready-made stacks
  • Webservers
  • Assignment: Write a simple PHP script to use a remote API
  • PHP-FPM
  • MySQL database
  • Databases
  • ElasticSearch database
  • Redis
  • RabbitMQ
  • Varnish
  • Git versioning
  • Git essentials
  • Assignment: Create a git repository
  • Using GitHub
  • Assignment: Create a GitHub repository
  • Assignment: Upload your files
  • Advanced git usage
  • Git beyond the basics
  • Licensing
  • Open source licenses
  • Remote servers
  • Tools for working remotely
  • Using SSH
  • Windows tips
  • Windows Subsystem for Linux
  • MacOS tips
  • MacOS tools

Docker Essentials

  • Basics
  • Introduction to Docker
  • Assignment: Register at the Docker Hub
  • Installing Docker
  • Assignment: Docker installation in Ubuntu
  • Assignment: Docker installation in Windows WSL
  • Assignment: PHP installation in Windows WSL
  • Getting started
  • Assignment: Kickstart the Docker examples
  • docker-compose
  • Assignment: Run Apache, PHP, MySQL and ElasticSearch via compose
  • Networking
  • Volumes
  • Creating images
  • Registries
  • Tips & tricks
  • Troubleshooting Docker issues
  • Alternatives
  • Colima for containers to run Magento
  • GitHub Action examples
  • Gitpod
  • Clustering Docker containers
  • Introduction
  • Docker Swarm
  • Kubernetes
  • Kubernetes pods
  • Kustomization
  • Kubernetes & Helm
  • Skaffold

Magento Performance

Adobe PWA Studio Development

  • PWA in general
  • Introducing PWA
  • Other PWA providers
  • PWA Studio and extensibility
  • Status of Magento GraphQL
  • Architectural choices
  • Hybrid React solutions
  • Overview of PWA Studio
  • Introduction to PWA Studio
  • React essentials
  • React essentials
  • Redux essentials
  • Apollo client
  • Introducing Apollo Client
  • Getting started with Apollo Client
  • Making Apollo calls
  • Including GraphQL files
  • Apollo Client v3
  • Kickstart PWA Studio
  • Minimum requirements
  • Development tools
  • Prepare your Magento instance
  • Installing PWA Studio
  • First look at PWA Studio
  • Configuring PWA Studio
  • Reviewing the `.env` file
  • Upgrading PWA Studio
  • Buildpack
  • Overview of Buildpack
  • Venia
  • Introducing Venia
  • Extending Venia
  • Overriding components with the Fooman resolver
  • Changing the logo
  • Using prices
  • `mergeClasses`
  • Adding a new route
  • Working with the `Mask` component
  • Toasting
  • Best practices with Venia
  • Checkout in Venia
  • CSS strategies
  • Adding a custom Store View
  • Page Builder integration
  • Peregrine
  • Peregrine overview
  • App or RootComponent?
  • Talons of Peregrine
  • Example with product talon
  • Routing in PWA Studio
  • Context within PWA Studio
  • Redux within PWA Studio
  • Build it your own
  • Build it without Venia
  • Implementing Venia and Peregrine partially
  • Target interception
  • Target interception
  • Creating a target interceptor
  • Trusted vendors
  • Venia UI targets
  • Peregrine targets
  • Buildpack targets
  • Targetables
  • Declaring custom targets
  • PWA Studio extensions
  • UPWARD
  • Overview of UPWARD
  • Running UPWARD
  • UPWARD YAML configuration
  • Automatic image optimization
  • Running Venia without UPWARD
  • In production
  • In production
  • Server Side Rendering
  • Summary
  • Summarizing Magento PWA Studio

Magento 2 Technical Architecture

  • Introduction
  • Magento 2 overview
  • Magento 2 versions
  • System requirements
  • Concepts
  • Administration
  • Administration
  • Magento Admin Panel overview
  • Catalog
  • CMS options
  • Global - Website - Store View (GWS)
  • Product issues
  • Product types
  • About attributes
  • Order flow
  • Customer concepts
  • Keeping stock
  • Using modules
  • Dealing with modules
  • Really handy modules
  • Example module installations
  • Files and folders
  • Important files & folders
  • Configuration files
  • Temporary folders
  • Application entrypoints
  • Database structure
  • Database
  • Magento database
  • Important tables
  • Magento EAV pattern
  • Indexing
  • Logging
  • Cache Management
  • Database corruption
  • Themes
  • Theming
  • Security
  • Security tips
  • Performance
  • Performance
  • Command-line usage
  • CLI usage
  • `bin/magento`
  • Composer
  • Deployment
  • Deployment
  • Deploying with DeployerPHP
  • Tips and tricks
  • Tips & tricks
  • Translations
  • Adding a French Store View

Magento 2 Backend Development I

  • Magento basics
  • Quick peek at Magento 2 architecture
  • Theming basics
  • Magento 2 frontend landscape
  • Magento environment
  • Setting up PhpStorm
  • Running cron
  • Cache clean vs flush
  • Cache handling
  • Changing the admin path
  • Maintenance mode
  • Using Redis
  • Redis caching
  • Using Redis as session storage
  • Magento modules
  • Installing a module
  • Assignment: Install a module
  • Preparing for module creation
  • Creating a module
  • Assignment: Create a new module
  • Composer file
  • Module XML file
  • Module registration
  • Module commands
  • Module entrypoints
  • Adding Blocks via XML layout
  • Assignment: Add a block class
  • Assignment: Add a ViewModel
  • Using the store configuration
  • Assignment: Add a configuration
  • Adding a simple CLI command
  • Logging from your module
  • Architecture
  • Areas
  • Application layers
  • PHP interfaces in Magento
  • Backward Compatibility
  • Dependency Injection
  • Sandbox script
  • Introduction to Dependency Injection
  • Object Manager
  • DI Preferences
  • DI types
  • Virtual Types essentials
  • DI factories
  • Creating a custom factory
  • DI proxies
  • DI plugins / interceptors
  • DI recipees
  • DI recipees
  • Inject the App State and check for the area
  • Checking for the Developer Mode in your code
  • Injecting a configuration value
  • Inject the current product
  • Injecting the registry
  • Injecting URLs into your class
  • Creating a custom logger
  • Assignment: Create a custom logger
  • Injecting the customer session
  • Injecting the layout
  • Getting your module path
  • Creating a Slack logger
  • Can you inject a Virtual Type?
  • Catalog development
  • Using the product repository
  • SearchCriteriaBuilder or SearchCriteriaBuilderFactory?
  • Using product stock
  • Console commands
  • Adding console commands
  • Calling other commands from your own Command-class
  • Tips on commands
  • Controllers
  • Frontend routes
  • Assignment: Create a frontend controller that renders a page
  • Action results
  • Assignment: Create a JSON controller
  • Dealing with form keys
  • Adding messages
  • Assignment: Create a redirect
  • Adding complex messages
  • Assignment: Create a DI plugin for a controller
  • Adding cronjobs
  • Adding a cronjob
  • Dealing with emails
  • Creating an email template
  • Caching
  • Block caching
  • Module setup
  • Adding database changes via a module
  • InstallSchema
  • InstallData
  • Why the Uninstall schema does not make sense
  • Declaritive schemas
  • Declarative Schema patches
  • Module samples
  • Scenario: Add CMS Block to PHTML
  • Scenario: Add product pricing per customer
  • Misc
  • Solving tickets efficiently
  • Troubleshooting tips

Magento 2 Backend Development II

  • Database models
  • Declarative schemas (basics)
  • Data models
  • Resource models
  • Collections
  • Naming model classes
  • AbstractModel or AbstractExtensibleModel?
  • Example data model via CLI commands
  • Example data model with integration tests
  • Improving your models
  • Improving your resource models
  • Assignment: Create an author entity
  • Assignment: Create a CLI for your author entity
  • Events and observers
  • Event observer
  • Finding events
  • Dispatching events
  • Observer or Plugins
  • Controllers and routing
  • Routing overview
  • Assignment: Create a frontend page to view authors
  • Backend routes
  • Override a controller action
  • Logic of the FrontController class
  • Routers
  • How 404 pages work
  • How the SecurityTxt module works
  • Creating a custom router
  • Assignment: Create a custom router for your Author entity
  • Quiz: Routers
  • CMS parts
  • CMS Blocks
  • CMS pages
  • CMS widgets
  • Widgets
  • Assignment: Create a custom widget for your Author entity
  • Adding a custom page type
  • CSP
  • Content Security Policy
  • Toggling CSP mode
  • Example of CSP with external CSS
  • Whitelisting values for CSP
  • Example with whitelisting external CSS
  • CSP in the Yireo GoogleTagManager module
  • Dummy `$secureRenderer`
  • Whitelisting inline JavaScript in the checkout
  • CspNonceProviders
  • Disabling CSP
  • Useful CSP extensions
  • Filesystem
  • Using the filesystem
  • Reading files
  • Assignment: Create a CLI command to output a file
  • Writing files
  • Repositories
  • Repositories
  • Sorting lists with repositories
  • Using filters with repositories
  • Debugging SELECT queries with repositories
  • Using filter groups with repositories
  • The bad side of repositories
  • Creating your own repository
  • Adding CLI classes for the repository
  • Integration tests for our custom repository
  • Assignment: Create a custom repository for your author entity
  • Custom helper classes for your repositories
  • Class patterns
  • Data objects
  • Builder pattern
  • No more Helpers
  • Database operations
  • Declarative schemas (advanced)
  • DB schema patches
  • Adding `startSetup` and `endSetup`
  • Manual SQL queries
  • Future changes in database layer
  • EAV operations
  • EAV attributes
  • Creating an EAV entity
  • Attributes
  • About attributes
  • Attribute models
  • Working with the configuration
  • Attribute sets
  • Category attributes
  • Extension attributes
  • Extension Attributes
  • Example product extension attribute
  • Adminhtml
  • Backend routes
  • Adding Store Configuration settings
  • ACL rules
  • Adding a menu to the Admin Panel
  • Basics of adding UiComponents
  • Extending a UiComponent grid
  • Creating a UIComponent grid
  • Hyva Admin
  • Custom backend theme
  • Indexing
  • Indexing overview
  • Where to look for indexing
  • How indexing works
  • Tuning indexing
  • Creating a custom indexerer
  • Backend of the checkout
  • ConfigProviders for `window.checkoutConfig`
  • Layout processors
  • Adding a new Layout Processor
  • The Vault
  • Multi Source Inventory
  • Multi Source Inventory overview
  • Reservations
  • Source Selection Algorithms (SSA)
  • Configuring MSI
  • Simplest setup of MSI
  • Coding samples with MSI
  • Database tables for MSI
  • The old Stock Registry
  • REST API
  • Web APIs

Magento 2 GraphQL Development

  • GraphQL basics
  • Introduction to GraphQL
  • GraphQL clients
  • GraphQL queries
  • Assignment: Make some queries
  • GraphQL mutations
  • Assignment: Login via GraphQL and review your addressbook
  • GraphQL call types
  • GraphQL fragments
  • GraphQL directives
  • GraphQL schema discovery and introspection
  • Magento GraphQL API
  • Introducing Magento GraphQL
  • Adding a new endpoint
  • Extending the product schemas
  • Extending the GraphQL storeConfig endpoint
  • Working with context
  • Resolvers
  • Testing GraphQL
  • URL Resolving
  • GraphQL caching
  • Exception handling
  • Tips & tricks

Magento 2 Hyvä Theme Development

  • Introduction
  • Introduction to Hyvä Themes
  • Overview of Hyvä theme packages
  • Overview of Hyvä modules
  • Hyvä Admin
  • Assignment: Install Hyva Admin
  • Quick start
  • Running a project in Hyvä
  • Requirements for Hyvä
  • Assignment: Prepare your Magento environment for Hyva
  • Development tools for Hyvä
  • Assignment: Install of the relevant development tools
  • Installation of Hyvä packages
  • Assignment: Install Hyva
  • Assignment: Remove the demo content
  • Creating a new Hyva theme
  • Assignment: Create a new Hyva theme
  • Extending the `Hyva/default` theme
  • Discovering the `Hyva/default` theme
  • Using browser syncing
  • Tailwind CSS
  • Introducing Tailwind
  • Quick start
  • Assignment: Kickstart a simple non-Magento app using Tailwind
  • Using Windy for Tailwind CSS development
  • Hyvä build modes
  • Tailwind configuration file
  • Configuring breakpoints
  • Configuring colors
  • Working with PostCSS
  • Optimizing CSS classes
  • Purging Magento modules
  • Configuring fonts
  • Tailwind plugins
  • Using the prose plugin
  • Assignment: Make sure your WYSIWYG output displays properly
  • The workings of `@apply`
  • Tips and tricks
  • Just-In-Time Mode
  • Hyva_CmsTailwindJit module
  • Tailwind 3 upgrade
  • Using PhpStorm for Tailwind development
  • ViewModel classes
  • Using ViewModels
  • Creating a ViewModel for Hyva
  • Assignment: Create a ViewModel
  • Working with icons
  • Alpine JS
  • Introduction to AlpineJS
  • Basic syntax
  • `x-model` directive
  • Magics
  • The `$el` magic
  • The `$nextTick` magic
  • `x-ref` directive
  • Watching variables
  • `x-cloak` directive
  • `x-spread` directive
  • Nested data
  • AlpineJS state
  • Copying a slider from alptail
  • JavaScript events in Hyva
  • Hyva private content
  • Depending on `window.hyva`
  • Mixing AJAX call with events
  • Loading a CMS Block via GraphQL
  • Checkout with Hyva
  • Checkout options
  • Hyvä React Checkout
  • Customizing the React checkout
  • Fixing the cart ID
  • Fix duplicate React versions
  • Fix the vendor folder
  • Overriding components
  • React or Preact developer tools
  • React checkout architecture
  • Using context in the React checkout
  • Using the React checkout in production
  • Dealing with CORS issues
  • Compatibility modules
  • Compatibility modules
  • Rewrite Luma scripts to Alpine
  • Using compatibility modules
  • Creating a compatibility module
  • Converting an Example Widget module
  • Widgets
  • Introduction to Hyvä widgets
  • Tips & tricks
  • Performance tips
  • Equal heights solutions

Magento 2 Hyvä Checkout Development

  • Introduction
  • Course introduction
  • Meet Hyvä
  • Hyvä and checkouts
  • Hyvä Checkout
  • Requirements for this course
  • Getting started
  • Magewire first
  • Hyvä Checkout installation
  • Configuring Hyvä Checkout
  • Create a custom Hyvä Theme
  • Customize styling
  • Debugging MageWire
  • Using the LiveWire DevTools
  • Hyva Checkout architecture
  • Hyva Checkout architecture overview
  • The XML layout of Hyva Checkout
  • Blocks, ViewModels and Components
  • Steps and step evaluation
  • Conditions
  • Customizing things
  • Something went wrong
  • Events
  • JavaScript events in checkout
  • Magento observable events
  • MageWire events
  • Form manipulation
  • Modifying form fields in the Admin
  • Additional EAV shipping address field
  • Registering a form modifier
  • Common actions in form modifiers
  • Form events
  • Example: Changing Tailwind classes
  • Creating new fields
  • Form components
  • Magewiring the address
  • Checkout scenarios
  • Checkout progress bar
  • Reordering steps in the checkout
  • Additional step in the checkout
  • In-store pickup
  • Payment methods
  • Payment methods

Magento 2 Installation

  • Hosting environment
  • Development platform
  • Step-by-step guide for Windows WSL
  • Assignment: Windows + WSL + Ubuntu Linux
  • Docker overview
  • Docker with Magento
  • Tips for Docker & Magento
  • Manual Docker (docker-run)
  • Creating a network
  • Running PHP-FPM manually
  • Running Nginx manually
  • Running MySQL manually
  • Running Redis manually
  • Running ElasticSearch manually
  • Running Varnish manually
  • Magento installation in Docker
  • Resetting your environment
  • Hypernode image
  • Docker image of Michiel
  • docker-compose stacks
  • Existing Docker configurations for Magento
  • Custom `docker-compose` cluster for Magento 2
  • Assignment: Setup a custom `docker-compose` cluster and install Magento 2
  • Assignment: Setup a custom `docker-compose` cluster with the Hypernode image
  • Magento ECE Docker
  • Warden
  • Mark Shust Docker
  • ddev with Magento
  • Media CT Docker
  • Magento and composer
  • Magento composer root update plugin
  • Magento Quality Patches
  • Tips and tricks
  • Magento installation
  • Minimum system requirements
  • Installing Magento
  • Assignment: Install Magento 2 via composer
  • Installing sample data
  • Assignment: Install Sample Data
  • Upgrading Magento
  • Assignment: Enable the Developer Mode
  • Is Magento properly installed?
  • Deployment modes
  • Post install
  • Developer Tools
  • Disabling Two Factor Authentication
  • Assignment: Disabling Two Factor Authentication
  • Using n98-magerun2
  • Assignment: Install Magerun2
  • Creating an admin user with `magerun2`
  • Assignment: Upload Magento files to GitHub repository
  • Assignment: Configure PhpStorm
  • Assignment: Dump database and copy to GitHub
  • Assignment: Setup Mage2TV Cache Cleaner
  • Assignment: Disable static signing
  • Assignment: Disable the Full Page Cache
  • Disable Magento Business Intelligence
  • Magento tips
  • Development performance
  • Deployment
  • Using the Production Mode
  • Deployment checks
  • Deploying to production
  • Stupidness of `module:uninstall`
  • Using app:config commands
  • Deploying new store scopes via env.php
  • Deploy PHP
  • Using Jenkins for deployment
  • Zero downtime deployment
  • Blue Green deployment
  • Static content deployment
  • Performance
  • MySQL tuning
  • PHP tuning
  • Troubleshooting
  • Troubleshooting composer authentication
  • Reindexing issues

Magento 2 Magewire Development

  • Introduction
  • Course introduction
  • About Magewire
  • What is MageWire?
  • Requirements for this course
  • My Development Setup
  • Getting started
  • Magewire installation
  • Assignment: Install MageWire
  • Troubleshooting MageWire installation
  • MageWire basics
  • Example module with MageWire
  • Binding handlers
  • Magewire with lists
  • Modifiers for binding handlers
  • `wire:select` modifier
  • Assignment: Create a simple counter component
  • Example counter with MageWire
  • Example counter with MageWire (advanced)
  • Magewire being `dirty`
  • Example: Switch the block template
  • Magewiring forms
  • Magic actions
  • Add Hyva styling to your component
  • Architecture
  • Initializing content via `wire:init`
  • How MageWire loads data
  • MageWire HTTP calls
  • Component classes
  • MageWire, ViewModel or Block?
  • Combination with AlpineJS
  • Combining MageWire with Alpine
  • Hooks and events
  • Component hooks
  • Client-side hooks
  • Events and listeners
  • JavaScript events
  • Magento events
  • Different events, different scenarios
  • JS customization
  • Entanglement
  • The Magewire JavaScript object
  • Advanced topics
  • Hydrators
  • Nesting components
  • Nesting components with the same class
  • Strong typing and Magewire
  • Dom Diffing issues
  • Magewire scenarios
  • A product finder based on Magewire
  • Adding Magewire to the minicart

Magento 2 Merchant

  • Basics
  • Magento overview
  • Using the Magento Admin Panel
  • Configuration
  • Catalog
  • Catalog
  • Products
  • URLs
  • Categories
  • Product types
  • Product Attributes
  • Configurable Products
  • Assignment: Working with products & customers in the storefront & Admin Panel
  • Assignment: Draw a new plan for a new shop
  • CMS
  • CMS
  • CMS pages
  • CMS blocks
  • CMS Widgets
  • Discover the homepage
  • CMS Tags
  • Assignment: Assign CMS Blocks
  • Checkout
  • Checkout
  • Order status
  • Inventory stock
  • The Checkout
  • Marketing
  • Marketing
  • Tax
  • Tax configuration
  • Translations
  • Translations
  • Assignment: Get started with translations
  • Theming
  • Theming
  • Extensions
  • Extensions
  • Migration
  • Migration
  • Deployment
  • Deployment
  • Tips
  • Tips

Magento 2 Migration

Magento 2 Testing

  • Testing overview
  • Why testing?
  • Testing strategies
  • Testing tools
  • Test Driven Development (TDD)
  • TDD is dead
  • System Under Test (SUT)
  • Types of testing
  • Magento tests
  • Organizing your tests
  • Make it a habit
  • PHPUnit
  • PHPUnit overview
  • PHPUnit installation
  • PHPUnit configuration file
  • Assignment: Setup a custom `phpunit.xml`
  • PHPUnit bootstrap
  • Breaking changes in PHPUnit
  • PHPUnit 10 upgrade
  • Setup PhpStorm
  • Setup PHPUnit
  • Run PHPUnit with Docker
  • Create Run Configuration
  • Running tests from PhpStorm
  • Rerun automatically
  • Rerun failed tests
  • Debug tests with Xdebug
  • Unit tests
  • Structure of a unit test class
  • TDD example
  • Using `dev/tests/unit/phpunit.xml.dist`
  • Simple example unit test
  • Coding katas
  • Testing a Config-class
  • Mocking classes
  • Stubs vs mocks vs dummies
  • Using the ObjectManager in unit tests
  • Testing exceptions
  • Data providers in tests
  • setUp & tearDown
  • Adding messages to the output
  • Spying with PHPUnit
  • Marking tests
  • Yireo Test Generator
  • Mocking functions
  • Good practices for tests
  • Code coverage
  • Integration Tests
  • Overview of Integration Tests
  • Setting up integration tests
  • Running Integration Tests
  • TESTS_CLEANUP
  • Resetting the Integration Tests environment
  • First integration test
  • Which ObjectManager?
  • Testing a Config-class
  • Mocking vs ObjectManager in integration tests
  • Magento annotations & attributes
  • Config fixtures
  • Data fixtures
  • Tips for integration tests
  • Yireo Test Generator
  • Running tests with Xdebug enabled
  • Integration testing performance
  • Performance overview
  • ReachDigital Integration Testing Framework
  • Add Redis server
  • 04-dummy-elasticsearch
  • MySQL tuning
  • Composer replacements
  • Yireo Integration Test Helper
  • Minimizing modules that are enabled
  • Parallel test runs
  • Using tmpfs to speed up Integration Tests
  • `yireo/magento-integration-tests-docker-composer`
  • Integration Test scenarios
  • Testing module behaviour
  • First test
  • Generating tests
  • Checking for configuration values
  • Testing console commands
  • Testing controllers
  • Testing the layout independently
  • Testing sessions
  • Testing entities
  • Testing a schema
  • Testing event observers
  • Testing Magewire components
  • Testing DI plugins
  • ObjectManager preference overrides
  • Yireo Integration Testing Helper
  • Troubleshooting Integration Tests
  • Could not connect to the Amqp Server
  • Base table or view not found
  • Cannot open file
  • Connection refused
  • The default website isn't defined. Set the website and try again
  • Unable to retrieve deployment version
  • Issue with `ifconfig` in XML layout
  • `tasklist.exe not found`
  • The value of autoloader is specified, but file doesn't exist
  • Cannot instantiate interface Magento\Framework\Config\CacheInterface
  • Code quality
  • About code quality
  • Defensive programming
  • Object Calisthenics
  • SOLID
  • Law of Demeter
  • Other principles
  • Static code analysis
  • Refactoring legacy code
  • What is legacy code?
  • Refactoring with tests
  • Strangler fig pattern
  • Characterization tests
  • Functional Tests with PHPUnit
  • Overview of Functional Tests
  • Functional tests setup
  • Validate products
  • Customer VAT validation
  • API Functional Testing
  • Custom REST test
  • Custom GraphQL test
  • MFTF
  • Magento Functional Testing Framework (MFTF)
  • Static tests
  • Overview of static tests
  • Running tests on Magento core
  • PHP CodeSniffer (PHPCS)
  • Magento 2 Coding Standard
  • Running PHPStan in Magento
  • PHP linting
  • Varnish tests
  • Mutating testing
  • Mutation testing
  • Infection
  • Test automation
  • Automated testing overview
  • GitHub Actions
  • End-to-End testing
  • End-to-End testing
  • Cypress
  • Miscellaneous
  • Resources

Magento 2 Luma Frontend Development

  • Basics
  • Introduction to
  • Development tools
  • Development performance
  • Deployment modes
  • Static content deployment
  • Setting the Magento root
  • Troubleshooting tips
  • Relevant database tables
  • Creating a basic theme
  • Theme location
  • Creating a theme
  • Parent themes
  • Theme inheritance
  • Theme structure
  • Theme vs module
  • File `view.xml`
  • Assignment: Create a simple theme
  • Assignment: Override SVG logo in your theme
  • Assignment: Override `mage/calendar.css`
  • PHTML and HTML templates
  • Introduction to PHTML templates
  • Using the MageSpecialist DevTools
  • Assignment: Install the MSP DevTools
  • Using mage2tv/cache-clean
  • Overriding a PHTML template
  • Creating a new template
  • PHTML vs HTML templates
  • Assignment: Override PHTML templates
  • Debugging PHTML templates
  • Understanding the root template
  • Escaping values in templates
  • XML layout
  • XML layout concepts
  • Comparison with Magento 1
  • XML layout essentials
  • Review of homepage demo
  • Handles and handle types
  • Understanding page layouts
  • Assignment: Change the page layout of the product page
  • Adding labels to containers
  • Using containers
  • Adding a new page layout
  • The head section in the layout
  • Blocks in the layout
  • Layout updates
  • Moving elements
  • Removing elements
  • Rendering child elements in blocks
  • Reordering elements
  • Using block templates
  • Assignment: Add a template block to the sidebar of the homepage
  • Block arguments in the XML layout
  • Adding Google fonts
  • Assignment: Add a Google Font
  • Common XML layout modifications
  • Understanding root.phtml
  • Overriding layout
  • Adding FontAwesome
  • Assignment: Add FontAwesome
  • Overriding the logo
  • Adding menu-items to the main or the top menu
  • Text blocks
  • Assignment: Add a dummy block to the sidebar of the homepage
  • Troubleshooting layout issues
  • Multilinguality
  • Setting up Store Views for translation
  • Translating content
  • Translating system strings
  • Using inline translations
  • Assignment: Get started with translations
  • Creating a custom language pack
  • How JavaScript translations work
  • Block classes
  • Module essentials
  • Creating a Block
  • Using ViewModels
  • ViewModels vs Blocks
  • Extending `AbstractBlock`
  • Working with CMS Blocks
  • Example: Show products that are on sale
  • Assignment: Display Store Information details in the footer
  • Assignment: Analysing PHP errors in a ViewModel
  • Assignment: Add advertizement on some product and category pages
  • Assigning variables
  • Example: Adding a product to the footer
  • Layout name vs layout alias
  • Email templates
  • Customizing email templates
  • Adding a block to an email template
  • Using Yireo EmailTester
  • CSS, LESS, Sass
  • CSS strategies
  • How CSS is added via the XML layout
  • Magento its LESS strategy
  • LESS basics
  • To copy Fotorama into a LESS file
  • Removing calendar.css and others
  • One single CSS or separate CSS files?
  • Understanding the `@magento_import` directive
  • Example module with some LESS
  • LESS compilers
  • Debugging `var/view_preprocessed/`
  • Including critical CSS
  • CSS responsiveness - the Magento way
  • Best practices for overriding LESS files
  • Using SASS instead of LESS
  • SASS basics
  • Grunt vs Gulp
  • Using Grunt for LESS compilation
  • Assignment: Setup Grunt
  • Grunt tips
  • Frontools Gulp usage
  • Using subodha his Gulp
  • bobmotor Gulp usage
  • Assignment: Change the body background color
  • Assignment: Change the color of the add-to-cart button
  • Assignment: Create a gradient switcher
  • Assignment: Add custom Homepage content with styled tiles
  • Frontend performance
  • General performance tips
  • JS bundling
  • Caching blocks
  • Miscellaneous
  • Magento theme `type`
  • Assignment: Add custom Homepage content with a custom LESS file
  • Assignment: Create a parallax effect
  • Tips
  • Troubleshooting themes

Magento 2 Luma JavaScript Development

  • JavaScript
  • Luma JavaScript standards
  • Invocation patterns
  • 02-jquery
  • jQuery in Magento
  • Assignment: Create a simple jQuery snippet
  • jQuery and the keyword this
  • jQuery noConflict mode
  • RequireJS
  • How JavaScript translations work
  • AMD standard
  • RequireJS basics
  • RequireJS config per Magento module
  • Assignment: Create a RequireJS module with alias
  • RequireJS configuration
  • RequireJS rewrites
  • Assignment: RequireJS rewrites
  • RequireJS shims
  • RequireJS mixins
  • Assignment: Create a mixin
  • Component initializations
  • Assignment: Component initializations
  • Return values of RequireJS modules
  • Example: Changing background color
  • Assignment: Rewrite your jQuery snippet to a component
  • Changing options of the StoreView switcher
  • Assignment: Changing the StoreView switcher
  • Assignment: Translate values in JavaScript
  • Dynamic dependencies
  • RequireJS tips
  • KnockoutJS
  • Introduction to Knockout.js
  • Knockout Context Debugger browser plugin
  • Binding Knockout the Magento way
  • Assignment: Create an UIComponent
  • Binding variables in Knockout
  • Text input with Knockout observable
  • Using `ko.observableArray`
  • Simple counter with Knockout
  • Assignment: Edit the message of your UIComponent
  • Interacting with Knockout ViewModels
  • Interacting with Magento uiComponents
  • Simple Knockout ViewModel linking
  • Analysing the customer greeting
  • Subscribing to the minicart
  • Assignment: Create an UIComponent listening to cart changes
  • Working with computed observables
  • Knockout Components
  • Debugging Knockout
  • Using the uiRegistry
  • Definition of UiComponents
  • Advanced UiComponent
  • Knockout HTML templates
  • Analysing the minicart
  • Rendering child components
  • Adding extra info to the minicart
  • KnockoutJS Advanced
  • State component with Knockout
  • Extending the checkout
  • ConfigProviders for `window.checkoutConfig`
  • Layout processors
  • Adding a new Layout Processor
  • Adding a child component to the checkout
  • Adding a new step in checkout
  • Component configuration
  • Adding a field to the address form
  • Adding a CMS block in checkout
  • Data sources in the checkout
  • Add additional email validation
  • ZIP code validation
  • Payment validators
  • Observer quote changes
  • Calling upon `checkoutProvider`
  • Add a block to the sidebar
  • Observing field validation
  • Private content
  • Definition of Private Content
  • Dealing with `customerData`
  • Example for using `customerData`
  • Add a new customerData section
  • How `customerData` sections get their data
  • Showing `customer().lastname` in a Knockout template
  • Depersonalizer