Jump to content

Edit History

YopixelAE

YopixelAE

Quote

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

CmsController.php

custom.js

YopixelAE

YopixelAE

Quote

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

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.

CmsController.php

custom.js

YopixelAE

YopixelAE

Quote

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

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 ...>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 custom.js et 2) remplissez votre page CMS.

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

CmsController.php

custom.js

YopixelAE

YopixelAE

Quote

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

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 ...>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 custom.js et 2) remplissez votre page CMS.

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

 

CmsController.php

custom.js

YopixelAE

YopixelAE

Quote

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

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' );
			
            $this->context->smarty->assign(array(
                'cms' => $cmsVar,
				'allProducts' => $allProducts
            ));

Ensuite dans votre fichier ...>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. Utilisez cet objet dans votre custom.js, en parallèle de votre édition de page CMS.

Image :

 

allProducts.jpg

×
×
  • Create New...