---
title: Shared Category and Listing Template in Craft
date: 2016-10-18T11:05:00-04:00
author: cc_admin
canonical_url: "https://caffeinecreations.ca/blog/shared-category-and-listing-template-in-craft/"
section: Blog
---
![Code](https://caffeinecreations.ca/uploads/blog/_1920x660_crop_center-center_none_ns/code.jpg)

- [Code](https://caffeinecreations.ca/blog/category/code/), [Tutorial](https://caffeinecreations.ca/blog/category/code/tutorial/), [CraftCMS](https://caffeinecreations.ca/blog/category/craftcms/), [Craft Tips](https://caffeinecreations.ca/blog/category/craftcms/craft-tips/)

# Shared Category and Listing Template in Craft

I've been working on re-launching this site in [Craft CMS](https://craftcms.com/) and there are two remaining bits to take care of. One of those is getting the blog categories to work. The default way to do this is to set up a separate template just for categories.

I didn't want to do that as the design of the blog landing page and category landing page is exactly the same. I prefer to keep my templating dry and having duplicate templates wasn't going to achieve that.

I posted a question on the[ Craft Stack Exchange](http://craftcms.stackexchange.com/) site and got a [response that solved this for me](http://craftcms.stackexchange.com/a/17262/193) and keeps everything dry and works with pagination. So basically you set the parementers for craft.entries with a conditional and merge them if categories are set:

```
<button class="absolute z-10 flex items-center justify-center w-8 h-8 -translate-y-1/2  -right-4 -top-4" clipboard="" title="Copy to Clipboard" to="" type="button" x-clipboard.raw="{% set params = { section: 'blog', limit: 6 } %}
{% if category is defined %}
  {% set params = params | merge({ relatedTo: category }) %}
{% endif %}" x-data="">
	<svg class="h-5 w-5" viewbox="0 0 64 64" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
  <rect fill="#f3f4f6" height="53" rx="3" width="41" x="7" y="2"></rect>
  <rect fill="#f3f4f6" height="51" rx="3" width="39" x="19" y="11"></rect>
  <path d="M53.98 9.143h-3.97c-.082 0-.155.028-.232.047V5.023C49.778 2.253 47.473 0 44.64 0H10.217C7.384 0 5.08 2.253 5.08 5.023v46.843c0 2.77 2.305 5.023 5.138 5.023h6.037v2.268c0 2.67 2.216 4.843 4.941 4.843H53.98c2.725 0 4.942-2.173 4.942-4.843v-45.17c0-2.671-2.217-4.844-4.942-4.844zM7.11 51.866V5.023c0-1.649 1.394-2.991 3.106-2.991H44.64c1.712 0 3.106 1.342 3.106 2.99v46.844c0 1.649-1.394 2.991-3.106 2.991H10.217c-1.712 0-3.106-1.342-3.106-2.99zm49.778 7.29c0 1.551-1.306 2.812-2.91 2.812H21.195c-1.604 0-2.91-1.26-2.91-2.811v-2.268H44.64c2.833 0 5.138-2.253 5.138-5.023V11.128c.077.018.15.047.233.047h3.968c1.604 0 2.91 1.26 2.91 2.811v45.17z"></path>
  <path d="M38.603 13.206H16.254a1.015 1.015 0 1 0 0 2.032h22.35a1.015 1.015 0 1 0 0-2.032zM38.603 21.333H16.254a1.015 1.015 0 1 0 0 2.032h22.35a1.015 1.015 0 1 0 0-2.032zM38.603 29.46H16.254a1.015 1.015 0 1 0 0 2.032h22.35a1.015 1.015 0 1 0 0-2.032zM28.444 37.587h-12.19a1.015 1.015 0 1 0 0 2.032h12.19a1.015 1.015 0 1 0 0-2.032z"></path>
</svg>
<div class="sr-only">Copy to clipboard</div></button>```twig
{% set params = { section: 'blog', limit: 6 } %}
{% if category is defined %}
  {% set params = params | merge({ relatedTo: category }) %}
{% endif %}
```
```

This checks checks if the category is set and then restricts results related to the category. My final code with the for loop and pagination is here:

```
<button class="absolute z-10 flex items-center justify-center w-8 h-8 -translate-y-1/2  -right-4 -top-4" clipboard="" title="Copy to Clipboard" to="" type="button" x-clipboard.raw="{% set params = { section: 'blog', limit: 6 } %}
{% if category is defined %}
  {% set params = params | merge({ relatedTo: category }) %}
{% endif %}

{% set blogEntries = craft.entries(params) %}
{% paginate blogEntries as pageInfo, pageEntries %}

{% for entry in pageEntries %}
  <article class="col-sm-6 block" data-mh="blog-rows">

    more code here

  </article><!--block-->

{% endfor %}" x-data="">
	<svg class="h-5 w-5" viewbox="0 0 64 64" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
  <rect fill="#f3f4f6" height="53" rx="3" width="41" x="7" y="2"></rect>
  <rect fill="#f3f4f6" height="51" rx="3" width="39" x="19" y="11"></rect>
  <path d="M53.98 9.143h-3.97c-.082 0-.155.028-.232.047V5.023C49.778 2.253 47.473 0 44.64 0H10.217C7.384 0 5.08 2.253 5.08 5.023v46.843c0 2.77 2.305 5.023 5.138 5.023h6.037v2.268c0 2.67 2.216 4.843 4.941 4.843H53.98c2.725 0 4.942-2.173 4.942-4.843v-45.17c0-2.671-2.217-4.844-4.942-4.844zM7.11 51.866V5.023c0-1.649 1.394-2.991 3.106-2.991H44.64c1.712 0 3.106 1.342 3.106 2.99v46.844c0 1.649-1.394 2.991-3.106 2.991H10.217c-1.712 0-3.106-1.342-3.106-2.99zm49.778 7.29c0 1.551-1.306 2.812-2.91 2.812H21.195c-1.604 0-2.91-1.26-2.91-2.811v-2.268H44.64c2.833 0 5.138-2.253 5.138-5.023V11.128c.077.018.15.047.233.047h3.968c1.604 0 2.91 1.26 2.91 2.811v45.17z"></path>
  <path d="M38.603 13.206H16.254a1.015 1.015 0 1 0 0 2.032h22.35a1.015 1.015 0 1 0 0-2.032zM38.603 21.333H16.254a1.015 1.015 0 1 0 0 2.032h22.35a1.015 1.015 0 1 0 0-2.032zM38.603 29.46H16.254a1.015 1.015 0 1 0 0 2.032h22.35a1.015 1.015 0 1 0 0-2.032zM28.444 37.587h-12.19a1.015 1.015 0 1 0 0 2.032h12.19a1.015 1.015 0 1 0 0-2.032z"></path>
</svg>
<div class="sr-only">Copy to clipboard</div></button>```twig
{% set params = { section: 'blog', limit: 6 } %}
{% if category is defined %}
  {% set params = params | merge({ relatedTo: category }) %}
{% endif %}

{% set blogEntries = craft.entries(params) %}
{% paginate blogEntries as pageInfo, pageEntries %}

{% for entry in pageEntries %}
  <article class="col-sm-6 block" data-mh="blog-rows">

    more code here

  </article><!--block-->

{% endfor %}
```
```

The final piece to iron out before launching this site in Craft is getting my blog comments imported to disqus. Almost there.

## More Articles You May Like

[![Related Entry in URL Format with Craft CMS Channel Thumbnail](https://caffeinecreations.ca/uploads/blog/_680x320_crop_center-center_65_none_ns/craftcms.jpg)### Related Entry in URL Format with Craft CMS Channel](https://caffeinecreations.ca/blog/related-entry-in-url-format-with-craft-cms-channel/)

[![Craft Twig Cheatsheet for Visual Studio Code Thumbnail](https://caffeinecreations.ca/uploads/blog/_680x320_crop_center-center_65_none_ns/craftcms.jpg)### Craft Twig Cheatsheet for Visual Studio Code](https://caffeinecreations.ca/blog/craft-twig-cheatsheet-for-visual-studio-code/)

[![Client Controlled Site Navigation Thumbnail](https://caffeinecreations.ca/uploads/blog/_680x320_crop_center-center_65_none_ns/craftcms.jpg)### Client Controlled Site Navigation](https://caffeinecreations.ca/blog/client-controlled-site-navigation/)
