You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
42 lines
1.5 KiB
42 lines
1.5 KiB
# -*- coding: utf-8 -*-
|
|
from django.contrib.sites.models import Site
|
|
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 . 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')
|
|
pages = pages.filter(level__gte=instance.level_min, level__lte=instance.level_max,
|
|
publisher_is_draft=False)
|
|
pages = pages.exclude(reverse_id='sitemap')
|
|
|
|
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)
|
|
|