Chi
4 years ago
1 changed files with 66 additions and 0 deletions
@ -0,0 +1,66 @@ |
|||||||
|
# Using Twig Tweak to extend Views module functionality. |
||||||
|
|
||||||
|
Twig Tweak's `drupal_view()` method provides access to embed views within any |
||||||
|
Twig code, including dynamically from within each row of another view. This |
||||||
|
feature provides an alternate method to accomplish the nesting provided by the |
||||||
|
Views field view module. |
||||||
|
|
||||||
|
The most basic syntax for Twig Tweak's view embed simply specifies the view and |
||||||
|
the machine name you wish to embed, as follows: |
||||||
|
|
||||||
|
```twig |
||||||
|
{{ drupal_view('who_s_new', 'block_1') }} |
||||||
|
``` |
||||||
|
|
||||||
|
You can, however, also specify additional parameters which map to contextual |
||||||
|
filters you have configured in your view. |
||||||
|
|
||||||
|
```twig |
||||||
|
{{ drupal_view('who_s_new', 'block_1', arg_1, arg_2, arg_3) }} |
||||||
|
``` |
||||||
|
|
||||||
|
Nested View Example |
||||||
|
There are a lot of cases in views where you want to embed a list inside of each |
||||||
|
row. For example, when you have a list of product categories (taxonomy terms) |
||||||
|
and for each category, you want to list the 3 newest products. In this example, |
||||||
|
assume your content type is 'product', and has a reference field to a taxonomy |
||||||
|
named 'product categories'. |
||||||
|
|
||||||
|
Step1: Create your child view |
||||||
|
Create a view of the content of type 'product', and choose to create a block |
||||||
|
displaying an unformatted list of teasers, with 3 items per block. In this |
||||||
|
example, we'll use a view name of 'products_by_category'. Once the view is |
||||||
|
created, choose advanced and add a relationship to the taxonomy term that |
||||||
|
references 'product categories', and choose to require the relationship. Next, |
||||||
|
choose to add a "Contextual Filter" for "Term ID", and choose an action for when |
||||||
|
the filter value is not available (e.g. display contents of no results found). |
||||||
|
Set your desired sort and save your view. |
||||||
|
|
||||||
|
Step 2: Create your parent view |
||||||
|
Create a view of taxonomy terms of type 'product categories', and choose to |
||||||
|
create a page which displays an unformatted list of fields. Once this is |
||||||
|
created, you should see the preview showing all of the product categories. |
||||||
|
Choose to add a field of type "Term ID", and choose "Exclude from display"; this |
||||||
|
is necessary to make the term id available to the next field which uses |
||||||
|
Twig Tweak. Now, choose to add a field of type "Custom text" from the "Global" |
||||||
|
category. Inside that field, enter the Twig Tweak call to display the child view |
||||||
|
we created above, passing the tid as a contextual filter, as such: |
||||||
|
|
||||||
|
```twig |
||||||
|
{{ drupal_view('products_by_category', 'block_1', tid) }} |
||||||
|
``` |
||||||
|
|
||||||
|
You should now save your view, and be able to access the URL you assigned and |
||||||
|
see a list of product categories, each followed by the three most recent |
||||||
|
products within each. |
||||||
|
|
||||||
|
This example can be applied to any nested view scenario, including |
||||||
|
multiple-levels of nesting. |
||||||
|
|
||||||
|
Check if the view has results |
||||||
|
```twig |
||||||
|
{% set view = drupal_view_result('related', 'block_1')|length %} |
||||||
|
{% if view > 0 %} |
||||||
|
{{ drupal_view('related', 'block_1') }} |
||||||
|
{% endif %} |
||||||
|
``` |
Loading…
Reference in new issue