Jump to content

Prestashop 1.6 : masquer les articles CMS non traduits


Recommended Posts

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

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

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...