QuoteC'est cette partie qui me pose problème. Je suis devant mon fichier CMSController.php, par contre je n'ai aucun objet $allProducts. Est-ce à moi de l'ajouter? Si oui, peu importe l'endroit dans la feuille?
Oui vous devez l'ajouter. Ou mieux, créer un override pour faciliter la maintenance et les mises à jour.
En édition directe, ligne 116 de votre fichier CMSController.php, remplacez :
$this->setTemplate(
'cms/page',
array('entity' => 'cms', 'id' => $this->cms->id)
);
Par :
$productObj = new Product();
$id_lang = $this->context->language->id;
$allProducts = $productObj -> getProducts($id_lang, 0, 0, 'id_product', 'DESC' );
foreach ($allProducts as $key => $val) {
$id_product = $val['id_product'];
$price = Product::getPriceStatic($id_product, true, null, 6);
$allProducts[$key]['priceToDisplay'] = $price;
}
$this->context->smarty->assign(array(
'cms' => $cmsVar,
'allProducts' => $allProducts
));
if ($this->cms->indexation == 0) {
$this->context->smarty->assign('nobots', true);
}
$this->setTemplate(
'cms/page',
array('entity' => 'cms', 'id' => $this->cms->id)
);
Ensuite dans votre fichier de template ...>templates>cms>page.tpl remplacez :
{block name='page_content_container'}
Par :
{block name='page_content_container'} <script type="text/javascript"> var allProducts = {$allProducts|json_encode nofilter}; </script>
Vous disposez alors de l'objet JS de tous les produits avec leurs infos.
1) Utilisez cet objet dans votre fichier custom.js et 2) remplissez votre page CMS.
- Édition du themes>classic>assets>js>custom.js :
/* * Custom code goes here. * A template should always ship with an empty custom.js */ $(document).ready(function() { insertProductPrice(); }); function insertProductPrice() { // Loop Page $('.cmsproductprice').each(function() { // Retrieve idProduct from DOM element var el = $(this); var idProductInDOM = parseInt(el.attr('id').replace('cmsproductprice_id_', ''), 10); // Loop JS Object var lim = allProducts.length; for (var i = 0; i < lim; i++) { var item = allProducts[i]; var id_product = parseInt(item['id_product'], 10); if (id_product !== idProductInDOM) { continue; } else { var price = item['priceToDisplay']; // Insert price in DOM element el.text(price); } } }); }
- Puis édition de la page CMS via l'éditeur du back-office :
<p>PRIX : <span id="cmsproductprice_id_1" class="cmsproductprice"></span></p>
Vos prix produits s'affichent désormais dans les lignes dédiées de votre page CMS remplie depuis le back-office.