Pektsekye Posted July 9, 2009 Share Posted July 9, 2009 Hi, I installed successfuly last Ultimate SEO 2-2.2d-2 by Jack mcs. Since it was not working for Buy Now button I applied change from BUY NOW Button Fix by amchstudios dated 1 Apr 2009 and now everything is working (cyrillic character conversion too, UTF-8 shop), together and compatible with Header Tags 3.1.5 and STS 4.5.8. My question is, is it possible and what code to change to have only clean product and category names in URL without ending -c-28 or -p-29 (ex. mysite.com/some_category.html instead of mysite.com/some_category-c-29.html) ? Thanks, Miodrag Hello, It is not suggested to do it because many other contributions relies on this format. If you still need it you can try to use any other seo urls contribution. Click here Stanislav Quote Link to comment Share on other sites More sharing options...
misabgd Posted July 9, 2009 Share Posted July 9, 2009 (edited) Hello, It is not suggested to do it because many other contributions relies on this format. If you still need it you can try to use any other seo urls contribution. Click here Stanislav Thanks Stanislav, I would rather not to use any other contributions than those highly verified and trusted, like all Jack_mcs and yours too (the first contribution i installed is pwa with your autoinstaller 2.14). Here is my small "contribution", Serbian character conversion array for ultimate seo urls : serbian latin: Č=>C,č=>c,Ć=>C,ć=>c,Ž=>Z,ž=>z,Š=>S,š=>s,Đ=>Dj,đ=>dj,€=>Eura serbian cyrillic: А=>A,а=>a,Б=>B,б=>b,В=>V,в=>v,Г=>G,г=>g,Д=>D,д=>d,Ђ=>Dj,ђ=>dj,Е=>E,е=>e,Ж=>Z,ж=>z,З=>Z,з=>z,И=>I,и=>i, Ј=>J,ј=>j,К=>K,к=>k,Л=>L,л=>l,Љ=>Lj,љ=>lj,М=>M,м=>m,Н=>N,н=>n,Њ=>Nj,њ=>nj,О=>O,о=>o,П=>P,п=>p,Р=>R,р=>r, С=>S,с=>s,T=>t,т=>t,Ћ=>C,ћ=>c,У=>U,у=>u,Ф=>F,ф=>f,Х=>H,х=>h,Ц=>C,ц=>c,Ч=>C,ч=>c,Џ=>Dz,џ=>dz,Ш=>S,ш=>s,€=>Eura just copy and paste in the field for character conversion. p.s. for cyrillic version first you need to change in phpmyadmin in table "configuration" field "value" from VARCHAR (255) to VARCHAR (315) or more, in order to accept all characters. And I prepare Serbian language pack (Latin and Cyrillic) to follow in a few days. Edited July 9, 2009 by misabgd Quote Link to comment Share on other sites More sharing options...
hooliead Posted July 9, 2009 Share Posted July 9, 2009 (edited) Hello, You can try to add something like gkgdktdkh785879 to the end of the .htaccess file. You site must show 500 internal server error. To be sure that the server reads it and the file name is correct. Stanislav Hi the problem was indeed that the htaccess file was not loaded, now it will be loaded and when I write something you you write above I do get a 500 error. Only now I have the problem that almost all of my images won't work in the webshop. Problem solved, this problem was becouse of I uploaded the HTACCESS file into the folder images also (don't ask me why :D, i did this without knowing) Edited July 9, 2009 by hooliead Quote Link to comment Share on other sites More sharing options...
Pektsekye Posted July 9, 2009 Share Posted July 9, 2009 Hello, Can you show the exact page url with no images because of htaccess? Stanislav Quote Link to comment Share on other sites More sharing options...
hooliead Posted July 9, 2009 Share Posted July 9, 2009 Hello, Can you show the exact page url with no images because of htaccess? Stanislav Hi Stanislav, I already edited my post, I found the problem, I uploaded the htaccess file into the folder images, now I have removed it and everyting is working. Hereby I would like to thank you VERY much for all the support you have gave me, without you I would never have find the problem!!! Quote Link to comment Share on other sites More sharing options...
multimixer Posted July 9, 2009 Share Posted July 9, 2009 Hello I'm extra happy because I succeed to make everything work fine and my url's look great now. Thank you very much Jack and Stanislav ! I use the latest Jack's version (Ultimate SEO 2-2.2d-2) I had the same issue with the "redirect loop" as posted above and only in the Greek language, not in english. Finally with uploading the seo.class.php from stanislavs autoinstaller package v2.7 everything works great. One thing that is not absolutelly clear to me is about the character conversions. On the greek version of my site I get the url ".../catalog/ανταλλακτική-μποτίλια-p-37.html" Should I change the greek characters into latin? If somebody want to do me a favor, please click here and post what you see in your browsers line? (if possible please avoid posting the domain) It will be a great help Quote My community profile | Template system for osCommerce - New: Responsive | Feedback channel Link to comment Share on other sites More sharing options...
Pektsekye Posted July 9, 2009 Share Posted July 9, 2009 Hello, Here is what I got: ανταλλακτική-μποτίλια-p-37.html The other pages of the site also work fine for me with my Firefox 3.0.11 Stanislav Quote Link to comment Share on other sites More sharing options...
teochris Posted July 9, 2009 Share Posted July 9, 2009 (edited) Hi! I have a question to anyone that knows! can i strip out the category_id or the product_id and leave only the category_name or the product_name as the url? I mean i want to convert: http://www.my_store_name.com/product_name-p-1.html to http://www.my_store_name.com/product_name.html do i have to change a rewrite rule to .htaccess or do i have to change anything in seo.class.php? Since i a have unique product names and category names i do not see any use for this info to exist in my product name! I see answers to similar question like mine to use another seo contribution, but this is not what i am looking for! I can not change the ultimate seo since i have tons of contribs in my shop after this one and i am afraid of the unistall results! Can someone point me what i have to change in order to strip out category and product id, i will first backup and check if everything works properly before i make any permanent changes! Can someone help me (us) please? Edited July 9, 2009 by teochris Quote Link to comment Share on other sites More sharing options...
Pektsekye Posted July 9, 2009 Share Posted July 9, 2009 (edited) Hi! I have a question to anyone that knows! can i strip out the category_id or the product_id and leave only the category_name or the product_name as the url? I mean i want to convert: http://www.my_store_name.com/product_name-p-1.html to http://www.my_store_name.com/product_name.html do i have to change a rewrite rule to .htaccess or do i have to change anything in seo.class.php? Since i a have unique product names and category names i do not see any use for this info to exist in my product name! I see answers to similar question like mine to use another seo contribution, but this is not what i am looking for! I can not change the ultimate seo since i have tons of contribs in my shop after this one and i am afraid of the unistall results! Can someone point me what i have to change in order to strip out category and product id, i will first backup and check if everything works properly before i make any permanent changes! Can someone help me (us) please? Hello, I can try to do it in spare time And will let you know the result Stanislav Edited July 9, 2009 by Pektsekye Quote Link to comment Share on other sites More sharing options...
teochris Posted July 9, 2009 Share Posted July 9, 2009 efxaristo poly patrida ;) Quote Link to comment Share on other sites More sharing options...
Pektsekye Posted July 9, 2009 Share Posted July 9, 2009 efxaristo poly patrida ;) Hello, 1) I installed seo urls with autoinstaller 2) I downloaded the NIMMIT: SEF 3) in the in catalog/includes/application_top.php I have found : function transform_uri($param) { $uriparts = parse_url($param); $newquery=''; $scheme = $uriparts['scheme'].'://'; if (($scheme != 'http://') && ($scheme != 'https://')) return $param; $host = $uriparts['host']; if ($host != $_SERVER['SERVER_NAME'] && $host != $_SERVER['SERVER_ADDR']) return $param; $path = $uriparts['path']; list($file,$extension) = explode('.', basename($path)); if($extension != 'php') return $param; $extension = ".html"; $host .= rtrim(dirname($path),'/'); $query = $uriparts['query']; $anchor = $uriparts['anchor']; if ($a = explode('&',$query)){ foreach ($a as $B) { list($key,$val) = split('=',$B); switch ($key) { case 'cPath': if(eregi('[_0-9]', $val)){ if($cat_arr = explode('_', $val)){ $count = false; foreach($cat_arr as $value){ $cat_Q = tep_db_query("select c.categories_id, cd.categories_name from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.categories_id = '" . $value . "' and c.categories_id = cd.categories_id"); $cat_name = tep_db_fetch_array($cat_Q); if(!$count){ $result .= $cat_name['categories_name']; $count = true; } else{ $result .= '_' . $cat_name['categories_name']; } } $cat = '/category/'. str_replace(' ' , '+' , $result); } else{ $cat = '/category/'.$val; } } else{ $cat = '/category/'.$val; } break; case 'language': $lan = $val.'/'.$path; break; case 'products_id': $name_Q = tep_db_query("select products_name from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . $val . "'"); $pro = ($t = tep_db_fetch_array($name_Q)) ? '/product/' . str_replace(" ", "_" , $t['products_name']) : '/product/'.$val; break; case 'manufacturers_id': $brand_Q = tep_db_query("select manufacturers_name from " . TABLE_MANUFACTURERS . " where manufacturers_id = '" . $val . "'"); $man = ($t = tep_db_fetch_array($brand_Q)) ? '/brand/'.str_replace(" ", "_" , $t['manufacturers_name']) : $man = '/brand/'.$val; break; case 'osCsid': if(strstr($_SERVER["HTTP_USER_AGENT"],'Mozilla')) $newquery .= $key.'='.$val.'&'; break; default: if($newquery || $key) $newquery .= $key.'='.$val.'&'; } } } if ($newquery) $newquery = '?'.rtrim($newquery,'&'); $path = ''; if(isset($man)) $path .= $man; if(isset($cat)) $path .= $cat; if(isset($pro)) $path .= $pro; ((isset($man) || isset($cat) || isset($pro))) ? $host .= '' :$host .= '/'; if($file == 'index' || $file == 'product_info'){ if((isset($man) || isset($cat) || isset($pro))) $file= ''; } if(eregi('reviews',$file)) $file = '/' . $file; return $scheme.$host.$file.$path.$extension.$newquery.$anchor; } 6) i have replaced modified by autoinstaller catalog/includes/functions/html_output.php with backuped one and modified the tep_href_link function in it: function tep_href_link($page = '', $parameters = '', $connection = 'NONSSL', $add_session_id = true, $search_engine_safe = true) { global $request_type, $session_started, $SID; if (!tep_not_null($page)) { die('</td></tr></table></td></tr></table> <font color="#ff0000"><b>Error!</b></font> <b>Unable to determine the page link! '); } if ($connection == 'NONSSL') { $link = HTTP_SERVER . DIR_WS_HTTP_CATALOG; } elseif ($connection == 'SSL') { if (ENABLE_SSL == true) { $link = HTTPS_SERVER . DIR_WS_HTTPS_CATALOG; } else { $link = HTTP_SERVER . DIR_WS_HTTP_CATALOG; } } else { die('</td></tr></table></td></tr></table> <font color="#ff0000"><b>Error!</b></font> <b>Unable to determine connection method on a link! Known methods: NONSSL SSL</b> '); } if (tep_not_null($parameters)) { $link .= $page . '?' . tep_output_string($parameters); $separator = '&'; } else { $link .= $page; $separator = '?'; } while ( (substr($link, -1) == '&') || (substr($link, -1) == '?') ) $link = substr($link, 0, -1); // Add the session ID when moving from different HTTP and HTTPS servers, or when SID is defined if ( ($add_session_id == true) && ($session_started == true) && (SESSION_FORCE_COOKIE_USE == 'False') ) { if (tep_not_null($SID)) { $_sid = $SID; } elseif ( ( ($request_type == 'NONSSL') && ($connection == 'SSL') && (ENABLE_SSL == true) ) || ( ($request_type == 'SSL') && ($connection == 'NONSSL') ) ) { if (HTTP_COOKIE_DOMAIN != HTTPS_COOKIE_DOMAIN) { $_sid = tep_session_name() . '=' . tep_session_id(); } } } if ( (SEARCH_ENGINE_FRIENDLY_URLS == 'true') && ($search_engine_safe == true) ) { while (strstr($link, '&&')) $link = str_replace('&&', '&', $link); $link = str_replace('?', '/', $link); $link = str_replace('&', '/', $link); $link = str_replace('=', '/', $link); $separator = '?'; } if (isset($_sid)) { $link .= $separator . tep_output_string($_sid); } if (SEO_ENABLED == 'true'){ $link = transform_uri($link); } return $link; } 7) i have replaced modified by autoinstaller .htaccess file with one from the NIMMIT: SEF package. And replaced RewriteBase / with RewriteBase /catalog/ because my store is installed in the catalog directory Now I have urls : catalog/category/DVD+Movies_Action.html catalog/product/The_Matrix.html But there are limitations for the NIMMIT SEF contribution: 1) You can't have two product names the same (or it will only ever show the first one) 2) You can't use any of the following charicters in you product titles, category names or manufacturers names + ' " ( I'm sure there are more that will come up) 3) You can't use any non url charicter in your product titles, category names or manufacturers names e.g. £ © ™ so I have the Not Found page error for this url: catalog/product/Microsoft_Internet_Keyboard_PS/2.html because of slash / I think also I see that on the product listing page products urls contain category name catalog/category/Hardware_Keyboards/product/Microsoft_IntelliMouse_Explorer.html I think it can be corrected in the transform_uri function if you don't like it Stanislav Quote Link to comment Share on other sites More sharing options...
multimixer Posted July 10, 2009 Share Posted July 10, 2009 Here is what I got:ανταλλακτική-μποτίλια-p-37.html The other pages of the site also work fine for me with my Firefox 3.0.11 Stanislav Thank you very much Stanislav - ευχαριστω πολυ Is there any reason to make the character conversion from greek into latin? I mean it's even better, if somebody search in google for "φ ιλτρο νερου" in greek charakters, to have exactly this in the url too (apart of meta tags and content it self), instead of having the greeklish "filt ro neroy" Am I wrong in this? Whats the purpose of the character conversion? Quote My community profile | Template system for osCommerce - New: Responsive | Feedback channel Link to comment Share on other sites More sharing options...
Pektsekye Posted July 10, 2009 Share Posted July 10, 2009 Thank you very much Stanislav - ευχαριστω πολυ Is there any reason to make the character conversion from greek into latin? I mean it's even better, if somebody search in google for "φ ιλτρο νερου" in greek charakters, to have exactly this in the url too (apart of meta tags and content it self), instead of having the greeklish "filt ro neroy" Am I wrong in this? Whats the purpose of the character conversion? Hello, I don't know. I have just tried to use Cyrillic in categories names on my test site. And got wrong urls: hardware-107810771083-c-1.html hardware-железо-c-1.html then I have replaced define('CHARSET', 'iso-8859-1'); with define('CHARSET', 'utf-8'); in two files: catalog/includes/languages/index.php catalog/admin/includes/languages/index.php And have set output W3C valid URLs (parameter string) to false in the seo urls configuration Now I have correct url with Cyrillic characters: catalog/hardware-железо-c-1.html Stanislav Quote Link to comment Share on other sites More sharing options...
multimixer Posted July 10, 2009 Share Posted July 10, 2009 I have just tried to use Cyrillic in categories names on my test site.And got wrong urls: hardware-107810771083-c-1.html hardware-железо-c-1.html then I have replaced define('CHARSET', 'iso-8859-1'); with define('CHARSET', 'utf-8'); in two files: catalog/includes/languages/index.php catalog/admin/includes/languages/index.php And have set output W3C valid URLs (parameter string) to false in the seo urls configuration Now I have correct url with Cyrillic characters: catalog/hardware-железо-c-1.html I have it the same + all files of the greek language folder set to utf-8 and I'm getting perfect and very nice greek characters W3C option is set to false, if set to true I'm getting non readable url's I'm happy that I don't have to convert the greek characters. Quote My community profile | Template system for osCommerce - New: Responsive | Feedback channel Link to comment Share on other sites More sharing options...
smic717394 Posted July 10, 2009 Share Posted July 10, 2009 I just updated to the last version and now I cannot turn off the Seo URL, nothing works any more, I tried to set the "enable Seo URLs to false, but although it stows to be false the website links are still SEO friendly, I tried Add cPath to product URLs? True, but its not been added, Add category parent to beginning of URLs? I set it to false but still the links are /category/product.html. Quote Link to comment Share on other sites More sharing options...
teochris Posted July 10, 2009 Share Posted July 10, 2009 Hello, 1) I installed seo urls with autoinstaller 2) I downloaded the NIMMIT: SEF 3) in the in catalog/includes/application_top.php I have found : function transform_uri($param) { $uriparts = parse_url($param); $newquery=''; $scheme = $uriparts['scheme'].'://'; if (($scheme != 'http://') && ($scheme != 'https://')) return $param; $host = $uriparts['host']; if ($host != $_SERVER['SERVER_NAME'] && $host != $_SERVER['SERVER_ADDR']) return $param; $path = $uriparts['path']; list($file,$extension) = explode('.', basename($path)); if($extension != 'php') return $param; $extension = ".html"; $host .= rtrim(dirname($path),'/'); $query = $uriparts['query']; $anchor = $uriparts['anchor']; if ($a = explode('&',$query)){ foreach ($a as $B) { list($key,$val) = split('=',$B); switch ($key) { case 'cPath': if(eregi('[_0-9]', $val)){ if($cat_arr = explode('_', $val)){ $count = false; foreach($cat_arr as $value){ $cat_Q = tep_db_query("select c.categories_id, cd.categories_name from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.categories_id = '" . $value . "' and c.categories_id = cd.categories_id"); $cat_name = tep_db_fetch_array($cat_Q); if(!$count){ $result .= $cat_name['categories_name']; $count = true; } else{ $result .= '_' . $cat_name['categories_name']; } } $cat = '/category/'. str_replace(' ' , '+' , $result); } else{ $cat = '/category/'.$val; } } else{ $cat = '/category/'.$val; } break; case 'language': $lan = $val.'/'.$path; break; case 'products_id': $name_Q = tep_db_query("select products_name from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . $val . "'"); $pro = ($t = tep_db_fetch_array($name_Q)) ? '/product/' . str_replace(" ", "_" , $t['products_name']) : '/product/'.$val; break; case 'manufacturers_id': $brand_Q = tep_db_query("select manufacturers_name from " . TABLE_MANUFACTURERS . " where manufacturers_id = '" . $val . "'"); $man = ($t = tep_db_fetch_array($brand_Q)) ? '/brand/'.str_replace(" ", "_" , $t['manufacturers_name']) : $man = '/brand/'.$val; break; case 'osCsid': if(strstr($_SERVER["HTTP_USER_AGENT"],'Mozilla')) $newquery .= $key.'='.$val.'&'; break; default: if($newquery || $key) $newquery .= $key.'='.$val.'&'; } } } if ($newquery) $newquery = '?'.rtrim($newquery,'&'); $path = ''; if(isset($man)) $path .= $man; if(isset($cat)) $path .= $cat; if(isset($pro)) $path .= $pro; ((isset($man) || isset($cat) || isset($pro))) ? $host .= '' :$host .= '/'; if($file == 'index' || $file == 'product_info'){ if((isset($man) || isset($cat) || isset($pro))) $file= ''; } if(eregi('reviews',$file)) $file = '/' . $file; return $scheme.$host.$file.$path.$extension.$newquery.$anchor; } 6) i have replaced modified by autoinstaller catalog/includes/functions/html_output.php with backuped one and modified the tep_href_link function in it: function tep_href_link($page = '', $parameters = '', $connection = 'NONSSL', $add_session_id = true, $search_engine_safe = true) { global $request_type, $session_started, $SID; if (!tep_not_null($page)) { die('</td></tr></table></td></tr></table> <font color="#ff0000"><b>Error!</b></font> <b>Unable to determine the page link! '); } if ($connection == 'NONSSL') { $link = HTTP_SERVER . DIR_WS_HTTP_CATALOG; } elseif ($connection == 'SSL') { if (ENABLE_SSL == true) { $link = HTTPS_SERVER . DIR_WS_HTTPS_CATALOG; } else { $link = HTTP_SERVER . DIR_WS_HTTP_CATALOG; } } else { die('</td></tr></table></td></tr></table> <font color="#ff0000"><b>Error!</b></font> <b>Unable to determine connection method on a link! Known methods: NONSSL SSL</b> '); } if (tep_not_null($parameters)) { $link .= $page . '?' . tep_output_string($parameters); $separator = '&'; } else { $link .= $page; $separator = '?'; } while ( (substr($link, -1) == '&') || (substr($link, -1) == '?') ) $link = substr($link, 0, -1); // Add the session ID when moving from different HTTP and HTTPS servers, or when SID is defined if ( ($add_session_id == true) && ($session_started == true) && (SESSION_FORCE_COOKIE_USE == 'False') ) { if (tep_not_null($SID)) { $_sid = $SID; } elseif ( ( ($request_type == 'NONSSL') && ($connection == 'SSL') && (ENABLE_SSL == true) ) || ( ($request_type == 'SSL') && ($connection == 'NONSSL') ) ) { if (HTTP_COOKIE_DOMAIN != HTTPS_COOKIE_DOMAIN) { $_sid = tep_session_name() . '=' . tep_session_id(); } } } if ( (SEARCH_ENGINE_FRIENDLY_URLS == 'true') && ($search_engine_safe == true) ) { while (strstr($link, '&&')) $link = str_replace('&&', '&', $link); $link = str_replace('?', '/', $link); $link = str_replace('&', '/', $link); $link = str_replace('=', '/', $link); $separator = '?'; } if (isset($_sid)) { $link .= $separator . tep_output_string($_sid); } if (SEO_ENABLED == 'true'){ $link = transform_uri($link); } return $link; } 7) i have replaced modified by autoinstaller .htaccess file with one from the NIMMIT: SEF package. And replaced RewriteBase / with RewriteBase /catalog/ because my store is installed in the catalog directory Now I have urls : catalog/category/DVD+Movies_Action.html catalog/product/The_Matrix.html But there are limitations for the NIMMIT SEF contribution: 1) You can't have two product names the same (or it will only ever show the first one) 2) You can't use any of the following charicters in you product titles, category names or manufacturers names + ' " ( I'm sure there are more that will come up) 3) You can't use any non url charicter in your product titles, category names or manufacturers names e.g. £ © ™ so I have the Not Found page error for this url: catalog/product/Microsoft_Internet_Keyboard_PS/2.html because of slash / I think also I see that on the product listing page products urls contain category name catalog/category/Hardware_Keyboards/product/Microsoft_IntelliMouse_Explorer.html I think it can be corrected in the transform_uri function if you don't like it Stanislav Hi Stanislav! Thanks for your instructions! Everything works fine while visitor wants the Greek language! If someone tries to change language nothing happens, he still sees Greek language! Do you have a clue what is wrong? Here is my html_output.php <?php /* $Id: html_output.php 1739 2007-12-20 00:52:16Z hpdl $ osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com Copyright (c) 2007 osCommerce Released under the GNU General Public License */ //// // The HTML href link wrapper function // Ultimate SEO URLs v2.1 // The HTML href link wrapper function function tep_href_link($page = '', $parameters = '', $connection = 'NONSSL', $add_session_id = true, $search_engine_safe = true) { global $request_type, $session_started, $SID; if (!tep_not_null($page)) { die('</td></tr></table></td></tr></table> <font color="#ff0000"><b>Error!</b></font> <b>Unable to determine the page link! '); } if ($connection == 'NONSSL') { $link = HTTP_SERVER . DIR_WS_HTTP_CATALOG; } elseif ($connection == 'SSL') { if (ENABLE_SSL == true) { $link = HTTPS_SERVER . DIR_WS_HTTPS_CATALOG; } else { $link = HTTP_SERVER . DIR_WS_HTTP_CATALOG; } } else { die('</td></tr></table></td></tr></table> <font color="#ff0000"><b>Error!</b></font> <b>Unable to determine connection method on a link! Known methods: NONSSL SSL</b> '); } if (tep_not_null($parameters)) { $link .= $page . '?' . tep_output_string($parameters); $separator = '&'; } else { $link .= $page; $separator = '?'; } while ( (substr($link, -1) == '&') || (substr($link, -1) == '?') ) $link = substr($link, 0, -1); // Add the session ID when moving from different HTTP and HTTPS servers, or when SID is defined if ( ($add_session_id == true) && ($session_started == true) && (SESSION_FORCE_COOKIE_USE == 'False') ) { if (tep_not_null($SID)) { $_sid = $SID; } elseif ( ( ($request_type == 'NONSSL') && ($connection == 'SSL') && (ENABLE_SSL == true) ) || ( ($request_type == 'SSL') && ($connection == 'NONSSL') ) ) { if (HTTP_COOKIE_DOMAIN != HTTPS_COOKIE_DOMAIN) { $_sid = tep_session_name() . '=' . tep_session_id(); } } } if ( (SEARCH_ENGINE_FRIENDLY_URLS == 'true') && ($search_engine_safe == true) ) { while (strstr($link, '&&')) $link = str_replace('&&', '&', $link); $link = str_replace('?', '/', $link); $link = str_replace('&', '/', $link); $link = str_replace('=', '/', $link); $separator = '?'; } if (isset($_sid)) { $link .= $separator . tep_output_string($_sid); } if (SEO_ENABLED == 'true'){ $link = transform_uri($link); } return $link; } //// // The HTML image wrapper function function tep_image($src, $alt = '', $width = '', $height = '', $parameters = '') { if ( (empty($src) || ($src == DIR_WS_IMAGES)) && (IMAGE_REQUIRED == 'false') ) { return false; } // alt is added to the img tag even if it is null to prevent browsers from outputting // the image filename as default $image = '<img src="' . tep_output_string($src) . '" border="0" alt="' . tep_output_string($alt) . '"'; if (tep_not_null($alt)) { $image .= ' title=" ' . tep_output_string($alt) . ' "'; } if ( (CONFIG_CALCULATE_IMAGE_SIZE == 'true') && (empty($width) || empty($height)) ) { if ($image_size = @getimagesize($src)) { if (empty($width) && tep_not_null($height)) { $ratio = $height / $image_size[1]; $width = intval($image_size[0] * $ratio); } elseif (tep_not_null($width) && empty($height)) { $ratio = $width / $image_size[0]; $height = intval($image_size[1] * $ratio); } elseif (empty($width) && empty($height)) { $width = $image_size[0]; $height = $image_size[1]; } } elseif (IMAGE_REQUIRED == 'false') { return false; } } if (tep_not_null($width) && tep_not_null($height)) { $image .= ' width="' . tep_output_string($width) . '" height="' . tep_output_string($height) . '"'; } if (tep_not_null($parameters)) $image .= ' ' . $parameters; $image .= '>'; return $image; } //// // The HTML form submit button wrapper function // Outputs a button in the selected language function tep_image_submit($image, $alt = '', $parameters = '') { global $language; $image_submit = '<input type="image" src="' . tep_output_string(DIR_WS_LANGUAGES . $language . '/images/buttons/' . $image) . '" border="0" alt="' . tep_output_string($alt) . '"'; if (tep_not_null($alt)) $image_submit .= ' title=" ' . tep_output_string($alt) . ' "'; if (tep_not_null($parameters)) $image_submit .= ' ' . $parameters; $image_submit .= '>'; return $image_submit; } //// // Output a function button in the selected language function tep_image_button($image, $alt = '', $parameters = '') { global $language; return tep_image(DIR_WS_LANGUAGES . $language . '/images/buttons/' . $image, $alt, '', '', $parameters); } //// // Output a separator either through whitespace, or with an image function tep_draw_separator($image = 'pixel_black.gif', $width = '100%', $height = '1') { return tep_image(DIR_WS_IMAGES . $image, '', $width, $height); } //// // Output a form function tep_draw_form($name, $action, $method = 'post', $parameters = '') { $form = '<form name="' . tep_output_string($name) . '" action="' . tep_output_string($action) . '" method="' . tep_output_string($method) . '"'; if (tep_not_null($parameters)) $form .= ' ' . $parameters; $form .= '>'; return $form; } //// // Output a form input field function tep_draw_input_field($name, $value = '', $parameters = '', $type = 'text', $reinsert_value = true) { global $HTTP_GET_VARS, $HTTP_POST_VARS; $field = '<input type="' . tep_output_string($type) . '" name="' . tep_output_string($name) . '"'; if ( ($reinsert_value == true) && ( (isset($HTTP_GET_VARS[$name]) && is_string($HTTP_GET_VARS[$name])) || (isset($HTTP_POST_VARS[$name]) && is_string($HTTP_POST_VARS[$name])) ) ) { if (isset($HTTP_GET_VARS[$name]) && is_string($HTTP_GET_VARS[$name])) { $value = stripslashes($HTTP_GET_VARS[$name]); } elseif (isset($HTTP_POST_VARS[$name]) && is_string($HTTP_POST_VARS[$name])) { $value = stripslashes($HTTP_POST_VARS[$name]); } } if (tep_not_null($value)) { $field .= ' value="' . tep_output_string($value) . '"'; } if (tep_not_null($parameters)) $field .= ' ' . $parameters; $field .= '>'; return $field; } //// // Output a form password field function tep_draw_password_field($name, $value = '', $parameters = 'maxlength="40"') { return tep_draw_input_field($name, $value, $parameters, 'password', false); } //// // Output a selection field - alias function for tep_draw_checkbox_field() and tep_draw_radio_field() function tep_draw_selection_field($name, $type, $value = '', $checked = false, $parameters = '') { global $HTTP_GET_VARS, $HTTP_POST_VARS; $selection = '<input type="' . tep_output_string($type) . '" name="' . tep_output_string($name) . '"'; if (tep_not_null($value)) $selection .= ' value="' . tep_output_string($value) . '"'; if ( ($checked == true) || (isset($HTTP_GET_VARS[$name]) && is_string($HTTP_GET_VARS[$name]) && (($HTTP_GET_VARS[$name] == 'on') || (stripslashes($HTTP_GET_VARS[$name]) == $value))) || (isset($HTTP_POST_VARS[$name]) && is_string($HTTP_POST_VARS[$name]) && (($HTTP_POST_VARS[$name] == 'on') || (stripslashes($HTTP_POST_VARS[$name]) == $value))) ) { $selection .= ' CHECKED'; } if (tep_not_null($parameters)) $selection .= ' ' . $parameters; $selection .= '>'; return $selection; } //// // Output a form checkbox field function tep_draw_checkbox_field($name, $value = '', $checked = false, $parameters = '') { return tep_draw_selection_field($name, 'checkbox', $value, $checked, $parameters); } //// // Output a form radio field function tep_draw_radio_field($name, $value = '', $checked = false, $parameters = '') { return tep_draw_selection_field($name, 'radio', $value, $checked, $parameters); } //// // Output a form textarea field function tep_draw_textarea_field($name, $wrap, $width, $height, $text = '', $parameters = '', $reinsert_value = true) { global $HTTP_GET_VARS, $HTTP_POST_VARS; $field = '<textarea name="' . tep_output_string($name) . '" wrap="' . tep_output_string($wrap) . '" cols="' . tep_output_string($width) . '" rows="' . tep_output_string($height) . '"'; if (tep_not_null($parameters)) $field .= ' ' . $parameters; $field .= '>'; if ( ($reinsert_value == true) && ( (isset($HTTP_GET_VARS[$name]) && is_string($HTTP_GET_VARS[$name])) || (isset($HTTP_POST_VARS[$name]) && is_string($HTTP_POST_VARS[$name])) ) ) { if (isset($HTTP_GET_VARS[$name]) && is_string($HTTP_GET_VARS[$name])) { $field .= tep_output_string_protected(stripslashes($HTTP_GET_VARS[$name])); } elseif (isset($HTTP_POST_VARS[$name]) && is_string($HTTP_POST_VARS[$name])) { $field .= tep_output_string_protected(stripslashes($HTTP_POST_VARS[$name])); } } elseif (tep_not_null($text)) { $field .= tep_output_string_protected($text); } $field .= '</textarea>'; return $field; } //// // Output a form hidden field function tep_draw_hidden_field($name, $value = '', $parameters = '') { global $HTTP_GET_VARS, $HTTP_POST_VARS; $field = '<input type="hidden" name="' . tep_output_string($name) . '"'; if (tep_not_null($value)) { $field .= ' value="' . tep_output_string($value) . '"'; } elseif ( (isset($HTTP_GET_VARS[$name]) && is_string($HTTP_GET_VARS[$name])) || (isset($HTTP_POST_VARS[$name]) && is_string($HTTP_POST_VARS[$name])) ) { if ( (isset($HTTP_GET_VARS[$name]) && is_string($HTTP_GET_VARS[$name])) ) { $field .= ' value="' . tep_output_string(stripslashes($HTTP_GET_VARS[$name])) . '"'; } elseif ( (isset($HTTP_POST_VARS[$name]) && is_string($HTTP_POST_VARS[$name])) ) { $field .= ' value="' . tep_output_string(stripslashes($HTTP_POST_VARS[$name])) . '"'; } } if (tep_not_null($parameters)) $field .= ' ' . $parameters; $field .= '>'; return $field; } //// // Hide form elements function tep_hide_session_id() { global $session_started, $SID; if (($session_started == true) && tep_not_null($SID)) { return tep_draw_hidden_field(tep_session_name(), tep_session_id()); } } //// // Output a form pull down menu function tep_draw_pull_down_menu($name, $values, $default = '', $parameters = '', $required = false) { global $HTTP_GET_VARS, $HTTP_POST_VARS; $field = '<select name="' . tep_output_string($name) . '"'; if (tep_not_null($parameters)) $field .= ' ' . $parameters; $field .= '>'; if (empty($default) && ( (isset($HTTP_GET_VARS[$name]) && is_string($HTTP_GET_VARS[$name])) || (isset($HTTP_POST_VARS[$name]) && is_string($HTTP_POST_VARS[$name])) ) ) { if (isset($HTTP_GET_VARS[$name]) && is_string($HTTP_GET_VARS[$name])) { $default = stripslashes($HTTP_GET_VARS[$name]); } elseif (isset($HTTP_POST_VARS[$name]) && is_string($HTTP_POST_VARS[$name])) { $default = stripslashes($HTTP_POST_VARS[$name]); } } for ($i=0, $n=sizeof($values); $i<$n; $i++) { $field .= '<option value="' . tep_output_string($values[$i]['id']) . '"'; if ($default == $values[$i]['id']) { $field .= ' SELECTED'; } $field .= '>' . tep_output_string($values[$i]['text'], array('"' => '"', '\'' => ''', '<' => '<', '>' => '>')) . '</option>'; } $field .= '</select>'; if ($required == true) $field .= TEXT_FIELD_REQUIRED; return $field; } //// // Creates a pull-down list of countries function tep_get_country_list($name, $selected = '', $parameters = '') { $countries_array = array(array('id' => '', 'text' => PULL_DOWN_DEFAULT)); $countries = tep_get_countries(); for ($i=0, $n=sizeof($countries); $i<$n; $i++) { $countries_array[] = array('id' => $countries[$i]['countries_id'], 'text' => $countries[$i]['countries_name']); } return tep_draw_pull_down_menu($name, $countries_array, $selected, $parameters); } //// // Creates a pull-down list for dates function tep_draw_pull_down_date($name='date', $day='', $month='', $year='', $full=false, $mnth=false, $starty=''){ if ($day=='') {$day=date('d');} if ($month=='') {$month=date('m');} if ($year=='') {$year=date('Y');} $endy=date('Y')-8; if ($starty=='') {$starty=date('Y')-1;$endy=date('Y')+2;} $named = $name . 'd'; $namem = $name . 'm'; // Array for days $days=array(); for($i=1; $i<=31; $i++){ if(strlen($i)!= 2){ $j = '0' . $i; } else { $j = $i; } $days[] = array('id' => $j, 'text' => $j); } if ($mnth) { $months = array(array('id' => '01', 'text' => TEXT_DATE_JAN), array('id' => '02', 'text' => TEXT_DATE_FEB), array('id' => '03', 'text' => TEXT_DATE_MAR), array('id' => '04', 'text' => TEXT_DATE_APR), array('id' => '05', 'text' => TEXT_DATE_MAY), array('id' => '06', 'text' => TEXT_DATE_JUN), array('id' => '07', 'text' => TEXT_DATE_JUL), array('id' => '08', 'text' => TEXT_DATE_AUG), array('id' => '09', 'text' => TEXT_DATE_SEP), array('id' => '10', 'text' => TEXT_DATE_OCT), array('id' => '11', 'text' => TEXT_DATE_NOV), array('id' => '12', 'text' => TEXT_DATE_DEC)); } else { for($i=1; $i<=12; $i++){ if(strlen($i)!= 2){ $j = '0' . $i; } else { $j = $i; } $months[] = array('id' => $j, 'text' => $j); }} for($i=$starty; $i<=$endy; $i++){ $j = $i; if ($full) { $y = $i - 2000; if(strlen($y)!= 2){ $j = '0' . $y; } else { $j = $y; } } $years[] = array('id' => $i, 'text' => $j); } $field=''; if(STORE_COUNTRY == 223 || STORE_COUNTRY == 224) { $field .= tep_draw_pull_down_menu($named, $months, $month); $field .= tep_draw_pull_down_menu($namem, $days, $day); } else { $field .= tep_draw_pull_down_menu($named, $days, $day); $field .= tep_draw_pull_down_menu($namem, $months, $month); } $field .= tep_draw_pull_down_menu($name, $years, $year); return $field; } ?> Also i would prefer not to have the words product, category etc in the url address i think this is easy done by altering .htaccess Thanks again Quote Link to comment Share on other sites More sharing options...
Pektsekye Posted July 10, 2009 Share Posted July 10, 2009 I just updated to the last version and now I cannot turn off the Seo URL, nothing works any more, I tried to set the "enable Seo URLs to false, but although it stows to be false the website links are still SEO friendly, I tried Add cPath to product URLs? True, but its not been added, Add category parent to beginning of URLs? I set it to false but still the links are /category/product.html. Hello, Can you tell the exact version numbers and the package's dates? Also tell what exactly have you done to update. Stanislav Quote Link to comment Share on other sites More sharing options...
Pektsekye Posted July 10, 2009 Share Posted July 10, 2009 Hello, Try to use modified transform_uri function: function transform_uri($param) { global $languages_id; $uriparts = parse_url($param); $newquery=''; $scheme = $uriparts['scheme'].'://'; if (($scheme != 'http://') && ($scheme != 'https://')) return $param; $host = $uriparts['host']; if ($host != $_SERVER['SERVER_NAME'] && $host != $_SERVER['SERVER_ADDR']) return $param; $path = $uriparts['path']; list($file,$extension) = explode('.', basename($path)); if($extension != 'php') return $param; $extension = ".html"; $host .= rtrim(dirname($path),'/'); $query = $uriparts['query']; $anchor = $uriparts['anchor']; if ($a = explode('&',$query)){ foreach ($a as $B) { list($key,$val) = split('=',$B); switch ($key) { case 'cPath': if(eregi('[_0-9]', $val)){ if($cat_arr = explode('_', $val)){ $count = false; foreach($cat_arr as $value){ $cat_Q = tep_db_query("select c.categories_id, cd.categories_name from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.categories_id = '" . $value . "' and c.categories_id = cd.categories_id AND cd.language_id='".(int)$languages_id."' LIMIT 1"); $cat_name = tep_db_fetch_array($cat_Q); if(!$count){ $result .= $cat_name['categories_name']; $count = true; } else{ $result .= '_' . $cat_name['categories_name']; } } $cat = '/category/'. str_replace(' ' , '+' , $result); } else{ $cat = '/category/'.$val; } } else{ $cat = '/category/'.$val; } break; case 'language': $lan = $val.'/'.$path; break; case 'products_id': $name_Q = tep_db_query("select products_name from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . $val . "' AND language_id='".(int)$languages_id."' LIMIT 1 "); $pro = ($t = tep_db_fetch_array($name_Q)) ? '/product/' . str_replace(" ", "_" , $t['products_name']) : '/product/'.$val; break; case 'manufacturers_id': $brand_Q = tep_db_query("select manufacturers_name from " . TABLE_MANUFACTURERS . " where manufacturers_id = '" . $val . "'"); $man = ($t = tep_db_fetch_array($brand_Q)) ? '/brand/'.str_replace(" ", "_" , $t['manufacturers_name']) : $man = '/brand/'.$val; break; case 'osCsid': if(strstr($_SERVER["HTTP_USER_AGENT"],'Mozilla')) $newquery .= $key.'='.$val.'&'; break; default: if($newquery || $key) $newquery .= $key.'='.$val.'&'; } } } if ($newquery) $newquery = '?'.rtrim($newquery,'&'); $path = ''; if(isset($man)) $path .= $man; if(isset($cat)) $path .= $cat; if(isset($pro)) $path .= $pro; ((isset($man) || isset($cat) || isset($pro))) ? $host .= '' :$host .= '/'; if($file == 'index' || $file == 'product_info'){ if((isset($man) || isset($cat) || isset($pro))) $file= ''; } if(eregi('reviews',$file)) $file = '/' . $file; return $scheme.$host.$file.$path.$extension.$newquery.$anchor; } Stanislav Quote Link to comment Share on other sites More sharing options...
smic717394 Posted July 10, 2009 Share Posted July 10, 2009 Hello, Can you tell the exact version numbers and the package's dates? Also tell what exactly have you done to update. Stanislav I had before 2.1something I'm not sure exactly, how do I found the version, anyway I downloaded Ultimate SEO 2-2.2d-2 from 5-Jul-2009 and override my previous seo.class.php in includes/classes/seo.class.php, that's all, in the admin i can see the extra option, but they don work I canst turn it off, or any other option will not work Quote Link to comment Share on other sites More sharing options...
Pektsekye Posted July 10, 2009 Share Posted July 10, 2009 I had before 2.1something I'm not sure exactly, how do I found the version, anyway I downloaded Ultimate SEO 2-2.2d-2 from 5-Jul-2009 and override my previous seo.class.php in includes/classes/seo.class.php, that's all, in the admin i can see the extra option, but they don work I canst turn it off, or any other option will not work Hello, You have to find your old version and uninstall it. Then install the latest again. Stanislav Quote Link to comment Share on other sites More sharing options...
teochris Posted July 10, 2009 Share Posted July 10, 2009 (edited) Hello, Try to use modified transform_uri function: function transform_uri($param) { global $languages_id; $uriparts = parse_url($param); $newquery=''; $scheme = $uriparts['scheme'].'://'; if (($scheme != 'http://') && ($scheme != 'https://')) return $param; $host = $uriparts['host']; if ($host != $_SERVER['SERVER_NAME'] && $host != $_SERVER['SERVER_ADDR']) return $param; $path = $uriparts['path']; list($file,$extension) = explode('.', basename($path)); if($extension != 'php') return $param; $extension = ".html"; $host .= rtrim(dirname($path),'/'); $query = $uriparts['query']; $anchor = $uriparts['anchor']; if ($a = explode('&',$query)){ foreach ($a as $B) { list($key,$val) = split('=',$B); switch ($key) { case 'cPath': if(eregi('[_0-9]', $val)){ if($cat_arr = explode('_', $val)){ $count = false; foreach($cat_arr as $value){ $cat_Q = tep_db_query("select c.categories_id, cd.categories_name from " . TABLE_CATEGORIES . " c, " . TABLE_CATEGORIES_DESCRIPTION . " cd where c.categories_id = '" . $value . "' and c.categories_id = cd.categories_id AND cd.language_id='".(int)$languages_id."' LIMIT 1"); $cat_name = tep_db_fetch_array($cat_Q); if(!$count){ $result .= $cat_name['categories_name']; $count = true; } else{ $result .= '_' . $cat_name['categories_name']; } } $cat = '/category/'. str_replace(' ' , '+' , $result); } else{ $cat = '/category/'.$val; } } else{ $cat = '/category/'.$val; } break; case 'language': $lan = $val.'/'.$path; break; case 'products_id': $name_Q = tep_db_query("select products_name from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . $val . "' AND language_id='".(int)$languages_id."' LIMIT 1 "); $pro = ($t = tep_db_fetch_array($name_Q)) ? '/product/' . str_replace(" ", "_" , $t['products_name']) : '/product/'.$val; break; case 'manufacturers_id': $brand_Q = tep_db_query("select manufacturers_name from " . TABLE_MANUFACTURERS . " where manufacturers_id = '" . $val . "'"); $man = ($t = tep_db_fetch_array($brand_Q)) ? '/brand/'.str_replace(" ", "_" , $t['manufacturers_name']) : $man = '/brand/'.$val; break; case 'osCsid': if(strstr($_SERVER["HTTP_USER_AGENT"],'Mozilla')) $newquery .= $key.'='.$val.'&'; break; default: if($newquery || $key) $newquery .= $key.'='.$val.'&'; } } } if ($newquery) $newquery = '?'.rtrim($newquery,'&'); $path = ''; if(isset($man)) $path .= $man; if(isset($cat)) $path .= $cat; if(isset($pro)) $path .= $pro; ((isset($man) || isset($cat) || isset($pro))) ? $host .= '' :$host .= '/'; if($file == 'index' || $file == 'product_info'){ if((isset($man) || isset($cat) || isset($pro))) $file= ''; } if(eregi('reviews',$file)) $file = '/' . $file; return $scheme.$host.$file.$path.$extension.$newquery.$anchor; } Stanislav Second test perfomed worse than the first one! Still language can not change and now i get uri in greek letters so i can not see any products - i get empty product descriptions! For time being i will stick to original SEO uri format. Maybe it would be easier to change something in seo.class.php from the following: $this->reg_anchors = array('products_id' => '-p-', 'cPath' => '-c-', 'manufacturers_id' => '-m-', 'pID' => '-pi-', 'tPath' => '-t-', 'articles_id' => '-a-', 'authors_id' => '-au-', 'products_id_review' => '-pr-', 'products_id_review_info' => '-pri-', 'info_id' => '-i-', 'faqdesk_id' => '-f-', 'faqPath' => '-fc-', 'faqdesk_reviews_id' => '-fri-', 'faqdesk_article_id' => '-fra-', 'pages_id' => '-pm-', //'pollid' => '-po-', 'newsdesk_id' => '-n-', 'newsPath' => '-nc-', 'newsdesk_reviews_id' => '-nri-', 'newsdesk_article_id' => '-nra-', 'lPath' => '-links-' ); or maybe add something like products_id='' Edited July 10, 2009 by teochris Quote Link to comment Share on other sites More sharing options...
smic717394 Posted July 10, 2009 Share Posted July 10, 2009 I had before 2.1something I'm not sure exactly, how do I found the version, anyway I downloaded Ultimate SEO 2-2.2d-2 from 5-Jul-2009 and override my previous seo.class.php in includes/classes/seo.class.php, that's all, in the admin i can see the extra option, but they don work I canst turn it off, or any other option will not work Ok, I tried this, I removed from the SQL, all the tablems from categories, i replaced the - includes/classes/seo.class.php - admin/includes/functions/general.php then i checked the files bellow to match the install instructions - admin/categories.php - includes/functions/html_output.php - includes/application_top.php - .htaccess But still the same. Is not working, its always enabled. Quote Link to comment Share on other sites More sharing options...
Pektsekye Posted July 10, 2009 Share Posted July 10, 2009 Ok, I tried this, I removed from the SQL, all the tablems from categories, i replaced the - includes/classes/seo.class.php - admin/includes/functions/general.php then i checked the files bellow to match the install instructions - admin/categories.php - includes/functions/html_output.php - includes/application_top.php - .htaccess But still the same. Is not working, its always enabled. Hello, But you didn't find your old version and didn't uninstall it. Maybe you have some extra code from your old contribution that is not in the files that you checked. Stanislav Quote Link to comment Share on other sites More sharing options...
smic717394 Posted July 10, 2009 Share Posted July 10, 2009 Hello, But you didn't find your old version and didn't uninstall it. Maybe you have some extra code from your old contribution that is not in the files that you checked. Stanislav Ok, I found the problem, when I installed the new one the seo.class.php creates new fields inside the table configuration and also leave the old ones too, so it had the old ones where it was enabled and also created new, I thought it will just add the extra field. But its working fine now. Thank you for the help. Just a quick question please the new one has the option Add category parent to beginning of URLs? so the link will be /category/product.html and this is cool because i have the page in English and Spanish and this will eliminate some of the duplicate pages, but my pages are indexed as /product.html, is this a problem, if I add the categories in front would I lose all the index pages? Also for the spanish links the "Output W3C valid URLs (parameter string)?" creates some strange characters, is this ok? Quote Link to comment Share on other sites More sharing options...
smic717394 Posted July 11, 2009 Share Posted July 11, 2009 Hi, I need a bit of advice please. Would you guys recommend adding the category parent to beginning of URL or not? How is more search engine friendly? My links are currently index without the category in front if I do enable the "Add category parent to beginning of URLs?" would i loose all my indexed links? Thanks Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.