Browse Source

Allow default/manual ordering of child pages in navbar and index pages

Fixes issue #102
Cory Sutyak 6 years ago
parent
commit
ea75fb31b5

+ 18 - 0
coderedcms/migrations/0009_auto_20190201_1546.py

@@ -0,0 +1,18 @@
+# Generated by Django 2.1.5 on 2019-02-01 20:46
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('coderedcms', '0008_auto_20190122_1242'),
+    ]
+
+    operations = [
+        migrations.AlterField(
+            model_name='coderedpage',
+            name='index_order_by',
+            field=models.CharField(blank=True, choices=[('', 'Default Ordering'), ('-first_published_at', 'Date first published, newest to oldest'), ('first_published_at', 'Date first published, oldest to newest'), ('-last_published_at', 'Date updated, newest to oldest'), ('last_published_at', 'Date updated, oldest to newest'), ('title', 'Title, alphabetical'), ('-title', 'Title, reverse alphabetical')], default='', max_length=255, verbose_name='Order child pages by'),
+        ),
+    ]

+ 4 - 2
coderedcms/models/page_models.py

@@ -133,8 +133,9 @@ class CoderedPage(Page, metaclass=CoderedPageMeta):
 
     # Subclasses can override these fields to enable custom
     # ordering based on specific subpage fields.
-    index_order_by_default = '-first_published_at'
+    index_order_by_default = ''
     index_order_by_choices = (
+        ('', _('Default Ordering')),
         ('-first_published_at', _('Date first published, newest to oldest')),
         ('first_published_at', _('Date first published, oldest to newest')),
         ('-last_published_at', _('Date updated, newest to oldest')),
@@ -151,6 +152,7 @@ class CoderedPage(Page, metaclass=CoderedPageMeta):
         choices=index_order_by_choices,
         default=index_order_by_default,
         verbose_name=_('Order child pages by'),
+        blank=True,
     )
     index_num_per_page = models.PositiveIntegerField(
         default=10,
@@ -481,7 +483,7 @@ class CoderedPage(Page, metaclass=CoderedPageMeta):
         """
         Override to return query of subpages as defined by `index_` variables.
         """
-        if self.index_query_pagemodel:
+        if self.index_query_pagemodel and self.index_order_by:
             querymodel = resolve_model_string(self.index_query_pagemodel, self._meta.app_label)
             return querymodel.objects.child_of(self).live().order_by(self.index_order_by)
 

+ 1 - 0
coderedcms/project_template/website/models.py

@@ -18,6 +18,7 @@ class ArticlePage(CoderedArticlePage):
     """
     class Meta:
         verbose_name = 'Article'
+        ordering = ['-first_published_at',]
 
     # Only allow this page to be created beneath an ArticleIndexPage.
     parent_page_types = ['website.ArticleIndexPage']

+ 2 - 4
coderedcms/templates/coderedcms/blocks/base_link_block.html

@@ -34,10 +34,8 @@
             <li>{% include_block sub_link with aclass="dropdown-item" %}</li>
         {% endfor %}
         {% if value.show_child_links %}
-            {% for child in value.page.get_children %}
-                {% if child.live %}
-                    <li><a class="dropdown-item" href="{% pageurl child %}">{{child.title}}</a></li>
-                {% endif %}
+            {% for child in value.page.specific.get_index_children %}
+                <li><a class="dropdown-item" href="{% pageurl child %}">{{child.title}}</a></li>
             {% endfor %}
         {% endif %}
     </ul>

+ 6 - 6
coderedcms/templates/coderedcms/pages/article_index_page.html

@@ -10,16 +10,16 @@
         {% if self.show_images %}
         <div class="col-md">
             {% if article.cover_image %}
-                {% image article.cover_image fill-1000x500 as cover_image %}
-                <a href="{{article.url}}" title="{{article.title}}"><img src="{{cover_image.url}}" class="w-100" alt="{{article.title}}" /></a>
+                {% image article.specific.cover_image fill-1000x500 as cover_image %}
+                <a href="{{article.specific.url}}" title="{{article.title}}"><img src="{{cover_image.url}}" class="w-100" alt="{{article.title}}" /></a>
             {% endif %}
         </div>
         {% endif %}
         <div class="col-md">
-            <h3><a href="{{article.url}}">{{article.title}}</a></h3>
-            {% if self.show_captions and article.caption %}<p class="lead">{{article.caption}}</p>{% endif %}
-            {% if self.show_meta %}<p>{{article.get_pub_date}}{% if article.get_author_name %} &bull; {{article.get_author_name}}{% endif %}</p>{% endif %}
-            {% if self.show_preview_text %}<p>{{article.body_preview}}</p>{% endif %}
+            <h3><a href="{{article.specific.url}}">{{article.title}}</a></h3>
+            {% if self.show_captions and article.specific.caption %}<p class="lead">{{article.specific.caption}}</p>{% endif %}
+            {% if self.show_meta %}<p>{{article.specific.get_pub_date}}{% if article.specific.get_author_name %} &bull; {{article.specific.get_author_name}}{% endif %}</p>{% endif %}
+            {% if self.show_preview_text %}<p>{{article.specific.body_preview}}</p>{% endif %}
         </div>
     </div>
     {% if not forloop.last %}