Hello,
Just wondering if you have a way to access the PageRenderRequestParameters inside a component. I am building a LocalePageLink component for SEO purpose, that translates the current page url into its localized version, instead of using a locale toggle with an action link. I need it for SEO friendly language switcher but also for alternate href. My component is working correctly, and will render <a href="#" t:type="LocalePageLink" t:id="localeEN" locale="en" page="mypagename” context=“1"> EN </a> will render: /en/mypagename/1 for locale en <a href="#" t:type="LocalePageLink" t:id="localeFR" locale=“fr" page="mypagename” context=“1"> EN </a> will render: /en/mypagename/1 for locale fr But I want my component to be smarter and deduce the page name, context and parameters from the current url if they are not specified to the component. I know how to get the page name using componentResources, but I didn’t find a way to get the activation context and the context parameters without parsing the url. On the same subject I would like to have better page name than the “java” page name. For example if my page name is BuyTicket.java I would like to have /en/buy-concert-ticket in english /fr/acheter-tickets-concert in french … and so on. So I would like to localize page names in url, and eventually improve the name for SEO purpose, do you know where should I hook ? I would be happy to share my components once they are functional. Thank you for your help, Numa --------------------------------------------------------------------- To unsubscribe, e-mail: [hidden email] For additional commands, e-mail: [hidden email] |
Yes, you can do it this way:
@Inject private PageRenderLinkTransformer linkTransformer; @Inject private RequestGlobals requestGlobals; PageRenderRequestParameters requestParameters = linkTransformer.decodePageRenderRequest(requestGlobals.getRequest()); On Wed, Nov 18, 2020 at 6:09 PM Numa Schmeder <[hidden email]> wrote: > Hello, > > Just wondering if you have a way to access the PageRenderRequestParameters > inside a component. > > I am building a LocalePageLink component for SEO purpose, that translates > the current page url into its localized version, instead of using a locale > toggle with an action link. > > I need it for SEO friendly language switcher but also for alternate href. > > My component is working correctly, and will render > <a href="#" t:type="LocalePageLink" t:id="localeEN" locale="en" > page="mypagename” context=“1"> EN </a> > will render: /en/mypagename/1 for locale en > > <a href="#" t:type="LocalePageLink" t:id="localeFR" locale=“fr" > page="mypagename” context=“1"> EN </a> > will render: /en/mypagename/1 for locale fr > > But I want my component to be smarter and deduce the page name, context > and parameters from the current url if they are not specified to the > component. > I know how to get the page name using componentResources, but I didn’t > find a way to get the activation context and the context parameters without > parsing the url. > > On the same subject I would like to have better page name than the “java” > page name. For example if my page name is BuyTicket.java I would like to > have > /en/buy-concert-ticket in english > /fr/acheter-tickets-concert in french > … and so on. > > So I would like to localize page names in url, and eventually improve the > name for SEO purpose, do you know where should I hook ? > > I would be happy to share my components once they are functional. > > Thank you for your help, > > Numa > --------------------------------------------------------------------- > To unsubscribe, e-mail: [hidden email] > For additional commands, e-mail: [hidden email] > > -- Ilya Obshadko |
Thanks, I will give it a try !
> Le 19 nov. 2020 à 07:45, Ilya Obshadko <[hidden email]> a écrit : > > Yes, you can do it this way: > > @Inject > private PageRenderLinkTransformer linkTransformer; > > @Inject > private RequestGlobals requestGlobals; > > PageRenderRequestParameters requestParameters = > linkTransformer.decodePageRenderRequest(requestGlobals.getRequest()); > > > > > > On Wed, Nov 18, 2020 at 6:09 PM Numa Schmeder <[hidden email]> wrote: > >> Hello, >> >> Just wondering if you have a way to access the PageRenderRequestParameters >> inside a component. >> >> I am building a LocalePageLink component for SEO purpose, that translates >> the current page url into its localized version, instead of using a locale >> toggle with an action link. >> >> I need it for SEO friendly language switcher but also for alternate href. >> >> My component is working correctly, and will render >> <a href="#" t:type="LocalePageLink" t:id="localeEN" locale="en" >> page="mypagename” context=“1"> EN </a> >> will render: /en/mypagename/1 for locale en >> >> <a href="#" t:type="LocalePageLink" t:id="localeFR" locale=“fr" >> page="mypagename” context=“1"> EN </a> >> will render: /en/mypagename/1 for locale fr >> >> But I want my component to be smarter and deduce the page name, context >> and parameters from the current url if they are not specified to the >> component. >> I know how to get the page name using componentResources, but I didn’t >> find a way to get the activation context and the context parameters without >> parsing the url. >> >> On the same subject I would like to have better page name than the “java” >> page name. For example if my page name is BuyTicket.java I would like to >> have >> /en/buy-concert-ticket in english >> /fr/acheter-tickets-concert in french >> … and so on. >> >> So I would like to localize page names in url, and eventually improve the >> name for SEO purpose, do you know where should I hook ? >> >> I would be happy to share my components once they are functional. >> >> Thank you for your help, >> >> Numa >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [hidden email] >> For additional commands, e-mail: [hidden email] >> >> > > -- > Ilya Obshadko --------------------------------------------------------------------- To unsubscribe, e-mail: [hidden email] For additional commands, e-mail: [hidden email] |
Hi,
for custom URLs you could use org.apache.tapestry5.services.linktransform.PageRenderLinkTransformer It's responsible for transforming/decoding PageRenderRequestParameters/Requests. This ensures that generated links will be correct, too. The only problem here would be the actual mapping between the path and the actual page / parameters, and vice-versa. Usually, the path contains some kind of unique identifier, making the actual name in the path more flexible. Medium has a hash at the end to actually identify the correct story, not the full path. Amazon has the product title in the URL, even though it can be changed freely, and it still works due to the rest of the path. It all depends on the purpose of the pages, and how often URLs change or are added. Is it a lot of dynamic content, e.g., article or product pages? An added identifier should be subtle and easier to manage. Is it a static page, e.g., checkout page? A fixed lookup map might be more sensible. And you should also consider what is supposed to happen if something is mixed up, e.g. missing locale (/acheter-tickets-concert), or wrong locale (/fr/buy-concert-ticket). These are some of the problems we ran into with our multi-Locale system, I hope this helps a little. Cheers Ben On Thu, Nov 19, 2020 at 8:15 AM Numa Schmeder <[hidden email]> wrote: > Thanks, I will give it a try ! > > > Le 19 nov. 2020 à 07:45, Ilya Obshadko <[hidden email]> a > écrit : > > > > Yes, you can do it this way: > > > > @Inject > > private PageRenderLinkTransformer linkTransformer; > > > > @Inject > > private RequestGlobals requestGlobals; > > > > PageRenderRequestParameters requestParameters = > > linkTransformer.decodePageRenderRequest(requestGlobals.getRequest()); > > > > > > > > > > > > On Wed, Nov 18, 2020 at 6:09 PM Numa Schmeder <[hidden email]> wrote: > > > >> Hello, > >> > >> Just wondering if you have a way to access the > PageRenderRequestParameters > >> inside a component. > >> > >> I am building a LocalePageLink component for SEO purpose, that > translates > >> the current page url into its localized version, instead of using a > locale > >> toggle with an action link. > >> > >> I need it for SEO friendly language switcher but also for alternate > href. > >> > >> My component is working correctly, and will render > >> <a href="#" t:type="LocalePageLink" t:id="localeEN" locale="en" > >> page="mypagename” context=“1"> EN </a> > >> will render: /en/mypagename/1 for locale en > >> > >> <a href="#" t:type="LocalePageLink" t:id="localeFR" locale=“fr" > >> page="mypagename” context=“1"> EN </a> > >> will render: /en/mypagename/1 for locale fr > >> > >> But I want my component to be smarter and deduce the page name, context > >> and parameters from the current url if they are not specified to the > >> component. > >> I know how to get the page name using componentResources, but I didn’t > >> find a way to get the activation context and the context parameters > without > >> parsing the url. > >> > >> On the same subject I would like to have better page name than the > “java” > >> page name. For example if my page name is BuyTicket.java I would like to > >> have > >> /en/buy-concert-ticket in english > >> /fr/acheter-tickets-concert in french > >> … and so on. > >> > >> So I would like to localize page names in url, and eventually improve > the > >> name for SEO purpose, do you know where should I hook ? > >> > >> I would be happy to share my components once they are functional. > >> > >> Thank you for your help, > >> > >> Numa > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: [hidden email] > >> For additional commands, e-mail: [hidden email] > >> > >> > > > > -- > > Ilya Obshadko > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [hidden email] > For additional commands, e-mail: [hidden email] > > |
Hi Ben,
Thank you for your help. Very useful. I used the same technic with tapestry 4 I had encoder to slugify my objects and keeping the id at the end. I am always wondering if it’s better to have a slug without an id, or with an id. I think that keeping an id is more robust on the long run. Best Numa > Le 19 nov. 2020 à 09:42, Ben Weidig <[hidden email]> a écrit : > > Hi, > > for custom URLs you could use > org.apache.tapestry5.services.linktransform.PageRenderLinkTransformer > > It's responsible for transforming/decoding > PageRenderRequestParameters/Requests. > This ensures that generated links will be correct, too. > > The only problem here would be the actual mapping between the path and the > actual page / parameters, and vice-versa. > Usually, the path contains some kind of unique identifier, making the > actual name in the path more flexible. > > Medium has a hash at the end to actually identify the correct story, not > the full path. > Amazon has the product title in the URL, even though it can be changed > freely, and it still works due to the rest of the path. > > It all depends on the purpose of the pages, and how often URLs change or > are added. > > Is it a lot of dynamic content, e.g., article or product pages? An added > identifier should be subtle and easier to manage. > Is it a static page, e.g., checkout page? A fixed lookup map might be more > sensible. > > And you should also consider what is supposed to happen if something is > mixed up, e.g. missing locale (/acheter-tickets-concert), or wrong locale > (/fr/buy-concert-ticket). > > These are some of the problems we ran into with our multi-Locale system, I > hope this helps a little. > > Cheers > Ben > > On Thu, Nov 19, 2020 at 8:15 AM Numa Schmeder <[hidden email]> wrote: > >> Thanks, I will give it a try ! >> >>> Le 19 nov. 2020 à 07:45, Ilya Obshadko <[hidden email]> a >> écrit : >>> >>> Yes, you can do it this way: >>> >>> @Inject >>> private PageRenderLinkTransformer linkTransformer; >>> >>> @Inject >>> private RequestGlobals requestGlobals; >>> >>> PageRenderRequestParameters requestParameters = >>> linkTransformer.decodePageRenderRequest(requestGlobals.getRequest()); >>> >>> >>> >>> >>> >>> On Wed, Nov 18, 2020 at 6:09 PM Numa Schmeder <[hidden email]> wrote: >>> >>>> Hello, >>>> >>>> Just wondering if you have a way to access the >> PageRenderRequestParameters >>>> inside a component. >>>> >>>> I am building a LocalePageLink component for SEO purpose, that >> translates >>>> the current page url into its localized version, instead of using a >> locale >>>> toggle with an action link. >>>> >>>> I need it for SEO friendly language switcher but also for alternate >> href. >>>> >>>> My component is working correctly, and will render >>>> <a href="#" t:type="LocalePageLink" t:id="localeEN" locale="en" >>>> page="mypagename” context=“1"> EN </a> >>>> will render: /en/mypagename/1 for locale en >>>> >>>> <a href="#" t:type="LocalePageLink" t:id="localeFR" locale=“fr" >>>> page="mypagename” context=“1"> EN </a> >>>> will render: /en/mypagename/1 for locale fr >>>> >>>> But I want my component to be smarter and deduce the page name, context >>>> and parameters from the current url if they are not specified to the >>>> component. >>>> I know how to get the page name using componentResources, but I didn’t >>>> find a way to get the activation context and the context parameters >> without >>>> parsing the url. >>>> >>>> On the same subject I would like to have better page name than the >> “java” >>>> page name. For example if my page name is BuyTicket.java I would like to >>>> have >>>> /en/buy-concert-ticket in english >>>> /fr/acheter-tickets-concert in french >>>> … and so on. >>>> >>>> So I would like to localize page names in url, and eventually improve >> the >>>> name for SEO purpose, do you know where should I hook ? >>>> >>>> I would be happy to share my components once they are functional. >>>> >>>> Thank you for your help, >>>> >>>> Numa >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: [hidden email] >>>> For additional commands, e-mail: [hidden email] >>>> >>>> >>> >>> -- >>> Ilya Obshadko >> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [hidden email] >> For additional commands, e-mail: [hidden email] >> >> --------------------------------------------------------------------- To unsubscribe, e-mail: [hidden email] For additional commands, e-mail: [hidden email] |
Free forum by Nabble | Edit this page |