[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"theme-db":3,"megamenu":22,"$fc7HhvB7GVsiFiaYosIbZXPczj3a3WAU8EIgVPes8K7w":92,"$fKnz2vuX4bZz1LbUTiuFsvSZ3e07l5_5fqNYp4Tzdhi8":130,"header-db":198,"$fE9aVsxD7YcmXH74SkmwGBW3-pNPkcvXtlN5lD27wk-c":211,"footer-db":225},{"theme":4},{"colors":5,"typography":13,"ui":17,"defaultColorMode":21},{"primary":6,"secondary":7,"background":8,"foreground":9,"muted":10,"headerBg":11,"footerBg":12,"topBarBg":9,"topBarText":11},"#4F46E5","#0D9488","#F9FAFB","#111827","#6B7280","#ffffff","#020617",{"fontFamily":14,"fontUrl":15,"baseFontSize":16},"Inter, system-ui, sans-serif","https:\u002F\u002Ffonts.googleapis.com\u002Fcss2?family=Inter:wght@400;500;600;700&family=Playfair+Display:ital,wght@0,400;0,700;0,800;0,900;1,400;1,700&display=swap","16px",{"borderRadius":18,"contentWidth":19,"shadow":20},"lg","7xl",true,"light",{"items":23},[24,35,43,51,59,68,76,84],{"id":25,"type":26,"label":27,"href":29,"icon":30,"description":30,"badge":30,"groupTitle":30,"style":30,"gridColumns":30,"cssClass":30,"psCategoryId":30,"showPsChildren":31,"position":32,"children":33,"psChildren":34},41,"link",{"fr":28},"Expertise","\u002Fexpertise",null,false,0,[],[],{"id":36,"type":26,"label":37,"href":39,"icon":30,"description":30,"badge":30,"groupTitle":30,"style":30,"gridColumns":30,"cssClass":30,"psCategoryId":30,"showPsChildren":31,"position":40,"children":41,"psChildren":42},42,{"fr":38},"Blog","\u002Fblog",1,[],[],{"id":44,"type":26,"label":45,"href":47,"icon":30,"description":30,"badge":30,"groupTitle":30,"style":30,"gridColumns":30,"cssClass":30,"psCategoryId":30,"showPsChildren":31,"position":48,"children":49,"psChildren":50},43,{"fr":46},"Modules PrestaShop","\u002Fmodules",2,[],[],{"id":52,"type":26,"label":53,"href":55,"icon":30,"description":30,"badge":30,"groupTitle":30,"style":30,"gridColumns":30,"cssClass":30,"psCategoryId":30,"showPsChildren":31,"position":56,"children":57,"psChildren":58},44,{"fr":54},"Outils IA","\u002Foutils-ia",3,[],[],{"id":60,"type":26,"label":61,"href":63,"icon":30,"description":30,"badge":30,"groupTitle":30,"style":64,"gridColumns":30,"cssClass":30,"psCategoryId":30,"showPsChildren":31,"position":65,"children":66,"psChildren":67},45,{"fr":62},"Offre Starter ✨","\u002Foffre-starter",{"highlight":20},4,[],[],{"id":69,"type":26,"label":70,"href":72,"icon":30,"description":30,"badge":30,"groupTitle":30,"style":30,"gridColumns":30,"cssClass":30,"psCategoryId":30,"showPsChildren":31,"position":73,"children":74,"psChildren":75},46,{"fr":71},"Academy","\u002Facademy",5,[],[],{"id":77,"type":26,"label":78,"href":80,"icon":30,"description":30,"badge":30,"groupTitle":30,"style":30,"gridColumns":30,"cssClass":30,"psCategoryId":30,"showPsChildren":31,"position":81,"children":82,"psChildren":83},47,{"fr":79},"À propos","\u002Fa-propos",6,[],[],{"id":85,"type":26,"label":86,"href":88,"icon":30,"description":30,"badge":30,"groupTitle":30,"style":30,"gridColumns":30,"cssClass":30,"psCategoryId":30,"showPsChildren":31,"position":89,"children":90,"psChildren":91},48,{"fr":87},"Contact","\u002Fcontact",7,[],[],{"title":93,"slug":94,"metaDescription":95,"category":96,"tags":97,"difficulty":104,"psVersions":105,"content":109,"faq":110,"tldr":126,"readingTime":73,"generatedAt":127,"publishDate":127,"relatedArticles":128,"sourceCategory":129},"Override du CategoryController dans PrestaShop : guide complet","override-categorycontroller-prestashop-guide-complet","Apprenez à créer un override du CategoryController dans PrestaShop 1.7 et 8.x : fichier, structure, cache, bonnes pratiques et pièges à éviter.","developpement",[98,99,100,101,102,103],"override","CategoryController","contrôleur","personnalisation","cache","class_index","intermediaire",[106,107,108],"1.6","1.7","8.x","\u003Ch2>Pourquoi overrider le CategoryController ?\u003C\u002Fh2>\n\u003Cp>Le \u003Ccode>CategoryController\u003C\u002Fcode> est le contrôleur front-office responsable de l'affichage des pages catégories dans PrestaShop. Il gère le chargement des produits, la pagination, le tri, les filtres et l'injection des variables Smarty vers le template \u003Ccode>category.tpl\u003C\u002Fcode>.\u003C\u002Fp>\n\u003Cp>Overrider ce contrôleur permet de :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>Modifier la logique de récupération des produits (filtres personnalisés, tri spécifique)\u003C\u002Fli>\n\u003Cli>Ajouter des variables Smarty supplémentaires au template\u003C\u002Fli>\n\u003Cli>Personnaliser la pagination ou le nombre de produits par page\u003C\u002Fli>\n\u003Cli>Injecter des données métier spécifiques (promotions, labels, stocks)\u003C\u002Fli>\n\u003Cli>Modifier le comportement SEO (canonical, meta dynamiques)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch2>Créer l'override étape par étape\u003C\u002Fh2>\n\u003Ch3>1. Créer le fichier d'override\u003C\u002Fh3>\n\u003Cp>Le fichier doit être placé dans le dossier \u003Ccode>override\u002Fcontrollers\u002Ffront\u002F\u003C\u002Fcode> de votre installation PrestaShop :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-\">\n\u002Foverride\u002Fcontrollers\u002Ffront\u002FCategoryController.php\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>2. Structurer la classe correctement\u003C\u002Fh3>\n\u003Cp>La classe d'override doit étendre \u003Ccode>CategoryControllerCore\u003C\u002Fcode> (et non \u003Ccode>CategoryController\u003C\u002Fcode>) :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\n&lt;?php\n\u002F**\n * Override du CategoryController\n * Personnalisation de l'affichage des pages catégories\n *\u002F\nclass CategoryController extends CategoryControllerCore\n{\n    \u002F**\n     * Initialisation du contrôleur\n     *\u002F\n    public function init()\n    {\n        parent::init();\n        \u002F\u002F Votre logique d'initialisation personnalisée\n    }\n\n    \u002F**\n     * Assignation des variables Smarty\n     *\u002F\n    public function initContent()\n    {\n        parent::initContent();\n\n        \u002F\u002F Exemple : ajouter une variable personnalisée au template\n        $this-&gt;context-&gt;smarty-&gt;assign([\n            'custom_category_data' =&gt; $this-&gt;getCustomData(),\n        ]);\n    }\n\n    \u002F**\n     * Exemple de méthode personnalisée\n     *\u002F\n    protected function getCustomData()\n    {\n        \u002F\u002F Récupérer des données spécifiques à la catégorie\n        return [\n            'category_id' =&gt; $this-&gt;category-&gt;id,\n            'has_subcategories' =&gt; $this-&gt;category-&gt;getSubCategories($this-&gt;context-&gt;language-&gt;id) ? true : false,\n        ];\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch3>3. Vider le cache du class_index\u003C\u002Fh3>\n\u003Cp>C'est l'étape la plus fréquemment oubliée et la cause numéro un des overrides qui ne fonctionnent pas. PrestaShop maintient un index des classes pour optimiser l'autoloading. Après avoir créé ou modifié un override, vous devez \u003Cstrong>impérativement supprimer le fichier cache\u003C\u002Fstrong> :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">\nrm var\u002Fcache\u002Fprod\u002Fclass_index.php\nrm var\u002Fcache\u002Fdev\u002Fclass_index.php\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Sur PrestaShop 1.6, le chemin est différent :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-bash\">\nrm cache\u002Fclass_index.php\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Cp>Alternativement, vous pouvez vider le cache depuis le back-office : \u003Cstrong>Paramètres avancés → Performances → Vider le cache\u003C\u002Fstrong>.\u003C\u002Fp>\n\u003Cblockquote>\u003Cp>\u003Cstrong>Attention :\u003C\u002Fstrong> Sur PrestaShop 8.x, le système de cache Symfony ajoute une couche supplémentaire. Pensez également à vider le cache Symfony :\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Cblockquote>\u003Cp>```bash\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Cblockquote>\u003Cp>php bin\u002Fconsole cache:clear --env=prod\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Cblockquote>\u003Cp>```\u003C\u002Fp>\u003C\u002Fblockquote>\n\u003Ch2>Méthodes clés du CategoryController à connaître\u003C\u002Fh2>\n\u003Cp>Avant d'écrire votre override, il est essentiel de comprendre les méthodes principales :\u003C\u002Fp>\n\u003Ctr>\u003Cth>Méthode\u003C\u002Fth>\u003Cth>Rôle\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>`init()`\u003C\u002Fth>\u003Cth>Charge l'objet `Category`, vérifie les permissions d'accès\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>`initContent()`\u003C\u002Fth>\u003Cth>Prépare et assigne les variables Smarty (produits, pagination, sous-catégories)\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>`getTemplateVarPage()`\u003C\u002Fth>\u003Cth>Génère les métadonnées SEO de la page (PS 1.7+)\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>`getListingLabel()`\u003C\u002Fth>\u003Cth>Retourne le label de la catégorie pour le fil d'Ariane (PS 1.7+)\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>`getBreadcrumbLinks()`\u003C\u002Fth>\u003Cth>Construit le fil d'Ariane (PS 1.7+)\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ctr>\u003Cth>`getCanonicalURL()`\u003C\u002Fth>\u003Cth>Génère l'URL canonique de la page catégorie\u003C\u002Fth>\u003C\u002Ftr>\n\u003Ch2>Exemple concret : modifier le tri par défaut\u003C\u002Fh2>\n\u003Cp>Voici un cas d'usage fréquent — forcer un tri spécifique sur certaines catégories :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\n&lt;?php\nclass CategoryController extends CategoryControllerCore\n{\n    public function initContent()\n    {\n        \u002F\u002F Forcer le tri par prix croissant pour la catégorie \"Promotions\" (id 42)\n        if ((int)$this-&gt;category-&gt;id === 42) {\n            $_GET['order'] = 'product.price.asc';\n        }\n\n        parent::initContent();\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>Exemple avancé : injecter des données produit enrichies (PS 8.x)\u003C\u002Fh2>\n\u003Cp>Sur PrestaShop 8.x, le système de présentation des produits a évolué. Voici comment enrichir les données :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\n&lt;?php\n\nuse PrestaShop\\PrestaShop\\Adapter\\Presenter\\Product\\ProductListingPresenter;\n\nclass CategoryController extends CategoryControllerCore\n{\n    public function initContent()\n    {\n        parent::initContent();\n\n        \u002F\u002F Récupérer les produits déjà assignés\n        $products = $this-&gt;context-&gt;smarty-&gt;getTemplateVars('listing');\n\n        if (!empty($products['products'])) {\n            foreach ($products['products'] as &$product) {\n                \u002F\u002F Ajouter le stock réel pour affichage front\n                $product['real_stock'] = StockAvailable::getQuantityAvailableByProduct(\n                    $product['id_product']\n                );\n            }\n\n            $this-&gt;context-&gt;smarty-&gt;assign('listing', $products);\n        }\n    }\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>Bonnes pratiques et pièges à éviter\u003C\u002Fh2>\n\u003Ch3>À faire\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>**Toujours appeler `parent::method()`** dans vos méthodes overridées pour conserver le comportement natif\u003C\u002Fli>\n\u003Cli>**Tester en environnement de développement** avant de pousser en production\u003C\u002Fli>\n\u003Cli>**Documenter vos overrides** : ajoutez un commentaire en en-tête expliquant pourquoi l'override existe\u003C\u002Fli>\n\u003Cli>**Versionner vos overrides** dans Git pour garder un historique des modifications\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>À ne pas faire\u003C\u002Fh3>\n\u003Cul>\n\u003Cli>**Ne jamais modifier les fichiers core** directement (`classes\u002Fcontroller\u002FFrontController.php`, etc.)\u003C\u002Fli>\n\u003Cli>**Ne pas empiler les overrides** : un seul fichier d'override par classe est autorisé. Si un module utilise déjà un override du `CategoryController`, il y aura un conflit\u003C\u002Fli>\n\u003Cli>**Ne pas oublier le cache** : c'est la cause la plus fréquente de \"mon override ne fonctionne pas\"\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Ch3>Gestion des conflits d'overrides\u003C\u002Fh3>\n\u003Cp>Si un module a déjà un override du \u003Ccode>CategoryController\u003C\u002Fcode>, vous avez deux options :\u003C\u002Fp>\n\u003Col>\n\u003Cli>**Fusionner manuellement** les deux overrides dans un seul fichier\u003C\u002Fli>\n\u003Cli>**Utiliser un hook** à la place de l'override quand c'est possible (approche recommandée sur PS 8.x)\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Sur PrestaShop 8.x, les hooks sont souvent préférables aux overrides :\u003C\u002Fp>\n\u003Cpre>\u003Ccode class=\"language-php\">\n\u002F\u002F Dans un module, utiliser le hook actionCategoryControllerInitAfter\npublic function hookActionCategoryControllerInitAfter($params)\n{\n    \u002F\u002F Modifier le comportement sans override\n    $controller = $params['controller'];\n    \u002F\u002F ...\n}\n\u003C\u002Fcode>\u003C\u002Fpre>\n\u003Ch2>Alternative moderne : les hooks sur PrestaShop 8.x\u003C\u002Fh2>\n\u003Cp>Depuis PrestaShop 1.7.7+, le système de hooks a été enrichi avec des hooks de contrôleur automatiques. Pour chaque contrôleur front, PrestaShop déclenche :\u003C\u002Fp>\n\u003Cul>\n\u003Cli>`actionCategoryControllerInitBefore`\u003C\u002Fli>\n\u003Cli>`actionCategoryControllerInitAfter`\u003C\u002Fli>\n\u003Cli>`actionCategoryControllerInitContentBefore`\u003C\u002Fli>\n\u003Cli>`actionCategoryControllerInitContentAfter`\u003C\u002Fli>\n\u003C\u002Ful>\n\u003Cp>Ces hooks permettent d'intervenir sans créer d'override, évitant ainsi les conflits entre modules. C'est l'approche recommandée pour les nouvelles personnalisations sur PrestaShop 8.x.\u003C\u002Fp>\n\u003Ch2>Diagnostic : l'override ne fonctionne pas\u003C\u002Fh2>\n\u003Cp>Si votre override semble ignoré, vérifiez dans cet ordre :\u003C\u002Fp>\n\u003Col>\n\u003Cli>**Le fichier `class_index.php`** a bien été supprimé (voir section cache ci-dessus)\u003C\u002Fli>\n\u003Cli>**Le nom de la classe** est correct : `CategoryController extends CategoryControllerCore`\u003C\u002Fli>\n\u003Cli>**Le chemin du fichier** est correct : `override\u002Fcontrollers\u002Ffront\u002FCategoryController.php`\u003C\u002Fli>\n\u003Cli>**Le mode debug** est activé pour voir les erreurs éventuelles : dans `config\u002Fdefines.inc.php`, passez `_PS_MODE_DEV_` à `true`\u003C\u002Fli>\n\u003Cli>**Aucun autre override** ne crée de conflit (vérifiez les modules installés)\u003C\u002Fli>\n\u003Cli>**La syntaxe PHP** est valide : testez avec `php -l override\u002Fcontrollers\u002Ffront\u002FCategoryController.php`\u003C\u002Fli>\n\u003C\u002Ful>",[111,114,117,120,123],{"q":112,"a":113},"Pourquoi mon override du CategoryController ne fonctionne pas dans PrestaShop ?","La cause la plus fréquente est le cache du class_index. Après avoir créé ou modifié un override, supprimez impérativement le fichier var\u002Fcache\u002Fprod\u002Fclass_index.php (ou cache\u002Fclass_index.php sur PS 1.6). Sur PrestaShop 8.x, videz également le cache Symfony avec php bin\u002Fconsole cache:clear. Vérifiez aussi que votre classe étend bien CategoryControllerCore et que le fichier est placé dans override\u002Fcontrollers\u002Ffront\u002F.",{"q":115,"a":116},"Peut-on avoir plusieurs overrides du même contrôleur dans PrestaShop ?","Non, PrestaShop ne permet qu'un seul fichier d'override par classe. Si un module a déjà un override du CategoryController, il faut fusionner manuellement les deux dans un seul fichier, ou utiliser les hooks de contrôleur (actionCategoryControllerInitAfter, etc.) disponibles depuis PrestaShop 1.7.7+. Sur PrestaShop 8.x, les hooks sont l'approche recommandée.",{"q":118,"a":119},"Quelle est la différence entre un override et un hook pour personnaliser le CategoryController ?","Un override remplace directement une méthode du contrôleur : c'est puissant mais source de conflits si plusieurs modules veulent modifier la même classe. Un hook permet d'intervenir à des points précis du cycle de vie du contrôleur sans toucher au code source. Sur PrestaShop 8.x, les hooks automatiques de contrôleur (actionCategoryControllerInitBefore\u002FAfter) sont préférables car ils sont compatibles entre modules et plus maintenables lors des mises à jour.",{"q":121,"a":122},"Comment ajouter des variables Smarty personnalisées à la page catégorie PrestaShop ?","Créez un override du CategoryController dans override\u002Fcontrollers\u002Ffront\u002FCategoryController.php. Dans la méthode initContent(), appelez parent::initContent() puis utilisez $this->context->smarty->assign() pour injecter vos variables. Ces variables seront ensuite disponibles dans le template category.tpl de votre thème. N'oubliez pas de vider le cache class_index après avoir créé l'override.",{"q":124,"a":125},"L'override du CategoryController est-il compatible avec PrestaShop 8 ?","Oui, le mécanisme d'override fonctionne toujours sur PrestaShop 8.x. Cependant, certaines méthodes internes ont évolué, notamment le système de présentation des produits (ProductListingPresenter). Vérifiez que vos appels de méthodes sont compatibles avec la version cible. Sur PS 8.x, pensez aussi à vider le cache Symfony en plus du class_index. Pour les nouveaux développements, privilégiez les hooks de contrôleur qui sont plus robustes face aux mises à jour.","Pour overrider le CategoryController dans PrestaShop, créez le fichier override\u002Fcontrollers\u002Ffront\u002FCategoryController.php avec une classe étendant CategoryControllerCore, puis supprimez le cache class_index.php. Sur PrestaShop 8.x, les hooks de contrôleur sont une alternative plus maintenable.","2026-03-21T16:19:55.000Z",[],"PrestaShop pour les développeurs",{"columns":131},[132,144,174,190],{"title":133,"links":134},"Plateforme",[135,137,140,141],{"label":136,"href":63,"external":31},"Offre Starter (2 500 €)",{"label":138,"href":139,"external":31},"Devenir Ambassadeur","\u002Fambassadeur",{"label":46,"href":47,"external":31},{"label":142,"href":143,"external":20},"CodeMyShop.com","https:\u002F\u002Fcodemyshop.com",{"title":145,"links":146},"Le Synedre",[147,150,153,156,159,162,165,168,171],{"label":148,"href":149,"external":31},"L'histoire","\u002Fsynedre",{"label":151,"href":152,"external":31},"Constitution","\u002Fsynedre\u002Fconstitution",{"label":154,"href":155,"external":31},"L'équipe","\u002Fequipe",{"label":157,"href":158,"external":31},"Le réacteur en direct","\u002Freacteur",{"label":160,"href":161,"external":31},"Le Drill (entraînement)","\u002Fdrill",{"label":163,"href":164,"external":31},"Protocole de réunion","\u002Fsynedre\u002Freunion",{"label":166,"href":167,"external":31},"Les agents IA","\u002Fagents-ia",{"label":169,"href":170,"external":31},"La Conduite","\u002Fsynedre\u002Fconduite",{"label":172,"href":173,"external":31},"Charte plateforme","\u002Fsynedre\u002Fcharte",{"title":175,"links":176},"Ressources",[177,178,179,182,184,187],{"label":38,"href":39,"external":31},{"label":71,"href":72,"external":31},{"label":180,"href":181,"external":31},"Dictionnaire","\u002Fdictionnaire",{"label":183,"href":29,"external":31},"Expertise PrestaShop",{"label":185,"href":186,"external":31},"Flywheel","\u002Fflywheel",{"label":188,"href":189,"external":31},"Manifeste","\u002Fmanifeste",{"title":79,"links":191},[192,194,197],{"label":193,"href":80,"external":31},"Alexandre Carette",{"label":195,"href":196,"external":31},"Dossier de presse","\u002Fpresse",{"label":87,"href":88,"external":31},{"header":199},{"logo":200,"topBar":205,"contactEmail":208,"features":209,"navBar":30},{"src":201,"alt":202,"text":193,"href":203,"class":204},"\u002Flogo-ac.svg","Alexandre Carette — Architecte E-commerce Souverain","\u002F","h-10 w-10",{"message":30,"showLanguages":31,"align":206,"languages":207},"left",[],"contact@alexandrecarette.fr",{"showSearch":31,"showWishlist":31,"showLogin":20,"showContact":31,"showCart":31,"stickyHeader":20,"headerLayout":210},"inline",{"academy":212,"blog":213,"expertise":224},[],[214,218,221],{"title":215,"url":216,"score":56,"type":217},"Prestashop hosting OVH : guide complet pour e-commerçants","\u002Fblog\u002Fprestashop\u002Fperformance\u002Fprestashop-hosting-ovh-guide-complet-ecommercants","blog",{"title":219,"url":220,"score":56,"type":217},"API WebService PrestaShop : guide complet pour l'intégrer en 2026","\u002Fblog\u002Fprestashop\u002Fdeveloppement\u002Fapi-webservice-prestashop-guide-complet",{"title":222,"url":223,"score":40,"type":217},"PrestaShop headless avec Nuxt 3 : pourquoi séparer back et front","\u002Fblog\u002Fprestashop\u002Farchitecture\u002Fprestashop-headless-nuxt-separation-front-back",[],{"footer":226},{"theme":227,"description":30,"hours":30,"logo":228,"contact":229,"social":230,"bottomBar":240},"dark",{"src":201,"href":203,"alt":193},{"email":30,"phone":30,"address":30,"cta":30},[231,234,237],{"platform":232,"href":233,"label":232},"linkedin","https:\u002F\u002Fwww.linkedin.com\u002Fin\u002Falexandre-carette\u002F",{"platform":235,"href":236,"label":235},"malt","https:\u002F\u002Fwww.malt.fr\u002Fprofile\u002Falexandrecarette",{"platform":238,"href":239,"label":238},"github","https:\u002F\u002Fgithub.com\u002Fprest4cafe",{"copyright":30}]