Custom Output Format for vcard

Hello, a question for someone who understands how output formats work.

I see from https://gohugo.io/templates/output-formats that I can create a page in that format, but, what I’d like to do is generate a vcard for records in a json file in data. I want to let visitors be able to quickly download the vcard for each contact.

Because vcards can have multiple entries in a single text file, I assume I can make one custom template for a single page that represents a big vcard with lots of entries, pulling from the json. I’m not sure if this is useful for people though in practice.

Of course, I can always mark up the records in html in “hcard” microformat (range over the json from data and make a table on a page, with the microformat markup), but, that depends on browser plugins to work. I can also parse the json into vcards with a separate script before generating the site, but, I’d like to see if I can somehow get hugo to do it.

Any advise appreciated. Thanks!

1 Like

Missed it by that much. If anyone else comes looking, I just wrote up a post on just how to do this.

Basically you need to add an outputFormat to your config

  outputFormats:
    vcf:
      name: vcf
      baseName: contact-info
      mediaType: text/vcard
      isPlainText: true

Then add outputs to a page type

  outputs:
    home:
     - HTML
     - RSS
    page:
     - HTML
     - vcf
    section:
     - HTML

Then add the template in /layouts/_default/contact.vcf.

This outputs a contact.vcf file for each page.

2 Likes

Thanks @matt-antone, I will see if I can incorporate that idea to range over data.

I haven’t tried it in this case, but I think you can limit which pages get the treatment using a content type.

1 Like

The docs say:

  • The outputs definition is per Page Kind ( page , home , section , taxonomy , or taxonomyTerm ).

But you spurred me on to read a little further. Turns out you can specify the output at the page level. If you add the outputs at the page level, this fixes the necessary .vcf files issue:

outputs:
- html
- vcf