1

現在のプロジェクトにスニペット ベースのコンテンツ管理システムを実装しています。スニペットは、部分的な URL のワイルドカード一致にフォールバックする完全な URL の完全一致、または最終的にデフォルトのスニペットのいずれかによって、ページに関連付けることができます。

これを実装するために、ワイルドカード フラグを使用してページ関連付けのテーブルを作成しました。システムはまず現在の URL を非ワイルドカード関連付けに対してチェックし、一致が見つからない場合は、ワイルドカード フラグが設定されている部分 URL に対してチェックします。 .

これを達成するために、データベースからすべての部分的な URL を取得し、それらを配列に入れ、配列を調べて現在の URL との一致を確認しています。

protected function _check_wildcard($url = NULL)
{
    if($url)
    {
        $q = $this->db->where('wildcard' ,'Y')
                ->from('content')
                ->get();
        $wildcards = $q->result_array();

        foreach($wildcards AS $wildcard)
        {
            if(strpos($url,$wildcard['url']) !== FALSE )
            {
                return $wildcard['snippet_id'];
            }
        }
    }
    else
    {
        return NULL;
    }
}

誰かがこれを行うためのより良い方法を提案できますか?システムダウンライン?

4

1 に答える 1

1

すべてのワイルドカードをロードする代わりに、データベースに直接クエリを実行できます。MySQLを仮定すると、このクエリは、指定された URL 文字列でワ​​イルドカード URL をチェックします。元 :

// Keeping your current wildcard = 'Y' condition and adding the wildcard check.
$where = "wildcard = 'Y' AND INSTR('" . $url . "', url) > 0 ";
$this->db->where($where)->from('content')->get();

データベースのドキュメントをチェックして、INSTR または同様の機能をサポートしているかどうかを確認できます。

このクエリが行を返さない場合は返すことができNULL、行がある場合は最初の を返すことができますsnippet_id

お役に立てれば!

于 2012-11-07T13:17:24.773 に答える