2016-07-14 20 views
3

私はいくつかの子ページに関連するカテゴリを持っています。 「Test Category」のように1単語以上のカテゴリの場合は、「Test-Category」のようにスペースを1ワードにして出力する必要があります。複数の単語カテゴリを表示するダッシュを含む1つの単語として

これを処理するには、どのように関数を書き直すことができますか?

public function CategoriesList() { 
    if ($this->Categories()->exists()) { 
     return implode(', ', $this->Categories()->column('Title')); 
    } 
} 

答えて

6

私たちは、 CategoryクラスのgetDashedTitle関数を作成して、空白の代わりにダッシュを含むタイトルを返すことができます。

class Category extends DataObject { 
    public function getDashedTitle() { 
     return str_replace(' ', '-', $this->Title); 
    } 
} 

私たちは、その後、カテゴリ点線のタイトルを取得するためにmap機能でDashedTitleを使用することができます。

public function CategoriesList() { 
    if ($this->Categories()->exists()) { 
     return implode(', ', $this->Categories()->map('ID', 'DashedTitle')->toArray()); 
    } 
} 
+0

ありがとうございます。私の状況ではとてもシンプルなユースケースなので、これは私が行った解決策です。 – KenSander

2

これは未テストですが、Categories()HasManyListを返すと仮定すると、あなたがこのような何かを試みることができる:これは最終的にすべての参加、その後、ダッシュと一緒に戻ってそれを置くスペースでタイトルを分割します

public function CategoriesList() 
{ 
    if (!$this->Categories()->exists()) { 
     return ''; 
    } 

    $output = []; 
    foreach ($this->Categories() as $category) { 
     $output[] = implode('-', explode(' ', $category->Title())); 
    } 

    return implode(', ', $output); 
} 

を一緒にタイトルを,と返す。

FileNameFilterクラスを使用すると、箱から出して必要なものを行います
2

FileNameFilter::create()->filter("Test Category 1") 

より多くの柔軟性やカスタム機能について、あなたはクラスを拡張し、フィルタ機能をオーバーロードできます。

class CategoriesFilter extends FileNameFilter { 

    public function filter($name) { 
    //do your processing on $name 
    return $name; 
    } 

} 
+0

素晴らしい!本当にありがとう。私はこの機能を知らなかった。 – KenSander

3

あなたはこのためExtensionを使用することができます。つまり、このメソッドは任意のvarcharフィールドで使用できるようになります。

個人用サイト/コード/拡張/ VarcharDecorator.php

<?php 
class VarcharDecorator extends Extension { 
    function Slugify() { 
     return FileNameFilter::create()->filter(trim($this->owner->value); 
    } 
} 

個人用サイト/ _config/extensions.yml

Varchar: 
    extensions: 
    - VarcharDecorator 

今すぐあなたに$ Title.Slugifyを使用することができますテンプレート。

<% loop $Categories %> 
    $Title.Slugify<% if not $Last %>, <% end_if %> 
<% end_loop %> 
関連する問題