Ver código fonte

Added basic pods to the marketing app

master
David Winterbottom 15 anos atrás
pai
commit
4b268e4b23

BIN
examples/defaultshop/assets/images/pods/250px-Toad_in_the_hole.jpg Ver arquivo


BIN
examples/defaultshop/assets/images/pods/barry-white.gif Ver arquivo


BIN
examples/defaultshop/assets/images/pods/pod2.jpg Ver arquivo


+ 43
- 0
oscar/marketing/abstract_models.py Ver arquivo

@@ -6,7 +6,13 @@ try:
6 6
     BANNER_FOLDER = settings.OSCAR_BANNER_FOLDER
7 7
 except AttributeError: 
8 8
     BANNER_FOLDER = 'images/banners/'
9
+    
10
+try:
11
+    POD_FOLDER = settings.OSCAR_POD_FOLDER
12
+except AttributeError: 
13
+    POD_FOLDER = 'images/pods/'
9 14
 
15
+LEFT, RIGHT = ('Left', 'Right')
10 16
 
11 17
 class AbstractBanner(models.Model):
12 18
     u"""
@@ -14,6 +20,7 @@ class AbstractBanner(models.Model):
14 20
     """
15 21
     name = models.CharField(_("Name"), max_length=128)
16 22
     page_url = models.CharField(_('URL'), max_length=128, db_index=True)
23
+    display_order = models.PositiveIntegerField(default=0)
17 24
     link_url = models.URLField(blank=True, null=True, help_text="""This is 
18 25
         where the banner links to""")
19 26
     image = models.ImageField(upload_to=BANNER_FOLDER)
@@ -21,6 +28,8 @@ class AbstractBanner(models.Model):
21 28
     
22 29
     class Meta:
23 30
         abstract = True
31
+        ordering = ['page_url', 'display_order']
32
+        get_latest_by = "date_created"
24 33
         
25 34
     def __unicode__(self):
26 35
         return "%s (%s)" % (self.name, self.page_url)   
@@ -31,6 +40,40 @@ class AbstractBanner(models.Model):
31 40
     @property    
32 41
     def has_link(self):
33 42
         return self.link_url != None    
43
+    
44
+    
45
+class AbstractPod(models.Model):
46
+    u"""
47
+    A pod image linked to a particular page.
48
+    """
49
+    POSITION_CHOICES = (
50
+        (LEFT, _("Left of page")),
51
+        (RIGHT, _("Right of page")),
52
+    )
53
+    
54
+    name = models.CharField(_("Name"), max_length=128)
55
+    page_url = models.CharField(_('URL'), max_length=128, db_index=True)
56
+    page_position = models.CharField(_("Position"), max_length=128, choices=POSITION_CHOICES)
57
+    display_order = models.PositiveIntegerField(default=0)
58
+    link_url = models.URLField(blank=True, null=True, help_text="""This is 
59
+        where the pod links to""")
60
+    image = models.ImageField(upload_to=POD_FOLDER)
61
+    date_created = models.DateTimeField(auto_now_add=True)
62
+    
63
+    class Meta:
64
+        abstract = True
65
+        ordering = ["page_url", "page_position", 'display_order']
66
+        get_latest_by = "date_created"
67
+        
68
+    def __unicode__(self):
69
+        return "%s (%s)" % (self.name, self.page_url)   
70
+        
71
+    def save(self, *args, **kwargs):
72
+        super(AbstractPod, self).save(*args, **kwargs)
73
+        
74
+    @property    
75
+    def has_link(self):
76
+        return self.link_url != None 
34 77
 
35 78
         
36 79
     

+ 6
- 2
oscar/marketing/admin.py Ver arquivo

@@ -1,9 +1,13 @@
1 1
 from django.contrib import admin
2 2
 
3 3
 from oscar.services import import_module
4
-models = import_module('marketing.models', ['Banner'])
4
+models = import_module('marketing.models', ['Banner', 'Pod'])
5 5
 
6 6
 class BannerAdmin(admin.ModelAdmin):
7
-    pass
7
+    list_display = ['page_url', 'name']
8
+
9
+class PodAdmin(admin.ModelAdmin):
10
+    list_display = ['page_url', 'page_position', 'name']
8 11
 
9 12
 admin.site.register(models.Banner, BannerAdmin)
13
+admin.site.register(models.Pod, PodAdmin)

+ 15
- 3
oscar/marketing/context_processors.py Ver arquivo

@@ -2,15 +2,27 @@ from django.core.exceptions import ObjectDoesNotExist
2 2
 
3 3
 from oscar.services import import_module
4 4
 
5
-marketing_models = import_module('marketing.models', ['Banner'])
5
+marketing_models = import_module('marketing.models', ['Banner', 'Pod'])
6 6
 
7 7
 
8 8
 def banners(request):
9
+    bindings = {}
10
+    
11
+    
12
+    # Look for a banner
9 13
     try:
10 14
         banner = marketing_models.Banner._default_manager.get(page_url=request.path)
11
-        bindings = {'banner': banner}
15
+        bindings['banner'] = banner
12 16
     except ObjectDoesNotExist:
13
-        bindings = {}
17
+        pass
18
+    
19
+    # Looks for pods
20
+    try:
21
+        pods = marketing_models.Pod._default_manager.filter(page_url=request.path)
22
+        bindings['pods'] = pods
23
+    except ObjectDoesNotExist:
24
+        pass
25
+
14 26
     return bindings
15 27
 
16 28
         

+ 5
- 2
oscar/marketing/models.py Ver arquivo

@@ -1,7 +1,10 @@
1 1
 """
2
-Vanilla product models
2
+Vanilla marketing models
3 3
 """
4
-from oscar.marketing.abstract_models import AbstractBanner
4
+from oscar.marketing.abstract_models import AbstractBanner, AbstractPod
5 5
 
6 6
 class Banner(AbstractBanner):
7 7
     pass
8
+
9
+class Pod(AbstractPod):
10
+    pass

+ 10
- 0
oscar/templates/layout.html Ver arquivo

@@ -25,6 +25,16 @@
25 25
                 {% endif %}
26 26
             {% endif %}
27 27
             
28
+            {% if pods %}
29
+                {% for pod in pods %}
30
+                    {% if pod.has_link %}
31
+                        <a href="{{ pod.link_url }}" title="{{ pod.name }}"><img src="{{ pod.image.url }}" alt="{{ pod.name }}" /></a>
32
+                    {% else %}
33
+                        <img src="{{ pod.image.url }}" alt="{{ pod.name }}" />
34
+                    {% endif %}
35
+                {% endfor %}
36
+            {% endif %}
37
+            
28 38
             {% block header %}
29 39
             {% endblock %}
30 40
         </div>

+ 2
- 2
oscar/views.py Ver arquivo

@@ -1,7 +1,7 @@
1 1
 from django.conf import settings
2 2
 from django.http import HttpResponse, Http404, HttpResponseRedirect
3 3
 from django.template import Context, loader, RequestContext
4
-from django.shortcuts import render_to_response, get_object_or_404
4
+from django.shortcuts import render
5 5
 from django.core.urlresolvers import reverse
6 6
 from django.contrib import messages
7 7
 
@@ -64,4 +64,4 @@ class ModelView(object):
64 64
 
65 65
 def home(request):
66 66
     u"""Oscar home page"""
67
-    return render_to_response('home.html', locals())
67
+    return render(request, 'home.html', locals())

Carregando…
Cancelar
Salvar