PHPackages                             cqfdev/best-sellers-module - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. cqfdev/best-sellers-module

Abandoned → [thelia/best-sellers-module](/?search=thelia%2Fbest-sellers-module)Thelia-module

cqfdev/best-sellers-module
==========================

1.2.4(5y ago)11.6k3LGPL-3.0-or-laterPHP

Since Dec 4Pushed 4y ago1 watchersCompare

[ Source](https://github.com/roadster31/BestSellers)[ Packagist](https://packagist.org/packages/cqfdev/best-sellers-module)[ RSS](/packages/cqfdev-best-sellers-module/feed)WikiDiscussions master Synced 2mo ago

READMEChangelog (5)Dependencies (1)Versions (7)Used By (0)

Best Sellers
============

[](#best-sellers)

en\_US
======

[](#en_us)

This modules provides a loop which return the best (or the worst) sales.

Installation
------------

[](#installation)

Manually, or with composer :

```
composer require cqfdev/best-sellers-module:~1.0

```

Usage
-----

[](#usage)

This module shows the 4 best sales of your shop on the front page via the `home.body` hook.

You can also add where you want in your template (front or back-office), a loop `best_selling_products` to show your best or your worst sales.

In the back-office, you can see your best sales in the "Tools" menu.

Finally, the total number of sales of a product appears on the product sheet.

Update 1.2.0 : You can now choose which order statuses are taken into account to calculate your best sellers. A configuration page has been added to the module. Access it from the modules page.

Hook
----

[](#hook)

This module shows the 4 best sales of your shop on the front page via the `home.body` hook.

Loop
----

[](#loop)

The module provide the loop `best_selling_product`, which extend the loop `product`. All the arguments of the `product` loop are therefore available.

`best_selling_products` loop

### Input parameters

[](#input-parameters)

All the arguments of the loop `product` are available.

The loop offers two new values for the parameter `order` of the loop `product``

- sold\_count\_reverse : sort by number of sales in decreasing order
- sold\_count : sort by number of sales in increasing order

ArgumentDescription**start-date**The period start date to be consider. By default, january 1st 1970.**end-date**The period end date to be consider. By default, today's date.### Output variables

[](#output-variables)

All the variables of the loop `product`are available.

VariableDescription$SOLD\_QUANTITYThe quantity of sold product on the considered period$SOLD\_AMOUNTThe total amount untaxed of sales on the considered period$SALE\_RATIOThe percentage of sales on the considered period### Example

[](#example)

To get your 10 best sales of all time:

```

    {loop type="best_selling_products" name="best-sellers" limit=10 order='sold_count_reverse'}
        {$REF} : {$TITLE} : {$SOLD_QUANTITY}
    {/loop}²²

```

To get your 5 best sales of the month :

```

    {loop type="best_selling_products" name="best-sellers-this-month" order='sold_count_reverse' start_date={$smarty.now|date_format:'%Y-%m-01'} limit=5}
        {$REF} : {$TITLE} : {$SOLD_QUANTITY}
    {/loop}

```

To get your 10 worst sales of all time :

```

    {loop type="best_selling_products" name="best-sellers" limit=10 order='sold_count'}
        {$REF} : {$TITLE} : {$SOLD_QUANTITY}
    {/loop}

```

fr\_FR
======

[](#fr_fr)

Ce module vous fournit une boucle qui retourne vos meilleures (ou vos pires) ventes.

Installation
------------

[](#installation-1)

Manuellement, ou avec composer :

```
composer require cqfdev/best-sellers-module:~1.0

```

Usage
-----

[](#usage-1)

Ce module affiche les 4 meilleures ventes de votre boutique sur la page d'accueil, via le hook 'home.body'

Vous pouvez aussi ajouter où vous voulez dans votre template front office ou back-office une boucle `best_selling_products` pour afficher vos meilleures ou pires ventes.

Dans le back-office, vous pouvez voir vos meilleures ventes dans le menu "Outil".

Enfin, le nombre de ventes total d'un produit apparaît sur la fiche produit.

Update 1.2.0 : Le module permet désormais de choisir quels status de commande utiliser pour calculer vos best sellers. Une page de configuration à été ajoutée, accessible depuis la page "modules".

Hook
----

[](#hook-1)

Le module affiche les 4 meilleures ventes de votre boutique sur la page d'accueil, via le hook `home.body`

Loop
----

[](#loop-1)

Le module vous propose la boucle `best_selling_products`, qui étend la boucle `product`. Tous les arguments de la boucle `product` sont donc disponibles.

`best_selling_products` loop

### Paramètres en entrée

[](#paramètres-en-entrée)

Tous les arguments de la boucle `product` sont disponibles.

La boucle propose deux valeurs supplémentaires pour le paramètre `order` de la boucle `product`:

- sold\_count\_reverse : trier par nombre de ventes décroissantes
- sold\_count : trier par nombre de ventes croissantes

ArgumentDescription**start-date**la date de début de période à prendre en compte. Par défaut, le 1er janvier 1970.**end-date**la date de fin de période à prendre en compte. Par défaut, la date du jour.### Variables en sortie

[](#variables-en-sortie)

Toutes les variables de la boucle `product` sont disponibles.

VariableDescription$SOLD\_QUANTITYLa quantité de produit vendue sur la période considérée$SOLD\_AMOUNTLe montant total HT des ventes sur la période considérée$SALE\_RATIOLe pourcentage du CA sur la période considérée### Exemple

[](#exemple)

Pour obtenir vos 10 meilleures ventes de tous les temps :

```

    {loop type="best_selling_products" name="best-sellers" limit=10 order='sold_count_reverse'}
        {$REF} : {$TITLE} : {$SOLD_QUANTITY}
    {/loop}

```

Pour obtenir les 5 meilleures ventes du mois :

```

    {loop type="best_selling_products" name="best-sellers-this-month" order='sold_count_reverse' start_date={$smarty.now|date_format:'%Y-%m-01'} limit=5}
        {$REF} : {$TITLE} : {$SOLD_QUANTITY}
    {/loop}

```

Pour obtenir vos 10 pires ventes de tous les temps :

```

    {loop type="best_selling_products" name="best-sellers" limit=10 order='sold_count'}
        {$REF} : {$TITLE} : {$SOLD_QUANTITY}
    {/loop}

```

###  Health Score

32

—

LowBetter than 72% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity19

Limited adoption so far

Community12

Small or concentrated contributor base

Maturity65

Established project with proven stability

 Bus Factor1

Top contributor holds 76.5% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~211 days

Total

5

Last Release

1867d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/3a46ed88ee1c801d1002d3e49bbddf2f7ad82265e8f3de6f2894793190163fd6?d=identicon)[cqfdev](/maintainers/cqfdev)

---

Top Contributors

[![roadster31](https://avatars.githubusercontent.com/u/2197734?v=4)](https://github.com/roadster31 "roadster31 (13 commits)")[![Lurivar](https://avatars.githubusercontent.com/u/33634597?v=4)](https://github.com/Lurivar "Lurivar (3 commits)")[![Lucanis](https://avatars.githubusercontent.com/u/6052481?v=4)](https://github.com/Lucanis "Lucanis (1 commits)")

### Embed Badge

![Health badge](/badges/cqfdev-best-sellers-module/health.svg)

```
[![Health](https://phpackages.com/badges/cqfdev-best-sellers-module/health.svg)](https://phpackages.com/packages/cqfdev-best-sellers-module)
```

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
