Jump to content

Recommended Posts

Привет!

 

Никак не могу понять, каким образом формируются такие url страницы товара:

 

webshop.ru/products/5d27e2e28b2c370101cf06c9

webshop.ru/products/5d7db6b428fc710101b62057

 

Значение 5d27e2e28b2c370101cf06c9 - имеет 24 символа. То есть это не md5 против 32 символов

Первоначальное значение 5d статичное или меняется на 5a, 5b, 5c, 5d, 5e

Я так понимаю это не просто id, а возможно hash_id 

Подскажите как такое реализовать и как хранить в БД

Link to post
Share on other sites

очень просто. К примеру

 

 
	            for($i = 1; $i <= 5; $i++)
	            {
	                $num .= rand(0, 9);
	            }
 
			
			$url = 'x'$num;

 

результатом буде $url =x00000 где 0 - рандомная цифра от 0 до 9

 

 

изменить $url в ProductAdmin.php

 

можно использовать md5 и обрезать лишнее


 

Edited by shooroop
Link to post
Share on other sites
  • 2 weeks later...

очень просто. К примеру

 

 
	            for($i = 1; $i <= 5; $i++)
	            {
	                $num .= rand(0, 9);
	            }
 
			
			$url = 'x'$num;

 

результатом буде $url =x00000 где 0 - рандомная цифра от 0 до 9

 

 

изменить $url в ProductAdmin.php

 

можно использовать md5 и обрезать лишнее

 

 

 

Привет! 

Спасибо за вариант, я решил вопрос иначе

Заменил в simpla/ProductAdmin.php

$product->url = trim($this->request->post('url', 'string')); 

на

$product->url = uniqid('') . substr(md5(time()), 0, 11); //генерация url товара

Так же убрал транслит url и само поле url из шаблона. 

 

Теперь не могу понять, при каждом редактировании товара меняется и url. 

Как сделать проверку, если в базе поле url заполнено тогда оставить, если нет сгенерировать.  

Link to post
Share on other sites

Привет! 

Спасибо за вариант, я решил вопрос иначе

Заменил в simpla/ProductAdmin.php

$product->url = trim($this->request->post('url', 'string')); 

на

$product->url = uniqid('') . substr(md5(time()), 0, 11); //генерация url товара

Так же убрал транслит url и само поле url из шаблона. 

 

Теперь не могу понять, при каждом редактировании товара меняется и url. 

Как сделать проверку, если в базе поле url заполнено тогда оставить, если нет сгенерировать.  

 

 

 

в одном из файлов уже есть решение  осталось немного подумать

public function add_product($product)
	{	
		$product = (array) $product;
		
		if(empty($product['url']))
		{
			$product['url'] = preg_replace("/[\s]+/ui", '-', $product['name']);
			$product['url'] = strtolower(preg_replace("/[^0-9a-zа-я\-]+/ui", '', $product['url']));
		}

		// Если есть товар с таким URL, добавляем к нему число
		while($this->get_product((string)$product['url']))
		{
			if(preg_match('/(.+)_([0-9]+)$/', $product['url'], $parts))
				$product['url'] = $parts[1].'_'.($parts[2]+1);
			else
				$product['url'] = $product['url'].'_2';
		}

		
		
		if($this->db->query("INSERT INTO __products SET ?%", $product))
		{
			$id = $this->db->insert_id();
			$this->db->query("UPDATE __products SET position=id WHERE id=?", $id);		
			return $id;
		}
		else
			return false;
	}
Edited by shooroop
Link to post
Share on other sites
  • 5 weeks later...

uniqid с 2м параметром в true - даст 23 символа. Останется доклеить только 5
 

echo '5' . uniqid('', true);

Но в указанном примере скорее всего идет замена . (точки) что дает uniqid  - на какое то число. Либо какой то кастомный генератор 

Edited by yr4ik
Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...