french50 Posted April 27, 2023 Share Posted April 27, 2023 Bonjour, Nous disposons, pour certains articles CMS, de traductions effectuées par des professionnels. Pour d'autres contenus, nous n'avons par contre aucune traduction. Actuellement, sur les pages de catégories CMS, prestashop reprend l'ensemble des articles qu'ils soient traduits ou non. Cliquer sur un article amène à une page vierge. Est-il possible de ne lister sur les pages de catégories CMS que les articles traduits ? D'avance merci François Link to comment Share on other sites More sharing options...
Ariane Web et Plus Posted May 2, 2023 Share Posted May 2, 2023 (edited) Bonjour, Qu'est-ce que vous appelez catégories CMS ou articles CMS ? A priori, il n'y a pas de possibilité en natif de n'afficher que les éléments traduits. Edited May 2, 2023 by Ariane Web et Plus (see edit history) Link to comment Share on other sites More sharing options...
french50 Posted May 5, 2023 Author Share Posted May 5, 2023 Bonjour, J'appelle "Articles CMS" les pages CMS. Les catégories CMS sont appelées comme tel. J'ai résolu mon problème en ajoutant un champ booléen "translated" (tinyint 1) dans ma table cms. J'ai ensuite fait un override partiel de la classe CMS : class CMS extends CMSCore { public translated; public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null) { self::$definition['fields']['translated'] = array('type' => self::TYPE_BOOL, 'validate' => 'isBool'); parent::__construct($id_product, $full, $id_lang, $id_shop); } public static function getCMSPages($id_lang = null, $id_cms_category = null, $active = true, $id_shop = null) { $sql = new DbQuery(); $sql->select('*'); $sql->from('cms', 'c'); # On récupère l'ID Fr $default_id_lang = (int)Configuration::get('PS_LANG_DEFAULT'); if ($id_lang) { if ($id_shop) { $sql->innerJoin('cms_lang', 'l', 'c.id_cms = l.id_cms AND l.id_lang = '.(int)$id_lang.' AND l.id_shop = '.(int)$id_shop); } else { $sql->innerJoin('cms_lang', 'l', 'c.id_cms = l.id_cms AND l.id_lang = '.(int)$id_lang); } } if ($id_shop) { $sql->innerJoin('cms_shop', 'cs', 'c.id_cms = cs.id_cms AND cs.id_shop = '.(int)$id_shop); } if ($active) { $sql->where('c.active = 1'); } if ($id_cms_category) { $sql->where('c.id_cms_category = '.(int)$id_cms_category); } // Si la page n'est pas traduite et qu'on est pas sur la langue par défaut, ne pas la reprendre dans les pages catégories if ($id_lang && ($id_lang != $default_id_lang) ) { $sql->where('c.translated = 1'); } $sql->orderBy('position'); return Db::getInstance()->executeS($sql); } } La solution n'est pas parfait mais ça fait le job Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now