What interesting modules should I develop for Magento for learning?

When learning Magento there are a few stages:

Beginner

At this stage you are trying to learn the Magento file, class, and component structure.

These include:

  • XML

    Here you are learning how to change different configuration settings via the XML, some examples include, moving block positions, registering modules, and assigning new templates.

  • Blocks

    You set up custom blocks to make some business decisions, for example, showing a special icon on the frontend for specific product.

  • Models

    Here you learn how Magento accesses data from the database, and how to manipulate it in different ways, for example, getting a list of customers alphabetically.

  • Helpers

    Here you learn how to create helper classes for utility functions, for example, making a function that formats the customer names in uppercase.

  • Controllers

    Here you learn to make custom URL's that have custom functionality, for example, making a page where customers can check their 'warranty status'.

Intermediate

At this stage you are trying to learn about the different parts of Magento.

Some of these are:

  • Product

    Here you are trying to understand the different parts of a product and its attributes.

    Some examples would be:

    1) Getting and setting values to the products' attributes

    2) Getting and setting values to the products' selected options in the cart

  • Customer

    1) Getting and changing customer data

    2) Showing different views for specific users (such as for the sales team)

  • Sales - Orders

    1) Getting all products from order and their options selected by the customer

    2) Get the customer info for a given order

    3) Get all orders for a given date range

  • Backend

    1) Create custom Menu in backend

    2) Create custom tab in configuration page

    3) Store your own data in database

These are all examples, they can be totally different depending on your needs.

At this point you will find yourself browsing through Magento's core code, and trying to understand the steps Magento takes to accomplish a given task (like creating a new product).

As you can see at this point your viewing Magento more like an eCommerce framework, and by understanding better the different components, you can craft it to your will.

Advanced

At this point you are looking at Magento as a means to fulfill your clients business needs (obviously it's not imperative to feel that way, but it's a good sign).

Here are some modules that can help you think in interesting ways:

  • New Product Type

    Look around and try to see a product type that Magento doesn't support by default, and create a module that supports it.

    An example of this would be an event based product (like selling tickets to a sports game), the challenge is to allow the user to select a seat and a time, and the system would have to let them know if it's available, if not, it would let them know when the nearest available slot is.

    Part of the challenge is to make sure that the product works well in the following places:

    1) Backend - Admin should be able to enter in the necessary data (such as the sport type, cost, and number of seats available)

    2) Frontend - This information needs to be displayed to the user while shopping

    3) Cart / Checkout - User should see the sport type, seat type, number of seats, and date that he/she is buying.

    4) Orders - This information needs to be stored in the system so that owner knows what was bought

    There are more details you can add but you get the point.

  • Google Doc Product Import

    One of the more popular development areas in Magento is product importing.

    This module's goal is to import products and their data from a Google Spreadsheet, remember your client doesn't want to train their data entry worker in Magento ;)

    Here are rough idea of how it would work:

    1) Magento logs in to user's Google Drive account and looks for a file called Categories

    2) It parses the file to find all the other files in the drive it should look for (each category has a separate file)

    3) Magento goes to each category file and parses the file, each row contains one product with all of it's data

    4) Magento attempts to save the product in the database (or just the changes to the product if the product already exists), if there is an error it shows a user friendly error in the column for errors (in the spreadsheet).

  • Advanced Order Viewer / Analyser

    This module is all about seeing the orders in the backend in a business useful way. Essentially you are building a grid that can be sorted in different ways (for example: low to high, or alphabetically).

    Here are some of the features it will have:

    1) Ability to see customer associated with the order

    2) Ability to see total number of items for each order

    3) Ability to filter by date, customer, number of items ordered, and order toatal

    3) Filter will allow for multiple WHERE, AND, and OR selections (like layered navigation)

    In effect it will look like an excel spreadsheet, and the user can select which 'columns' to view, and can decide how to filter it so that they can make better business decisions.

  • Restaurant Store Module

    Another popular development area for Magento is it's integration with other systems and services.

    This module's goal is to create a take out food shopping experience, besides the need to edit / create a new product type, this needs to interface with a popular POS system, so that the client can have central management over all of their orders.

    Some other features to consider:

    1) Integration with Seamless and Grub Hub

    2) Ability for customer to see a live 'status' of their order

    3) Ability for customer to re-order their favorites

    4) Create a 'smart' incentives feature that gives percentages off to die hard customers for their favorite foods (the one's they buy the most)

As you can see, at this point it's more about understanding business needs at this point, then understanding how to change a product's attribute.

Summary

Most people do not learn in a certain order (like this post suggests), rather in certain areas they jump to advanced, while in others they might be in a beginner, or intermediate level.

No matter where you are, you can find ways to grow by coming up with challenges for that level.


Not so much ideas for modules.

It is a good idea to become familiar how checkout works.

thus: Build a payment gateway module. extend checkout and add an extra step.

also do some work around the admin area, modules generally require admin sections for clients to use. Here I don't just mean system config, but usages of grids, tabs etc.

Good Luck B-)