Created
October 27, 2010 17:01
-
-
Save franckbret/649455 to your computer and use it in GitHub Desktop.
Trying to find a way for using placeholder in place of content entry, add ZINNIA_WYSIWYG = 'placeholder' to your settings to see it in action
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/zinnia/admin/entry.py b/zinnia/admin/entry.py | |
index 858ac76..435d713 100644 | |
--- a/zinnia/admin/entry.py | |
+++ b/zinnia/admin/entry.py | |
@@ -12,6 +12,7 @@ from django.utils.translation import ugettext_lazy as _ | |
from django.core.urlresolvers import reverse, NoReverseMatch | |
from tagging.models import Tag | |
+from cms.admin.placeholderadmin import PlaceholderAdmin | |
from zinnia import settings | |
from zinnia.managers import HIDDEN | |
@@ -20,12 +21,13 @@ from zinnia.ping import DirectoryPinger | |
from zinnia.admin.forms import EntryAdminForm | |
-class EntryAdmin(admin.ModelAdmin): | |
+class EntryAdmin(PlaceholderAdmin): | |
"""Admin for Entry model""" | |
form = EntryAdminForm | |
date_hierarchy = 'creation_date' | |
- fieldsets = ((_('Content'), {'fields': ('title', 'content', | |
- 'image', 'status')}), | |
+ fieldsets = ((_('Content'), {'fields': ('title', 'image', 'status', 'content')}), | |
+ (None, {'fields': ('placeholder',), | |
+ 'classes': ('plugin-holder', 'plugin-holder-nopage')}), | |
(_('Options'), {'fields': ('excerpt', 'template', 'related', | |
'authors', 'creation_date', | |
'start_publication', | |
@@ -141,19 +143,36 @@ class EntryAdmin(admin.ModelAdmin): | |
{'url': short_url} | |
get_short_url.allow_tags = True | |
get_short_url.short_description = _('short url') | |
+ | |
+ def get_placeholder_content(self, entry): | |
+ """Use render_placeholder to parse placeholder content and give the | |
+ result to entry content field""" | |
+ content = render_placeholder(entry.placeholder, context) | |
# Custom Methods | |
def save_model(self, request, entry, form, change): | |
- """Save the authors, update time, make an excerpt""" | |
+ """Save the authors, update time, make an excerpt. | |
+ If ZINNIA_WYSIWYG = 'placeholders' render placeholder to content.""" | |
+ | |
+ if settings.WYSIWYG == 'placeholder' : | |
+ try: | |
+ from cms.plugin_rendering import render_placeholder | |
+ except ImportError: | |
+ raise ImproperlyConfigured, "Could not load cms.plugin_rendering" | |
+ | |
+ context = {} | |
+ context['request'] = request | |
+ entry.content = render_placeholder(entry.placeholder, context) | |
+ | |
if not form.cleaned_data.get('excerpt') and entry.status == PUBLISHED: | |
entry.excerpt = truncate_words(strip_tags(entry.content), 50) | |
if entry.pk and not request.user.has_perm('zinnia.can_change_author'): | |
form.cleaned_data['authors'] = entry.authors.all() | |
- | |
+ | |
if not form.cleaned_data.get('authors'): | |
form.cleaned_data['authors'].append(request.user) | |
- | |
+ | |
entry.last_update = datetime.now() | |
entry.save() | |
@@ -164,16 +183,16 @@ class EntryAdmin(admin.ModelAdmin): | |
return queryset | |
return request.user.entry_set.all() | |
- def formfield_for_manytomany(self, db_field, request, **kwargs): | |
- """Filters the disposable authors""" | |
- if db_field.name == 'authors': | |
- if request.user.has_perm('zinnia.can_change_author'): | |
- kwargs['queryset'] = User.objects.filter(is_staff=True) | |
- else: | |
- kwargs['queryset'] = User.objects.filter(pk=request.user.pk) | |
+# def formfield_for_manytomany(self, db_field, request, **kwargs): | |
+# """Filters the disposable authors""" | |
+# if db_field.name == 'authors': | |
+# if request.user.has_perm('zinnia.can_change_author'): | |
+# kwargs['queryset'] = User.objects.filter(is_staff=True) | |
+# else: | |
+# kwargs['queryset'] = User.objects.filter(pk=request.user.pk) | |
- return super(EntryAdmin, self).formfield_for_manytomany( | |
- db_field, request, **kwargs) | |
+# return super(EntryAdmin, self).formfield_for_manytomany( | |
+# db_field, request, **kwargs) | |
def get_actions(self, request): | |
"""Define user actions by permissions""" | |
@@ -250,34 +269,34 @@ class EntryAdmin(admin.ModelAdmin): | |
ping_directories.short_description = _('Ping Directories for ' \ | |
'selected entries') | |
- def get_urls(self): | |
- entry_admin_urls = super(EntryAdmin, self).get_urls() | |
- urls = patterns('django.views.generic.simple', | |
- url(r'^autocomplete_tags/$', 'direct_to_template', | |
- {'template': 'admin/zinnia/entry/autocomplete_tags.js', | |
- 'mimetype': 'application/javascript'}, | |
- name='zinnia_entry_autocomplete_tags'), | |
- url(r'^wymeditor/$', 'direct_to_template', | |
- {'template': 'admin/zinnia/entry/wymeditor.js', | |
- 'mimetype': 'application/javascript'}, | |
- name='zinnia_entry_wymeditor'),) | |
- return urls + entry_admin_urls | |
- | |
- def _media(self): | |
- MEDIA_URL = settings.MEDIA_URL | |
- media = super(EntryAdmin, self).media + \ | |
- Media(css={'all': ('%scss/jquery.autocomplete.css' % MEDIA_URL,)}, | |
- js=('%sjs/jquery.js' % MEDIA_URL, | |
- '%sjs/jquery.bgiframe.js' % MEDIA_URL, | |
- '%sjs/jquery.autocomplete.js' % MEDIA_URL, | |
- reverse('admin:zinnia_entry_autocomplete_tags'),)) | |
- | |
- if settings.WYSIWYG == 'wymeditor': | |
- media += Media(js=('%sjs/wymeditor/jquery.wymeditor.pack.js' % MEDIA_URL, | |
- reverse('admin:zinnia_entry_wymeditor'))) | |
- elif settings.WYSIWYG == 'tinymce': | |
- from tinymce.widgets import TinyMCE | |
- media += TinyMCE().media + Media( | |
- js=(reverse('tinymce-js', args=('admin/zinnia/entry',)),)) | |
- return media | |
- media = property(_media) | |
+# def get_urls(self): | |
+# entry_admin_urls = super(EntryAdmin, self).get_urls() | |
+# urls = patterns('django.views.generic.simple', | |
+# url(r'^autocomplete_tags/$', 'direct_to_template', | |
+# {'template': 'admin/zinnia/entry/autocomplete_tags.js', | |
+# 'mimetype': 'application/javascript'}, | |
+# name='zinnia_entry_autocomplete_tags'), | |
+# url(r'^wymeditor/$', 'direct_to_template', | |
+# {'template': 'admin/zinnia/entry/wymeditor.js', | |
+# 'mimetype': 'application/javascript'}, | |
+# name='zinnia_entry_wymeditor'),) | |
+# return urls + entry_admin_urls | |
+ | |
+# def _media(self): | |
+# MEDIA_URL = settings.MEDIA_URL | |
+# media = super(EntryAdmin, self).media + \ | |
+# Media(css={'all': ('%scss/jquery.autocomplete.css' % MEDIA_URL,)}, | |
+# js=('%sjs/jquery.js' % MEDIA_URL, | |
+# '%sjs/jquery.bgiframe.js' % MEDIA_URL, | |
+# '%sjs/jquery.autocomplete.js' % MEDIA_URL, | |
+# reverse('admin:zinnia_entry_autocomplete_tags'),)) | |
+ | |
+# if settings.WYSIWYG == 'wymeditor': | |
+# media += Media(js=('%sjs/wymeditor/jquery.wymeditor.pack.js' % MEDIA_URL, | |
+# reverse('admin:zinnia_entry_wymeditor'))) | |
+# elif settings.WYSIWYG == 'tinymce': | |
+# from tinymce.widgets import TinyMCE | |
+# media += TinyMCE().media + Media( | |
+# js=(reverse('tinymce-js', args=('admin/zinnia/entry',)),)) | |
+# return media | |
+# media = property(_media) | |
diff --git a/zinnia/models.py b/zinnia/models.py | |
index 120c01b..3cd7f1a 100644 | |
--- a/zinnia/models.py | |
+++ b/zinnia/models.py | |
@@ -16,6 +16,7 @@ try: | |
except ImportError: | |
MPTTModel = models.Model | |
from tagging.fields import TagField | |
+from cms.models.fields import PlaceholderField | |
from zinnia.settings import USE_BITLY | |
from zinnia.settings import UPLOAD_TO | |
@@ -80,7 +81,8 @@ class Entry(models.Model): | |
image = models.ImageField(_('image'), upload_to=UPLOAD_TO, | |
blank=True, help_text=_('used for illustration')) | |
- content = models.TextField(_('content')) | |
+ content = models.TextField(_('content'), blank=True) | |
+ placeholder = PlaceholderField('content') | |
excerpt = models.TextField(_('excerpt'), blank=True, | |
help_text=_('optional element')) | |
diff --git a/zinnia/settings.py b/zinnia/settings.py | |
index 0eb8dfa..5685e72 100644 | |
--- a/zinnia/settings.py | |
+++ b/zinnia/settings.py | |
@@ -18,7 +18,7 @@ ADVANCED_SEARCH = getattr(settings, 'ZINNIA_ADVANCED_SEARCH', True) | |
WYSIWYG = getattr(settings, 'ZINNIA_WYSIWYG', | |
'tinymce' in settings.INSTALLED_APPS \ | |
- and 'tinymce' or 'wymeditor') | |
+ and 'tinymce' or 'wymeditor' or 'placeholder') | |
MAIL_COMMENT = getattr(settings, 'ZINNIA_MAIL_COMMENT', True) | |
MAIL_COMMENT_REPLY = getattr(settings, 'ZINNIA_MAIL_COMMENT_REPLY', False) | |
diff --git a/zinnia/templates/zinnia/_entry_detail.html b/zinnia/templates/zinnia/_entry_detail.html | |
index b90028c..9f6fd7f 100644 | |
--- a/zinnia/templates/zinnia/_entry_detail.html | |
+++ b/zinnia/templates/zinnia/_entry_detail.html | |
@@ -1,4 +1,4 @@ | |
-{% load tagging_tags comments i18n %} | |
+{% load tagging_tags comments i18n placeholder_tags %} | |
<div class="entry-header span-16 last"> | |
<h2 class="entry-title"> | |
@@ -41,7 +41,8 @@ | |
</div> | |
{% endif %} | |
<div class="entry-content"> | |
- {{ object_content }} | |
+ {% comment %}{% render_placeholder object.content "640" %}{% endcomment %} | |
+ {{ object_content }} | |
</div> | |
</div> | |
diff --git a/zinnia/templatetags/zinnia_tags.py b/zinnia/templatetags/zinnia_tags.py | |
index 2b1752b..2558d93 100644 | |
--- a/zinnia/templatetags/zinnia_tags.py | |
+++ b/zinnia/templatetags/zinnia_tags.py | |
@@ -23,7 +23,7 @@ from zinnia.comparison import pearson_score | |
register = Library() | |
VECTORS = VectorBuilder({'queryset': Entry.published.all(), | |
- 'fields': ['title', 'excerpt', 'content']}) | |
+ 'fields': ['title', 'excerpt']}) | |
CACHE_ENTRIES_RELATED = {} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment