Magento 2 Experten — Hyvä Theme, Tailwind CSS & SEO aus einer Hand ›

Spickzettel: alle 32 Modul-Bereiche auf einen Blick

Spickzettel: alle 32 Modul-Bereiche auf einen Blick

~7 Min. Lesezeit Zuletzt aktualisiert am 9. August 2026

Kein neuer Inhalt mehr - nur Verdichtung. Dieses Kapitel ist die eine Seite, auf die man in der eigenen Praxis zurückgreift, wenn die Frage lautet "in welchem Kapitel stand noch mal, wie...": zuerst der komplette, finale Dateibaum des Moduls nach allen zwölf Blöcken, dann alle 32 Bereiche mit ihrem jeweiligen Kapitel-Verweis in derselben Reihenfolge wie in der Projekt-Spezifikation.

Der komplette Dateibaum

Der komplette Mironsoft_Loyalty-Dateibaum nach allen 12 Blöcken (106 Kapitel)

app/code/Mironsoft/Loyalty/
├── registration.php                                          (Kapitel 2)
├── etc/
│   ├── module.xml                                            (Kapitel 2/11/19/20/22, sequence)
│   ├── acl.xml                                               (Kapitel 6/9/16/80)
│   ├── di.xml                                                (Kapitel 6/38/39/41/62/79/86/88)
│   ├── events.xml                                            (Kapitel 30/31/63/76)
│   ├── crontab.xml                                           (Kapitel 32)
│   ├── cache.xml                                             (Kapitel 8)
│   ├── config.xml                                            (Kapitel 7/32/62/66)
│   ├── db_schema.xml                                         (Kapitel 3/11/63)
│   ├── extension_attributes.xml                              (Kapitel 22/79)
│   ├── payment.xml                                           (Kapitel 62)
│   ├── product_types.xml                                     (Kapitel 72)
│   ├── webapi.xml                                            (Kapitel 80/81)
│   ├── widget.xml                                            (Kapitel 56/57)
│   ├── schema.graphqls                                       (Kapitel 82/83)
│   ├── adminhtml/system.xml                                  (Kapitel 7/32)
│   ├── frontend/routes.xml                                   (Kapitel 46)
│   ├── frontend/di.xml                                       (Kapitel 46)
│   ├── frontend/sections.xml                                 (Kapitel 84)
│   └── pagebuilder/content_type.xml                          (Kapitel 59)
├── Api/
│   ├── PointsLedgerRepositoryInterface.php                   (Kapitel 6)
│   ├── PointsManagementInterface.php                         (Kapitel 80)
│   ├── RewardRepositoryInterface.php                         (Kapitel 79)
│   ├── RewardRedemptionManagementInterface.php               (Kapitel 81)
│   └── Data/ (PointsLedger/PointsSummary/Reward/RewardSearchResults/RewardRedemptionResult-Interface)
├── Block/PageBuilder/PointsBanner.php                        (Kapitel 59)
├── Console/Command/RecalculatePointsCommand.php              (Kapitel 9)
├── Controller/
│   ├── Router.php                                           (Kapitel 46)
│   ├── History/Index.php                                    (Kapitel 45)
│   ├── Catalog/Index.php, Catalog/View.php                   (Kapitel 49)
│   ├── Redeem/Index.php                                     (Kapitel 50)
│   ├── Ajax/ApplyPoints.php                                  (Kapitel 63)
│   └── Adminhtml/Reward/Index.php                           (Kapitel 16)
├── Cron/ExpirePoints.php                                    (Kapitel 33)
├── CustomerData/PointsBalance.php                           (Kapitel 84)
├── Helper/EmailPointsHelper.php                             (Kapitel 44)
├── i18n/de_DE.csv, en_US.csv                                (Kapitel 89/90)
├── Logger/Logger.php, Handler.php                           (Kapitel 34)
├── Model/
│   ├── PointsLedger.php, PointsLedgerRepository.php         (Kapitel 4/6)
│   ├── Reward.php, RewardRepository.php, Data/Reward.php    (Kapitel 12/79)
│   ├── PointsManagement.php                                 (Kapitel 80)
│   ├── RewardRedemptionManagement.php                       (Kapitel 81)
│   ├── Cache/Type/LoyaltyCatalog.php                        (Kapitel 8)
│   ├── Carrier/FreeShippingByPoints.php                     (Kapitel 66/67)
│   ├── Config/LoyaltyConfig.php                             (Kapitel 7)
│   ├── Config/LoyaltyFeatureFlagsConfigType.php + Source/   (Kapitel 88)
│   ├── Customer/Attribute/Backend/LoyaltyTierBackend.php    (Kapitel 26/35)
│   ├── Erp/CompanyMultiplierPreference.php                  (Kapitel 41)
│   ├── Payment/PointsRedemptionConfigProvider.php + AvailabilityHandler.php (Kapitel 62/64)
│   ├── Product/Type/PointsPackage.php + Price.php           (Kapitel 73)
│   ├── RateLimiter/RedemptionRateLimiter.php                (Kapitel 86)
│   ├── Resolver/PointsSummary.php, RewardCatalog.php, RedeemLoyaltyReward.php, DataProvider/RewardCatalog.php (Kapitel 82/83)
│   ├── ResourceModel/PointsLedger(/Collection).php          (Kapitel 4/31)
│   ├── ResourceModel/Reward(/Collection).php                (Kapitel 12/15)
│   ├── Reward/Source/RewardType.php                         (Kapitel 14)
│   ├── Service/PointsCalculator.php                         (Kapitel 5)
│   ├── Service/CategoryBonusResolver.php                    (Kapitel 27)
│   ├── Source/LoyaltyTier.php                               (Kapitel 24)
│   ├── Util/PointsFormatter.php                             (Kapitel 44)
│   └── Widget/PointsBalanceWidget.php                       (Kapitel 56/57)
├── Observer/
│   ├── AwardPointsOnOrderPlaced.php                         (Kapitel 30)
│   ├── ReversePointsOnCreditmemoSave.php                    (Kapitel 31)
│   ├── RedeemPointsOnOrderPlaced.php                        (Kapitel 63/67)
│   └── CreditPurchasedPointsPackageOnOrderPlaced.php        (Kapitel 76)
├── Plugin/
│   ├── PointsLedger/Validate.../Cache.../LimitLedgerListResultPlugin.php (Kapitel 38)
│   ├── Checkout/ApplyPointsRedemptionToTotalsPlugin.php     (Kapitel 39)
│   ├── Company/AddLoyaltyTierOverridePlugin.php             (Kapitel 22)
│   └── Api/ThrottleRewardRedemptionPlugin.php               (Kapitel 86)
├── Setup/Patch/Data/ (12 Patches, Abhängigkeitsgraph in Kapitel 99)
├── Test/Unit/... , Test/Integration/...                     (Kapitel 91-93)
├── ViewModel/PointsBalance.php, PointsHistory.php, RewardCatalog.php, RewardDetail.php (Kapitel 47-50)
├── view/adminhtml/ (ui_component/*, web/js+template/content-type/points-banner/*) (Kapitel 16/22/59/60/74)
└── view/frontend/ (layout/*, templates/*, web/js+template/payment/*)         (Kapitel 46/51-53/57/59/65/75/84)

app/etc/loyalty_flags.php                                     (Kapitel 88, außerhalb des Moduls)
.gitlab-ci.yml                                                (Kapitel 95, Projekt-Root)

Alle 32 Bereiche mit Kapitel-Verweis

  • Api - Kapitel 79-81
  • Block - Kapitel 47
  • Cache - Kapitel 8
  • Category Attribute - Kapitel 20
  • Company Attribute - Kapitel 22
  • Configuration Type - Kapitel 88
  • Console Command - Kapitel 9
  • Controller - Kapitel 45, 50
  • Crongroup - Kapitel 32
  • Cronjob - Kapitel 33
  • Customer Attribute - Kapitel 21
  • Customer(Section) Data - Kapitel 84
  • EAV Entity - Kapitel 10-18
  • EAV Attribute (custom) - Kapitel 13-14
  • GraphQL Endpoint - Kapitel 82-83
  • Helper - Kapitel 44
  • Language - Kapitel 89-90
  • Model - Kapitel 4
  • Observer/Event - Kapitel 29-31, 35-36
  • Page Builder Content Type - Kapitel 58-60
  • Payment Method - Kapitel 62-65
  • Plugin - Kapitel 38-39
  • Preference/Rewrite - Kapitel 40-42
  • Product Attribute - Kapitel 19
  • Product Type - Kapitel 71-78
  • Router - Kapitel 46
  • Sales Attribute - Kapitel 23
  • Shipping Method - Kapitel 66-69
  • System/Config/Setting - Kapitel 7
  • Unit Test - Kapitel 91-95
  • ViewModel - Kapitel 48
  • Widget - Kapitel 55-57

Die zehn wiederkehrenden Muster dieser Serie

  1. Service Contract statt Helper - jede Kernaktion läuft über ein Interface (PointsLedgerRepositoryInterface, RewardRepositoryInterface, PointsManagementInterface, RewardRedemptionManagementInterface).
  2. ViewModel statt Block - außer wo Magento eine feste Basisklasse erzwingt (Widget, Page-Builder-Content-Type, Zahlungs-/Versandart-Blöcke, Produkttyp).
  3. addFieldToFilter() und addAttributeToFilter() immer in Array-Form, nie mit nacktem Skalar.
  4. CustomerRepositoryInterface::getCustomAttribute()/setCustomAttribute() statt getData()/setData() für alle Punktestand-Änderungen.
  5. try/catch (\Throwable) um jeden sales_order_place_after-Observer, damit ein Fehler nie den Checkout-Request selbst zum Absturz bringt.
  6. Soll-Ist-Reconciliation statt direkter Zähler, überall dort, wo dasselbe Event mehrfach feuern kann (Gutschrift-Speichern, Cronjob-Wiederholung).
  7. module.xml-sequence nur dort ergänzt, wo Schema oder Data Patch tatsächlich eine fremde Tabelle berühren - nie pauschal für jede Laufzeit-Integration.
  8. Ein einziger Service Contract, drei Oberflächen - Storefront, REST und GraphQL rufen dieselbe Implementierung auf, nie drei parallele Kopien derselben Logik.
  9. Bewusst dokumentierte, nicht behobene Restrisiken (Race Conditions) statt stillschweigend ignorierter Lücken.
  10. PHPDoc auf jeder Klasse und Methode, declare(strict_types=1), Constructor Property Promotion - ausnahmslos, über alle 106 Kapitel hinweg.

Mit diesem Spickzettel in der Hinterhand bleibt nur noch ein einziges Kapitel - der Abschluss dieser 106 Kapitel umfassenden Serie.