Kentico 11:在 text/xml 转换中使用变量

Kentico 11: using variables inside text/xml transformations

我正在使用 text/xml 转换制作轮播 Web 部件。
简单地尝试为页面上的每个实例创建一个唯一的 ID。
接下来我想将第一个项目设置为活动 CSS class.


对于部分 Webpart 容器

{% uniqueId = string.FormatString("carousel-{0}", InstanceGuid.Substring(0,5)); #%}
<div id="{%uniqueId%}" class="carousel slide" data-ride="carousel">
    <div class="carousel-inner">
    □
    </div>
    <a class="carousel-control-prev" href="#{%uniqueId%}" role="button" data-slide="prev">
        <span class="carousel-control-prev-icon" aria-hidden="true"></span>
        <span class="sr-only">Previous</span>
    </a>
    <a class="carousel-control-next" href="#{%uniqueId%}" role="button" data-slide="next">
        <span class="carousel-control-next-icon" aria-hidden="true"></span>
        <span class="sr-only">Next</span>
    </a>
</div>

起初这似乎可行,但出于某种原因,它在 HTML 中生成了一个文本节点。 我们如何在不生成变量输出的情况下做到这一点?


对于 Transformations 部分中的单个轮播项目:

{% CssActive = IsFirst() ? "active" : string.Empty %}
<div class="carousel-item {%CssActive%}">
    <img src="{%Image%}" alt="" class="w-100 d-block" />
    <div class="carousel-caption d-none d-md-block">
        <h3>{%Title%}</h3>
        <div>{%Body%}</div>
    </div>
</div>

这没有输出任何东西?这甚至可以在中继器中使用 IsFirst() 吗?

非常感谢任何帮助!

对于 Webpart 容器,我可以使用 HTML/CSS 解决方法:

<div class="d-none">
{% uniqueId = string.FormatString("carousel-{0}", InstanceGuid.Substring(0,5)); #%}
</div>

远非理想所以如果其他人有更好的主意...?

对于转换,您可以使用以下代码:

<div class="carousel-item{% if (DataItemIndex == 0) { " active" } #%}">
  <div class="card">
    <img src="{%Image%}" alt="" class="card-img-top" />
    <div class="card-body">
      <h3 class="card-title">{%Title%}</h3>
      <div class="card-text">{%Body%}</div>
    </div>
  </div>
</div>

Doc