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