Hi,
I’m very new to Grav and looking for a way to extract page child element from page.collection array, alike getting images using a loop:
{% for p in page.collection %}
<li><a href={{ p.url }}>{{ p.title }}</a></li>
{% for image in p.media.images %}
<li><img src={{ image.url }} /></li>
{% endfor %}
but instead something alike this:
{% for p in page.collection %}
{% for child in p.content %}
<li>{{ child }}</li>
{% endfor %}
{% endfor %}
while expecting to get a list of content child elems like <p>..</p>
and such.
Looking for Twig ways of doing this i found this that mentions Twig tweak module - would it be an option within Grav and if, how would one add a Twig module to Grav?
Any other solution would be just as welcome too
Cheers
@binary.koala, Do you want to loop through all pages in page.collection
and list all children of the current page in the loop?
If so, you could try:
{% for p in page.collection %}
{% set pChildren = p.evaluate(['@self.children']) %}
{% for child in pChildren %}
<li>{{ child.title }}</li>
{% endfor %}
{% endfor %}
If not, please explain what you are trying to achieve.
Hi, thanks for the response.
What I would like to achieve is to be able to extract partial content of child, say first <p></p>
.
{{ child.summary }}
gets me pretty close but i would still like to be able to pick-out only the first <p></p>
HTML element from that output. Should I be using a custom filter?
@binary.koala,
Should I be using a custom filter?
There is a Twig function regex_match you could try.
According the docs:
A helpful wrapper for the PHP preg_match() method, you can perform complex regular expression match on text via this filter:
regex_match('http://www.php.net/index.html', '@^(?:http://)?([^/]+)@i')
Array
(
[0] => http://www.php.net
[1] => www.php.net
)
1 Like
Why you don’t use the basic summary delimeter? Pages | Grav Documentation
1 Like