The `category` field can be modified to hold a comma separated list of multiple category names to contain the product; firstly however as the field is quite short the length needs to be increased with a dbmod.php script as follows:
<?php require("includes/common.php"); $sql = "DROP INDEX search_name_category_price_id ON `".$config_databaseTablePrefix."products`"; database_queryModify($sql,$result); $sql = "ALTER TABLE `".$config_databaseTablePrefix."products` CHANGE `category` `category` VARCHAR(255) NOT NULL"; database_queryModify($sql,$result); print "Done."; ?>
(run once from top level of Price Tapestry installation and then delete file)
Edit includes/admin.php and look for the following code at line 198:
Edit categories.php and look for the following code beginning at line 72:
if (database_querySelect($sql,$rows))
{
foreach($rows as $product)
{
if ($product["category"])
{
$item = array();
$item["name"] = $product["category"];
$item["href"] = tapestry_indexHREF("category",$product["category"]);
$atoz["items"][] = $item;
}
}
}
...and REPLACE with:
$allCategories = array();
if (database_querySelect($sql,$rows))
{
foreach($rows as $product)
{
$product["category"] = trim($product["category"],",");
$categories = explode(",",$product["category"]);
foreach($categories as $category)
{
$allCategories[$category] = 1;
}
}
}
ksort($allCategories);
foreach($allCategories as $category => $v)
{
if ($category)
{
$item = array();
$item["name"] = $category;
$item["href"] = tapestry_indexHREF("category",$category);
$atoz["items"][] = $item;
}
}
Edit search.php and look for the following code at line 68:
$priceWhere .= " AND category = '".database_safe($categoryFilter)."' ";
and REPLACE with:
$priceWhere .= " AND category LIKE '%,".database_safe($categoryFilter).",%' ";
Edit html/searchfilters.php and look for the following code at line 117:
foreach($rows1 as $row)
...and REPLACE with:
$newRows1 = array();
foreach($rows1 as $row)
{
$categories = explode(",",$row["category"]);
foreach($categories as $category)
{
$category = trim($category);
if ($category)
{
$newRows1[$category]["category"] = $category;
}
}
}
ksort($newRows1);
$rows1 = $newRows1;
foreach($rows1 as $row)
Finally edit admin/categories.php and look for the following code at line 16:
widget_validate("name",TRUE,"normalised");
...and REPLACE with:
widget_validate("name",TRUE,"");
This will support a category field from a feed that is already comma separated; otherwise to set multiple categories for an existing product create a new category mapping with the required multiple categories comma separated e.g.
Single Door Refrigerator,Dispenser
...and on the configuration page for the mapping enter an exact match (or as required) e.g.
Hi Tobix,
The `category` field can be modified to hold a comma separated list of multiple category names to contain the product; firstly however as the field is quite short the length needs to be increased with a dbmod.php script as follows:
<?php
require("includes/common.php");
$sql = "DROP INDEX search_name_category_price_id ON `".$config_databaseTablePrefix."products`";
database_queryModify($sql,$result);
$sql = "ALTER TABLE `".$config_databaseTablePrefix."products` CHANGE `category` `category` VARCHAR(255) NOT NULL";
database_queryModify($sql,$result);
print "Done.";
?>
(run once from top level of Price Tapestry installation and then delete file)
Edit includes/admin.php and look for the following code at line 198:
$importRecord["category"] = tapestry_normalise($importRecord["category"]);
...and REPLACE with:
$importRecord["category"] = tapestry_normalise($importRecord["category"],",");
Then look for the following comment around line 414:
/* apply category hierarchy mappings */
...and REPLACE with:
if ($importRecord["category"])
{
$importRecord["category"] = ",".$importRecord["category"].",";
}
/* apply category hierarchy mappings */
Edit categories.php and look for the following code beginning at line 72:
if (database_querySelect($sql,$rows))
{
foreach($rows as $product)
{
if ($product["category"])
{
$item = array();
$item["name"] = $product["category"];
$item["href"] = tapestry_indexHREF("category",$product["category"]);
$atoz["items"][] = $item;
}
}
}
...and REPLACE with:
$allCategories = array();
if (database_querySelect($sql,$rows))
{
foreach($rows as $product)
{
$product["category"] = trim($product["category"],",");
$categories = explode(",",$product["category"]);
foreach($categories as $category)
{
$allCategories[$category] = 1;
}
}
}
ksort($allCategories);
foreach($allCategories as $category => $v)
{
if ($category)
{
$item = array();
$item["name"] = $category;
$item["href"] = tapestry_indexHREF("category",$category);
$atoz["items"][] = $item;
}
}
Edit search.php and look for the following code at line 68:
$priceWhere .= " AND category = '".database_safe($categoryFilter)."' ";
and REPLACE with:
$priceWhere .= " AND category LIKE '%,".database_safe($categoryFilter).",%' ";
Edit html/searchfilters.php and look for the following code at line 117:
foreach($rows1 as $row)
...and REPLACE with:
$newRows1 = array();
foreach($rows1 as $row)
{
$categories = explode(",",$row["category"]);
foreach($categories as $category)
{
$category = trim($category);
if ($category)
{
$newRows1[$category]["category"] = $category;
}
}
}
ksort($newRows1);
$rows1 = $newRows1;
foreach($rows1 as $row)
Finally edit admin/categories.php and look for the following code at line 16:
widget_validate("name",TRUE,"normalised");
...and REPLACE with:
widget_validate("name",TRUE,"");
This will support a category field from a feed that is already comma separated; otherwise to set multiple categories for an existing product create a new category mapping with the required multiple categories comma separated e.g.
Single Door Refrigerator,Dispenser
...and on the configuration page for the mapping enter an exact match (or as required) e.g.
=Samsung 375L
Cheers,
David.
--
PriceTapestry.com