blackcat91 Posted July 8, 2004 Share Posted July 8, 2004 This worked before, both for people who were uploading products to a subdirectory using the product edit/new product page and for people who were ftp'ing the image to the server after specifying that location on the screen. The sample osCommerce database has its images in subdirectories of the images directory so I have to assume that what we are doing is supported. Do you have any idea why this would stop working all of a sudden. Also, do you know what variable is holding the name of the image that you type into the screen (so we can at least try to come up with a workaround to this until it is resolved)? So far in our debugging, nothing we echo out to the screen shows the value we have typed into the screen. Thanks! Link to comment Share on other sites More sharing options...
Harald Ponce de Leon Posted July 8, 2004 Share Posted July 8, 2004 Technically what I described above is how it is meant to work. Here is the code in admin/categories.php that handles the file upload: ? ? ? ?$products_image = new upload('products_image'); ? ? ? ?$products_image->set_destination(DIR_FS_CATALOG_IMAGES); ? ? ? ?if ($products_image->parse() && $products_image->save()) { ? ? ? ? ?$products_image_name = $products_image->filename; ? ? ? ?} else { ? ? ? ? ?$products_image_name = (isset($HTTP_POST_VARS['products_previous_image']) ? $HTTP_POST_VARS['products_previous_image'] : ''); ? ? ? ?} The form element for the product image is of type FILE, not of type INPUT, and is the reason why there is a button next to it so that a file can be selected for upload. This form field element is called "products_image" and is available in the $HTTP_POST_FILES variable as $HTTP_POST_FILES["products_image"]. The osCommerce file upload class takes care of managing the uploaded file, and sets the destination directory to DIR_FS_CATALOG_IMAGES, which is normally the catalog/images/ directory. Technically it should not be possible to provide a sub directory, as the file upload class takes the name of the uploaded file and appends it to the defined destination, so it becomes something like this: DIR_FS_CATALOG_IMAGES + $products_image->filename ($products_image is the instance of the file upload class) Here is some documentation on the file upload class: http://www.oscommerce.info/kb/osCommerce/D...opers/Classes/9 , osCommerce Link to comment Share on other sites More sharing options...
Harald Ponce de Leon Posted July 8, 2004 Share Posted July 8, 2004 Currently, the only place where the destination can be selected is when editing or creating a new banner. There you have the option of uploading a new banner, defining its destination, or defining an already existing image on the server. Whereas on the product edit page, you currently only have the option to upload an image which gets stored in DIR_FS_CATALOG_IMAGES. This is also in regard to a stock osCommerce installation with no contributions installed. (Paul, your installation didn't look like it had contributions installed) , osCommerce Link to comment Share on other sites More sharing options...
Harald Ponce de Leon Posted July 8, 2004 Share Posted July 8, 2004 I just checked the PHP 4.3.7 changelog and came across the following bug fix: http://bugs.php.net/bug.php?id=28456 If that plays a role, then yes, defining a subdirectory on the product edit page has been a fluke :) Here is the 4.3.7 changelog, though no other changes seem to be of interest to this problem: http://www.php.net/ChangeLog-4.php#4.3.7 , osCommerce Link to comment Share on other sites More sharing options...
blackcat91 Posted July 9, 2004 Share Posted July 9, 2004 Ok, now that we know it was a fluke, I have a couple of questions: 1. The sample database came with images in subdirectories - how was this accomplished - is there a contribution? 2. Assuming there is not a contribution, how would you suggest we alter the admin side to allow the use of subdirectories while not affecting the catalog side (meaning that we keep the data stored the same way it is now with both the subdir and image name in the products_image field)? Thanks! Link to comment Share on other sites More sharing options...
dvdvideo Posted July 9, 2004 Share Posted July 9, 2004 Hi Harold Thanks for the investigation :) Well two things , yes I do have contributions, HTML area, CVV, NZ Bank deposit , Center Shop are some of them. So with regards to PHP, and OSC is there a way you can impliment being able to specify a subdirectory in the future. I have over 6000 items and dont want all my images in one folder called images. Will you please add the option to do this your already huge work load :) I am sure it will be a huge help to many. Kind regards Paul Fahey Link to comment Share on other sites More sharing options...
Harald Ponce de Leon Posted July 9, 2004 Share Posted July 9, 2004 It is possible to define subdirectories for product images - but so far only manually when editing the products.products_image field value (which is why there are products in subdirectories as standard). There is no way to do it in the Administration Tool though and is a current limitation that will be fixed in the next release. Here are some code changes for admin/categories.php that will allow you to define a subdirectory. It is untested though should work if my mighty powers still function at 3AM in the morning correctly, and hope someone can spice it up and forward it to the Tips and Tricks forum channel :) Line 315, change from: $products_image->set_destination(DIR_FS_CATALOG_IMAGES); to: $products_image->set_destination(DIR_FS_CATALOG_IMAGES . $HTTP_POST_VARS['products_image_destination']); Line 317, change from: $products_image_name = $products_image->filename; to: $products_image_name = $HTTP_POST_VARS['products_image_destination'] . $products_image->filename; After lines 562-565, add: ? ? ? ? ?<tr> ? ? ? ? ? ?<td class="main">Image Destination Directory</td> ? ? ? ? ? ?<td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . DIR_FS_CATALOG_IMAGES . tep_draw_input_field('products_image_destination'); ?></td> ? ? ? ? ?</tr> Please note that this is only for uploading new images, not for defining existing images, and that the directory must be writeable (there is no error checking here for the subcategory). The subdirectory value must also end with a / Hope that helps! [Edited post to reflect line 317] , osCommerce Link to comment Share on other sites More sharing options...
blackcat91 Posted July 9, 2004 Share Posted July 9, 2004 My version of categories.php is a little different than that (version 1.14) but I changed the product image upload code to be similar to the category image upload code (which looks like what you have in your suggested changes below) so the changes would work. Now I am again able to enter an image name and directory and either upload it using the product edit screen OR ftp it over after specifying the directory and filename. Much appreciated!!! Link to comment Share on other sites More sharing options...
dvdvideo Posted July 9, 2004 Share Posted July 9, 2004 Harold your a damn champion Thank you , that works fab Kindest regards Paul Link to comment Share on other sites More sharing options...
DavidR Posted July 15, 2004 Share Posted July 15, 2004 Harold, I'm somewhat confused, as the problem I described that began roughly the first week or two in June (coinciding with PHP 4.3.7 upgrade) has nothing to do with subdirectories as I don't use them for images. No changes had been made in the osC code on that site for months, and it was working properly a week prior. My earlier posts in this thread describe it in detail. I'm at a dead end debugging this (perhaps at least for my skills). Something has definitely changed but since I don't know what for sure, I'm not able to fix it with any assurance. Thanks for any input. David Link to comment Share on other sites More sharing options...
kepa Posted July 15, 2004 Share Posted July 15, 2004 I've been having the same problem for months (if I understand correctly). I cannot specify/upload an image from the add product page in admin. It doesn't get stored. When trying to "change" an image for an existing product, it either does nothing to the record (old image) or if it is an existing image that I'm adding, it changes the image to a blank file with 0k and naturally any product using that same image shows up with red x images. I've become used to adding the product through admin without an image and then going to the database and entering the image there. Don't have time to fuss with it. Easy populate works okay when adding images, but for some reason the admin add/edit product pages just don't work for me. Link to comment Share on other sites More sharing options...
DavidR Posted July 15, 2004 Share Posted July 15, 2004 Yes, there is definitely something to this. I wonder if people who don't do a lot of product edits/adds should go try to upload a pic and see what happens. This might show it is more widespread still. David Link to comment Share on other sites More sharing options...
dvdvideo Posted July 15, 2004 Share Posted July 15, 2004 Have you tried deleting the image file on the server first before uploading your new one. That has worked for me in the past when I couldnt over write the existing file 0k Cheers Paul Link to comment Share on other sites More sharing options...
Guest Posted July 27, 2004 Share Posted July 27, 2004 thanks hpdl, really helped me in sorting my product images. :) Great work mate! Link to comment Share on other sites More sharing options...
benfiesta Posted August 2, 2004 Share Posted August 2, 2004 thanks! the define cat mod worked fine! Link to comment Share on other sites More sharing options...
JOshGoodman Posted August 7, 2004 Share Posted August 7, 2004 :( Hi all, I am having the same problem. It just happened, I am sure of it. I Cannot change or insert new images. I have tried all the suggestions above. Still stuck. If I cant fix this, my boss will go nuts. His business relies on it. I have emailed my tech support crew where the site is hosted aswell. I am panicking a bit. My site is at: www.lambley.com.au/catalog Thanks, Josh. Link to comment Share on other sites More sharing options...
Guest Posted September 7, 2004 Share Posted September 7, 2004 :o So it's a fluke in the latest release.... How do I get the existing product images to show. There is way too many to do manually. The code patch that you give for new images is fine? But is there a fix for the existing images... Last Tuesday, Sept 1, my isp move my sites to another site... the database connection didn't work and something went south with the isp auto installer...bottom line the store opening... has been on hold for a week now. At this point my name is on the owner's list in pencil... Help! How do I get these 500 plus images to show? thanks in advance Link to comment Share on other sites More sharing options...
dvdvideo Posted September 7, 2004 Share Posted September 7, 2004 whats the url? did you do a back up of the database? did they actually move all the jpg files into the new site directory and have you set the permissions to 777? tell me what the url is for one of the images? cheers Paul Link to comment Share on other sites More sharing options...
Guest Posted September 7, 2004 Share Posted September 7, 2004 Hi Paul, thank you for replying... the answers is yes, yes, yes, however, it is not working... I even tried indexing the product images in the database... I can see them... in the base that is... What's up... I've been searching the forum and all the community resources for a quick fix to this problem... Only to find that a number of people are all having a very similar problem, images not appear on an update or new install. This may simply be a configuration problem... new server, new bulid, and a myrid of unknowns.... :unsure: Link to comment Share on other sites More sharing options...
rickcj Posted September 27, 2004 Share Posted September 27, 2004 Hi, Thanks Harold i've been wondering if this problem is as part of a change i've made, but have now found it to definately be a problem caused by php >4.3.7 (my host is on 4.3.8). Although it's a bit more hassle to write in the sub-dirs rather than just changing the \ to a / at least it now works again! I'd just like to mention that as some of my changes to admin/categories.php were over 100 lines out the final code change is to insert: <tr> <td class="main">Image Destination Directory</td> <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . DIR_FS_CATALOG_IMAGES . tep_draw_input_field('products_image_destination'); ?></td> </tr> above: <tr> <td class="main"><?php echo TEXT_PRODUCTS_IMAGE; ?></td> Also, when specifying the destination path you need to include a trailing / otherwise you end up with the image being uploaded as subdirimagename.jpg instead of subdir/imagename.jpg! Thanks Also, how far off is the next version with this among many other features? :-) Link to comment Share on other sites More sharing options...
stembuck Posted October 7, 2004 Share Posted October 7, 2004 I don't know much when it come to php. I have the same problem with sub_directory and looking at your post it's look greek to me. Here is my code, I change as suggested but the problem is still there. PHP Version: 4.3.8 (Zend: 1.3.0). Any help would be appreciated. Thanks. <?php/* $Id: categories.php,v 1.146 2003/07/11 14:40:27 hpdl Exp $ osCommerce, Open Source E-Commerce Solutions http://www.oscommerce.com Copyright (c) 2003 osCommerce Released under the GNU General Public License*/ require('includes/application_top.php'); require(DIR_WS_CLASSES . 'currencies.php'); $currencies = new currencies(); $action = (isset($HTTP_GET_VARS['action']) ? $HTTP_GET_VARS['action'] : ''); if (tep_not_null($action)) { switch ($action) { case 'setflag': if ( ($HTTP_GET_VARS['flag'] == '0') || ($HTTP_GET_VARS['flag'] == '1') ) { if (isset($HTTP_GET_VARS['pID'])) { tep_set_product_status($HTTP_GET_VARS['pID'], $HTTP_GET_VARS['flag']); } if (USE_CACHE == 'true') { tep_reset_cache_block('categories'); tep_reset_cache_block('also_purchased'); } } tep_redirect(tep_href_link(FILENAME_CATEGORIES, 'cPath=' . $HTTP_GET_VARS['cPath'] . '&pID=' . $HTTP_GET_VARS['pID'])); break; case 'insert_category': case 'update_category': if (isset($HTTP_POST_VARS['categories_id'])) $categories_id = tep_db_prepare_input($HTTP_POST_VARS['categories_id']); $sort_order = tep_db_prepare_input($HTTP_POST_VARS['sort_order']); $sql_data_array = array('sort_order' => $sort_order); if ($action == 'insert_category') { $insert_sql_data = array('parent_id' => $current_category_id, 'date_added' => 'now()'); $sql_data_array = array_merge($sql_data_array, $insert_sql_data); tep_db_perform(TABLE_CATEGORIES, $sql_data_array); $categories_id = tep_db_insert_id(); } elseif ($action == 'update_category') { $update_sql_data = array('last_modified' => 'now()'); $sql_data_array = array_merge($sql_data_array, $update_sql_data); tep_db_perform(TABLE_CATEGORIES, $sql_data_array, 'update', "categories_id = '" . (int)$categories_id . "'"); } $languages = tep_get_languages(); for ($i=0, $n=sizeof($languages); $i<$n; $i++) { $categories_name_array = $HTTP_POST_VARS['categories_name']; $language_id = $languages[$i]['id']; $sql_data_array = array('categories_name' => tep_db_prepare_input($categories_name_array[$language_id])); if ($action == 'insert_category') { $insert_sql_data = array('categories_id' => $categories_id, 'language_id' => $languages[$i]['id']); $sql_data_array = array_merge($sql_data_array, $insert_sql_data); tep_db_perform(TABLE_CATEGORIES_DESCRIPTION, $sql_data_array); } elseif ($action == 'update_category') { tep_db_perform(TABLE_CATEGORIES_DESCRIPTION, $sql_data_array, 'update', "categories_id = '" . (int)$categories_id . "' and language_id = '" . (int)$languages[$i]['id'] . "'"); } } if ($categories_image = new upload('categories_image', DIR_FS_CATALOG_IMAGES)) { tep_db_query("update " . TABLE_CATEGORIES . " set categories_image = '" . tep_db_input($categories_image->filename) . "' where categories_id = '" . (int)$categories_id . "'"); } if (USE_CACHE == 'true') { tep_reset_cache_block('categories'); tep_reset_cache_block('also_purchased'); } tep_redirect(tep_href_link(FILENAME_CATEGORIES, 'cPath=' . $cPath . '&cID=' . $categories_id)); break; case 'delete_category_confirm': if (isset($HTTP_POST_VARS['categories_id'])) { $categories_id = tep_db_prepare_input($HTTP_POST_VARS['categories_id']); $categories = tep_get_category_tree($categories_id, '', '0', '', true); $products = array(); $products_delete = array(); for ($i=0, $n=sizeof($categories); $i<$n; $i++) { $product_ids_query = tep_db_query("select products_id from " . TABLE_PRODUCTS_TO_CATEGORIES . " where categories_id = '" . (int)$categories[$i]['id'] . "'"); while ($product_ids = tep_db_fetch_array($product_ids_query)) { $products[$product_ids['products_id']]['categories'][] = $categories[$i]['id']; } } reset($products); while (list($key, $value) = each($products)) { $category_ids = ''; for ($i=0, $n=sizeof($value['categories']); $i<$n; $i++) { $category_ids .= "'" . (int)$value['categories'][$i] . "', "; } $category_ids = substr($category_ids, 0, -2); $check_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_TO_CATEGORIES . " where products_id = '" . (int)$key . "' and categories_id not in (" . $category_ids . ")"); $check = tep_db_fetch_array($check_query); if ($check['total'] < '1') { $products_delete[$key] = $key; } } // removing categories can be a lengthy process tep_set_time_limit(0); for ($i=0, $n=sizeof($categories); $i<$n; $i++) { tep_remove_category($categories[$i]['id']); } reset($products_delete); while (list($key) = each($products_delete)) { tep_remove_product($key); } } if (USE_CACHE == 'true') { tep_reset_cache_block('categories'); tep_reset_cache_block('also_purchased'); } tep_redirect(tep_href_link(FILENAME_CATEGORIES, 'cPath=' . $cPath)); break; case 'delete_product_confirm': if (isset($HTTP_POST_VARS['products_id']) && isset($HTTP_POST_VARS['product_categories']) && is_array($HTTP_POST_VARS['product_categories'])) { $product_id = tep_db_prepare_input($HTTP_POST_VARS['products_id']); $product_categories = $HTTP_POST_VARS['product_categories']; for ($i=0, $n=sizeof($product_categories); $i<$n; $i++) { tep_db_query("delete from " . TABLE_PRODUCTS_TO_CATEGORIES . " where products_id = '" . (int)$product_id . "' and categories_id = '" . (int)$product_categories[$i] . "'"); } $product_categories_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_TO_CATEGORIES . " where products_id = '" . (int)$product_id . "'"); $product_categories = tep_db_fetch_array($product_categories_query); if ($product_categories['total'] == '0') { tep_remove_product($product_id); } } if (USE_CACHE == 'true') { tep_reset_cache_block('categories'); tep_reset_cache_block('also_purchased'); } tep_redirect(tep_href_link(FILENAME_CATEGORIES, 'cPath=' . $cPath)); break; case 'move_category_confirm': if (isset($HTTP_POST_VARS['categories_id']) && ($HTTP_POST_VARS['categories_id'] != $HTTP_POST_VARS['move_to_category_id'])) { $categories_id = tep_db_prepare_input($HTTP_POST_VARS['categories_id']); $new_parent_id = tep_db_prepare_input($HTTP_POST_VARS['move_to_category_id']); $path = explode('_', tep_get_generated_category_path_ids($new_parent_id)); if (in_array($categories_id, $path)) { $messageStack->add_session(ERROR_CANNOT_MOVE_CATEGORY_TO_PARENT, 'error'); tep_redirect(tep_href_link(FILENAME_CATEGORIES, 'cPath=' . $cPath . '&cID=' . $categories_id)); } else { tep_db_query("update " . TABLE_CATEGORIES . " set parent_id = '" . (int)$new_parent_id . "', last_modified = now() where categories_id = '" . (int)$categories_id . "'"); if (USE_CACHE == 'true') { tep_reset_cache_block('categories'); tep_reset_cache_block('also_purchased'); } tep_redirect(tep_href_link(FILENAME_CATEGORIES, 'cPath=' . $new_parent_id . '&cID=' . $categories_id)); } } break; case 'move_product_confirm': $products_id = tep_db_prepare_input($HTTP_POST_VARS['products_id']); $new_parent_id = tep_db_prepare_input($HTTP_POST_VARS['move_to_category_id']); $duplicate_check_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_TO_CATEGORIES . " where products_id = '" . (int)$products_id . "' and categories_id = '" . (int)$new_parent_id . "'"); $duplicate_check = tep_db_fetch_array($duplicate_check_query); if ($duplicate_check['total'] < 1) tep_db_query("update " . TABLE_PRODUCTS_TO_CATEGORIES . " set categories_id = '" . (int)$new_parent_id . "' where products_id = '" . (int)$products_id . "' and categories_id = '" . (int)$current_category_id . "'"); if (USE_CACHE == 'true') { tep_reset_cache_block('categories'); tep_reset_cache_block('also_purchased'); } tep_redirect(tep_href_link(FILENAME_CATEGORIES, 'cPath=' . $new_parent_id . '&pID=' . $products_id)); break; case 'insert_product': case 'update_product': if (isset($HTTP_POST_VARS['edit_x']) || isset($HTTP_POST_VARS['edit_y'])) { $action = 'new_product'; } else { if (isset($HTTP_GET_VARS['pID'])) $products_id = tep_db_prepare_input($HTTP_GET_VARS['pID']); $products_date_available = tep_db_prepare_input($HTTP_POST_VARS['products_date_available']); $products_date_available = (date('Y-m-d') < $products_date_available) ? $products_date_available : 'null'; $sql_data_array = array('products_quantity' => tep_db_prepare_input($HTTP_POST_VARS['products_quantity']), 'products_model' => tep_db_prepare_input($HTTP_POST_VARS['products_model']), 'products_price' => tep_db_prepare_input($HTTP_POST_VARS['products_price']), 'products_date_available' => $products_date_available, 'products_weight' => tep_db_prepare_input($HTTP_POST_VARS['products_weight']), 'products_status' => tep_db_prepare_input($HTTP_POST_VARS['products_status']), 'products_tax_class_id' => tep_db_prepare_input($HTTP_POST_VARS['products_tax_class_id']), 'manufacturers_id' => tep_db_prepare_input($HTTP_POST_VARS['manufacturers_id'])); if (isset($HTTP_POST_VARS['products_image']) && tep_not_null($HTTP_POST_VARS['products_image']) && ($HTTP_POST_VARS['products_image'] != 'none')) { $sql_data_array['products_image'] = tep_db_prepare_input($HTTP_POST_VARS['products_image']); } if ($action == 'insert_product') { $insert_sql_data = array('products_date_added' => 'now()'); $sql_data_array = array_merge($sql_data_array, $insert_sql_data); tep_db_perform(TABLE_PRODUCTS, $sql_data_array); $products_id = tep_db_insert_id(); tep_db_query("insert into " . TABLE_PRODUCTS_TO_CATEGORIES . " (products_id, categories_id) values ('" . (int)$products_id . "', '" . (int)$current_category_id . "')"); } elseif ($action == 'update_product') { $update_sql_data = array('products_last_modified' => 'now()'); $sql_data_array = array_merge($sql_data_array, $update_sql_data); tep_db_perform(TABLE_PRODUCTS, $sql_data_array, 'update', "products_id = '" . (int)$products_id . "'"); } $languages = tep_get_languages(); for ($i=0, $n=sizeof($languages); $i<$n; $i++) { $language_id = $languages[$i]['id']; $sql_data_array = array('products_name' => tep_db_prepare_input($HTTP_POST_VARS['products_name'][$language_id]), 'products_description' => tep_db_prepare_input($HTTP_POST_VARS['products_description'][$language_id]), 'products_url' => tep_db_prepare_input($HTTP_POST_VARS['products_url'][$language_id])); if ($action == 'insert_product') { $insert_sql_data = array('products_id' => $products_id, 'language_id' => $language_id); $sql_data_array = array_merge($sql_data_array, $insert_sql_data); tep_db_perform(TABLE_PRODUCTS_DESCRIPTION, $sql_data_array); } elseif ($action == 'update_product') { tep_db_perform(TABLE_PRODUCTS_DESCRIPTION, $sql_data_array, 'update', "products_id = '" . (int)$products_id . "' and language_id = '" . (int)$language_id . "'"); } } if (USE_CACHE == 'true') { tep_reset_cache_block('categories'); tep_reset_cache_block('also_purchased'); } tep_redirect(tep_href_link(FILENAME_CATEGORIES, 'cPath=' . $cPath . '&pID=' . $products_id)); } break; case 'copy_to_confirm': if (isset($HTTP_POST_VARS['products_id']) && isset($HTTP_POST_VARS['categories_id'])) { $products_id = tep_db_prepare_input($HTTP_POST_VARS['products_id']); $categories_id = tep_db_prepare_input($HTTP_POST_VARS['categories_id']); if ($HTTP_POST_VARS['copy_as'] == 'link') { if ($categories_id != $current_category_id) { $check_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_TO_CATEGORIES . " where products_id = '" . (int)$products_id . "' and categories_id = '" . (int)$categories_id . "'"); $check = tep_db_fetch_array($check_query); if ($check['total'] < '1') { tep_db_query("insert into " . TABLE_PRODUCTS_TO_CATEGORIES . " (products_id, categories_id) values ('" . (int)$products_id . "', '" . (int)$categories_id . "')"); } } else { $messageStack->add_session(ERROR_CANNOT_LINK_TO_SAME_CATEGORY, 'error'); } } elseif ($HTTP_POST_VARS['copy_as'] == 'duplicate') { $product_query = tep_db_query("select products_quantity, products_model, products_image, products_price, products_date_available, products_weight, products_tax_class_id, manufacturers_id from " . TABLE_PRODUCTS . " where products_id = '" . (int)$products_id . "'"); $product = tep_db_fetch_array($product_query); tep_db_query("insert into " . TABLE_PRODUCTS . " (products_quantity, products_model,products_image, products_price, products_date_added, products_date_available, products_weight, products_status, products_tax_class_id, manufacturers_id) values ('" . tep_db_input($product['products_quantity']) . "', '" . tep_db_input($product['products_model']) . "', '" . tep_db_input($product['products_image']) . "', '" . tep_db_input($product['products_price']) . "', now(), '" . tep_db_input($product['products_date_available']) . "', '" . tep_db_input($product['products_weight']) . "', '0', '" . (int)$product['products_tax_class_id'] . "', '" . (int)$product['manufacturers_id'] . "')"); $dup_products_id = tep_db_insert_id(); $description_query = tep_db_query("select language_id, products_name, products_description, products_url from " . TABLE_PRODUCTS_DESCRIPTION . " where products_id = '" . (int)$products_id . "'"); while ($description = tep_db_fetch_array($description_query)) { tep_db_query("insert into " . TABLE_PRODUCTS_DESCRIPTION . " (products_id, language_id, products_name, products_description, products_url, products_viewed) values ('" . (int)$dup_products_id . "', '" . (int)$description['language_id'] . "', '" . tep_db_input($description['products_name']) . "', '" . tep_db_input($description['products_description']) . "', '" . tep_db_input($description['products_url']) . "', '0')"); } tep_db_query("insert into " . TABLE_PRODUCTS_TO_CATEGORIES . " (products_id, categories_id) values ('" . (int)$dup_products_id . "', '" . (int)$categories_id . "')"); $products_id = $dup_products_id; } if (USE_CACHE == 'true') { tep_reset_cache_block('categories'); tep_reset_cache_block('also_purchased'); } } tep_redirect(tep_href_link(FILENAME_CATEGORIES, 'cPath=' . $categories_id . '&pID=' . $products_id)); break; case 'new_product_preview':// copy image only if modified $products_image = new upload('products_image'); $products_image->set_destination(DIR_FS_CATALOG_IMAGES . $HTTP_POST_VARS['products_image_destination']); if ($products_image->parse() && $products_image->save()) { $products_image_name = $HTTP_POST_VARS['products_image_destination'] . $products_image->filename; } else { $products_image_name = (isset($HTTP_POST_VARS['products_previous_image']) ? $HTTP_POST_VARS['products_previous_image'] : ''); } break; } } // check if the catalog image directory exists if (is_dir(DIR_FS_CATALOG_IMAGES)) { if (!is_writeable(DIR_FS_CATALOG_IMAGES)) $messageStack->add(ERROR_CATALOG_IMAGE_DIRECTORY_NOT_WRITEABLE, 'error'); } else { $messageStack->add(ERROR_CATALOG_IMAGE_DIRECTORY_DOES_NOT_EXIST, 'error'); }?><!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN"><html <?php echo HTML_PARAMS; ?>><head><meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>"><title><?php echo TITLE; ?></title><link rel="stylesheet" type="text/css" href="includes/stylesheet.css"><script language="javascript" src="includes/general.js"></script></head><body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF" onload="SetFocus();"><div id="spiffycalendar" class="text"></div><!-- header //--><?php require(DIR_WS_INCLUDES . 'header.php'); ?><!-- header_eof //--> <!-- body //--><table border="0" width="100%" cellspacing="2" cellpadding="2"> <tr> <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="1" cellpadding="1" class="columnLeft"><!-- left_navigation //--><?php require(DIR_WS_INCLUDES . 'column_left.php'); ?><!-- left_navigation_eof //--> </table></td><!-- body_text //--> <td width="100%" valign="top"><?php if ($action == 'new_product') { $parameters = array('products_name' => '', 'products_description' => '', 'products_url' => '', 'products_id' => '', 'products_quantity' => '', 'products_model' => '', 'products_image' => '', 'products_price' => '', 'products_weight' => '', 'products_date_added' => '', 'products_last_modified' => '', 'products_date_available' => '', 'products_status' => '', 'products_tax_class_id' => '', 'manufacturers_id' => ''); $pInfo = new objectInfo($parameters); if (isset($HTTP_GET_VARS['pID']) && empty($HTTP_POST_VARS)) { $product_query = tep_db_query("select pd.products_name, pd.products_description, pd.products_url, p.products_id, p.products_quantity, p.products_model, p.products_image, p.products_price, p.products_weight, p.products_date_added, p.products_last_modified, date_format(p.products_date_available, '%Y-%m-%d') as products_date_available, p.products_status, p.products_tax_class_id, p.manufacturers_id from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = '" . (int)$HTTP_GET_VARS['pID'] . "' and p.products_id = pd.products_id and pd.language_id = '" . (int)$languages_id . "'"); $product = tep_db_fetch_array($product_query); $pInfo->objectInfo($product); } elseif (tep_not_null($HTTP_POST_VARS)) { $pInfo->objectInfo($HTTP_POST_VARS); $products_name = $HTTP_POST_VARS['products_name']; $products_description = $HTTP_POST_VARS['products_description']; $products_url = $HTTP_POST_VARS['products_url']; } $manufacturers_array = array(array('id' => '', 'text' => TEXT_NONE)); $manufacturers_query = tep_db_query("select manufacturers_id, manufacturers_name from " . TABLE_MANUFACTURERS . " order by manufacturers_name"); while ($manufacturers = tep_db_fetch_array($manufacturers_query)) { $manufacturers_array[] = array('id' => $manufacturers['manufacturers_id'], 'text' => $manufacturers['manufacturers_name']); } $tax_class_array = array(array('id' => '0', 'text' => TEXT_NONE)); $tax_class_query = tep_db_query("select tax_class_id, tax_class_title from " . TABLE_TAX_CLASS . " order by tax_class_title"); while ($tax_class = tep_db_fetch_array($tax_class_query)) { $tax_class_array[] = array('id' => $tax_class['tax_class_id'], 'text' => $tax_class['tax_class_title']); } $languages = tep_get_languages(); if (!isset($pInfo->products_status)) $pInfo->products_status = '1'; switch ($pInfo->products_status) { case '0': $in_status = false; $out_status = true; break; case '1': default: $in_status = true; $out_status = false; }?><link rel="stylesheet" type="text/css" href="includes/javascript/spiffyCal/spiffyCal_v2_1.css"><script language="JavaScript" src="includes/javascript/spiffyCal/spiffyCal_v2_1.js"></script><script language="javascript"><!-- var dateAvailable = new ctlSpiffyCalendarBox("dateAvailable", "new_product", "products_date_available","btnDate1","<?php echo $pInfo->products_date_available; ?>",scBTNMODE_CUSTOMBLUE);//--></script><script language="javascript"><!--var tax_rates = new Array();<?php for ($i=0, $n=sizeof($tax_class_array); $i<$n; $i++) { if ($tax_class_array[$i]['id'] > 0) { echo 'tax_rates["' . $tax_class_array[$i]['id'] . '"] = ' . tep_get_tax_rate_value($tax_class_array[$i]['id']) . ';' . "\n"; } }?> function doRound(x, places) { return Math.round(x * Math.pow(10, places)) / Math.pow(10, places);} function getTaxRate() { var selected_value = document.forms["new_product"].products_tax_class_id.selectedIndex; var parameterVal = document.forms["new_product"].products_tax_class_id[selected_value].value; if ( (parameterVal > 0) && (tax_rates[parameterVal] > 0) ) { return tax_rates[parameterVal]; } else { return 0; }} function updateGross() { var taxRate = getTaxRate(); var grossValue = document.forms["new_product"].products_price.value; if (taxRate > 0) { grossValue = grossValue * ((taxRate / 100) + 1); } document.forms["new_product"].products_price_gross.value = doRound(grossValue, 4);} function updateNet() { var taxRate = getTaxRate(); var netValue = document.forms["new_product"].products_price_gross.value; if (taxRate > 0) { netValue = netValue / ((taxRate / 100) + 1); } document.forms["new_product"].products_price.value = doRound(netValue, 4);}//--></script> <?php echo tep_draw_form('new_product', FILENAME_CATEGORIES, 'cPath=' . $cPath . (isset($HTTP_GET_VARS['pID']) ? '&pID=' . $HTTP_GET_VARS['pID'] : '') . '&action=new_product_preview', 'post', 'enctype="multipart/form-data"'); ?> <table border="0" width="100%" cellspacing="0" cellpadding="2"> <tr> <td><table border="0" width="100%" cellspacing="0" cellpadding="0"> <tr> <td class="pageHeading"><?php echo sprintf(TEXT_NEW_PRODUCT, tep_output_generated_category_path($current_category_id)); ?></td> <td class="pageHeading" align="right"><?php echo tep_draw_separator('pixel_trans.gif', HEADING_IMAGE_WIDTH, HEADING_IMAGE_HEIGHT); ?></td> </tr> </table></td> </tr> <tr> <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td> </tr> <tr> <td><table border="0" cellspacing="0" cellpadding="2"> <tr> <td class="main"><?php echo TEXT_PRODUCTS_STATUS; ?></td> <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . tep_draw_radio_field('products_status', '1', $in_status) . ' ' . TEXT_PRODUCT_AVAILABLE . ' ' . tep_draw_radio_field('products_status', '0', $out_status) . ' ' . TEXT_PRODUCT_NOT_AVAILABLE; ?></td> </tr> <tr> <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td> </tr> <tr> <td class="main"><?php echo TEXT_PRODUCTS_DATE_AVAILABLE; ?><br><small>(YYYY-MM-DD)</small></td> <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' '; ?><script language="javascript">dateAvailable.writeControl(); dateAvailable.dateFormat="yyyy-MM-dd";</script></td> </tr> <tr> <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td> </tr> <tr> <td class="main"><?php echo TEXT_PRODUCTS_MANUFACTURER; ?></td> <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . tep_draw_pull_down_menu('manufacturers_id', $manufacturers_array, $pInfo->manufacturers_id); ?></td> </tr> <tr> <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td> </tr><?php for ($i=0, $n=sizeof($languages); $i<$n; $i++) {?> <tr> <td class="main"><?php if ($i == 0) echo TEXT_PRODUCTS_NAME; ?></td> <td class="main"><?php echo tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_input_field('products_name[' . $languages[$i]['id'] . ']', (isset($products_name[$languages[$i]['id']]) ? $products_name[$languages[$i]['id']] : tep_get_products_name($pInfo->products_id, $languages[$i]['id']))); ?></td> </tr><?php }?> <tr> <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td> </tr> <tr bgcolor="#ebebff"> <td class="main"><?php echo TEXT_PRODUCTS_TAX_CLASS; ?></td> <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . tep_draw_pull_down_menu('products_tax_class_id', $tax_class_array, $pInfo->products_tax_class_id, 'onchange="updateGross()"'); ?></td> </tr> <tr bgcolor="#ebebff"> <td class="main"><?php echo TEXT_PRODUCTS_PRICE_NET; ?></td> <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . tep_draw_input_field('products_price', $pInfo->products_price, 'onKeyUp="updateGross()"'); ?></td> </tr> <tr bgcolor="#ebebff"> <td class="main"><?php echo TEXT_PRODUCTS_PRICE_GROSS; ?></td> <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . tep_draw_input_field('products_price_gross', $pInfo->products_price, 'OnKeyUp="updateNet()"'); ?></td> </tr> <tr> <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td> </tr><script language="javascript"><!--updateGross();//--></script><?php for ($i=0, $n=sizeof($languages); $i<$n; $i++) {?> <tr> <td class="main" valign="top"><?php if ($i == 0) echo TEXT_PRODUCTS_DESCRIPTION; ?></td> <td><table border="0" cellspacing="0" cellpadding="0"> <tr> <td class="main" valign="top"><?php echo tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']); ?> </td> <td class="main"><?php echo tep_draw_textarea_field('products_description[' . $languages[$i]['id'] . ']', 'soft', '70', '15', (isset($products_description[$languages[$i]['id']]) ? $products_description[$languages[$i]['id']] : tep_get_products_description($pInfo->products_id, $languages[$i]['id']))); ?></td> </tr> </table></td> </tr><?php }?> <tr> <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td> </tr> <tr> <td class="main"><?php echo TEXT_PRODUCTS_QUANTITY; ?></td> <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . tep_draw_input_field('products_quantity', $pInfo->products_quantity); ?></td> </tr> <tr> <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td> </tr> <tr> <td class="main"><?php echo TEXT_PRODUCTS_MODEL; ?></td> <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . tep_draw_input_field('products_model', $pInfo->products_model); ?></td> </tr> <tr> <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td> </tr> <tr> <td class="main">Image Destination Directory</td> <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . DIR_FS_CATALOG_IMAGES . tep_draw_input_field('products_image_destination'); ?></td> </tr> <tr> <td class="main"><?php echo TEXT_PRODUCTS_IMAGE; ?></td> <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . tep_draw_file_field('products_image') . '<br>' . tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . $pInfo->products_image . tep_draw_hidden_field('products_previous_image', $pInfo->products_image); ?></td> </tr> <tr> <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td> </tr><?php for ($i=0, $n=sizeof($languages); $i<$n; $i++) {?> <tr> <td class="main"><?php if ($i == 0) echo TEXT_PRODUCTS_URL . '<br><small>' . TEXT_PRODUCTS_URL_WITHOUT_HTTP . '</small>'; ?></td> <td class="main"><?php echo tep_image(DIR_WS_CATALOG_LANGUAGES . $languages[$i]['directory'] . '/images/' . $languages[$i]['image'], $languages[$i]['name']) . ' ' . tep_draw_input_field('products_url[' . $languages[$i]['id'] . ']', (isset($products_url[$languages[$i]['id']]) ? $products_url[$languages[$i]['id']] : tep_get_products_url($pInfo->products_id, $languages[$i]['id']))); ?></td> </tr><?php }?> <tr> <td colspan="2"><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td> </tr> <tr> <td class="main"><?php echo TEXT_PRODUCTS_WEIGHT; ?></td> <td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . tep_draw_input_field('products_weight', $pInfo->products_weight); ?></td> </tr> </table></td> </tr> <tr> <td><?php echo tep_draw_separator('pixel_trans.gif', '1', '10'); ?></td> </tr> <tr> <td class="main" align="right"><?php echo tep_draw_hidden_field('products_date_added', (tep_not_null($pInfo->products_date_added) ? $pInfo->products_date_added : date('Y-m-d'))) . tep_image_submit('button_preview.gif', IMAGE_PREVIEW) . ' <a href="' . tep_href_link(FILENAME_CATEGORIES, 'cPath=' . $cPath . (isset($HTTP_GET_VARS['pID']) ? '&pID=' . $HTTP_GET_VARS['pID'] : '')) . '">' . tep_image_button('button_cancel.gif', IMAGE_CANCEL) . '</a>'; ?></td> </tr> </table></form><?php } elseif ($action == 'new_product_preview') { if (tep_not_null($HTTP_POST_VARS)) { $pInfo = new objectInfo($HTTP_POST_VARS); $products_name = $HTTP_POST_VARS['products_name']; $products_description = $HTTP_POST_VARS['products_description']; $products_url = $HTTP_POST_VARS['products_url']; } else { $product_query = tep_db_query("select p.products_id, pd.language_id, pd.products_name, pd.products_description, pd.products_url, p.products_quantity, p.products_model, p.products_image, p.products_price, p.products_weight, p.products_date_added, p.products_last_modified, p.products_date_available, p.products_status, p.manufacturers_id from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_id = pd.products_id and p.products_id = '" . (int)$HTTP_GET_VARS['pID'] . "'"); $product = tep_db_fetch_array($product_query); $pInfo = new objectInfo($product); $products_image_name = $pInfo->products_image; } $form_action = (isset($HTTP_GET_VARS['pID'])) ? 'update_product' : 'insert_product'; echo tep_draw_form($form_action, FILENAME_CATEGORIES, 'cPath=' . $cPath . (isset($HTTP_GET_VARS['pID']) ? '&pID=' . $HTTP_GET_VARS['pID'] : '') . '&action=' . $form_action, 'post', 'enctype="multipart/form-data"'); $languages = tep_get_languages(); for ($i=0, $n=sizeof($languages); $i<$n; $i++) { if (isset($HTTP_GET_VARS['read']) && ($HTTP_GET_VARS['read'] == 'only')) { $pInfo->products_name = tep_get_products_name($pInfo->products_id, $languages[$i]['id']); $pInfo->products_description = tep_get_products_description($pInfo->products_id, $languages[$i]['id']); $pInfo->products_url = tep_get_products_url($pInfo->products_id, $languages[$i]['id']); } else { $pInfo->products_name = tep_db_prepare_input($products_name[$languages[$i]['id']]); Link to comment Share on other sites More sharing options...
Guest Posted October 16, 2004 Share Posted October 16, 2004 Greetings all. I am having a similar problem, but I'm not certain it's exactly the same. I am also using More Pics 6.0. About 50% of the time, I am able to upload a file normally and it will appear in my catalog. However, the other 50% it gives me the OK message in the admin, but then my directory only contains a 0kb file when my image is 30kb or more. Of course, the image then fails to appear in my catalog. If I replace the 0k image with my FTP program, it functions fine, but this defeats the purpose of having the admin tool upload the images (and it's tedious). Because I have More Pics installed, I'm a little hesitant to add the Directory mod fix above. To be honest, I'm not sure that that is my problem to begin with anyway so it likely won't help me. Has anyone had this 0kb file problem? Have you been able to fix it? Cheers, Jonathan Link to comment Share on other sites More sharing options...
glusniffer1 Posted December 23, 2004 Share Posted December 23, 2004 Im having the same problem as evryone else here but I changed the code like you said it it still doesnt work.... Here is whatis in my admin panel c:/hosting/**********/member/****/catalog/images/ And this is what I want to add Model_Car_Journal/modelcarjourn_apr92.jpg/ Comes up blank Have you tried deleting the image file on the server first before uploading your new one.That has worked for me in the past when I couldnt over write the existing file 0k Cheers Paul <{POST_SNAPBACK}> The Hobby Undergound..."For The Pure Hobbyist" Link to comment Share on other sites More sharing options...
Freeman Posted September 17, 2006 Share Posted September 17, 2006 Anyone has an update to this? I'm using php 4.3.10 and the only way to keep on using oscommerce is to put ALL images into /images dir ...not much ordered...when working with 1000 products.Also tried Harald's mod but with no luck :(( The "old fluke" wasn't that bad wasn't it? ;P Thanks for the great work btw :D Advice on forum are Free, Email or Pm to fix your site is work...which I charge for :) ------------------- Link to comment Share on other sites More sharing options...
pweden Posted April 6, 2007 Share Posted April 6, 2007 It is possible to define subdirectories for product images - but so far only manually when editing the products.products_image field value (which is why there are products in subdirectories as standard). There is no way to do it in the Administration Tool though and is a current limitation that will be fixed in the next release. Here are some code changes for admin/categories.php that will allow you to define a subdirectory. It is untested though should work if my mighty powers still function at 3AM in the morning correctly, and hope someone can spice it up and forward it to the Tips and Tricks forum channel :) Line 315, change from: $products_image->set_destination(DIR_FS_CATALOG_IMAGES); to: $products_image->set_destination(DIR_FS_CATALOG_IMAGES . $HTTP_POST_VARS['products_image_destination']); Line 317, change from: $products_image_name = $products_image->filename; to: $products_image_name = $HTTP_POST_VARS['products_image_destination'] . $products_image->filename; After lines 562-565, add: � � � � �<tr> � � � � � �<td class="main">Image Destination Directory</td> � � � � � �<td class="main"><?php echo tep_draw_separator('pixel_trans.gif', '24', '15') . ' ' . DIR_FS_CATALOG_IMAGES . tep_draw_input_field('products_image_destination'); ?></td> � � � � �</tr> Please note that this is only for uploading new images, not for defining existing images, and that the directory must be writeable (there is no error checking here for the subcategory). The subdirectory value must also end with a / Hope that helps! [Edited post to reflect line 317] I'm trying this code and the resulting path has two backslashes before the images folder: path//images/ Any ideas where I can fix this? Link to comment Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.