Jump to content

Afficher Le Contenu D'une Page Cms


Recommended Posts

Bonjour,

 

Je cherche en vain à insérer simplement le contenu d'une page CMS dans un template en faisant par exemple appel à son ID.

Ex : Je souhaite récupérer le texte d'une page CMS pour l'insérer dans le footer.

 

J'ai trouvé ici une piste de ce genre :

$cms = new CMS(7, intval($cookie->id_lang));
  if (Validate::isLoadedObject($cms)) {
   $smarty->assign('contenu_cms', $cms->content);
  }

Mais en prestashop 1.6, cela semble ne rien donner.

 

Une idée ?

Merci pour vos infos

Edited by Herve.B (see edit history)
Link to comment
Share on other sites

Merci pour la réponse Prestaspirit.

 

Avec la méthode citée, rien ne s'affiche. Pour ce qui est de la variable $cookie, l'idée est de mettre basiquement mon contenu dans le template du footer sur toutes les pages. (J'imagine que la variable $cookie est présente par inclusion ?...)

 

J'imagine que ce code que vous proposez est à mettre dans footer.php.

Et que dois-je mettre dans footer.tpl ?

Edited by Herve.B (see edit history)
Link to comment
Share on other sites

Merci Clean Presta pour ta réponse.

 

Non, je ne développe pas des modules - il m'arrive d'en dupliquer de simple pour les modifier...

Mais tout de même, devoir créer un module pour afficher le contenu d'une page !!!

 

Je serais partant pour une solution bien plus immédiate, du type de Prestaspirit, mais pour l'instant ça ne donne encore rien.

 

Sans blague, c'est si difficile que ça d'afficher le contenu d'une page CMS où bon nous semble ?!

 

D'autres idées ?

Link to comment
Share on other sites

C'est pas difficile de récupérer le contenu d'une page et cms et de l'afficher, le problème c'est que tu mélange les variables php et smarty, d'ailleurs tu nous dit pas ou est-ce que tu travail, dans qu'elle fichier ?

Si tu ajoute le code que je t'ai mis dans un tpl c'est sur que ça marchera pas, le code que je t'es donné c'est du php qui permet de récupérer le contenu d'une page cms, il est à placer dans le controller de la page sur laquelle tu veut l'afficher, dans le ProductController.php par exemple pour afficher sur les page produit


Tu met ça dans le controller

$this->context->smarty->assign(array('cms_content', CMS::getCMSContent(7)));

et ça dans le tpl correspondant au controller

 {$cms_content}

Ca c'est la solution dégueulasse, à l'arrache, la solution de clean-presta à le mérite de ne pas toucher au core de prestashop et de créer moins de problème dans l'avenir pour ta boutique.

Link to comment
Share on other sites

Merci de ton retour.

 

Comme je le disais, je souhaite que ce contenu cms soit sur toutes les pages, donc je travaille sur le template footer.tpl et sur le fichier php de ce que je pense être le controller associé footer.php

Je vais essayer ton code du jour qui est un peu différent des précédentes propositions.

 

Si cette procédure n'est pas propre pour l'objectif visé, on m’ôtera pas de l'idée alors que c'est "complexe" d'afficher un simple contenu cms si il faut pour ça en passer par la création d'un module !

Link to comment
Share on other sites

Merci clean-presta, cela marche très bien :-)

 

Pour la précédente proposition de Prestaspirit, je ne travaillais sans doute pas avec le bon fichier controller : je travaillais avec le template mon-site/themes/mon-theme/footer.tpl et le fichier mon-site/footer.php qui n'est pas un controller je pense ! Mais j'ai essayé aussi avec des php pour le coup dans mon-site/controllers/ et ça n'afiichait rien non plus :-(

 

Bref, ta solution marche très bien clean-presta.

 

En quoi, dans le cas d'une mise à jour, je perdrai la solution que tu me proposes, puisque tout le code est renseigné dans mon template ?

 

De plus, que peut-on reprocher à ta solution ?

Elle n'est pas élégante, elle est gourmande en ressource ?

 

Merci pour vos avis

Link to comment
Share on other sites

Pour une petite modif utilisateur c'est la meilleur solution, il y a un seul fichier d'impacté et comme c'est pas un tpl du theme par defaut ce seras pas écrasé en cas de mise à jour. 

 

Juste les 2 paramétres true dans la methode getCMSContent ne servent à rien, il faut passer l'id lang et l'id shop en 2eme et 3eme paramètres, mettre des true est inutile même erroné puisque si ça vaut true le méthode n'iras pas chercher toute seul les bonnes valeurs

 

<?php

    public static function getCMSContent($id_cms, $id_lang = null, $id_shop = null)
    {
        if (is_null($id_lang)) {
            $id_lang = (int)Configuration::get('PS_LANG_DEFAULT');
        }
        if (is_null($id_shop)) {
            $id_shop = (int)Configuration::get('PS_SHOP_DEFAULT');
        }

        $sql = '
			SELECT `content`
			FROM `'._DB_PREFIX_.'cms_lang`
			WHERE `id_cms` = '.(int)$id_cms.' AND `id_lang` = '.(int)$id_lang.' AND `id_shop` = '.(int)$id_shop;

        return Db::getInstance()->getRow($sql);
    }
Edited by Prestaspirit (see edit history)
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...