我想获取页面的类型,即 PLP 或 PDP 页面
1 回答
您可以在 SFCC 的控制器或后端逻辑(服务器执行的 JavaScript)中以几种不同的方式确定页面的“类型”,以及尝试在前端逻辑中检测此条件时的其他一些方式。(浏览器执行的 JavaScript)此外,对于前端和后端解决方案,它可能会有所不同,具体取决于您正在处理的实现。根据它的年龄和实施者,您可能在 SiteGenesis、MFRA 或 SFRA 环境中工作。甚至可能是 100% 的自定义实现。因此,鉴于该问题目前绝对没有任何上下文,请接受这是一个非常笼统的答案。
后端上下文
在所有后端上下文中,该解决方案依赖于会话的“ClickPath”数据存储。您必须意识到,这可能不是100% 准确,因为可能存在竞争条件,其中用户在多个选项卡中浏览可能会在处理当前请求后访问页面,并且不知道中的last
条目是否ClickStream
可能比当前正在处理请求。
为什么类pipelineName
中不存在该属性Request
让我有点困惑。为什么不呢?无论如何,我们必须做我们必须做的事情。
SFRA
// in the context of a Controller method
req.session.clickStream.last.pipelineName // returns string like: 'Pipeline-Name'
所有其他上下文(站点创世纪和 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 的前端上下文依赖于服务器在浏览器执行上下文中设置的变量。具体来说,app.js
在 SiteGenesis 或 SFRA“客户端”模块的情况下,可在整体模块的上下文中访问的变量
SFRA
在 SFRA 中,有一种“全局”JS 模块,您可以在其中找到它main.js
,然后还有特定类型的 JS 模块,例如productDetail.js
和search.js
. 在 SFRA 的上下文中,我建议将您的模块/脚本添加到这些特定于页面类型的模块之一,以便根据页面类型执行不同的逻辑。
网站创世纪
在页面上执行 JavaScript 的上下文中,以下表达式通常会给出足够的值来根据页面类型调整行为。请注意,您可能需要在闭包的上下文中执行此表达式app.js
才能使其工作。
app.page.type // equals 'product' or 'search' for example (IIRC)