У меня есть файл под названием framework.xsl. Раньше я никогда не работал с XSL. Я хочу дать телу класс текущей категории.
Я нашел кое-что, что могло бы помочь мне в этой части:
Я видел этот раздел:
<ul id="navbar">
<xsl:for-each select="page/departments/row0">
<li>
<a href="main-category/{cat_slug}"><xsl:value-of select="cat_name"/></a>
<a href="javascript:void(0)" class="arrow"></a>
<ul>
<xsl:for-each select="row1">
<li>
<a href="subcategory/{../cat_slug}/{sub_cat_slug}">
<xsl:value-of select="sub_cat_name"/>
</a>
</li>
</xsl:for-each>
</ul>
</li>
</xsl:for-each>
</ul>
Переменная {cat_slug}
отображает имя текущей категории.
Поэтому я попытался поместить его в тег тела:
</head>
<body class="{cat_slug}">
<div id="wrapper">
<xsl:if test="$pms/pagename = 'home' and page/content/row0/f1/text()">
Но ничего не происходит. Вы просто получаете что-то вроде <body class>
Что я делаю не так?
Не видя остальной части кода, почти невозможно сказать, однако я бы догадался, что в тот момент, когда создается заглушка body
нет ребенка cat_slug
чтобы вытащить значение.
Синтаксис {cat_slug}
самом деле не является переменной. Переменные представляются с использованием символа $
. Кудрявые фигурные скобки указывают, что это "шаблон значения атрибута" и означает, что выражение оценивается, а не выводится буквально.
В этом случае, глядя на выражение в фигурных скобках, он будет искать элемент cat_slug. Это относительное выражение, означающее, что cat_slug будет дочерним элементом элемента, на котором вы сейчас находитесь.
Первое его использование - это
<a href="main-category/{cat_slug}">
Но это происходит в xsl: for-each, когда вы повторяете элементы row0
<xsl:for-each select="page/departments/row0">
Это говорит о том, что cat_slug является дочерним элементом row0. Поскольку ваш <body>
наиболее вероятно вне этого цикла xsl: for-each, он будет искать элемент cat_slug в другом месте, где не существует.