sergeevizh Posted April 9, 2020 Report Share Posted April 9, 2020 Привет! Никак не могу понять, каким образом формируются такие url страницы товара: webshop.ru/products/5d27e2e28b2c370101cf06c9webshop.ru/products/5d7db6b428fc710101b62057 Значение 5d27e2e28b2c370101cf06c9 - имеет 24 символа. То есть это не md5 против 32 символовПервоначальное значение 5d статичное или меняется на 5a, 5b, 5c, 5d, 5eЯ так понимаю это не просто id, а возможно hash_id Подскажите как такое реализовать и как хранить в БД Quote Link to post Share on other sites
shooroop Posted April 9, 2020 Report Share Posted April 9, 2020 (edited) очень просто. К примеру for($i = 1; $i <= 5; $i++) { $num .= rand(0, 9); } $url = 'x'$num; результатом буде $url =x00000 где 0 - рандомная цифра от 0 до 9 изменить $url в ProductAdmin.php можно использовать md5 и обрезать лишнее Edited April 9, 2020 by shooroop Quote Link to post Share on other sites
sergeevizh Posted April 20, 2020 Author Report Share Posted April 20, 2020 очень просто. К примеру 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 заполнено тогда оставить, если нет сгенерировать. Quote Link to post Share on other sites
shooroop Posted April 20, 2020 Report Share Posted April 20, 2020 (edited) Привет! Спасибо за вариант, я решил вопрос иначеЗаменил в 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 April 20, 2020 by shooroop Quote Link to post Share on other sites
yr4ik Posted May 19, 2020 Report Share Posted May 19, 2020 (edited) uniqid с 2м параметром в true - даст 23 символа. Останется доклеить только 5 echo '5' . uniqid('', true); Но в указанном примере скорее всего идет замена . (точки) что дает uniqid - на какое то число. Либо какой то кастомный генератор Edited May 19, 2020 by yr4ik Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.