Changeset 32

Show
Ignore:
Timestamp:
05/07/09 19:39:02 (3 years ago)
Author:
235
Message:

optimized bannerplaces (no cache)

Files:
3 modified

Legend:

Unmodified
Added
Removed
  • .project

    r1 r32  
    66        </projects> 
    77        <buildSpec> 
     8                <buildCommand> 
     9                        <name>org.python.pydev.PyDevBuilder</name> 
     10                        <arguments> 
     11                        </arguments> 
     12                </buildCommand> 
    813        </buildSpec> 
    914        <natures> 
     15                <nature>org.python.pydev.pythonNature</nature> 
    1016        </natures> 
    1117</projectDescription> 
  • plesonet_banners/trunk/models.py

    r1 r32  
    1414    is_published = models.BooleanField(_('Published'), default=True)     
    1515     
     16    class Admin: 
     17        list_display = ('url', 'is_published') 
     18        list_filter = ('is_published',) 
     19        search_fields = ('url', )     
     20     
    1621    class Meta: 
    1722        db_table = 'plesonet_bannerpage' 
     
    2631class Banners(models.Model): 
    2732    BANNER_TYPE = ( 
    28                      (1, 'Top'), 
    29                      (2, 'Premium left'), 
    30                      (3, 'Premium right'), 
    31                      (4, 'Below news'),                      
    32                      (5, 'Counters'), 
    33                      (6, 'Ad links'), 
    34                      (7, 'Technical Script') 
     33                     (101, 'Premium Top'), 
     34                     (100, 'Premium center'), 
     35                     (110, 'Premium left'), 
     36                     (120, 'Premium right'), 
     37                     (210, 'Left under events(links) - index page'),                      
     38                     (220, 'Right under tags - index page'), 
     39                     (300, 'Center bottom'), 
     40                     (310, 'Left bottom'), 
     41                     (320, 'Right bottom'), 
     42                     (600, 'Ad links'), 
     43                     (605, 'Ad links - personal blogs'), 
     44                     (700, 'Technical Script') 
    3545    ) 
    3646    BANNERS = 6 
    3747     
    38     bannerplace = models.ForeignKey(Bannerpage) #, edit_inline=models.TABULAR, min_num_in_admin=BANNERS, max_num_in_admin=BANNERS)     
     48    bannerplace = models.ForeignKey(Bannerpage, edit_inline=models.TABULAR, min_num_in_admin=BANNERS, max_num_in_admin=BANNERS)     
    3949    bannertype = models.SmallIntegerField(_('Banner place'), choices=BANNER_TYPE) 
    40     bannercode = models.TextField(_('Code'), blank=True) #, core=True 
    41     is_published = models.BooleanField(_('Published')) #, core=True 
    42     one_page_only = models.BooleanField(_('Only in this URL')) #, core=True 
     50    bannercode = models.TextField(_('Code'), blank=True, core=True) 
     51    is_published = models.BooleanField(_('Published'), core=True) 
     52    one_page_only = models.BooleanField(_('Only in this URL'), core=True) 
     53    child_page_only = models.BooleanField(_('Only on childrens'), core=True) 
    4354     
    4455    class Meta: 
     
    4758        verbose_name_plural = _('banners') 
    4859        unique_together = (('bannerplace', 'bannertype'),) 
    49          
     60     
    5061    def __unicode__(self): 
    5162            return str(self.bannertype) 
    5263 
    53 class BannerInline(admin.TabularInline): 
    54     model = Banners 
    55  
    56  
    57 class BannerpageAdmin(admin.ModelAdmin): 
    58     list_display = ('url', 'is_published') 
    59     list_filter = ('is_published',) 
    60     search_fields = ('url', )     
    61     inlines = [ BannerInline, ] 
    62 admin.site.register(Bannerpage, BannerpageAdmin) 
     64#class BannerInline(admin.TabularInline): 
     65#    model = Banners 
     66# 
     67# 
     68#class BannerpageAdmin(admin.ModelAdmin): 
     69#    list_display = ('url', 'is_published') 
     70#    list_filter = ('is_published',) 
     71#    search_fields = ('url', )     
     72#    inlines = [ BannerInline, ] 
     73#admin.site.register(Bannerpage, BannerpageAdmin) 
  • plesonet_banners/trunk/templatetags/banners_tags.py

    r1 r32  
    22from apps.plesonet_banners.models import Bannerpage, Banners  
    33from django.template import Library 
     4from apps.lib.threadlocals import get_request 
     5 
     6from scache.tags import cached_inclusion_tag 
     7from django.db.models import signals  
    48 
    59register = Library() 
     10 
    611 
    712@register.inclusion_tag('plesonet_banners/show_banner.html', takes_context=True) 
     
    1116    url = context['request'].path 
    1217     
    13     # banner only this page 
    1418    banners = Banners.objects.filter( 
    1519                                    bannerplace__is_published=True,  
    16                                     bannerplace__url__iexact=url,  
    1720                                    is_published=True,  
    1821                                    bannertype=banner_type) 
    1922     
    20     if banners: 
    21         return {'banner': banners[0]} 
     23     
     24    #better to find proper banner on client-side, than making a dozen of sql requests 
     25    for b in banners: 
     26        if b.bannerplace.url == url and b.child_page_only == False: 
     27            return {'banner': b}     
    2228     
    2329    # last word 
    2430    url = url.rsplit('/',1)[0] 
     31    if url == "": 
     32        return {'banner': None} 
    2533     
    2634    # parent banners 
     
    2836       url = url.rsplit('/',1)[0] 
    2937       select_url = url + '/' 
    30         
    31        banners = Banners.objects.filter( 
    32                                         bannerplace__is_published=True,  
    33                                         bannerplace__url__iexact=select_url,  
    34                                         is_published=True,  
    35                                         bannertype=banner_type) 
    36         
    37        if banners: 
    38            if not banners[0].one_page_only: 
    39                banner = banners[0] 
    40                break 
     38               
     39       for b in banners: 
     40           if b.bannerplace.url == select_url and not b.one_page_only: 
     41               return {'banner': b} 
    4142        
    4243       if url.find('/') : break   
    4344         
    44     return {'banner': banner} 
     45    return {'banner': None}