Jump to content
Sign in to follow this  
dontera

Products Attributes Sort v1.0

Recommended Posts

Hallo Forrest,

 

that was what I'm searching for !! :D

 

But you desided to sort the Attributes on each product.

Why you don't sort the Attribute table. Than You only have to put some Information to each attribut and not to each product.

 

My problem is that I have more than 1000 products and each with 2 ore more attributes. Now perhaps you understand my problem.

 

Pleas don't misunderstand me !! I'm happy that somebody started a contribution to sort the attributtes (I'm not a php programmer). Perhaps you can think about your solution and my suggestion again :rolleyes:


Thanks Matthias

Share this post


Link to post
Share on other sites

Hello,

 

Funny you should mention that, because that is how I was orignally going to do this modification, but decided to go on an item bases for greater control over presentation. But I can see your problem, and the changes shouldnt be too hard. Ill see if I can work something up for you in a day or two.

 

Forrest

Share this post


Link to post
Share on other sites

B) Thanks, it's a very clean and nice contrib, atm i'm using a modded attribute sorter+copier by linda where i just installed the "sort" option..and it was painful with beyond compare :P

The "sort attribute table" feature would be a real plus to this simple but great enanchement.

Good Luck!

Fabrizio


Advice on forum are Free, Email or Pm to fix your site is work...which I charge for :)

-------------------

Share this post


Link to post
Share on other sites

Glad to hear you like it, and sorry I didnt mark the mods in the products_attributes.php file. While making the mod, I didnt even thikn about the fact I might release it, and had a hard time getting a diff from Ultraedit (said the whole file was different from the original).

 

Will see if I can mark the changes for a later release.

Share this post


Link to post
Share on other sites

Have other people got this working?

 

I'm having problems. The admin IS working, as I can view my database and the Sort_Attribute is being updated OK. But the items in my select lists, are unchanged!

 

I've updated the product_info as in the readme (basicly adding the "order by pa.attribute_sort".

 

I'm running the "Product Attributes - Option Type Feature 1.6" mod, but don't think they should make a difference...

 

Thanks for your hard work, as is a feature lots of people have been asking for!

Share this post


Link to post
Share on other sites

Hi Don,

 

Did you ever come up with a global option sort order version that bodyfeelings mentioned earlier in the thread?

 

Thanks for a great contrib! :)

Share this post


Link to post
Share on other sites

Thanks so much for making this contribution.

 

This functionality is absolutely necessary for the store I am working on and I think really should be included as part of the core code.

 

I am having the same problem as ahearn. The Admin is working but in the store the select lists for the products remain unchanged. I have a feeling it has something to do with another Mod that I have installed (Options as Images) and am posting the code of my product_info.php in hopes that you can help diagnose the issue.

 

<?php
/*
 $Id: product_info.php,v 1.97 2003/07/01 14:34:54 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_LANGUAGES . $language . '/' . FILENAME_PRODUCT_INFO);

 $product_check_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_status = '1' and p.products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "'");
 $product_check = tep_db_fetch_array($product_check_query);
?>
<!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>
<base href="<?php echo (($request_type == 'SSL') ? HTTPS_SERVER : HTTP_SERVER) . DIR_WS_CATALOG; ?>">
<link rel="stylesheet" type="text/css" href="stylesheet.css">
<script language="javascript"><!--
function popupWindow(url) {
 window.open(url,'popupWindow','toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,res
izable=yes,copyhistory=no,width=100,height=100,screenX=150,screenY=150,top=150,le
ft=150')
}
//--></script>
</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0">
<!-- header //-->
<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
<!-- header_eof //-->

<!-- body //-->
<table border="0" width="100%" cellspacing="3" cellpadding="3">
 <tr>
   <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">
<!-- left_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>
<!-- left_navigation_eof //-->
   </table></td>
<!-- body_text //-->
   <td width="100%" valign="top"><?php echo tep_draw_form('cart_quantity', tep_href_link(FILENAME_PRODUCT_INFO, tep_get_all_get_params(array('action')) . 'action=add_product')); ?><table border="0" width="100%" cellspacing="0" cellpadding="0">
<?php
 if ($product_check['total'] < 1) {
?>
     <tr>
       <td><?php new infoBox(array(array('text' => TEXT_PRODUCT_NOT_FOUND))); ?></td>
     </tr>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
     <tr>
       <td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
         <tr class="infoBoxContents">
           <td><table border="0" width="100%" cellspacing="0" cellpadding="2">
             <tr>
               <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
               <td align="right"><?php echo '<a href="' . tep_href_link(FILENAME_DEFAULT) . '">' . tep_image_button('button_continue.gif', IMAGE_BUTTON_CONTINUE) . '</a>'; ?></td>
               <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
             </tr>
           </table></td>
         </tr>
       </table></td>
     </tr>
<?php
 } else {
   $product_info_query = tep_db_query("select p.products_id, pd.products_name, pd.products_description, p.products_model, p.products_quantity, p.products_image, pd.products_url, p.products_price, p.products_tax_class_id, p.products_date_added, p.products_date_available, p.manufacturers_id from " . TABLE_PRODUCTS . " p, " . TABLE_PRODUCTS_DESCRIPTION . " pd where p.products_status = '1' and p.products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and pd.products_id = p.products_id and pd.language_id = '" . (int)$languages_id . "'");
   $product_info = tep_db_fetch_array($product_info_query);

   tep_db_query("update " . TABLE_PRODUCTS_DESCRIPTION . " set products_viewed = products_viewed+1 where products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and language_id = '" . (int)$languages_id . "'");

   if ($new_price = tep_get_products_special_price($product_info['products_id'])) {
     $products_price = '<s>' . $currencies->display_price($product_info['products_price'], tep_get_tax_rate($product_info['products_tax_class_id'])) . '</s> <span class="productSpecialPrice">' . $currencies->display_price($new_price, tep_get_tax_rate($product_info['products_tax_class_id'])) . '</span>';
   } else {
     $products_price = $currencies->display_price($product_info['products_price'], tep_get_tax_rate($product_info['products_tax_class_id']));
   }

   if (tep_not_null($product_info['products_model'])) {
     $products_name = $product_info['products_name'] . '<br><span class="smallText">[' . $product_info['products_model'] . ']</span>';
   } else {
     $products_name = $product_info['products_name'];
   }
?>
     <tr>
       <td><table border="0" width="100%" cellspacing="0" cellpadding="0">
         <tr>
           <td class="pageHeading" valign="top"><?php echo $products_name; ?></td>
           <td class="pageHeading" align="right" valign="top"><?php echo $products_price; ?></td>
         </tr>
       </table></td>
     </tr>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
     <tr>
       <td class="main">
<?php
   if (tep_not_null($product_info['products_image'])) {
?>
         <table border="0" cellspacing="0" cellpadding="2" align="right">
           <tr>
             <td align="center" class="smallText">
<script language="javascript"><!--
document.write('<?php echo '<a href="javascript:popupWindow(\\\'' . tep_href_link(FILENAME_POPUP_IMAGE, 'pID=' . $product_info['products_id']) . '\\\')">' . tep_image(DIR_WS_IMAGES . $product_info['products_image'], addslashes($product_info['products_name']), SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT, 'hspace="5" vspace="5"') . '<br>' . TEXT_CLICK_TO_ENLARGE . '</a>'; ?>');
//--></script>
<noscript>
<?php echo '<a href="' . tep_href_link(DIR_WS_IMAGES . $product_info['products_image']) . '" target="_blank">' . tep_image(DIR_WS_IMAGES . $product_info['products_image'], $product_info['products_name'], SMALL_IMAGE_WIDTH, SMALL_IMAGE_HEIGHT, 'hspace="5" vspace="5"') . '<br>' . TEXT_CLICK_TO_ENLARGE . '</a>'; ?>
</noscript>
             </td>
           </tr>
         </table>
<?php
   }
?>
         <p><?php echo stripslashes($product_info['products_description']); ?></p>
<?php
if (OPTIONS_AS_IMAGES_ENABLED == 'false'){
   $products_attributes_query = tep_db_query("select count(*) as total from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib where patrib.products_id='" . (int)$HTTP_GET_VARS['products_id'] . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)$languages_id . "'");
   $products_attributes = tep_db_fetch_array($products_attributes_query);
   if ($products_attributes['total'] > 0) {
?>
         <table border="0" cellspacing="0" cellpadding="2">
           <tr>
             <td class="main" colspan="2"><?php echo TEXT_PRODUCT_OPTIONS; ?></td>
           </tr>
<?php
     $products_options_name_query = tep_db_query("select distinct popt.products_options_id, popt.products_options_name from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_ATTRIBUTES . " patrib where patrib.products_id='" . (int)$HTTP_GET_VARS['products_id'] . "' and patrib.options_id = popt.products_options_id and popt.language_id = '" . (int)$languages_id . "' order by popt.products_options_name");
     while ($products_options_name = tep_db_fetch_array($products_options_name_query)) {
       $products_options_array = array();
       $products_options_query = tep_db_query("select pov.products_options_values_id, pov.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " pa, " . TABLE_PRODUCTS_OPTIONS_VALUES . " pov where pa.products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and pa.options_id = '" . (int)$products_options_name['products_options_id'] . "' and pa.options_values_id = pov.products_options_values_id and pov.language_id = '" . (int)$languages_id . "' order by pa.attribute_sort");
       while ($products_options = tep_db_fetch_array($products_options_query)) {
         $products_options_array[] = array('id' => $products_options['products_options_values_id'], 'text' => $products_options['products_options_values_name']);
         if ($products_options['options_values_price'] != '0') {
           $products_options_array[sizeof($products_options_array)-1]['text'] .= ' (' . $products_options['price_prefix'] . $currencies->display_price($products_options['options_values_price'], tep_get_tax_rate($product_info['products_tax_class_id'])) .') ';
         }
       }

       if (isset($cart->contents[$HTTP_GET_VARS['products_id']]['attributes'][$products_options_name['products_options_id']])) {
         $selected_attribute = $cart->contents[$HTTP_GET_VARS['products_id']]['attributes'][$products_options_name['products_options_id']];
       } else {
         $selected_attribute = false;
       }
?>
           <tr>
             <td class="main"><?php echo $products_options_name['products_options_name'] . ':'; ?></td>
             <td class="main"><?php echo tep_draw_pull_down_menu('id[' . $products_options_name['products_options_id'] . ']', $products_options_array, $selected_attribute); ?></td>
           </tr>
<?php
     }
?>
         </table>
<?php
   }
   
//Options as Images. Add the curly bracket as shown on the next line
}
?>

<?php

//Options as Images. This whole php clause needs to be added

if (OPTIONS_AS_IMAGES_ENABLED == 'true') include ('options_images.php'); 

?>
       </td>
     </tr>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
<?php
   $reviews_query = tep_db_query("select count(*) as count from " . TABLE_REVIEWS . " where products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "'");
   $reviews = tep_db_fetch_array($reviews_query);
   if ($reviews['count'] > 0) {
?>
     <tr>
       <td class="main"><?php echo TEXT_CURRENT_REVIEWS . ' ' . $reviews['count']; ?></td>
     </tr>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
<?php
   }

   if (tep_not_null($product_info['products_url'])) {
?>
     <tr>
       <td class="main"><?php echo sprintf(TEXT_MORE_INFORMATION, tep_href_link(FILENAME_REDIRECT, 'action=url&goto=' . urlencode($product_info['products_url']), 'NONSSL', true, false)); ?></td>
     </tr>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
<?php
   }

   if ($product_info['products_date_available'] > date('Y-m-d H:i:s')) {
?>
     <tr>
       <td align="center" class="smallText"><?php echo sprintf(TEXT_DATE_AVAILABLE, tep_date_long($product_info['products_date_available'])); ?></td>
     </tr>
<?php
   } else {
?>
     <tr>
       <td align="center" class="smallText"><!--<?php echo sprintf(TEXT_DATE_ADDED, tep_date_long($product_info['products_date_added'])); ?>--></td>
     </tr>
<?php
   }
?>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
     <tr>
       <td><table border="0" width="100%" cellspacing="1" cellpadding="2" class="infoBox">
         <tr class="infoBoxContents">
           <td><table border="0" width="100%" cellspacing="0" cellpadding="2">
             <tr>
               <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
               <td class="main"><!--<?php echo '<a href="' . tep_href_link(FILENAME_PRODUCT_REVIEWS, tep_get_all_get_params()) . '">' . tep_image_button('button_reviews.gif', IMAGE_BUTTON_REVIEWS) . '</a>'; ?>--></td>
               <td class="main" align="right"><?php echo tep_draw_hidden_field('products_id', $product_info['products_id']) . tep_image_submit('button_in_cart.gif', IMAGE_BUTTON_IN_CART); ?></td>
               <td width="10"><?php echo tep_draw_separator('pixel_trans.gif', '10', '1'); ?></td>
             </tr>
           </table></td>
         </tr>
       </table></td>
     </tr>
     <tr>
       <td><?php echo tep_draw_separator('pixel_trans.gif', '100%', '10'); ?></td>
     </tr>
    
<tr>
       <td>


<?php

// removed also purchased display

}

?>


       </td>
     </tr>

   </table></form></td>
<!-- body_text_eof //-->
   <td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="0" cellpadding="2">
<!-- right_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_right.php'); ?>
<!-- right_navigation_eof //-->
   </table></td>
 </tr>
</table>
<!-- body_eof //-->

<!-- footer //-->
<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
<!-- footer_eof //-->
<br>
</body>
</html>
<?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>

Share this post


Link to post
Share on other sites

Heya,

 

thanks for this addon, it will make my life alot easier.. but i have this problem whenever i try and add an Attribute

 

1136 - Column count doesn't match value count at row 1

 

insert into products_attributes values ('', '60', '1', '2', '', '+')

 

[TEP STOP]

 

Anyone got any ideas?

Share this post


Link to post
Share on other sites

Arien,

I am by no means a php guru nor programmer, however I too had this issue. My quick fix was to change line 61 of catalog/admin/products_attributes.php

 

From:

 

tep_db_query("insert into " . TABLE_PRODUCTS_ATTRIBUTES . " values ('', '" . (int)$products_id . "'

, '" . (int)$options_id . "', '" . (int)$values_id . "', '" . tep_db_input($value_price) . "', '" . tep_db_

input($price_prefix) . "')");

 

To:

 

tep_db_query("insert into " . TABLE_PRODUCTS_ATTRIBUTES . " values ('', '" . (int)$products_id . "'

, '" . (int)$options_id . "', '" . (int)$values_id . "', '" . tep_db_input($value_price) . "', '" . tep_db_

input($price_prefix) . "', '0')");

Share this post


Link to post
Share on other sites

All, the above post is what I changed in the products_attributes.php, which is just 1 line. Are there any more lines that need to be changed?

Share this post


Link to post
Share on other sites

Well I can not get this to work either. Admin part works just fine but on the display it does not sort anything.

 

We only replace that 1 line in product_info.php right? Just seems like there should be more to it than that to sort things.

Share this post


Link to post
Share on other sites

I'm getting the same error as described earlier.

 

*******************************************************

1136 - Column count doesn't match value count at row 1

 

insert into products_attributes values ('', '30', '6', '73', '', '+', '0')

*******************************************************

 

I have tried the change in code as was afore mentioned, (the one talking about changing line 61...) and I have tried restoring the original php files and manually doing the changes and I still get the above error.

 

I really need this sort function, the items I am tring to add to my cart have any where from 5 to 30 attributes that need to be listed in a specific order.

 

Any help would be greatful.

Share this post


Link to post
Share on other sites

Thank you for the contribution. I did a clean install and then replaced the files that were included with this feature. I'm getting errors now:

 

Warning: main(includes/html_title.php): failed to open stream: No such file or directory in /home/nutecopd/public_html/shop/product_info.php on line 24

 

Fatal error: main(): Failed opening required 'includes/html_title.php' (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/nutecopd/public_html/shop/product_info.php on line 24

 

It looks likes it's calling a file from the includes section called html_title.php but that file is not in the includes section.

 

Any suggestions?

 

Thanks

David


DrGigabytes

The MD for your PC

Share this post


Link to post
Share on other sites

Charlie,

I haven't gotten to installing this contrib yet but from just looking at it, I think to make a more global sort too more easily handle large numbers of products you could just add a sort_order column to the products_options_values table in the same manner as has been done to the products_atttributes table and use that in your ORDER BY clause (i.e. ORDER BY products_options_values.sort_order). This would give the same sort order for each options category (ie Color, size, etc) each time is used.

 

Better yet the two concepts could be combined to allow for a generalized sort on the options category as a whole and a more specific per product sort order when needed for more visual control. If no per product control is needed, set the products_attributes.sort_order for each of the product's options row to 0, otherwise set them accordingly. The order by clause would be: products_attributes.sort_order, products_options_values.sort_order.

Share this post


Link to post
Share on other sites
Warning: main(includes/html_title.php): failed to open stream: No such file or directory in /home/nutecopd/public_html/shop/product_info.php on line 24

 

Fatal error: main(): Failed opening required 'includes/html_title.php' (include_path='.:/usr/lib/php:/usr/local/lib/php') in /home/nutecopd/public_html/shop/product_info.php on line 24

 

It looks likes it's calling a file from the includes section called html_title.php but that file is not in the includes section.

 

Any suggestions?

 

Thanks

David

I received the same error message. Seems there are some modifications with the catalog/product_info.php file that are not meaningfull for this contribution. I reloaded the original product_info.php file. Then went back to the instructions from v1.01 for changes to be made, and it seems to have resolved the problem.

 

from text file dated 1/31/14:

 

In catalog/product_info.php change

 

$products_options_query = tep_db_query("select pov.products_options_values_id, pov.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " pa, " . TABLE_PRODUCTS_OPTIONS_VALUES . " pov where pa.products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and pa.options_id = '" . $products_options_name['products_options_id'] . "' and pa.options_values_id = pov.products_options_values_id and pov.language_id = '" . $languages_id . "'");

 

to

 

$products_options_query = tep_db_query("select pov.products_options_values_id, pov.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_ATTRIBUTES . " pa, " . TABLE_PRODUCTS_OPTIONS_VALUES . " pov where pa.products_id = '" . (int)$HTTP_GET_VARS['products_id'] . "' and pa.options_id = '" . $products_options_name['products_options_id'] . "' and pa.options_values_id = pov.products_options_values_id and pov.language_id = '" . $languages_id . "' order by pa.sort_order");

Share this post


Link to post
Share on other sites

Well everyone, again with trouble.

After installed this contribution, I got the same error as others, but there is no answer in the forum. What happened, everyone droped it, or there is a solution.

I need this attr., please post any results. I think that php gurus should be just write the add/change code and not to compare file. Most of time, it does not work.

thanks

far

 

this is the error:

1136 - Column count doesn't match value count at row 1

 

insert into products_attributes values ('', '31', '5', '1', '0.00', '+')

 

[TEP STOP]

Share this post


Link to post
Share on other sites

Hello,

 

I have a solution for the problem above, i had the same problem and just deletet the "sort_order" key in the products_attributes table.

 

i hope that it will work as good in your shop as it does in mine :)

 

greets Vigor

Share this post


Link to post
Share on other sites

Sorry for my english :huh:

 

I also had this error

 

1136 - Column count doesn't match value count at row 1

 

insert into products_attributes values ('', '60', '1', '2', '', '+')

 

[TEP STOP]

 

my solution:

 

i use also: "Alternative Attribute Handling"

 

i changed a line in: "admin/categories.php"

 

search for:

 

tep_db_query("insert into " . TABLE_PRODUCTS_ATTRIBUTES . " values ('', '" . $products_id . "', '" . $options['products_options_id'] . "', '" . $values['products_options_values_id'] . "', '" . $HTTP_POST_VARS['price'][$rows] . "', '" . $HTTP_POST_VARS['prefix'][$rows] . "')");

 

replace with:

tep_db_query("insert into " . TABLE_PRODUCTS_ATTRIBUTES . " values ('', '" . $products_id . "', '" . $options['products_options_id'] . "', '" . $values['products_options_values_id'] . "', '" . $HTTP_POST_VARS['price'][$rows] . "', '" . $HTTP_POST_VARS['prefix'][$rows] . "', '" . (int)$attributes_sort . "')");

 

and now everything works fine

Share this post


Link to post
Share on other sites

I'm also getting an error:

1054 - Unknown column 'attribute_sort' in 'field list'

 

select attribute_sort from products_attributes where products_attributes_id = '44'

 

[TEP STOP]

 

 

I also use Alternative Attribute Handling.

 

Any ideas, please?

Thanks,

Charley

Share this post


Link to post
Share on other sites

just about to try this to get my attributes in a selected order, but as im new what EXACTLY do i do regarding this:

 

run included sql query

 

thanks


Hope it helps...

PC Planet

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×