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
- Service Contract statt Helper - jede Kernaktion läuft über ein Interface (
PointsLedgerRepositoryInterface,RewardRepositoryInterface,PointsManagementInterface,RewardRedemptionManagementInterface). - ViewModel statt Block - außer wo Magento eine feste Basisklasse erzwingt (Widget, Page-Builder-Content-Type, Zahlungs-/Versandart-Blöcke, Produkttyp).
addFieldToFilter()undaddAttributeToFilter()immer in Array-Form, nie mit nacktem Skalar.CustomerRepositoryInterface::getCustomAttribute()/setCustomAttribute()stattgetData()/setData()für alle Punktestand-Änderungen.try/catch (\Throwable)um jedensales_order_place_after-Observer, damit ein Fehler nie den Checkout-Request selbst zum Absturz bringt.- Soll-Ist-Reconciliation statt direkter Zähler, überall dort, wo dasselbe Event mehrfach feuern kann (Gutschrift-Speichern, Cronjob-Wiederholung).
module.xml-sequencenur dort ergänzt, wo Schema oder Data Patch tatsächlich eine fremde Tabelle berühren - nie pauschal für jede Laufzeit-Integration.- Ein einziger Service Contract, drei Oberflächen - Storefront, REST und GraphQL rufen dieselbe Implementierung auf, nie drei parallele Kopien derselben Logik.
- Bewusst dokumentierte, nicht behobene Restrisiken (Race Conditions) statt stillschweigend ignorierter Lücken.
- 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.