URIからlastSegmentをトリミングすると、その前のセグメントの最後の番号

私は、Craftで小枝やテンプレートを作成するのはかなり新しいです(そして、このコードを継承しているので、さらに楽しくなります)。

私はventiグループに基づいてカレンダー内のイベントをフィルタリングできるカレンダーページを持っています( Ventiカレンダープラグインを使用してグループを作成します)。

現在どのように動作しているかは、どのグループフィルタが選択されても、urlはそのグループIDを最後のセグメントとして更新するということです。

フィルタ名とそのID:Cinema = 1、Theater = 2、Events = 3、Education =
4

ユーザーがフィルタなしで2017年12月のイベントを見ている場合、URLは次のようになります。

example.com/month/2017/12

ユーザーが同じ日付のイベントを見ているのにフィルタが適用されている場合(この場合は「Cinema」フィルタ)、URLは次のようになります。

example.com/month/2017/12/1 Cinema has group ID of
1 so 1 is the last segment.

日付をリセットせずに適用されたフィルタを変更するには、URLから最後のセグメントをトリムし、最後のセグメントとして新しいIDに置き換えます。これは、前のセグメントの最後のセグメントと最後の文字が同じ番号(例:
example.com/month/2017/12/2 )でない限り、期待どおりに動作します。

この場合、現在このURLにいて、別のフィルタに変更したい場合(この例ではCinema Filter =
1に変更します)、次のようなことが起こります。

example.com/month/2017/1/1 where it should actually
be example.com/month/2017/12/1

つまり、最後のセグメントと最後のセグメントの前のセグメントの 2 をトリミングしています。

フィルタボタンのコードは次のとおりです。

    {% set groups = craft.venti.groups() %}
    {% for group in groups %}      
        
            {{ group }}
        
    {% endfor %}

If I remove '/' ~ from this:
{{url(craft.request.path)|trim('/' ~
craft.request.getLastSegment())}}/{{group.id}}

新しいURLが次のようになっていることを除けば、実際には完全に動作します。
example.com/month/2017/12//1
その2番目のバックスラッシュが追加されています。

誰かが私がここで間違っていることを見ることができますか、または何か助けを提供できますか?私のコードをもっと必要としたら、私に知らせてください。

ありがとうございました!

ベストアンサー

Twigの trim フィルタは、PHPの < code> trim() メソッドを使用します。

文字列の先頭と末尾の空白(またはその他の文字)を取り除く

したがって、あなたの例では、表示されている出力を説明する、指定された文字列の最初と最後からすべての/
2 を削除するように指示しています。

Twig PCRE
プラグインのようなものをインストールすると、より効果的になると思いますTwigはPHPの preg _
正規表現メソッドに完全にアクセスできます。

次に、探しているものを正確にターゲットにし、必要に応じて新しい値に置き換える preg_match
を実行します。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です