Product code in url

Can anyone tell me how to modify it so I can use the product code in the url?

for instance, instead of just

index.php?dispatch=products.view&product_id=5988

I could also use

index.php?dispatch=products.view&product_code=redshirt



I had a fix to this for my 1.X version but I can’t find any posts for 2.x. I have 2.12.



Thanks.

-Neil

Is there a reason why you’re not using SEO? You could then set the product code encoded into the SEO name of your choosing.

I didn’t see an option to use the product code. It only had a category/subcat/product_name option. Plus if I were to switch to that I wouldn’t want to use product code as that doesn’t help with SEO. I just want to be able to link to a product page by either product_id or product_code.

Thanks for your input.

My products are mostly named same, solution of name-1.html or similar is no good.



this is why I got mod that makes product-name-SKU.html

[quote]

I just want to be able to link to a product page by either product_id or product_code.

[/quote]

Not quite sure what you mean by wanting to “link to”. The most useful SEO name woud be the product name, not a product code and certainly not a product_id.

We track everything by the product_code, not the product_id, so when I get a list of items I need to feature in a mailing, for instance, I would like to be able to have my generic index.php?dispatch=products.view&product_code= and enter the product code there. What I have to do is search out the product_id for each of those items in order to get a link to the corresponding page. You see what I mean? If I could just use the product_code in the link it would be simpler.

Thanks.

Create the file addons/my_changes/controllers/customer/products.pre.php

Add something similar to:

```php

if( !defined('AREA') ) die('Access denied');

if( $mode == 'view' && !empty($_REQUEST['product_code']) && $_SERVER['REQUEST_METHOD'] !== 'POST') {
$pid = db_get_field("SELECT product_id FROM ?:products WHERE product_code=?s", $_REQUEST['product_code']);
if( $pid ) {
unset($_GET['product_code']);
$_GET['product_id'] = $id;
fn_redirect(fn_url("dispatch=$controller.$mode&".implode('&', $_GET)));
}
}
?>

```



This is NOT tested and is given as an example.

Thanks for the tip. That exact code didn’t seem to take but at least you’ve given me a place to start. I will post if I get it working.



Thanks again.

I got it working thanks to the code above with a couple of changes. Also I had to put this bit of code into the controllers/customer/products.php file because there was no hook in the file and don't know how to put one in yet. I put it around line 67 under the line



} elseif ($mode == 'view') {



//START

if(!empty($_REQUEST['product_code']) && $_SERVER['REQUEST_METHOD'] !== 'POST') {

$pid = db_get_field(“SELECT product_id FROM ?:products WHERE product_code=?s”, $_REQUEST['product_code']);

if( $pid ) {

unset($_GET['product_code']);

$_GET['product_id'] = $pid;

fn_redirect(fn_url(“products.view&product_id=”.$pid));

}

}



//END



I changed the $id which should have been $pid and changed the code in the fn_redirect to get it to work. Thanks for your help. So far it seems to work fine.

[font=“Verdana”]Would be nice to see an easier approach to this. Seems like to much messing around with the core files. And it would certainly fail after an update of CS-Cart… :S



There should an option in the SEO addon so that it asks in the DROP DOWN “Display Product Code in URL /PID/”, or allow for it to be used in unison with the other options in the drop down???



That would be a much better approach, and call the SEO addon “SEO v1.1” :)



Fingers crossed for an update! :)[/font]

Good day to all,



Heres my solution that so far works with 2.1.4 and older. Not tested with 2.2.x



In addons/seo/func.php add bold text


[quote]function fn_create_seo_name($object_id, $object_type, $object_name, $index = 0, $dispatch = '', $lang_code = CART_LANGUAGE)

{

//SKU MOD v1.3 by Darius 2009

if ($object_type == 'p') {

$product_data = ($_REQUEST['product_data']) ? $_REQUEST['product_data'] : fn_get_product_data($object_id, & $_SESSION['auth']);

if ($product_data) $object_name = (!empty($product_data['seo_name'])) ? $product_data['seo_name'] : (!empty($product_data['product_code'])) ? $product_data['product'] . ' ' . $product_data['product_code'] : $product_data['product'];

}




$_object_name = fn_generate_name($object_name);

if (empty($_object_name)) {

$__name = fn_get_seo_vars($object_type);

$_object_name = $__name['description'] . '-' . (empty($object_id) ? $dispatch : $object_id);

} [/quote]

[font=“Verdana”]Any idea how to resolve issues with categories going spaz?



/apparel/mens-en-2-3-4/outdoors-en-2-3-4/jackets-en-2-3-4-5-6-7-8-9-10-11-12-13-14-15-16-17-18-19-20-21.html



Heheh



There is only one /apparel/mens so why the -en and 2-3-4? Weird…

Surely it can act as a path? There is only 1 “outdoors” under “mens” so why not leave it as “outdoors”?

Seems like if you removed the -2-3-4… it would redirect you to another category with the same name?





I’m trying to merge the Product Code modifications PLUS solve a problem when multiple category names are the same… (eg. /A/B/C/example/ and /A/C/B/example-1/ and /B/A/C/example-1-2/ and /A/B/example-1-2-3/C/ and /A/example-1-2-3-4/B/C/…)



Would appreciate any “input” in to optimising the /category/category/product_code/product_name (or any variation of this…).



If anyone can suggest a paid or free addon, a modification, or anything, i’d really appreciate it ;)

Thanks![/font]

[quote name='Darius' timestamp='1315373786' post='121126']

Good day to all,



[color=#282828][font=arial, verdana, tahoma, sans-serif][size=3]function fn_create_seo_name($object_id, $object_type, $object_name, $index = 0, $dispatch = '', $lang_code = CART_LANGUAGE)[/size][/font][/color]

[color=#282828][font=arial, verdana, tahoma, sans-serif][size=3]{[/size][/font][/color]

//SKU MOD v1.3 by Darius 2009

if ($object_type == 'p') {

$product_data = ($_REQUEST['product_data']) ? $_REQUEST['product_data'] : fn_get_product_data($object_id, & $_SESSION['auth']);

if ($product_data) $object_name = (!empty($product_data['seo_name'])) ? $product_data['seo_name'] : (!empty($product_data['product_code'])) ? $product_data['product'] . ' ' . $product_data['product_code'] : $product_data['product'];

}




[color=#282828][font=arial, verdana, tahoma, sans-serif][size=3]$_object_name = fn_generate_name($object_name);[/size][/font][/color]

[color=#282828][font=arial, verdana, tahoma, sans-serif][size=3]if (empty($_object_name)) {[/size][/font][/color]

[color=#282828][font=arial, verdana, tahoma, sans-serif][size=3]$__name = fn_get_seo_vars($object_type);[/size][/font][/color]

[color=#282828][font=arial, verdana, tahoma, sans-serif][size=3]$_object_name = $__name['description'] . '-' . (empty($object_id) ? $dispatch : $object_id);[/size][/font][/color]

[color=#282828][font=arial, verdana, tahoma, sans-serif][size=3]}[/size][/font][/color]

In addons/seo/func.php add bold text

[/quote]



Dose any one know a code like this that will work with 4.3.3?