我正在将一个基于代码段的内容管理系统实现到我当前的项目中。片段可以与页面关联,方法是将完整的网址与部分网址上的通配符匹配或最后的默认代码段完全匹配。
为了实现这一点,我有一个带有通配符标志的页面关联创建表,系统首先检查当前网址与非通配符关联,如果找不到匹配,则检查通配符所在的部分网址国旗已经设定。
为了实现这一点,我从数据库中获取了所有部分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;
}
}
任何人都可以建议一个更好的方法来做到这一点 - 最好不要在每次加载页面时不断下载所有通配符的完整列表,因为我担心这会对此产生负面影响。系统的可扩展性下线了吗?
答案 0 :(得分: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
。
希望这有帮助!