Full Access to All Magento 2 On-Demand Training
One individual access to all courses that we have created for Magento 2.
- Courses included: 21
- Total video time: 96 hours
- Access period: 1Y
- € 1049 for 1 year
- € 11 per hour of video available to you
Using this package, you will get access to all our Magento 2 courses for a single year. More materials will be added over time, from which you will benefit. Once purchased, all courses will be available under your account via "My Attendance".
Price | €1,049.00 |
---|---|
Access period | 1 year |
Included courses
Frontend development generics
Status: Complete
Last updated: 2023-12-13
Number of lessons: 45
Number of slides: 205
Videos: 5.1 hours
PHP Basics
Status: Complete
Last updated: 2023-03-21
Number of lessons: 39
Number of slides: 109
Videos: 0 hours
PHP Advanced Programming
Status: Complete
Last updated: 2023-08-20
Number of lessons: 74
Number of slides: 484
Videos: 1.5 hours
JavaScript Advanced
Status: Complete
Last updated: 2023-07-22
Number of lessons: 59
Number of slides: 269
Videos: 0.3 hours
Linux Fundamentals
Status: Complete
Last updated: 2023-05-08
Number of lessons: 33
Number of slides: 154
Videos: 0 hours
Docker Essentials
Status: Complete
Last updated: 2023-06-15
Number of lessons: 26
Number of slides: 144
Videos: 0 hours
Adobe PWA Studio Development
Status: Complete
Last updated: 2023-07-22
Number of lessons: 63
Number of slides: 300
Videos: 10 hours
Magento 2 Technical Architecture
Status: Complete
Last updated: 2023-07-22
Number of lessons: 40
Number of slides: 155
Videos: 0.3 hours
Magento 2 Backend Development I
Status: Complete
Last updated: 2023-07-22
Number of lessons: 83
Number of slides: 332
Videos: 11.1 hours
Magento 2 Backend Development II
Status: Complete
Last updated: 2024-04-19
Number of lessons: 80
Number of slides: 336
Videos: 6.3 hours
Magento 2 Backend Development III
Status: Complete
Last updated: 2023-10-09
Number of lessons: 32
Number of slides: 180
Videos: 0 hours
Magento 2 GraphQL Development
Status: Complete
Last updated: 2023-07-22
Number of lessons: 21
Number of slides: 84
Videos: 2 hours
Magento 2 Hyvä Theme Development
Status: Complete
Last updated: 2023-10-08
Number of lessons: 81
Number of slides: 324
Videos: 10.8 hours
Magento 2 Hyvä Checkout Development
Status: Complete
Last updated: 2024-04-19
Number of lessons: 74
Number of slides: 276
Videos: 11 hours
Magento 2 Installation
Status: Complete
Last updated: 2023-08-10
Number of lessons: 67
Number of slides: 270
Videos: 2.7 hours
Magento 2 Merchant
Status: Complete
Last updated: 2023-03-24
Number of lessons: 32
Number of slides: 171
Videos: 0 hours
Magento 2 Migration
Status: Complete
Last updated: 2021-11-04
Number of lessons: 0
Number of slides: 0
Videos: 0 hours
Magento 2 Unit, Integration and Functional Testing
Status: Complete
Last updated: 2024-04-19
Number of lessons: 62
Number of slides: 167
Videos: 0 hours
Magento 2 Luma Frontend Development
Status: Complete
Last updated: 2024-02-27
Number of lessons: 118
Number of slides: 369
Videos: 11.8 hours
Magento 2 Luma JavaScript Development
Status: Complete
Last updated: 2023-07-22
Number of lessons: 76
Number of slides: 335
Videos: 14 hours
Vue Storefront 1 Fundamentals
Status: Complete
Last updated: 2023-07-22
Number of lessons: 61
Number of slides: 362
Videos: 9.4 hours
Preview this course
Want to see what this course is like? Checkout our Courseware Demo to preview this course and others.
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
- 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
- Database concepts
- 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 8.2 syntax
- 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
- Built-in classes and interfaces
- Tools
- Tools overview
- Composer
- Assignment: Implement composer
- Assignment: Add simple templating
- Composer
- Requiring a composer package
- Semantic versioning
- install vs update
- 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 calesthenics
- 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 tests
- 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
- Magento issues
- Assignment: Dangers of running root
- SonarQube
- Debugging tips
- Miscellaneous
- Output
- Performance
- Security
- Modernizing WordPress
JavaScript Advanced
- Syntax
- The problem of 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
- Polymer
- React JS
- Assignment: Create a simple React application
- Vue JS
- Assignment: Create a simple Vue application
- Svetle
- Invocation patterns
- Invocation patterns
- Binding the keyword this
- Module pattern
- Internals
- ES6 Strict Mode
- Understandig the prototype chain
- The Prototype Chain
- Object properties
- Proxy
- Monads
- Collections
- Event loop
- 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
- Overview of Node
- 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 basics
- ServiceWorker events
- Other topics
- Webcomponents
- Basics
- 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
- 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 Actions
- Gitpod
- Clustering Docker containers
- Introduction
- Docker Swarm
- Kubernetes
- Kubernetes pods
- Kustomization
- Kubernetes & Helm
- Skaffold
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 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
- Conclusion
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
- Product attributes
- Order flow
- Customer concepts
- Keeping stock
- Using modules
- Dealing with modules
- Really handy modules
- Example module installations
- Files and folders
- 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`
- 02-composer
- Deployment
- Deployment
- Deploying with DeployerPHP
- Tips and tricks
- Tips & tricks
- Translations
- add-french-store-view
Magento 2 Backend Development I
- Magento basics
- Quick peek at Magento 2 architecture
- Theming basics
- 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
- Architecture
- Areas in the Magento application
- Application layers
- Interfaces and Service Contracts
- Dealing with backward compatibiliby
- Dependency Injection
- Sandbox script
- Introduction to Dependency Injection
- Object Manager
- DI preferences
- DI types aka constructor argument replacement
- Virtual Types essentials
- DI factories
- Creating a custom factory
- DI proxies
- DI interceptor plugins
- DI recipees
- DI recipees
- Inject the App State and check for the area
- Checking for the Developer Mode in your code
- Injecting a Store Configuration value
- Injecting the current product
- Injecting the registry into your class
- Injecting URLs into your class
- Creating a custom logger
- Assignment: Create a custom logger
- Injecting the current customer session
- Injecting the layout into your class
- 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
- 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 models via CLI commands
- Example data model with integration tests
- Improving your data model
- Improving your resource model
- 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
- securitytxt
- Adding a custom router
- Assignment: Create a custom router for your Author entity
- Quiz: Routers
- CMS parts
- CMS Blocks
- CMS pages
- CSP
- CSP
- Advanced frontend topics
- Widgets
- Assignment: Create a custom widget for your Author entity
- Adding a custom page type
- Filesystem
- Using the filesystem
- Reading files
- Assignment: Create a CLI command to output a file
- Writing files
- Repositories
- Repositories
- Creating your own repository
- Assignment: Create a custom repository for your author entity
- Class patterns
- Data objects
- Builder pattern
- No more Helpers
- Database operations
- Declarative schemas (advanced)
- 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 item
- Basics of adding UiComponents
- Extending a UiComponent grid
- Creating a UIComponent grid
- Hyva admin
- Custom backend theme
- Caching
- Caching backends
- Caching types
- Adding a custom cache type
- core-cache-config
- Parallel generation with Redis
- Varnish
- Introducing Varnish
- Setting up Magento and Varnish
- Troubleshooting Varnish
- Edge Side Includes
- VCL configuration
- Tips when using Varnish
- Backend of the checkout
- ConfigProviders for window.checkoutConfig
- Layout processors
- Adding a new Layout Processor
- The Vault
- REST API
- Web APIs
Magento 2 Backend Development III
- Block caching
- Block caching
- Cache tags in Blocks
- Cache keys in Block
- Advanced Block caching
- Full Page Cache
- Full Page Cache in Magento
- ElasticSearch
- Introduction to ElasticSearch
- Terminology
- Connecting to ElasticSearch
- Installing ElasticSearch
- ElasticSearch in PHP
- ElasticSearch in Magento
- Aggregation APIs
- Clustering ElasticSearch
- Scaling tips for ElasticSearch
- ELK stack
- Kibana
- Indexing
- Indexing overview
- Where to look for indexing
- How indexing works
- Tuning indexing
- Creating a custom indexer
- Message Queue
- Introducing message queuing
- AMQP
- Magento message queue
- Multi Source Inventory
- Multi Source Inventory overview
- Reservations
- Source Selection Algorithms
- Configuring MSI
- Simplest setup of MSI
- Coding samples with MSI
- Database tables for MSI
- Stock registry
Magento 2 GraphQL Development
- GraphQL basics
- Introduction to GraphQL
- GraphQL clients
- GraphQL queries
- Assignment: Make some queries
- GraphQL mutations
- 04-mutations-assignment
- GraphQL call types
- GraphQL fragments
- GraphQL directives
- GraphQL schema discovery and introspection
- Magento GraphQL API
- Introducing the Magento GraphQL API
- Adding a custom GraphQL endpoint
- Extending the product schemas
- Extending the GraphQL storeConfig endpoint
- Resolver $context argument
- GraphQL resolvers
- Testing GraphQL endpoints
- GraphQL URL resolving
- GraphQL caching
- Exception handling
- Tips and tricks with the GraphQL API
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
- Project kickstart
- 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 theme
- Using browser syncing
- Tailwind CSS
- Introducing Tailwind CSS
- Quick start without Hyva
- 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
- Tailwind and PostCSS
- Optimizing CSS classes
- Purging Magento modules
- Configuring fonts
- Tailwind plugins
- Using the prose plugin
- Assignment: Make sure your WYSIWYG output displays properly
- Using apply
- Tips and tricks
- Just-In-Time compilation
- 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
- Introducing 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
- State management in AlpineJS
- Copying a slider from alptail
- Events in AlpineJS
- 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
- Rewriting Luma scripts to Alpine
- Using compatibility modules
- Creating a custom compatibility module
- Converting an Example Widget module
- Widgets
- Introduction to Hyvä widgets
- Tips & tricks
- Performance tuning
- Setting equal heights
Magento 2 Hyvä Checkout Development
- Introduction
- Course introduction
- Meet Hyvä
- Hyvä and checkouts
- Hyvä Checkout
- Requirements for this course
- My Development Setup
- Getting started
- Magewire installation
- Assignment: Install MageWire
- Troubleshooting MageWire installation
- What is MageWire?
- Hyvä Checkout installation
- Configuring Hyvä Checkout
- Create a custom Hyvä Theme
- Customize styling
- Debugging MageWire
- Using the LiveWire DevTools
- MageWire
- Example module with MageWire
- Binding handlers
- Magewire with lists
- Modifiers
- `wire:select` modifier
- Assignment: Create a simple counter component
- Example counter with MageWire
- Example counter with MageWire (advanced)
- Magewire being `dirty`
- Switch a block template in Magewire
- Magewiring forms
- Magic actions
- Add Hyva styling to your component
- Combining MageWire with Alpine
- Initializing content via `wire:init`
- How MageWire loads data
- MageWire HTTP calls
- Component classes
- MageWire, ViewModel or Block?
- Component hooks
- Client-side hooks
- Events and listeners
- JavaScript events
- Magento events
- Different events, different scenarios
- Hydrators
- Nesting components
- Nesting components with same class
- Strong typing and Magewire
- Dom Diffing issues
- Magewire scenarios
- A product finder based on Magewire
- Adding Magewire to the minicart
- 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 while trying to load the checkout
- 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
- JS customization
- Entanglement
- The Magewire JavaScript object
- 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
- Varnish in Docker
- 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 Hypernode
- 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 Magerun
- 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 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 Unit, Integration and Functional Testing
- Testing overview
- Testing strategies
- Why testing?
- TDD
- Types of testing
- Overview of testing
- Organizing your tests
- Running tests from PHPStorm
- 02-code-quality
- Defensive programming
- DRY principle
- Object Calisthenics
- SOLID principles
- Law of Demeter
- Tell don't ask
- Static code analysis
- Unit tests
- Basics of unit testing
- Example unit test
- Unit testing katas
- Unit Tests
- Using `dev/tests/unit/phpunit.xml.dist`
- Stubs vs mocks vs dummies
- MockBuilder
- Testing exceptions
- Data providers in tests
- Spying with PHPUnit
- Integration Tests
- Overview of Integration Tests
- Setting up integration tests
- Running Integration Tests
- Integration testing
- Which ObjectManager?
- Tips for integration tests
- Magento annotations
- Fixtures
- Integration Tests with Warden
- Minimizing modules that are enabled
- Troubleshooting integration tests
- Advanced topics
- Testing events and observers
- Integration Test scenarios
- Testing module behaviour
- Testing controllers
- Testing the layout
- Testing sessions
- Testing entities
- Refactoring legacy code
- What is legacy code?
- Refactoring with tests
- Strangler fig pattern
- Refactoring with TDD
- Different testing types for legacy code
- Characterization tests
- Code coverage
- 08-integration-test-performance
- Performance overview
- Yireo Integration Test Helper
- Using tmpfs to speed up Integration Tests
- Live Tests
- Overview of Live Tests
- Setup of live tests
- Using the ProductRepository in a functional test
- Functional Tests following Magento
- API Functional Testing
- MFTF
- Magento Functional Testing Framework (MFTF)
- 14-cicd
- PHP linting
- GitHub Actions
- End-to-End testing
- An overview of End-to-End testing
- Cypress
Magento 2 Luma Frontend Development
- Basics
- Introduction to Magento 2 frontend development
- Development tools
- Development performance
- Deployment modes
- Static Content Deployment
- Setting the DocumentRoot in the Apache webserver
- Troubleshooting theming files
- Relevant database tables
- Creating a basic theme
- Theme location
- Creating a theme
- Parent themes
- Theme inheritance
- Theme structure
- Theme vs module
- view.xml file
- 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 & View Model 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
- Working with child blocks
- 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
- 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 the 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 KO 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
Vue Storefront 1 Fundamentals
- Introduction
- Introducing Vue Storefront 1
- Organizing the stack in development
- Preparing for the PWA
- Installation
- A mental checklist for the stack
- Installing the Vue Storefront 1 PWA
- Starting with the Vue Storefront 1 PWA
- Installing the Vue Storefront 1 API
- Setting up Redis
- Quick introduction to ElasticSearch
- Setting up ElasticSearch
- Using ElasticSearch 7
- Setting up Kibana
- Configuring ElasticSearch in PWA & API
- Setting up Magento 1
- Setting up the Magento 1 indexer
- Setting up VSBridge for Magento 1
- Configuring Magento 1 in the API
- Setting up Magento 2
- Setting up the Magento 2 indexer
- Setting up a data push with Mage2Vuestorefront
- Configuring Magento 2 in the API
- Theming
- Switching between themes
- Adding the Capybara theme
- Creating a new theme
- Working with Storefront UI
- Working with Lerna
- Modifying routes
- Using CMS Blocks
- Using CMS Pages
- Layouts and templates
- Adding Vue plugins
- Adding new product attributes
- Exploring Capybara's code
- Exploring Capybara's homepage Vuex store
- Handling multiple languages
- Vue essentials
- Vue essentials
- Dealing with Vue mixins
- Dealing with Vue slots
- Dealing with Vue events
- Dealing with Vuex state management
- PWA architecture
- Understanding the PWA configuration
- Faster local compilation
- Working with GraphQL
- SSR
- Modules
- Vocabulary
- Finding extensions
- Overview of PWA modules
- Creating a PWA module
- What is a PWA module able to do?
- Extending routing using a PWA module
- Creating a custom Vuex store
- Extending an existing Vuex store
- Dealers example
- API architecture
- Introduction to ExpressJS
- ExpressJS middleware
- Extending the API
- Order2Magento
- Magento 2 REST calls
- In production
- Running the stack in production
- Using PM2
- Performance