这是一种可怕的技术组合,但我别无选择。我需要在使用XSLT呈现的AMP HTML页面上输出amp-analytics
配置对象。这里有配置文档,以防万一。
看看这部分配置。您需要为需要发送到分析的每个变量在"vars"属性中输出一个键。但是您还需要在请求查询字符串中包含它们的名称。可以有多个请求
{
"requests": {
"pageview": "https://example.com/analytics?url=${canonicalUrl}&title=${title}&acct=${account}&clientId=${clientId(cid-scope)}",
},
"vars": {
"account": "ABC123",
"title": "Homepage"
}
}
我有一个变量的XML列表:
<vars>
<account>111</account>
<title>222</title>
<foo>333</foo>
</vars>
在我的XSLT中,我这样做:
<xsl:if test="/vars/account">
"account": "<xsl:value-of select="/vars/account" />",
</xsl:if>
<xsl:if test="/vars/title">
"title": "<xsl:value-of select="/vars/title" />",
</xsl:if>
<xsl:if test="/vars/foo">
"foo": "<xsl:value-of select="/vars/foo" />",
</xsl:if>
好吧,这很难看,但还好。但现在我必须显式地将所有这些变量包含在requests
属性中的每个请求中,比如&title=${title}&acct=${account}&cd1=${foo}
。在这里我迷路了。
我不想重复输出查询字符串的所有逻辑。我想到的唯一方法是创建一个带参数的命名模板,并为每个请求调用它:
<xsl:template name="vars">
<xsl:param name="for_query" select="1"/>
<xsl:if test="/vars/account">
<xsl:choose>
<xsl:when test="$for_query = 1">&account=${account}</xsl:when>
<xsl:otherwise>"account": "<xsl:value-of select="/vars/account" />",</xsl:otherwise>
</xsl:choose>
</xsl:if>
<xsl:if test="/vars/title">
<xsl:choose>
<xsl:when test="$for_query = 1">&title=${title}</xsl:when>
<xsl:otherwise>"title": "<xsl:value-of select="/vars/title" />",</xsl:otherwise>
</xsl:choose>
</xsl:if>
<xsl:if test="/vars/foo">
<xsl:choose>
<xsl:when test="$for_query = 1">&foo=${foo}</xsl:when>
<xsl:otherwise>"foo": "<xsl:value-of select="/vars/foo" />",</xsl:otherwise>
</xsl:choose>
</xsl:if>
</xsl:template>
想象一下,这句话再长几倍,再复杂一点,你就不会奇怪为什么它让我的眼睛流血了。然后在适当的地方调用它:
{
"requests": {
"pageview": "https://example.com/analytics?url=${canonicalUrl}<xsl:call-template name="vars" />",
"event": "https://example.com/analytics?url=${canonicalUrl}<xsl:call-template name="vars" />"
},
"vars": {
<xsl:call-template name="vars">
<xsl:with-param name="for_query" select="0"/>
</xsl:call-template>
"look_ma": "no_comma"
}
}
你有什么不那么野蛮的建议吗?
您试过使用extraUrlParams
吗?它们应该允许您指定参数,而无需触及request
和vars
块。
https://github.com/ampproject/amphtml/blob/master/extensions/amp-analytics/amp-analytics.md extra-url-params