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