获取SFCC中的页面类型(PLP或PDP)



我想获得页面的类型,即PLP或PDP页面

您可以确定;类型";在SFCC的控制器或后端逻辑(服务器执行的JavaScript(中,以及在前端逻辑中尝试检测这种情况时的一些其他方式,以几种不同的方式访问页面。(浏览器执行的JavaScript(此外,对于前端和后端解决方案,它可能会因您所使用的实现而有所不同。根据它的年龄和实施者,您可能在SiteGenesis、MFRA或SFRA上下文中工作。可能,甚至是100%的自定义实现。因此,请接受这是一个非常笼统的答案,因为这个问题目前完全没有任何背景。

后端上下文

在所有后端上下文中,该解决方案依赖于";单击路径";会话的数据存储。您必须意识到,这可能不是100%准确的,因为可能存在竞争条件,即在当前请求处理后,在多个选项卡中浏览的用户可能会访问页面,并且不知道ClickStream中的last条目是否比当前正在处理的请求"新"。

为什么Request类上不存在pipelineName属性让我有点困惑。为什么不存在?无论如何,我们必须做我们必须做的事

SFRA

// in the context of a Controller method
req.session.clickStream.last.pipelineName // returns string like: 'Pipeline-Name'

所有其他上下文(Site Genesis和MFRA(

// session is a global variable in SFCC. It should be accessible 
// in all backend contexts with the exception of certain hook 
// contexts.
session.clickStream.last.pipelineName // returns string like: 'Pipeline-Name'

前端上下文

表示浏览器中运行的JavaScript的前端上下文依赖于服务器在浏览器执行上下文中设置的变量。具体而言,在SiteGenesis或SFRA"客户端"模块的情况下,app.js单片模块上下文中可访问的变量

SFRA

在SFRA中,有一种"全局"JS模块,这就是你在main.js中找到的,还有特定类型的JS模块,如productDetail.jssearch.js。在SFRA的上下文中,我建议将您的模块/脚本添加到其中一个页面类型特定的模块中,以便根据页面类型执行不同的逻辑。

Site Genesis

在页面上执行JavaScript的上下文中,下面的表达式通常会给出足够的值来根据页面类型调整行为。请注意,您可能需要在app.js中的闭包上下文中执行此表达式,才能使其工作。

app.page.type // equals 'product' or 'search' for example (IIRC)

最新更新