How do i get Subcategory Name from twig/timber file?

464 Views Asked by At

i can't find the {% if categoryName %} Code for parent / subcategory.

Please See my Screenshots and Codes:

Actually: enter image description here

Should be like this: enter image description here

Backend:

enter image description here

My Shortcode for those Views atm:

[events category="66"]

ShortcodeEvents.php File:

<?php

namespace WpTheme\Shortcodes\Module;

use WpTheme\Shortcodes\ShortcodeModule;

class ShortcodeEvents extends ShortcodeModule
{

    /**
     * @param $atts
     *
     * @return mixed
     */
    public function handle($atts, $content = null) {
        extract(shortcode_atts([
            'category' => false,
            'limit'    => - 1,
            'parent' => $sub_category->cat_ID,
        ], $atts));

        $args = [
            'posts_per_page' => $limit,
        ];

        if ($category) {
            $category = collect(explode(',', $category))->map(function ($value) {
                return trim($value);
            })->filter()->toArray();

            $args = collect($args)->merge([
                'tax_query' => [
                    [
                        'taxonomy' => 'event-category',
                        'field'    => 'term_id',
                        'terms'    => $category,
                    ],
                ],
            ])->toArray();

            $events = app(\WpTheme\PostTypes\Repository\Event::class)->all($args);
            $categoryName = get_term(array_shift($category), $taxonomy)->name;
        } else {
            $events = app(\WpTheme\PostTypes\Repository\Event::class)->allGroupedByCategory();
        }

        return $this->renderView('shortcodes/events.twig', compact('events', 'categoryName'), false);
    }
}

My twig File:

{% if events %}
    {% if categoryName %}
        <h2>{{ categoryName }}</h2>
        <hr class="mt-0 mb-8">
    {% endif %}

    {% for parentTerm in events %}
        <div class="{{ loop.index == 1 ? 'mb-default' : 'mt-default' }}">
            <div class="mb-8 mb-lg-12 mb-xl-16">
                <h2>{{ parentTerm.name }}</h2>

                {% if parentTerm.description %}
                    <p>{{ parentTerm.description }}</p>
                {% endif %}
            </div>

            {% for childTerm in parentTerm.childTerms %}
                <div class="mb-8 mb-lg-12">
                    <h3>{{ childTerm.name }}</h3>

                    {% for event in childTerm.events %}
                        {% set index = random() %}
                        <div class="my-4">
                            <b-button variant="unstyled" v-b-toggle.accordion-{{ index }} class="accordion-trigger">
                                <span class="plus"></span>
                                <h4>{{ event.title }}</h4>
                            </b-button>
                            <b-collapse id="accordion-{{ index }}" accordion="my-accordion" role="tabpanel">
                                <div class="py-4 py-lg-6">
                                    {% set speaker = event.meta('speaker') %}
                                    {% if speaker %}
                                        <p>
                                            <a href="{{ speaker.link }}">{{ speaker.title }}</a>
                                        </p>
                                    {% endif %}

                                    {% if event.meta('dates') %}
                                        <table class="table-responsive-md">
                                            <thead>
                                            <tr>
                                                <th>{{ function('trans', 'global.date') }}</th>
                                                <th>{{ function('trans', 'global.place') }}</th>
                                                <th>{{ function('trans', 'global.topic') }}</th>
                                            </tr>
                                            </thead>
                                            <tbody>
                                            {% for date in event.meta('dates') %}
                                                <tr>
                                                    <td class="text-nowrap">{{ date.date|date("d.m.Y") }}</td>
                                                    <td class="text-nowrap">{{ date.location }}</td>
                                                    <td>{{ date.topic }}</td>
                                                </tr>
                                            {% endfor %}
                                            </tbody>
                                        </table>
                                    {% endif %}
                                </div>
                        </b-collapse>
                        </div>
                    {% endfor %}
                </div>
            {% endfor %}
        </div>
    {% endfor %}
{% endif %}

I found out, that at least i can get some Items from Subcategory if i use:

{{ parentTerm.title }} instead of {{ event.title }}

{% if parentTerm.meta('dates') %} instead of {% if event.meta('dates') %}

But parentTerm.category or parentTerm.categoryName seems not working.

Any Ideas?

1

There are 1 best solutions below

0
On

@Alorsons I want to make sure you're aware that subcategories/child terms naturally come through any Timber\Term object via {{ term.children }} — this returns an array of other Timber\Term objects representing any children (subcategories for the category taxonomy — but will work with any hierarchical taxonomy)