Yaml syntax and "complex" content

Hi list,

I 'm new to Grav and use skeleton-deliver-theme as based theme and I’d like to get sophisticated text in place of raw text using yaml syntax.

Here is the kind of raw text (lorem ips) inside the bundled text. How could I replace the desc field by html / markdown content. Actually, I want my text on multi lines containing list.

—yaml
title: We would like to hear from you
menu: false
services:
- icon: cog
title: My title
desc: “”
- icon: inbox
title: Service Title 3
desc: “Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras mattis consectetur purus sit amet fermentum.”
- icon: headphones
title: Service Title 4
desc: “Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum m assa justo sit amet risus. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras mattis consectetur purus sit amet fermentum.”
- icon: ticket
title: Service Title 5
desc: “Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras mattis consectetur purus sit amet fermentum.”


My wanted result is (as markdown syntax) :

--- markdown
Fusce dapibus, tellus ac cursus commodo, tortor mauris [condimentum](http://www.link.com) nibh, ut fermentum massa justo sit amet risus. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.

* list Item 1
* list Item 2
* list Item 3

Sed posuere consectetur est at lobortis. Cras mattis *consectetur* purus sit amet fermentum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras mattis consectetur purus sit amet fermentum.

Many thnaks for your reply !

I’m not really following how the header yaml is supposed to relate to the wanted markdown syntax?

Actually, I don’t really want markdown syntax. I would be happy to be able to write html into yaml file.
What would be your advice ?

  1. to write HTML in yaml files, (if possible, of course ?)
  2. or just remove the (default) template loops on items and hard code it manually into HTML format.
  3. others options ?

Thanks for your reply

So it sound like you want to output desc split with a list in the middle? The best way I know to do that is to create two separate fields like this:

desc1: Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus. Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. 
desc2: Sed posuere consectetur est at lobortis. Cras mattis consectetur purus sit amet fermentum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras mattis consectetur purus sit amet fermentum.
item1: list Item 1
item2: list Item 2
item3: list Item 3

And then outputting them in the template like this:

{{ page.header.services.desc1 }}
<ul>
<li>{{ page.header.services.item1 }}</li>
<li>{{ page.header.services.item2 }}</li>
<li>{{ page.header.services.item3 }}</li>
</ul>
{{ page.header.services.desc2 }}

Of course, that’s assuming that you plan to always have the same number of list items. If you wanted, you could probably use a for loop to create li elements as needed.

Thanks for your reply. The proposed solution is ok, if all services items have list but this is not my case.

One desc item will have 2 paragraphs and no list, another 1 paragraph + 1 list, and so one …

Any complement or adapted solution for my needs ?

You can use {% if page.header.services.item1 %} (and so on) to determine if you have content to render. See the twig docs for additional flow control statements.

thanks for reply.

I’m doing something similiar, but I use modules (subpages), instead of a deep nested yaml file. This way files look like

--
icon: headphones
title: Service Title 4
--
 Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum 

Then in you template put {{ content }} where you need the markdown rendered text. It also makes it easier to work with your images because you put it in the module folder and can access it with pages.media.images|first
http://learn.getgrav.org/content/modular

Thanks Ryan. It is probably the best options regarding my needs.

Actually, I should have named my topic “Is it possible to store html content in yaml var”. But from search on Internet and from your answers, I guess the answer is No.