对于工作中的客户,我们已经建立了一个网站。该网站有一个产品页面,其中可以包含相同类型/构建的变体,因此他们遇到了双重清洁网址的问题。
刚才我写了一个函数,通过在 URL 上附加一个数字来防止这种情况发生。如果 thatclean url 也存在,它会计数。
例如
domain.nl/产品/机器
domain.nl/product/machine-1
domain.nl/product/machine-2
更新!返回 $clean_url; 递归和返回
我编写的函数运行良好,但我想知道我是否采取了正确的方法,是否可以改进。这是代码:
public function prevent_double_cleanurl($cleanurl)
{
// makes sure it doesnt check against itself
if($this->ID!=NULL) $and = " AND product_ID <> ".$this->ID;
$sql = "SELECT product_ID, titel_url FROM " . $this->_table . " WHERE titel_url='".$cleanurl."' " . $and. " LIMIT 1";
$result = $this->query($sql);
// if a matching url is found
if(!empty($result))
{
$url_parts = explode("-", $result[0]['titel_url']);
$last_part = end($url_parts);
// maximum of 2 digits
if((int)$last_part && strlen($last_part)<3)
{
// if a 1 or 2 digit number is found - add to it
array_pop($url_parts);
$cleanurl = implode("-", $url_parts);
(int)$last_part++;
}
else
{
// add a suffix starting at 1
$last_part='1';
}
// recursive check
$cleanurl = $this->prevent_double_cleanurl($cleanurl.'-'.$last_part);
}
return $cleanurl;
}