beforeFind メソッドを追加するコードが抜けていたので追記しました。(2009.6.2)

前回書いた[CakePHP] Sluggable Behavior の使い方の最後で少し書いた、スラグに日本語を使う方法です。

日本語を使うには slug.php を少々カスタマイズする必要があります。

beforeFind メソッドを追加

function beforeFind(&$Model, $queryData){
    $slug_column = $Model->alias.".".$this->__settings[$Model->alias]['slug'];
    if (isset($queryData["conditions"][$slug_column])) {
        $queryData["conditions"][$slug_column] = urlencode($queryData["conditions"][$slug_column]);
    }
    return $queryData;
}

slug.php 108行目付近

if (!empty($label)) {
    // Get the slug

    $slug = $this->__slug($label, $this->__settings[$Model->alias]);

の部分を下記のように urlencode を追加

if (!empty($label)) {
    // Get the slug
    $label = urlencode($label);
    $slug = $this->__slug($label, $this->__settings[$Model->alias]);

slug.php 384行目付近

$string = preg_replace('/[^a-z0-9_]/i', $settings['separator'], $string);

の preg_replace のパターンに “%” を追加

$string = preg_replace('/[^a-z0-9%_]/i', $settings['separator'], $string);

これでスラグに日本語が入る場合も使えるようになります。

関連する投稿