Reference¶
The enumerable parts of this section are written from the extension's own code
by oce docs:reference, so they cannot quietly drift away from what the version
you installed actually does.
- Settings: every key, its default and what it does, beside what Loyalty fixes on purpose and why.
- The API: the two read resources an integration may call, every field on each, and what the promise covers.
- The award seam: the one call any installed extension uses to award or deduct points, its refusals and the states a movement can be in.
- What this holds about a person: every column, why it exists, and what an erasure does to it.
- Security verdict and what it costs: the baseline controls, and what Loyalty adds to each page of a store.
Where things are¶
The screen is at Extensions › Extensions › Modules › Loyalty. A store
selector at the top chooses which store's settings you are editing; the
right-hand column shows the earning commitment, what it costs and
what the store owes. Its route, which is also the
permission you grant, is extension/loyalty/module/loyalty.
The order total is at Extensions › Extensions › Order Totals › Loyalty, and holds a status and a sort order. Its shipped sort order of 2 places it before Shipping and Taxes, which is why the discount reduces tax the way a coupon does. Points never pay for postage wherever you place it, because the discount is only ever spread over the product lines.
Balances are core's. Every movement is written into OpenCart's own reward table, so it shows on the customer's Reward Points tab under Customers › Customers, and a change you make there counts at once.
The tables, all prefixed the way your store prefixes core's:
| Table | Holds |
|---|---|
loyalty_movement |
One row per movement of points: whose, how many, what for, which order, and the state it is in |
loyalty_customer |
Per customer, the part of the balance that can expire, when they last moved points, and their expiry warning |
loyalty_setting |
The copy of your settings, per store, that survives an update |
loyalty_pass |
Per store, when the scheduled pass's lock runs out |
None of them is ever dropped.
The storefront routes, which is what a customer's browser opens:
| Route | What it is |
|---|---|
account/reward |
Core's Reward Points link, served by Loyalty's page while the programme is on |
extension/loyalty/account/reward |
That page itself |
extension/loyalty/checkout/loyalty |
The points control and earn line on the cart |
extension/loyalty/cron/loyalty |
The hourly pass, reachable only by OpenCart's own scheduler or php extension/loyalty/loyalty.php from a terminal |
Movement descriptions. Each row in core's reward table carries a line of text, written once, when the movement happens, because core's table has no language column: Order #123, Order #123 reversed, *Points spent on order
123, Points returned from order #123, Welcome bonus, Birthday bonus¶
2026 and Points expired. The order, welcome and birthday lines are written in your store's default language; Points expired* is always English. Another extension awarding through the seam writes its own. Loyalty's points page does not show these lines: it labels its own rows again, in the customer's language, each time it is shown.
What a generated list cannot tell you is which of these you should change, and what happens when you do. That is guides and limits and guarantees.