Jump to content

Création de plusieurs pages catégories. [Résolu]


Recommended Posts

Bonjour tout le monde :) Je cherche à faire quelque chose et je ne sais pas si c'est possible.

En gros chaque page catégorie de mon site a toujours exactement la même structure (comme tous les sites prestashop).

J'ai dans mon site plusieurs catégories et j'aimerais partir à chaque fois de quelque chose de vierge et y mettre ce que je veux. Je pensais par exemple dans le categorie.tpl, mettre quelque chose comme "si id category=xxx alors code xxx, si id category=yyy alors code yyy".

Ca me semble un peu bourrin et je me demande si le mieux ne serait pas de créer plusieurs fichiers tpl. Mais dans ce cas, comment les appeler en fonction de l'id category.

Merci beaucoup pour votre aide, je suis seul sur mon projet, je galère un peu et mettre en place cela me tenait beaucoup à coeur.

Merci encore :)

Edited by OhMyWatch! (see edit history)
Link to comment
Share on other sites

Tu as effectivement la possibilité de jouer avec des conditions Smarty dans category.tpl et/ou product-list.tpl pour gérer des affichages différents selon la catégorie.

 

Ou sinon tu modifies le CategoryController.php (en override bien sûr) pour attribuer des templates différents en fonction de la catégorie.

Dans ce cas il faut que tu regardes du côté de la fonction initContent().

 

Avec des conditions du style 

if($this->category->id === xxx){
  $this->setTemplate(_PS_THEME_DIR_.'category_xxx.tpl');
}
else{
  $this->setTemplate(_PS_THEME_DIR_.'category.tpl');
}

Tu pourras indiquer quel template utilisé en fonction de la catégorie.

Link to comment
Share on other sites

Ok merci beaucoup ! je suis loin d'être un expert donc pour être sûr de ne pas faire de betises, dis moi si j'ai bien compris : 

- je crée 2 fichiers tpl dans le dossier du thème : xx.tpl yy.tpl. Avec par exemple xx pour la catégorie 1 et yy pour la catégorie 2

- et dans CategoryController.php j'écris : 

if($this->category->id === 1){
$this->setTemplate(_PS_THEME_DIR_.'xx.tpl');
}
else{
$this->setTemplate(_PS_THEME_DIR_.'yy.tpl');
}

 

C'est bien ça ? Par contre pas trop compris l'histoire de l'ovveride...

Link to comment
Share on other sites

Alors j'ai créé dans le dossier override/controllers/front, un fichier CategoryController.php.

Dedans j'ai mis le code : 

 

<?php

public function initContent() 

if($this->category->id === 14){
$this->setTemplate(_PS_THEME_DIR_.'pop.tpl');
}
if($this->category->id === 64){
$this->setTemplate(_PS_THEME_DIR_.'elegance.tpl');
}

?>

Pourtant rien ne se passe... Tu saurais me dire d'où vient l'erreur ? Merci beaucoup pour ton aide :)

Link to comment
Share on other sites

Ton fichier devrait plutôt ressembler à quelque chose comme ça 

<?php 
class CategoryController extends CategoryControllerCore
{

    public function initContent()
    {
        parent::initContent();

        if($this->category->id === 1){
          $this->setTemplate(_PS_THEME_DIR_.'category_1.tpl');
        }
        elseif($this->category->id === 2){
          $this->setTemplate(_PS_THEME_DIR_.'category_2.tpl');
        }
        else{
          $this->setTemplate(_PS_THEME_DIR_.'category.tpl');
        }

        if (!$this->customer_access) {
            return;
        }

        if (isset($this->context->cookie->id_compare)) {
            $this->context->smarty->assign('compareProducts', CompareProduct::getCompareProducts((int)$this->context->cookie->id_compare));
        }

        // Product sort must be called before assignProductList()
        $this->productSort();

        $this->assignScenes();
        $this->assignSubcategories();
        $this->assignProductList();

        $this->context->smarty->assign(array(
            'category'             => $this->category,
            'description_short'    => Tools::truncateString($this->category->description, 350),
            'products'             => (isset($this->cat_products) && $this->cat_products) ? $this->cat_products : null,
            'id_category'          => (int)$this->category->id,
            'id_category_parent'   => (int)$this->category->id_parent,
            'return_category_name' => Tools::safeOutput($this->category->name),
            'path'                 => Tools::getPath($this->category->id),
            'add_prod_display'     => Configuration::get('PS_ATTRIBUTE_CATEGORY_DISPLAY'),
            'categorySize'         => Image::getSize(ImageType::getFormatedName('category')),
            'mediumSize'           => Image::getSize(ImageType::getFormatedName('medium')),
            'thumbSceneSize'       => Image::getSize(ImageType::getFormatedName('m_scene')),
            'homeSize'             => Image::getSize(ImageType::getFormatedName('home')),
            'allow_oosp'           => (int)Configuration::get('PS_ORDER_OUT_OF_STOCK'),
            'comparator_max_item'  => (int)Configuration::get('PS_COMPARATOR_MAX_ITEM'),
            'suppliers'            => Supplier::getSuppliers(),
            'body_classes'         => array($this->php_self.'-'.$this->category->id, $this->php_self.'-'.$this->category->link_rewrite)
        ));
    }


}
?>

Attention ! C'est un 1er jet, je n'ai pas testé donc je ne t'assure pas qu'il n'y aura pas de bug ou d'effets de bords.

C'est pour te mettre sur la voie.

Link to comment
Share on other sites

Merci beaucoup pour ta réponse, mais je suis loin d'être un expert et je n'aurais pas été capable de modifier le code pour qu'il fonctionne. J'ai néanmoins trouvé une solution, peut-être bourrine, certes, mais dans category.tpl j'ai mis :

{include file="$tpl_dir./errors.tpl"}

{if ($id_category == XX) }
{include file="$tpl_dir./XX.tpl"}


{elseif ($id_category == YY) }
{include file="$tpl_dir./YY.tpl"}

{else}
{include file="$tpl_dir./category2.tpl"}

{/if}

Du coup si la catégorie est XX on charge le fichier XX si c'est YY on charge YY sinon, on charge le tpl normal. Du coup j'ai créé un category2.tpl avec le code du tpl normal.

Et ça marche. Merci encore d'avoir pris le temps de me répondre :)

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...