Jump to content

Show added product field in cart


Recommended Posts



I added a new field to my product class and need to access this field in the cart template (product line). Unfortunately I don't understand how to override/extend the Cart.php (?) properly to get that new field.


What I've done so far:


I added a product field "packing_unit_for_groups" via overriding Product.php:

Class Product extends ProductCore
    public $packing_unit_for_groups;
    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, Context $context = null)
        self::$definition['fields']['packing_unit_for_groups'] = array('type' => self::TYPE_INT, 'shop' => true, 'validate' => 'isUnsignedInt');
        parent::__construct($id_product, $full, $id_lang, $id_shop, $context);

With my custom module I can save/retrieve data from this new field in the database (in table 'ps_product').


In the Template product.tpl I've access to that new field thanks to the following code in my module:

public function prepareNewTab()
		'packing_unit' => $this->getCustomField((int)Tools::getValue('id_product')),

public function getCustomField($id_product)
	$result = Db::getInstance()->getValue('SELECT packing_unit_for_groups FROM '._DB_PREFIX_.'product WHERE id_product = ' . (int)$id_product);
	return (int)$result;

Now I'm stuck at the cart because I have no clue how/where to override. I guess I need to extend the "public function getProducts" in the Cart.php but don't know how?! I just want to get my new field in the shopping-cart-product-line.tpl.


In my product.tpl I can get the new field with {$product->packing_unit_for_groups} but in the shopping cart the {$product} does not include my new field.


I appreciate any help! Thanks!

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

Ok, I got it a little further. 


If I add my new database column to the getProducts function in the Cart.php, it works. Now it looks like that:

		// Build SELECT
		$sql->select('cp.`id_product_attribute`, p.`packing_unit_for_groups`, cp.`id_product`, cp.`quantity` AS cart_quantity, cp.id_shop, pl.`name`, p.`is_virtual`,
						pl.`description_short`, pl.`available_now`, pl.`available_later`, product_shop.`id_category_default`, p.`id_supplier`,
						p.`id_manufacturer`, product_shop.`on_sale`, product_shop.`ecotax`, product_shop.`additional_shipping_cost`,
						product_shop.`available_for_order`, product_shop.`price`, product_shop.`active`, product_shop.`unity`, product_shop.`unit_price_ratio`,
						stock.`quantity` AS quantity_available, p.`width`, p.`height`, p.`depth`, stock.`out_of_stock`, p.`weight`,
						p.`date_add`, p.`date_upd`, IFNULL(stock.quantity, 0) as quantity, pl.`link_rewrite`, cl.`link_rewrite` AS category,
						CONCAT(LPAD(cp.`id_product`, 10, 0), LPAD(IFNULL(cp.`id_product_attribute`, 0), 10, 0), IFNULL(cp.`id_address_delivery`, 0)) AS unique_id, cp.id_address_delivery,
						product_shop.advanced_stock_management, ps.product_supplier_reference supplier_reference, IFNULL(sp.`reduction_type`, 0) AS reduction_type');

Can somebody explain to me, how to override that class with as less duplicated code as possible? In the moment I'm overriding the whole function (getProducts).

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