0

eZURLAliasFilterAppendNodeID クラスを使用する必要があります。これは、特定のクラスのすべてのノードの url_alias を変更し、最後に node_id を追加します。

問題は、ノードの作成日も追加する必要があり、eZURLAliasFilterAppendNodeID と ezURLAlias のどちらも機能していないようです。

誰かがそれを行う方法を見ていますか? 可能なクラスは見つかりませんでしたが、システムクラスにコードを追加したくありません... :-S

ありがとう !

-- ジョン

4

1 に答える 1

0

デフォルトの site.ini ファイルを見ている場合:

# List of active filters, each entry must contain the name of the class
# which implements the filtering.
# DEPRECATED, use FilterClasses instead
Filters[]

# List of classes you want to call as an eZURLALiasFilter
FilterClasses[]
FilterClasses[]=eZURLAliasFilterAppendNodeID

これは基本的に、独自のフィルターを開発できることを意味します。eZ Publish では、URL を生成するときにどの PHP クラスが呼び出されるかを彼に伝えることができるからです。

1. extension/yourextension/classes/ezurlaliasfilterappenddate.php に新しい php クラスを作成します。

class eZURLAliasFilterAppendDate extends eZURLAliasFilter
{
    public function __construct() {}

    public function process( $text, &$languageObject, &$caller )
    {
        if( !$caller instanceof eZContentObjectTreeNode )
        {
            eZDebug::writeError( 'The caller variable was not an eZContentObjectTreeNode', __METHOD__ );
            return $text;
        }

        $separator  = eZCharTransform::wordSeparator();
        $publishedTimestamp = $caller->attribute( 'object' )->attribute( 'published' )
        $formattedDate = ....
        $text .= $separator . $formattedDate;

        return $text;
    }
}

eZURLAliasFilterAppendNodeID注 :どのコンテンツ クラスが関係するかを選択したくない場合は、class_identifier に対して同じテストを実装する必要がある場合があります。

2. site.ini.append.php オーバーライドで設定します

おそらくsettings/siteaccess/yourfrontendsite/site.ini.append.phpにあります

[URLTranslator]
FilterClasses[]=eZURLAliasFilterAppendDate

3. 拡張機能の php 自動ロードを再生成します。php bin/php/ezpgenerateautoloads.php -e

于 2013-10-31T08:55:00.393 に答える