Index: openacs-4/packages/ecommerce/www/category-browse.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/ecommerce/www/category-browse.tcl,v
diff -u -r1.11 -r1.12
--- openacs-4/packages/ecommerce/www/category-browse.tcl 27 Apr 2008 01:38:23 -0000 1.11
+++ openacs-4/packages/ecommerce/www/category-browse.tcl 28 Apr 2008 08:16:31 -0000 1.12
@@ -19,7 +19,7 @@
subcategory_id:optional,naturalnum
subsubcategory_id:optional,naturalnum
{how_many:naturalnum {[ad_parameter -package_id [ec_id] ProductsToDisplayPerPage ecommerce]}}
- {start:naturalnum "0"}
+ {start:naturalnum "1"}
usca_p:optional
}
@@ -162,8 +162,7 @@
#==============================
# products
-# All products in the "category" and not in "subcategories"
-
+# All products in the "category" and not in "subcategories" (used in xql subst)
set exclude_subproducts ""
if ![at_bottom_level_p] {
set exclude_subproducts "
@@ -173,84 +172,62 @@
and c.${sub}category_id = :${sub}category_id)"
}
-set products {
}
-
-set have_how_many_more_p f
set count 0
-db_foreach get_regular_product_list "sql in db specific xql filessw" {
+# TODO: memoize
+# NOTE: careful if you do cache this since the code block calculates per-user specials, and also change implementation of count
+db_multirow -extend {
+ thumbnail_url
+ thumbnail_height
+ thumbnail_width
+ price_line
+ } products get_regular_product_list "sql in db specific xql files" {
+
+ array set thumbnail_info [ecommerce::resource::image_info -type Thumbnail -product_id $product_id -dirname $dirname]
+ set thumbnail_url $thumbnail_info(url)
+ set thumbnail_width $thumbnail_info(width)
+ set thumbnail_height $thumbnail_info(height)
- if { $count >= $start && [expr $count - $start] < $how_many } {
+ set price_line [ec_price_line $product_id $user_id $offer_code]
- array set thumbnail_info [ecommerce::resource::image_info -type Thumbnail -product_id $product_id -dirname $dirname]
- set image_html ""
- # assumes exists...
- set image_html ""
-
- append products "
-
- $image_html |
- $product_name |
-
-
- $one_line_description |
- [ec_price_line $product_id $user_id $offer_code] |
-
"
- }
incr count
- if { $count > [expr $start + (2 * $how_many)] } {
-
- # We know there are at least how_many more items to display
- # next time
-
- set have_how_many_more_p t
- break
- } else {
- set have_how_many_more_p f
- }
}
-append products "
"
-
+# what if start is < how many? shouldn't happen I guess...
if { $start >= $how_many } {
- set prev_link "Previous $how_many"
-} else {
- set prev_link ""
+ set prev_url [export_vars -base [ad_conn url] -override {{start {[expr $start - $how_many]}}} {category_id subsubcategory_id how_many}]
}
-if { $have_how_many_more_p == "t" } {
- set next_link "Next $how_many"
-} else {
- set number_of_remaining_products [expr $count - $start - $how_many]
- if { $number_of_remaining_products > 0 } {
- set next_link "<\"a href=[ad_conn url]?[export_url_vars category_id subcategory_id subsubcategory_id how_many]&start=[expr $start + $how_many]\">Next $number_of_remaining_products"
+set how_many_more [expr $count - $start - $how_many + 1]
+
+if { $how_many_more > 0 } {
+ set next_url [export_vars -base [ad_conn url] -override {{start {[expr $start + $how_many]}}} {category_id subsubcategory_id how_many}]
+
+ if { $how_many_more >= $how_many } {
+ set how_many_next $how_many
} else {
- set next_link ""
+ set how_many_next $how_many_more
}
}
-if { [empty_string_p $next_link] || [empty_string_p $prev_link] } {
- set separator ""
-} else {
- set separator "|"
-}
+set end [expr $start + $how_many - 1]
#==============================
# subcategories
-set subcategories ""
+set subcategories_p 0
if ![at_bottom_level_p] {
- db_foreach get_subcategories "
- select * from ec_sub${sub}categories c
- where ${sub}category_id = :${sub}category_id
- and exists (select 'x' from ec_products_displayable p, $product_map(sub$sub) s
- where p.product_id = s.product_id
- and s.sub${sub}category_id = c.sub${sub}category_id)
- order by sort_key, sub${sub}category_name" {
- append subcategories "
- > [eval "ident \$sub${sub}category_name"]
"
- }
+ db_multirow -extend { url name } subcategories get_subcategories "see xql" {
+ set url [export_vars -base "category-browse-sub${sub}category" {category_id subcategory_id subsubcategory_id}]
+ set name [eval "ident \$sub${sub}category_name"]
+ }
+
+ if { ${subcategories:rowcount} > 0 } {
+ set subcategories_p 1
+ # ident? what is this??
+ }
+
}
set the_category_id [eval "ident \$${sub}category_id"]