View Single Post
  #1  
Old 02-25-2010, 06:14 AM
  cflsystems's Avatar 
cflsystems cflsystems is offline
 

Veteran
  
Join Date: Apr 2007
Posts: 14,191
 

Default Auto populate featured products table

I got a little tired of manually changing featured products for categories picking products one by one, waiting on page to load, open the browse products window again and again and again.... So here is something that auto populates them with a click of a button.
This code is tested and working on 4.2.1 (no other versions tested). Use at your own risk. The code populates with products featured_products table for category 0 (that is front page) and any category with subcategories (if category doesn't have subcategories there will be no featured products selected for that category); products are selected from all active products assign to category and its subcategories. Keep in mind this was written to serve my needs so it may not work for you the way it is but feel free to adjust it any way you want.

BACKUP STORE/DATABASE FIRST

1. Open admin/categories.php and find

} elseif ($mode == "add" && intval($newproductid) > 0) {
#
# Add new featured product
#
$newavail = (!empty($newavail) ? "Y" : "N");
if ($neworder == "") {
$maxorder = func_query_first_cell("SELECT MAX(product_order) FROM $sql_tbl[featured_products] WHERE categoryid='$f_cat'");
$neworder = $maxorder + 10;
}
if (func_query_first("SELECT productid FROM $sql_tbl[products] WHERE productid='$newproductid'")) {
db_query("REPLACE INTO $sql_tbl[featured_products] (productid, product_order, avail, categoryid) VALUES ('$newproductid','$neworder','$newavail', '$f_cat')");
$top_message["content"] = func_get_langvar_by_name("msg_adm_featproducts_upd ");
}
}

and below that add

#
# Add featured products for all categories - CFL Systems
#
elseif ($mode == "add_all") {
function flatten_array($value, $key, &$array) {
if (!is_array($value))
array_push($array,$value);
else
array_walk($value, 'flatten_array', &$array);
}

db_query("DELETE FROM $sql_tbl[featured_products]"); #empty featured products table

$pr_main_cat = 4; # products for front page (categoryid 0)
$pr_sub_cats = 3; # products for each category with subcategory
$newavail = "Y";
$neworder = 0;

$temp_products = func_query("SELECT $sql_tbl[products].productid FROM $sql_tbl[products] JOIN $sql_tbl[products_categories] ON $sql_tbl[products].productid = $sql_tbl[products_categories].productid WHERE forsale='Y' AND $sql_tbl[products_categories].main = 'Y' ORDER BY RAND() LIMIT $pr_main_cat");
$new_temp_products = array();
array_walk($temp_products, 'flatten_array', &$new_temp_products);
foreach ($new_temp_products as $k=>$v) {
db_query("INSERT INTO $sql_tbl[featured_products] (productid, product_order, avail, categoryid) VALUES ('$v','$neworder','$newavail', '0')");
$neworder = $neworder + 10;
}
unset($temp_products);
unset($new_temp_products);
$temp_parent_cats = func_query("SELECT DISTINCT categoryid FROM $sql_tbl[categories_subcount] WHERE subcategory_count!='0'");
$new_temp_parent_cats = array();
array_walk($temp_parent_cats, 'flatten_array', &$new_temp_parent_cats);
foreach ($new_temp_parent_cats as $a=>$z) {
$temp_cats = func_query("SELECT categoryid FROM $sql_tbl[categories] WHERE parentid='$z'");
$new_temp_cats = array();
array_walk($temp_cats, 'flatten_array', &$new_temp_cats);
$temp_products = func_query("SELECT $sql_tbl[products].productid FROM $sql_tbl[products] LEFT JOIN $sql_tbl[products_categories] ON $sql_tbl[products].productid = $sql_tbl[products_categories].productid WHERE $sql_tbl[products].forsale='Y' AND $sql_tbl[products_categories].categoryid IN ('$z','".implode("','", $new_temp_cats)."') AND $sql_tbl[products_categories].main = 'Y' ORDER BY RAND() LIMIT $pr_sub_cats");
$new_temp_products = array();
array_walk($temp_products, 'flatten_array', &$new_temp_products);
$neworder = 0;
foreach ($new_temp_products as $c=>$d) {
db_query("INSERT INTO $sql_tbl[featured_products] (productid, product_order, avail, categoryid) VALUES ('$d','$neworder','$newavail', '$z')");
$neworder = $neworder + 10;
}
unset($temp_products);
unset($new_temp_products);
}
}

2. Open skin1/admin/main/featured_products.tpl and find

<tr>
<td colspan="4" class="SubmitBox">
<input type="submit" value="{$lng.lbl_add_new|strip_tags:false|escape}" onclick="javascript: document.featuredproductsform.mode.value = 'add'; document.featuredproductsform.submit();"/>
</td>
</tr>

and add below

<tr>
<td colspan="4" class="SubmitBox">
<input type="submit" value="Add to all categories" onclick="javascript: document.featuredproductsform.mode.value = 'add_all'; document.featuredproductsform.submit();"/>
</td>
</tr>

3. Run cleanup.php


Go to admin/categories, at the bottom just below the featured products there should be "add to all categories" button
__________________
Steve Stoyanov
CFLSystems.com
Web Development
Reply With Quote