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
-~----------~----~----~----~------~----~------~--~---

Reply via email to