29,99 €
Magento is one of the most exciting, flexible, and customizable e-commerce systems. It offers you an extensive suite of powerful tools for creating and managing an online store. After years of development, Magento 2 introduces itself with a strong emphasis on modularity, Web API's, automated testing and overall new technology stack platform.The long-awaited Magento 2 release introduces a whole new e-commerce platform to develop online stores. The all new Magento 2 architecture, Web APIs, and a host of other features are equally challenging to master as much as they are exciting to use.
Tshis book will ease the learning curve by offering step-by-step guidance on how to extend the core functionality of your Magento 2 store.
This book is your one-stop guide to build and customize a quality e-commerce website from the latest version of one of the largest, fastest growing, and most popular e-commerce platforms—Magento 2.
We start off with an introduction to the fundamental concepts of Magento to give you a foundation to work from. We then move on to configure the development and basic production environment for Magento. After this, you’ll get to grips with the major concepts and conventions that are new to the Magento 2 platform. We then delve deeper to get to the core of automated deployments, persisting data, writing data fixture scripts and applying various backend and frontend modifications. As we near the end of the book, you will learn to make API calls and write automated tests. Finally, you will be guided through building a full-blown helpdesk module from scratch.
By the end of this book, you will have learned a wide range of techniques to extend and customize your Magento 2 store to fit the requirements of your business.
Das E-Book können Sie in Legimi-Apps oder einer beliebigen App lesen, die das folgende Format unterstützen:
Seitenzahl: 362
Veröffentlichungsjahr: 2015
Copyright © 2015 Packt Publishing
All rights reserved. No part of this book may be reproduced, stored in a retrieval system, or transmitted in any form or by any means, without the prior written permission of the publisher, except in the case of brief quotations embedded in critical articles or reviews.
Every effort has been made in the preparation of this book to ensure the accuracy of the information presented. However, the information contained in this book is sold without warranty, either express or implied. Neither the author, nor Packt Publishing, and its dealers and distributors will be held liable for any damages caused or alleged to be caused directly or indirectly by this book.
Packt Publishing has endeavored to provide trademark information about all of the companies and products mentioned in this book by the appropriate use of capitals. However, Packt Publishing cannot guarantee the accuracy of this information.
First published: December 2015
Production reference: 1171215
Published by Packt Publishing Ltd.
Livery Place
35 Livery Street
Birmingham B3 2PB, UK.
ISBN 978-1-78588-658-4
www.packtpub.com
Author
Branko Ajzele
Reviewer
Mitchell Robles, Jr
Commissioning Editor
Neil Alexander
Acquisition Editor
Vinay Argekar
Content Development Editor
Preeti Singh
Technical Editor
Gaurav Suri
Copy Editors
Vedangi Narvekar
Jonathan Todd
Project Coordinator
Shweta H. Birwatkar
Proofreader
Safis Editing
Indexer
Priya Sane
Production Coordinator
Shantanu N. Zagade
Cover Work
Shantanu N. Zagade
Branko Ajzele is a husband, father of two, son, brother, author, and a software developer.
He has a degree in electrical engineering. A lover of all things digital, he makes a living from software development. He hopes to find enough quality time some day to seriously dive into hobby electronics; he has his eye on Arduino and Raspberry Pi.
He has years of hands-on experience with full-time software development and team management, and has specializing in e-commerce platforms. He has been working with Magento since 2008; he has been knee-deep in it since its very first beta version. Branko is regularly in touch with everything related to PHP, databases (MySQL/MongoDB), search/analytics (Solr/Elasticsearch), Node.js, and related technologies.
He has a strong technical knowledge with an ability to communicate those technicalities frequently and clearly with a strong direction. He feels comfortable proposing alternatives to demands which he feels can be improved, even when this means pulling a late shift to meet the deadlines.
He holds several respected IT certifications, such as Zend Certified Engineer (ZCE PHP), Magento Certified Developer (MCD), Magento Certified Developer Plus (MCD+), Magento Certified Solution Specialist (MCSS), and JavaScript Certified Developer.
Instant E-Commerce with Magento: Build a Shop, Packt Publishing, was his first Magento-related book that was oriented towards Magento newcomers. After writing this book, he wrote Getting Started with Magento Extension Development for developers.
Currently, he works as a full-time contractor for Lab Lateral Ltd, an award-winning team of innovative thinkers, artists, and developers who specialize in customer-centric websites, digital consultancy, and marketing. He is the Lead Magento Developer and Head of Lab's Croatia office.
He was awarded the E-Commerce Developer of the Year by Digital Entrepreneur Awards in October 2014 for his excellent knowledge and expertise in e-commerce development. His work is second to none. He is truly dedicated to helping the Lab Lateral Ltd team and his fellow developers across the world.
Mitchell Robles, Jr, is a solutions architect and applications engineer who has worked in various lead roles for several award-winning digital agencies in San Diego, CA, USA. Through his own entrepreneurial spirit, he founded Mojo Creative & Technical Solutions (for more information, visit http://www.mojomage.com/), which specializes in day-to-day Magento support and development for merchants, agencies, freelancers, and industry partners. As a certified Magento developer, Mitchell is the brainchild and lead in developing several must-have Magento extensions, including Mojo Creative & Technical Solutions' Bundled Mojo, a popular, full-featured Magento extension that gives administrators total control over how they display and sell their bundled products. When he is not in the digital matrix, Mitchell enjoys traveling abroad, exploring, skateboarding, scuba diving, and tinkering with random projects, from woodworking to 3D printing.
You can follow Mitchell on the Mojo Creative & Technical Solutions' blog, which can be viewed by visiting http://b.mojomage.com/.
For support files and downloads related to your book, please visit www.PacktPub.com.
Did you know that Packt offers eBook versions of every book published, with PDF and ePub files available? You can upgrade to the eBook version at www.PacktPub.com and as a print book customer, you are entitled to a discount on the eBook copy. Get in touch with us at <[email protected]> for more details.
At www.PacktPub.com, you can also read a collection of free technical articles, sign up for a range of free newsletters and receive exclusive discounts and offers on Packt books and eBooks.
https://www2.packtpub.com/books/subscription/packtlib
Do you need instant solutions to your IT questions? PacktLib is Packt's online digital book library. Here, you can search, access, and read Packt's entire library of books.
If you have an account with Packt at www.PacktPub.com, you can use this to access PacktLib today and view 9 entirely free books. Simply use your login credentials for immediate access.
Building Magento-powered stores can be a challenging task. It requires a great range of technical skills that are related to the PHP/JavaScript programing language, development and production environments, and numerous Magento-specific features. This book will provide necessary insights into the building blocks of Magento.
By the end of this book, you should be familiar with configuration files, the dependency injection, models, collections, blocks, controllers, events, observers, plugins, cron jobs, shipping methods, payment methods, and a few other things. All of these should form a solid foundation for your development journey later on.
Chapter 1, Understanding the Platform Architecture, gives a high-level overview of the technology stack, architectural layers, top-level system structure, and individual module structure.
Chapter 2, Managing the Environment, gives an introduction to VirtualBox, Vagrant, and Amazon AWS as platforms to set up development and production environments. It further provides hands-on examples to set up/script Vagrant and Amazon EC2 boxes.
Chapter 3, Programing Concepts and Conventions, introduces readers to a few seemingly unrelated but important parts of Magento, such as composer, service contracts, code generation, the var directory, and finally, coding standards.
Chapter 4, Models and Collections, takes a look into models, resources, collections, schemas, and data scripts. It also shows the practical CRUD actions that are applied to an entity alongside filtering collections.
Chapter 5, Using the Dependency Injection, guides readers through the dependency injection mechanism. It explains the role of an object manager, how to configure class preferences, and how to use virtual types.
Chapter 6, Plugins, gives a detailed insight into the powerful new concept called plugins. It shows how easy it is to extend, or add to, an existing functionality using the before/after/around listeners.
Chapter 7, Backend Development, takes readers through a hands-on approach to what is mostly considered backend-related development bits. These involve cron jobs, notification messages, sessions, cookies, logging, profiler, events, cache, widgets, and so on.
Chapter 8, Frontend Development, uses a higher-level approach to guide the reader through what is mostly considered frontend-related development. It touches on rendering the flow, view elements, blocks, templates, layouts, themes, CSS, and JavaScript in Magento.
Chapter 9, The Web API, takes up a detailed approach to the powerful Web API provided by Magento. It gives hands-on practical examples to create and use both REST and SOAP, either through the PHP cURL library, or from the console.
Chapter 10, The Major Functional Areas, adopts a high-level approach towards introducing readers with some of the most common sections of Magento. These include CMS, catalog and customer management, and products and customer import. It even shows how to create a custom product type and a shipping and payment method.
Chapter 11, Testing, gives an overview of the types of test that are available in Magento. It further shows how to write and execute a custom test.
Chapter 12, Building a Module from Scratch, shows the entire process of developing a module, which uses most of the features introduced in the previous chapters. The final result is a module that has admin and storefront interface, an admin configuration area, e-mail templates, installed schema scripts, tests, and so on.
In order to successfully run all the examples provided in this book, you will need either your own web server or a third-party web hosting solution. The high-level technology stack includes PHP, Apache/Nginx, and MySQL. The Magento 2 Community Edition platform itself comes with a detailed list of system requirements that can be found at http://devdocs.magento.com/guides/v2.0/install-gde/system-requirements.html. The actual environment setup is explained in Chapter 2, Managing the Environment.
This book is intended primarily for intermediate to professional PHP developers who are interested in Magento 2 development. For backend developers, several topics are covered that will enable you to modify and extend your Magento store. Frontend developers will also find some coverage on how to customize the look of a site in the frontend.
Given the massive code and structure changes, Magento version 2.x can be described as a platform that is significantly different from its predecessor. Keeping this in mind, this book will neither assume nor require previous knowledge of Magento 1.x.
In this book, you will find a number of text styles that distinguish between different kinds of information. Here are some examples of these styles and an explanation of their meaning.
Code words in text, database table names, folder names, filenames, file extensions, pathnames, dummy URLs, user input, and Twitter handles are shown as follows: "The AbstractProductPlugin1 class does not have to be extended from another class for the plugin to work."
A block of code is set as follows:
Any command-line input or output is written as follows:
New terms and important words are shown in bold. Words that you see on the screen, for example, in menus or dialog boxes, appear in the text like this: "In the Store View drop-down field, we select the store view where we want to apply the theme."
Warnings or important notes appear in a box like this.
Tips and tricks appear like this.
Feedback from our readers is always welcome. Let us know what you think about this book—what you liked or disliked. Reader feedback is important for us as it helps us develop titles that you will really get the most out of.
To send us general feedback, simply e-mail <[email protected]>, and mention the book's title in the subject of your message.
If there is a topic that you have expertise in and you are interested in either writing or contributing to a book, see our author guide at www.packtpub.com/authors.
Now that you are the proud owner of a Packt book, we have a number of things to help you to get the most from your purchase.
You can download the example code files from your account at http://www.packtpub.com for all the Packt Publishing books you have purchased. If you purchased this book elsewhere, you can visit http://www.packtpub.com/support and register to have the files e-mailed directly to you.
Although we have taken every care to ensure the accuracy of our content, mistakes do happen. If you find a mistake in one of our books—maybe a mistake in the text or the code—we would be grateful if you could report this to us. By doing so, you can save other readers from frustration and help us improve subsequent versions of this book. If you find any errata, please report them by visiting http://www.packtpub.com/submit-errata, selecting your book, clicking on the ErrataSubmissionForm link, and entering the details of your errata. Once your errata are verified, your submission will be accepted and the errata will be uploaded to our website or added to any list of existing errata under the Errata section of that title.
To view the previously submitted errata, go to https://www.packtpub.com/books/content/support and enter the name of the book in the search field. The required information will appear under the Errata section.
Piracy of copyrighted material on the Internet is an ongoing problem across all media. At Packt, we take the protection of our copyright and licenses very seriously. If you come across any illegal copies of our works in any form on the Internet, please provide us with the location address or website name immediately so that we can pursue a remedy.
Please contact us at <[email protected]> with a link to the suspected pirated material.
We appreciate your help in protecting our authors and our ability to bring you valuable content.
If you have a problem with any aspect of this book, you can contact us at <[email protected]>, and we will do our best to address the problem.
Magento is a powerful, highly scalable, and highly customizable e-commerce platform that can be used to build web shops and, if needed, some non-e-commerce sites. It provides a large number of e-commerce features out of the box.
Features such as product inventory, shopping cart, support for numerous payment and shipment methods, promotion rules, content management, multiple currencies, multiple languages, multiple websites, and so on make it a great choice for merchants. On the other hand, developers enjoy the full set of merchant-relevant features plus all the things related to actual development. This chapter will touch upon the topic of robust Web API support, extensible administration interface, modules, theming, embedded testing frameworks, and much more.
In this chapter, a high-level overview of Magento is provided in the following sections:
Magento's highly modular structure is a result of several open source technologies embedded into a stack. These open source technologies are composed of the following components:
Different pieces of technology can be glued into various architectures. There are different ways to look at the Magento architecture—from the perspective of a module developer, system integrator, or a merchant, or from some other angle.
From top to bottom, Magento can be divided into four architectural layers, namely presentation, service, domain, and persistence.
The presentation layer is the one that we directly interact with through the browser. It contains layouts, blocks, templates, and even controllers, which process commands to and from the user interface. Client-side technologies such as jQuery, RequireJS, CSS, and LESS are also a part of this layer. Usually, three types of users interact with this layer, namely web users, system administrators, and those making the Web API calls. Since the Web API calls can be made via HTTP in a manner that is the same as how a user uses a browser, there's a thin line between the two. While web users and Web API calls consume the presentation layer as it is, the system administrators have the power to change it. This change manifests in the form of setting the active theme and changing the content of the CMS (short for content management system) pages, blocks, and the products themselves.
When the components of a presentation layer are being interacted with, they usually make calls to the underlying service layer.
The service layer is the bridge between the presentation and domain layer. It contains the service contracts, which define the implementation behavior. A service contract is basically a fancy name for a PHP interface. This layer is where we can find the REST/SOAP APIs. Most user interaction on the storefront is routed through the service layer. Similarly, the external applications that make the REST/SOAP API calls also interact with this layer.
When the components of a service layer are being interacted with, they usually make calls to the underlying domain layer.
The domain layer is really the business logic of Magento. This layer is all about generic data objects and models that compose the business logic. The domain layer models themselves do not contribute to data persistence, but they do contain a reference to a resource model that is used to retrieve and persist the data to a MySQL database. A domain layer code from one module can interact with a domain module code from another module via the use of event observers, plugins, and the di.xml definitions. We will look into the details of these later on in other chapters. Given the power of plugins and di.xml, its important to note that this interaction is best established using service contracts (the PHP interface).
When the components of the domain layer are being interacted with, they usually make calls to the underlying persistence layer.
The persistence layer is where the data gets persisted. This layer is in charge of all the CRUD (short for create, read, update, and delete) requests. Magento uses an active record pattern strategy for the persistence layer. The model object contains a resource model that maps an object to one or more database rows. Here, it is important to differentiate the cases of simple resource model and the Entity-Attribute-Value (EAV) resource models. A simple resource model maps to a single table, while the EAV resource models have their attributes spread out over a number of MySQL tables. As an example, the Customer and Catalog resource models use EAV resource models, while the newsletter's Subscriber resource model uses a simple resource model.
The following list depicts the root Magento filesystem structure:
The app/etc/di.xml file is one of the most important files that we might often look into during development. It contains various class mappings or preferences for individual interfaces.
The var/magento/language-* directories is where the registered languages reside. Though each module can declare its own translations under app/code/{VendorName}/{ModuleName}/i18n/, Magento will eventually fall back to its own individual module named i18n in case translations are not found in the custom module or within the theme directory.
The bin directory is where we can find the magento file. The magento file is a script that is intended to be run from a console. Once triggered via the php bin/magento command, it runs an instance of the Magento\Framework\Console\Cli application, presenting us with quite a number of console options. We can use the magento script to enable/disable cache, enable/disable modules, run an indexer, and do many other things.
The dev directory is where we can find the Magento test scripts. We will have a look at more of those in later chapters.
The lib directory comprises two major subdirectories, namely the server-side PHP library code and fonts found under lib/internal and the client-side JavaScript libraries found in lib/web.
The pub directory is where the publicly exposed files are located. This is the directory that we should set as root when setting up Apache or Nginx. The pub/index.php file is what gets triggered when the storefront is opened in a browser.
The var directory is where the dynamically generated group type of files such as cache, log, and a few others get created in. We should be able to delete the content of this folder at any time and have Magento automatically recreate it.
The vendor directory is where most of the code is located. This is where we can find various third-party vendor code, Magento modules, themes, and language packs. Looking further into the vendor directory, you will see the following structure:
Within the vendor directory, we can find code from various vendors, such as phpunit, phpseclib, monolog, symfony, and so on. Magento itself can be found here. The Magento code is located under vendor/magento directory, listed (partially) as follows:
You will see that the further structuring of directories follows a certain naming schema, whereas the theme-* directory stores themes, the module-* directory stores modules, and the language-* directory stores registered languages.
Magento identifies itself as a highly modular platform. What this means is that there is literally a directory location where modules are placed. Let's take a peak at the individual module structure now. The following structure belongs to one of the simpler core Magento modules—the Contact module that can be found in vendor/magento/module-contact:
Even though the preceding structure is for one of the simpler modules, you can see that it is still quite extensive.
The Block directory is where the view-related block PHP classes are located.
The Controller directory is where the controller-related PHP classes are stored. This is the code that responds to the storefront POST and GET HTTP actions.
The etc directory is where the module configuration files are present. Here, we can see files such as module.xml, di.xml, acl.xml, system.xml, config.xml, email_templates.xml, page_types.xml, routes.xml, and so on. The module.xml file is an actual module declaration file. We will look into the contents of some of these files in the later chapters.
The Helper directory is where various helper classes are located. These classes are usually used to abstract various store configuration values into the getter methods.
The i18n directory is where the module translation package CSV files are stored.
The Module directory is where the entities, resource entities, collections, and various other business classes can be found.
The Test directory stores the module unit tests.
The view directory contains all the module administrator and storefront template files (.phtml and .html) and static files (.js and .css).
Finally, the registration.php is a module registration file.
In this chapter, we took a quick look at the technology stack used in Magento. We discussed how Magento, being an open source product, takes extensive use of other open source projects and libraries such as MySQL, Apache, Nginx, Zend Framework, Symfony, jQuery, and so on. We then learned how these libraries are arranged into directories. Finally, we explored one of the existing core modules and briefly took a look at an example of a module's structure.
In the next chapter, we are going to tackle the environment setup so that we can get Magento installed and ready for development.
A
