Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

Added configurable plugin options for filtering listed pages. #1

Merged
merged 3 commits into from

2 participants

@gw0

Without these configurable options the plugin covers almost the same functionality as Django CMS's show_menu tag, which is not flexible enough in some situations.

gw0 added some commits
@gw0 gw0 Added configurable plugin options for filtering listed pages. 7c99d20
@gw0 gw0 Corrected location of South migrations folder.
--HG--
rename : migrations/0001_initial.py => cmsplugin_htmlsitemap/migrations/0001_initial.py
rename : migrations/__init__.py => cmsplugin_htmlsitemap/migrations/__init__.py
ab3e0a3
@gw0 gw0 README.rst updated and version increased. 6152187
@raphaa raphaa merged commit 8c2365c into from
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Sep 14, 2011
  1. @gw0
Commits on Sep 15, 2011
  1. @gw0

    Corrected location of South migrations folder.

    gw0 authored
    --HG--
    rename : migrations/0001_initial.py => cmsplugin_htmlsitemap/migrations/0001_initial.py
    rename : migrations/__init__.py => cmsplugin_htmlsitemap/migrations/__init__.py
  2. @gw0
This page is out of date. Refresh to see the latest.
View
1  MANIFEST.in
@@ -1,2 +1,3 @@
include README.rst
recursive-include cmsplugin_htmlsitemap/templates *
+recursive-include cmsplugin_htmlsitemap/migrations *.py
View
29 README.rst
@@ -12,11 +12,34 @@ Requirements
Installation
============
-Using pip to install the plugin::
+Using PyPI you can simply type into a terminal:
- pip install cmsplugin-htmlsitemap
+ pip install cmsplugin-htmlsitemap
+
+or
+
+ easy_install cmsplugin-htmlsitemap
Configuration
=============
-Add ``cmsplugin_htmlsitemap`` to the list of ``INSTALLED_APPS`` in your ``settings.py`` file.
+Add ``cmsplugin_htmlsitemap`` to the list of ``INSTALLED_APPS`` in your
+``settings.py`` file. Don't forget to syncdb your database or migrate if you're
+using ``south``.
+
+After adding the CMS plugin you can configure filtering of listed pages by their::
+
+ * starting/minimal level
+ * deepest/maximal level
+ * is in navigation
+ * exact match on created by
+ * match title containing substring
+ * URL match with regular expression
+
+Author
+======
+
+Copyright 2011 Raphael Jasjukaitis <webmaster@raphaa.de>
+Credits to GW <gw.2011@tnode.com or http://gw.tnode.com/>
+
+Released under the BSD license.
View
29 cmsplugin_htmlsitemap/cms_plugins.py
@@ -1,24 +1,39 @@
# -*- coding: utf-8 -*-
-
from django.contrib.sites.models import Site
-from django.utils.translation import ugettext as _
+from django.utils.translation import ugettext_lazy as _
from cms.models.pagemodel import Page
from cms.plugin_base import CMSPluginBase
from cms.plugin_pool import plugin_pool
+from cmsplugin_htmlsitemap import models
+import re
+
class HtmlSitemapPlugin(CMSPluginBase):
+ """HTML Sitemap CMS plugin."""
+
name = _('HTML Sitemap')
+ model = models.HtmlSitemap
render_template = 'cmsplugin_htmlsitemap/sitemap.html'
def render(self, context, instance, placeholder):
site = Site.objects.get_current()
pages = Page.objects.published(site=site).order_by('tree_id', 'lft')
- context.update(
- {'instance': instance,
- 'pages': pages
- }
- )
+ pages = pages.filter(level__gte=instance.level_min, level__lte=instance.level_max)
+ if not instance.in_navigation is None:
+ pages = pages.filter(in_navigation=instance.in_navigation)
+ if instance.match_created_by:
+ pages = pages.filter(created_by=instance.match_created_by)
+ if instance.match_title:
+ pages = pages.filter(title_set__title__contains=instance.match_title)
+ if instance.match_url:
+ pat = re.compile(instance.match_url, re.IGNORECASE)
+ pages = [ p for p in pages if pat.search(p.get_absolute_url()) ]
+ context.update({
+ 'instance':instance,
+ 'pages':pages,
+ })
return context
plugin_pool.register_plugin(HtmlSitemapPlugin)
+
View
63 cmsplugin_htmlsitemap/migrations/0001_initial.py
@@ -0,0 +1,63 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding model 'HtmlSitemap'
+ db.create_table('cmsplugin_htmlsitemap', (
+ ('cmsplugin_ptr', self.gf('django.db.models.fields.related.OneToOneField')(to=orm['cms.CMSPlugin'], unique=True, primary_key=True)),
+ ('level_min', self.gf('django.db.models.fields.PositiveSmallIntegerField')(default=0)),
+ ('level_max', self.gf('django.db.models.fields.PositiveSmallIntegerField')(default=100)),
+ ('in_navigation', self.gf('django.db.models.fields.NullBooleanField')(default=None, null=True, blank=True)),
+ ('match_created_by', self.gf('django.db.models.fields.CharField')(max_length=70, blank=True)),
+ ('match_title', self.gf('django.db.models.fields.CharField')(max_length=255, blank=True)),
+ ('match_url', self.gf('django.db.models.fields.CharField')(max_length=100, blank=True)),
+ ))
+ db.send_create_signal('cmsplugin_htmlsitemap', ['HtmlSitemap'])
+
+
+ def backwards(self, orm):
+
+ # Deleting model 'HtmlSitemap'
+ db.delete_table('cmsplugin_htmlsitemap')
+
+
+ models = {
+ 'cms.cmsplugin': {
+ 'Meta': {'object_name': 'CMSPlugin'},
+ 'creation_date': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'language': ('django.db.models.fields.CharField', [], {'max_length': '15', 'db_index': 'True'}),
+ 'level': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
+ 'lft': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
+ 'parent': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.CMSPlugin']", 'null': 'True', 'blank': 'True'}),
+ 'placeholder': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['cms.Placeholder']", 'null': 'True'}),
+ 'plugin_type': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'}),
+ 'position': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'rght': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'}),
+ 'tree_id': ('django.db.models.fields.PositiveIntegerField', [], {'db_index': 'True'})
+ },
+ 'cms.placeholder': {
+ 'Meta': {'object_name': 'Placeholder'},
+ 'default_width': ('django.db.models.fields.PositiveSmallIntegerField', [], {'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'slot': ('django.db.models.fields.CharField', [], {'max_length': '50', 'db_index': 'True'})
+ },
+ 'cmsplugin_htmlsitemap.htmlsitemap': {
+ 'Meta': {'ordering': "('level_min', 'level_max')", 'object_name': 'HtmlSitemap', 'db_table': "'cmsplugin_htmlsitemap'", '_ormbases': ['cms.CMSPlugin']},
+ 'cmsplugin_ptr': ('django.db.models.fields.related.OneToOneField', [], {'to': "orm['cms.CMSPlugin']", 'unique': 'True', 'primary_key': 'True'}),
+ 'in_navigation': ('django.db.models.fields.NullBooleanField', [], {'default': 'None', 'null': 'True', 'blank': 'True'}),
+ 'level_max': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '100'}),
+ 'level_min': ('django.db.models.fields.PositiveSmallIntegerField', [], {'default': '0'}),
+ 'match_created_by': ('django.db.models.fields.CharField', [], {'max_length': '70', 'blank': 'True'}),
+ 'match_title': ('django.db.models.fields.CharField', [], {'max_length': '255', 'blank': 'True'}),
+ 'match_url': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'})
+ }
+ }
+
+ complete_apps = ['cmsplugin_htmlsitemap']
View
0  cmsplugin_htmlsitemap/migrations/__init__.py
No changes.
View
28 cmsplugin_htmlsitemap/models.py
@@ -0,0 +1,28 @@
+# -*- coding: utf-8 -*-
+from django.db import models
+from django.utils.translation import ugettext_lazy as _
+
+from cms.models import CMSPlugin
+
+
+class HtmlSitemap(CMSPlugin):
+ """Model for HTML Sitemap CMS plugin."""
+
+ level_min = models.PositiveSmallIntegerField(_('starting level'), default=0)
+ level_max = models.PositiveSmallIntegerField(_('deepest level'), default=100)
+ in_navigation = models.NullBooleanField(_('is in navigation'), default=None)
+ match_created_by = models.CharField(_('exact match on created by'), blank=True,
+ max_length=70)
+ match_title = models.CharField(_('match title containing substring'), blank=True,
+ max_length=255)
+ match_url = models.CharField(_('URL match with regular expression'), blank=True,
+ max_length=100)
+
+ class Meta:
+ verbose_name = _('HTML Sitemap plugin')
+ verbose_name_plural = _('HTML Sitemap plugins')
+ ordering = ('level_min', 'level_max')
+
+ def __unicode__(self):
+ return u'HTML Sitemap {0}-{1}'.format(self.level_min, self.level_max)
+
View
2  setup.py 100644 → 100755
@@ -4,7 +4,7 @@
setup(
name='cmsplugin-htmlsitemap',
- version='0.1.0',
+ version='0.1.1',
description='HTML sitemap plugin for Django CMS',
long_description=open(os.path.join(os.path.dirname(__file__), 'README.rst')).read(),
author='Raphael Jasjukaitis',
Something went wrong with that request. Please try again.