Перейти к содержимому


Фото
- - - - -

Как формировать такие url?


  • Чтобы отвечать, сперва войдите на форум
4 ответов в теме

#1 alexivchenko

alexivchenko
  • Пользователь
  • 140 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Курск

Опубликовано 09.04.2020 - 12:29

Привет!

 

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

 

webshop.ru/products/5d27e2e28b2c370101cf06c9

webshop.ru/products/5d7db6b428fc710101b62057

 

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

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

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

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



#2 shooroop

shooroop
  • Фрилансер
  • 1 080 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Antarktida

Опубликовано 09.04.2020 - 16:01

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

 

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

 

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

 

 

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

 

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


 


Изменено: shooroop, 09.04.2020 - 16:09


#3 alexivchenko

alexivchenko
  • Пользователь
  • 140 сообщений
  • Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Курск

Опубликовано 20.04.2020 - 16:04

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

 

 
	            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 заполнено тогда оставить, если нет сгенерировать.  



#4 shooroop

shooroop
  • Фрилансер
  • 1 080 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Antarktida

Опубликовано 20.04.2020 - 19:54

Привет! 

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

Заменил в 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;
	}

Изменено: shooroop, 20.04.2020 - 19:55


#5 yr4ik

yr4ik
  • Фрилансер
  • 933 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:1.x, 2.x
  • Откуда:Украина Чернигов

Опубликовано 20.05.2020 - 02:20

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

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

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


Изменено: yr4ik, 20.05.2020 - 02:26





0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых