This is pretty useful. We're trying to collect some of these types of tips
here -
http://www.satchmoproject.com/trac/wiki/SatchmoContribs
If you could add this, then hopefully it will be easier for folks to find in
the future.
Thanks,
Chris
On Wed, Dec 3, 2008 at 6:09 AM, Jack Shedd <[EMAIL PROTECTED]> wrote:
>
> Wrote a quick custom template tag to do previous/next products. Might
> be useful to someone else.
>
> Use like this:
> {% prev_next_products for product as products with 6 others %}
>
> It'll give you a structure that looks like:
> products.previous # if there's a product before this one, this will
> equal that product, otherwise, it's set to None
> products.next # if there's a product after this one, this will equal
> that product, otherwise, it's set to None
> products.products # array of the next products, based on how many
> "others" you told it to grab
>
> Code:
>
> ---------------------------------------------------------------------------------------------
> import os, logging
> from django import template
> from django.template import Library, Node, Variable
> from django.contrib.sites.models import Site
> from satchmo.product.models import Product, ProductManager
>
> log = logging.getLogger('hssproduct.models')
> register = template.Library()
>
> class ProductOrderNode(Node):
> def __init__(self, product, included_count, varname):
> self.product = Variable(product)
> self.included = included_count
> self.varname = varname
> def render(self, context, **kwargs):
> masterlist = []
> returned = {}
> previous, next, found, last = None, None, None, None
> self.product = self.product.resolve(context)
>
> site = Site.objects.get_current()
> productlist = Product.objects.filter(active=True,
> productvariation__parent__isnull=True)
>
> for product in productlist:
> if product != self.product:
> masterlist.append(product)
> if found and not next:
> next = product
> if (len(masterlist) > self.included) and not found:
> masterlist.pop(0)
> elif (len(masterlist) >= self.included) and found:
> break
> if not found:
> if product == self.product:
> found = product
> previous = last
> last = product
>
> if previous:
> returned['previous'] = previous
> if next:
> returned['next'] = next
> if len(masterlist):
> returned['products'] = masterlist
> log.debug('%s' % masterlist)
> context[self.varname] = returned
> return ''
>
> #prev_next_product for product as variable with num others
> @register.tag
> def prev_next_products(parser, token):
> try:
> tag_name, for_string, product, as_string, varname,
> with_string,
> included_count, others_string = token.split_contents()
> except:
> raise template.TemplateSyntaxError, 'prev_next_product
> should be
> formatted like: prev_next_product for product as variable with num
> others'
> return ProductOrderNode(product, included_count, varname)
>
> >
>
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Satchmo users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/satchmo-users?hl=en
-~----------~----~----~----~------~----~------~--~---