
Hi this tutorial teach you how to add multiple product fields on zen cart.
Any changes to existing code or completely new code are shown in red (watch out for , too).
So lets gets started...
So lets gets started...
- Create a new table to hold your additional fields and give it a name i.e.products_extra_stuff and add the products_id field (so we can relate our new table to the existing products table) and whatever fields you wish to add i.e. products_colour
- Open includes/database_tables.php and add your new table to the list of definitions i.e.define('TABLE_PRODUCTS_EXTRA_STUFF', DB_PREFIX . 'products_extra_stuff');
- Open admin/includes/modules/product/preview_info.php and change the following lines:
(line 26 for me)
p.products_sort_order, pdex.products_colour
from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS_EXTRA_STUFF . " pdex
where p.products_id = pd.products_id and p.products_id = pdex.products_id - Open admin/includes/modules/product/collect_info.php and change the following lines :
(line 12 for me)
$parameters = array('products_name' => '',
'products_description' => '',
…
'master_categories_id' => '',
'products_colour' => ''
);
(now line 60 for me after the above edit)
p.products_price_sorter, p.master_categories_id, pdex.products_colour
from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " .
TABLE_PRODUCTS_EXTRA_STUFF . " pdex
where p.products_id = '" . (int)$_GET['pID'] . "'
and p.products_id = pd.products_id and p.products_id = pdex.products_id - In the same file (collect_info.php) insert your form fields to collect your new data along with the rest:
(line 305 for me as I wanted to insert just below product name)
<!-- BOF - Additional field added -->
<tr>
<td class="main"><?php echo 'Colour '; ?></td>
<td class="main"><?php echo zen_draw_separator('pixel_trans.gif', '24', '13') . ' ' .
zen_draw_input_field('products_colour', $pInfo->products_colour, zen_set_field_length(TABLE_PRODUCTS_EXTRA_STUFF, 'products_colour')); ?></td>
</tr>
<!-- EOF - Additional field added --> - Open admin/includes/modules/update_product.php and add the following lines to process both new products and the editing of existing ones:
(line 153 for me)
////////////// MY ADDED FIELDS ////////////////////
$sql_data_array = array('products_colour' => zen_db_prepare_input($_POST['products_colour']));
if ($action == 'insert_product') {
$insert_sql_data = array('products_id' => $products_id);
$sql_data_array = array_merge($sql_data_array, $insert_sql_data);
zen_db_perform(TABLE_PRODUCTS_EXTRA_STUFF, $sql_data_array);
} elseif ($action == 'update_product') {
zen_db_perform(TABLE_PRODUCTS_EXTRA_STUFF, $sql_data_array, 'update', "products_id = '" . (int)$products_id . "'");
}
///////////////////////////////////////////// - In order to make the data from your new field(s) available to add to the product page openinludes/modules/pages/product_info/main_template_vars.php and change the following lines:
(line 55 for me)
p.products_discount_type, p.products_discount_type_from, p.products_sort_order,
p.products_price_sorter, pdex.products_colour
from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd, " . TABLE_PRODUCTS_EXTRA_STUFF . " pdex
where p.products_status = '1'
and p.products_id = '" . (int)$_GET['products_id'] . "'
and pd.products_id = p.products_id and p.products_id = pdex.products_id
(line 101 for me amongst products name, model and description)
$products_colour = $product_info->fields['products_colour']; - To display the data from your new field(s) openincludes/templates/YOUR_TEMPLATE/templates/tpl_product_info_display.php and add something similar to the following:
(place wherever you wish your new field to be displayed)
<!--bof Product Colour -->
<?php
if ($products_colour != '') {
?>
<div id="productColour" class="productGeneral"><strong>Colour: </strong><?php echo $products_colour; ?></div>
<?php
}
?>
<!--eof Product Colour --> - We also need to ensure the extra fields are deleted from the products_extra_stuff table when we delete a product. Open admin/includes/functions/general.php and search for 'function zen_remove_product' (line 1203 for me)
- At the end of that function and just after the following code:
$db->Execute("delete from " .
TABLE_PRODUCTS_DISCOUNT_QUANTITY . "
where products_id = '" . (int)$product_id . "'");
(line 1276 for me)
Add the following on a new line:
$db->Execute("delete from " . TABLE_PRODUCTS_EXTRA_STUFF . "
where products_id = '" . (int)$product_id . "'");
Make sure you add this before the closing '}' of the function (line 1279 for me before the edit). - And finally, if you already have products in your products table, we need to create a matching record for each in the new table. If you miss this step you will find that when you edit existing products and add a value to your new field, it won't be saved! You can only skip this step if you don't have any products in your products table yet i.e. a new installation.
In phpmyadmin or mysql command line, enter one of the following queries:
For a default value:
INSERT products_extra_stuff (products_id, products_colour) SELECT products_id, 'your default value here' FROM products
For no default value:
INSERT products_extra_stuff (products_id, products_colour) SELECT products_id, '' FROM products
thanks for sharing this post.. :) Zen Cart Tutorial For Beginners
ReplyDelete