Je viens d'implémenter un truc similaire pour une boutique qui ne veut gérer les stocks que pour quelques produits seulement. J'ai fait un truc très simple, avec le module Tag (https://github.com/roadster31/Tags) et un override de la classe \Thelia\Model\ProductSaleElements
En un mot, si le produit a le tag "stock-infini", alors on va renvoyer le stock "par defaut". SInon, on renvoie le stock réel. Et normalement ça suffit pour que Thelia croie que le stock est infini.
class ProductSaleElements extends BaseProductSaleElements
{
/**
* Pour un produit ou on doit checker le stock, on retourne le stock réel.
* Sinon, on retourne le 'stock par defaut'
*
* @return float
*/
public function getQuantity()
{
if (TagsQuery::create()
->filterBySource('product')
->filterBySourceId($this->getProductId())
->filterByTag('stock-infini')
->count() > 0
) {
return (float) ConfigQuery::read('default-available-stock', 100);
}
return parent::getQuantity();
}
...
Et voilà !
Mais c'est quoi un override ? C'est un moyen de surcharger une classe du core en utilisant composer.
"autoload": {
"psr-4": {
"Thelia\\": "core/lib/Thelia",
"Thelia\\Model\\": "override/Thelia/Model" <---- l'override est là !
},
"psr-0": {
"": "local/modules/"
},
"files": [
"core/bootstrap.php"
]
},
Je crée à la racine de Thelia un répertoire "override", j'y met le fichier ProductSaleElements.php dans "override/Thelia/Model".
Je fais un "composer install" dans ma console pour regénérer l'autoloader, et grande magie de PSR-4, c'est mon fichier qui sera pris en compte plutôt que celui de Thelia.
Cool non ?