2

This code for linking to a category page:

href="/products/?category={{ category.slug }}"

Generates this URL: www.website.com/products/?category=category-name

Can someone please tell me how to code links in menus (etc) that will produce URLs without the ?category= string being included in the URL. So that the URL would become: www.website.com/products/category-name

Many thanks for your help - it is greatly appreciated!

Brad Bell
  • 67,440
  • 6
  • 73
  • 143
MGX
  • 479
  • 1
  • 5
  • 12

1 Answers1

2

First thing you'll need to do is set up a route that ensures anything for /products/category-name gets routed to the correct template. You can do this from the control panel or via craft/config/routes.php

If you do this in your routes.php file you'd need something like this:

return array(
    'products/(.*?)' => 'products/index',
);

Which is telling Craft that for any url that contains products/any-characters it should use the products/index template.

Then, on that template, grab the segment that is the category slug

{% set catSegment = craft.request.segment(2) %}

You'll then need to get the category that has that slug

{% set category = craft.categories.slug(catSegment).first() %}

You then have a category model you can work with and can use a craft entries tag with a category criteria using

{% set products = craft.entries.relatedTo(category).find() %}

Loop through products to output your products.

foamcow
  • 2,019
  • 9
  • 20
  • Thanks so much for taking the time to reply - it's very much appreciated. – MGX Jul 11 '18 at 15:30
  • I'm still getting a 404 error for: www.website.com/products/category-name

    Using this mark-up on the menu.

    {% for category in craft.categories.group('products').level(1).all() %} {{ category.title }} {% endfor %}

    – MGX Jul 11 '18 at 15:30
  • Did you set up a route so that Craft knows which template to use? – foamcow Jul 11 '18 at 20:29
  • Firstly, thanks so much for taking the time to reply - it's very much appreciated. – MGX Jul 12 '18 at 10:04
  • Yes, I added a new route (via the control panel), specifically for the test category of: products/(.*?) to load the products/index template – MGX Jul 12 '18 at 10:17
  • But unfortunately, I still just get a 404 error, unless the URL includes:

    ?category=

    Is this (another) problem with Craft 3?

    – MGX Jul 12 '18 at 10:21