University 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: 94 hours
- Access period: 1Y
- € 1249 for 1 year
- € 13 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,249.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 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
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 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
Vue Storefront 1 Fundamentals
Status: Complete
Last updated: 2024-06-19
Number of lessons: 61
Number of slides: 362
Videos: 9.5 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
- 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 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
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 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
Vue Storefront 1 Fundamentals
- Introduction
- Introducing Vue Storefront
- Organizing the stack in development
- Preparing for the PWA
- Installation & Setup
- 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
- 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 the VSF1 API for Magento 2
- Theming
- Switching themes
- Adding Capybara
- Creating a new theme
- Working with Storefront UI
- Working with Lerna
- Modifying routes
- CMS Blocks
- CMS Pages
- Layouts and templates
- Adding Vue plugins
- Adding new product attribute
- 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
- PWA architecture
- Understanding the PWA configuration
- Faster local compilation
- Working with GraphQL
- Understanding SSR
- PWA modules
- Vocabulary of modules
- 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
- Example: Dealers
- API architecture
- Introduction to ExpressJS
- ExpressJS middleware
- Extending the API
- Order2Magento
- Magento 2 REST calls
- Production
- Running the stack in production
- Using PM2
- Performance