takeit/AmpHtmlBundle

How can I define multiple entities to be amp-ified?

echosa opened this issue ยท 3 comments

Currently, I'm able to get my Article entities "amp-ified" like this (after changing the default amp-theme to call the correct getters):

takeit_amp_html:
    model: MyBundle\Entity\Article
    routing:
        route_strategy:
            pattern: '{controller}/{action}'
            parameter: 'url'

With that, I can go to /platform/amp/article/view/article-url-goes-here and see the amp version.

Now, I'd like to also have the same thing for News entities. However, I don't see a way to define multiple entities, though. Am I missing something? I'd like something like this or similar:

takeit_amp_html:
    entity: 'article'
        model: MyBundle\Entity\Article
        routing:
            route_strategy:
                pattern: '{controller}/{action}'
                parameter: 'url'
        theme:
            current_theme: "article-theme"
    entity: 'news'
        model: MyBundle\Entity\News
        routing:
            route_strategy:
                pattern: '{controller}/{action}'
                parameter: 'url'
        theme:
            current_theme: "news-theme"

hi @echosa,
currently, it is not possible to define multiple entities to be amp-ified. I didn't have a use case for this yet. Feel free to contribute tho ๐Ÿ˜„

I think there should be only one strategy enabled at the same time to access articles in AMP format. Using Route or Parameter strategy.

The config would look like:

takeit_amp_html:
    routing:
        route_strategy:
            parameter: 'url'
    theme:
        current_theme: "article-theme"
    classes:
        article:
            model: MyBundle\Entity\Article
            route_pattern: '{controller}/{action}' # possible to define its value only when route strategy is enabled
        news:
            model: MyBundle\Entity\News
            route_pattern: '{controller}/{action}' # possible to define its value only when route strategy is enabled

You would then, be able to define route_pattern for each entity if your urls are different and if Route strategy is used.

You would also have one theme for all entities, which should be fine imo. No idea why would you want to have different themes per entity? Is that also your use case? I would love to get more info about it.

This way you would be able to define multiple entities to be amp-ified.

Let me know what do you think about it, or maybe if you have a better idea or if I missed something - I'm open for suggestions ๐Ÿ˜ƒ

No idea why would you want to have different themes per entity?

The themes have to call getters on the entities. If I have $article->getBody() but $news->getContent(), for instance, then I couldn't just have {{ object.body }} in the theme. In this simple case, I suppose I could add a getBody() method to News that just calls $this->getContent(), as a wrapper method. The AmpInterface doesn't define any methods or contract. That's why I recommended different themes. Also, it's possible you'd want to present different content in different ways.

Other than that, I think what you said is good. I could argue either way with having one strategy for all, or multiple strategies, but without actually touching the code, I don't know how difficult either solution would be.

Not sure if I have time to implement this myself. If I do, I"ll definitely PR it.

Another reason to have different entities is that there are different schemas for Article and NewsArticle, so if you're going to provide proper structured data, you need to be able to distinguish them.

For reference: https://developers.google.com/search/docs/data-types/articles