首页 > 解决方案 > SilverStripe 3.7:如何在没有空格的情况下呈现模板语法或 PHP 输出?

问题描述

如何删除模板中的空格输出?例如,我有一个 $Brand,其中一些输出是两个单词,就像我的 php 变量中的 TommyHilfiger 一样。输出变为“Tommy Hilfiger”。这非常适合前端显示,但我如何将其渲染为 TommyHilfiger 或 Tommy-Hifiger?我想在我的 html 中将它们用作 css 类。例如,像 $Brand.Nospaces。还是需要在 PHP 中完成?

PHP

class ProductPage extends Page {

    // Contact object's fields
    public static $db = array(
        'Brand' => 'Varchar(255)'
    );

    public function getCMSFields() {
        $fields = parent::getCMSFields();

        $fields->addFieldToTab("Root.Details", 
            new DropdownField("Brand", "Brand", 
                array( 
                    "Adidas" => "Adidas",
                    "AmericanSportsTeams" => "American Sports Teams",
                    "United Colors of Benetton" => "United Colors of Benetton",
                    "Valentino" => "Valentino",
                )
            )
        );

        return $fields;
    }
}

class ProductPage_Controller extends Page_Controller {

}

模板 ProductPage.ss

<% loop Children %>
    <li class="$Brand">
        <a href="$Link">
            <figure style="background-image: URL(<% loop $ProductImages.limit(1,1) %>$Fill(400,600).URL<% end_loop %>);">
                <img src="<% loop $ProductImages.limit(1) %>$Fill(400,600).URL<% end_loop %>" alt="$Title" 
                    class="snipcart-add-item"
                    data-item-id="P$ID $MenuTitle"
                    data-item-max-quantity="1"
                    data-item-stock="1"
                    data-item-name="$Title"
                    data-item-price="<% if $SalePrice %>$SalePrice<% else %>$Price<% end_if %>"
                    data-item-description="$Content"
                    data-item-image="<% loop $ProductImages.limit(1) %>$Pad(50,50).URL<% end_loop %>">
            </figure>
            <div id="pro-deets">
                <h3>$Title</h3>
                $Brand
            </div>
        </a>
    </li>
<% end_loop %>

也许与:

$filter = URLSegmentFilter::create();
$className = $filter->filter($title);

我只是不清楚如何将其应用于 $Brand 它需要将模板作为 $BrandNoSpace 或其他东西,因为我需要将 $Brand 及其空格也用于显示的 txt。

标签: phphtmltemplatessilverstripe

解决方案


控制器中的自定义功能将更容易满足您的需求。

class ProductPage_Controller extends Page_Controller
{
    public function BrandNoSpaces()
    {
        return str_replace(' ', '-', $this->Brand);
    }
}

在您的模板中:

<li class="$BrandNoSpaces">

“贝纳通的统一色彩”变成

<li class="United-Colors-of-Benetton">

推荐阅读