interyes Posted March 24, 2018 Report Share Posted March 24, 2018 Всем привет! Столкнулся с проблемой. Много товаров с одним названием. Есть ли решение как подставлять в url товара _id? Пробовал через product.tpl при создании подставляет, а при обновлении подставляет снова. итог tovar_2_2 и так далее до бесконечности. Quote Link to post Share on other sites
interyes Posted March 24, 2018 Author Report Share Posted March 24, 2018 в api/Products.php в функции add_product есть код // Если есть товар с таким 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'; }Никак не могу понять как заставить его работать при ручном добавлении товара Quote Link to post Share on other sites
Maksclub Posted March 24, 2018 Report Share Posted March 24, 2018 в api/Products.php в функции add_product есть код Никак не могу понять как заставить его работать при ручном добавлении товара ну добавьте вы $product['id'] к примеру Quote Link to post Share on other sites
interyes Posted March 24, 2018 Author Report Share Posted March 24, 2018 ну добавьте вы $product['id'] к примеруне совсем понял. выводит сообщение, что товар с этим адресом уже есть. я так понимаю, что до исполнения этой функции дело просто не доходит. ошибаюсь? можно подробнее, что вы имеете ввиду? Quote Link to post Share on other sites
question Posted March 24, 2018 Report Share Posted March 24, 2018 А подскажите, как выводить в url не $product->url, а $product->id.Хочу видеть url товара вида site.ru/product/10/ Quote Link to post Share on other sites
phukortsin Posted March 24, 2018 Report Share Posted March 24, 2018 update s_products set url=id Quote Link to post Share on other sites
question Posted March 25, 2018 Report Share Posted March 25, 2018 update s_products set url=idШикарное решение, но мне хотелось бы без правки базы Quote Link to post Share on other sites
question Posted March 25, 2018 Report Share Posted March 25, 2018 Хочется, чтобы товар открывался по id, например, site.ru/index.php?module=ProductView&id=894 Quote Link to post Share on other sites
Maksclub Posted March 25, 2018 Report Share Posted March 25, 2018 (edited) Хочется, чтобы товар открывался по id, например, site.ru/index.php?module=ProductView&id=894 1. Нужно в настройках сервера заменить product_url на id в строке /index.php?module=ProductView.....2. В /view/ProductView заменить: $product_url = $this->request->get('product_url', 'string'); на $product_id = $this->request->get('id', 'integer'); 3. В этом же файле: $product = $this->products->get_product((string)$product_url);на$product = $this->products->get_product((int)$product_id); После этого товар должен открыться по пути: /products/{id} Ну и во всех местах, где в шаблоне и админке url подставляется нужно заменить на id Edited March 25, 2018 by Maksclub Quote Link to post Share on other sites
interyes Posted March 25, 2018 Author Report Share Posted March 25, 2018 Для того чтоб срабатывал код // Если есть товар с таким 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'; } Нужно в ProductAdmin.php закоментировать код который выводит сообщение об ошибке // Не допустить одинаковые URL разделов. //elseif(($p = $this->products->get_product($product->url)) && $p->id!=$product->id) //{ //$this->design->assign('message_error', 'url_exists'); //if(!empty($product->id)) // $images = $this->products->get_images(array('product_id'=>$product->id)); //} Quote Link to post Share on other sites
phukortsin Posted March 25, 2018 Report Share Posted March 25, 2018 Шикарное решение, но мне хотелось бы без правки базы То же самое можно получить если в api/Products.php в функции add_product после (или вместо) if(empty($product['url'])) {............... } вставить if(empty($product['url'])) { $product['url'] = $product['id']; } Аналогично в функции update_product. Quote Link to post Share on other sites
get31 Posted July 18 Report Share Posted July 18 (edited) В 25.03.2018 в 09:19, phukortsin сказал: То же самое можно получить если в api/Products.php в функции add_product после (или вместо) if(empty($product['url'])) { ............... } вставить if(empty($product['url'])) { $product['url'] = $product['id']; } Аналогично в функции update_product. Не работает. а в update_product вообще нет "аналогичного". И к тому же, чтобы в url был ID, нужно в ProductAdmin.php: заменить $product->url = trim($this->request->post('url', 'string')); на $product->url = $this->request->post('id', 'integer'); НО даже и тогда код: if(empty($product['url'])) { $product['url'] = $product['id']; } не видит ID товара и ставит его как 0 и делает УРЛ 0_1, 0_2, 0_3.... Edited July 18 by get31 Quote Link to post Share on other sites
sergeevizh Posted July 18 Report Share Posted July 18 6 часов назад, get31 сказал: Не работает. а в update_product вообще нет "аналогичного". И к тому же, чтобы в url был ID, нужно в ProductAdmin.php: заменить $product->url = trim($this->request->post('url', 'string')); на $product->url = $this->request->post('id', 'integer'); НО даже и тогда код: if(empty($product['url'])) { $product['url'] = $product['id']; } не видит ID товара и ставит его как 0 и делает УРЛ 0_1, 0_2, 0_3.... Получение ID нового товара происходит на строке $id = $this->db->insert_id(); после нее идет присваивания позиции товара как ее id путем update. по аналогии можно сделать update у товара url как id Quote Link to post Share on other sites
sergeevizh Posted July 18 Report Share Posted July 18 А вообще, зачем ID товара впихивать в url товара, когда проще генерировать от времени хеш md5 будет так: supersite.com/products/e47d1ce09eeea6783300addf49551aeeb или урезать до 10 знаков supersite.com/products/e47d1ce09e Quote Link to post Share on other sites
sergeevizh Posted July 18 Report Share Posted July 18 Тогда на форте будет выводить товар и по его id по его url 1. supersite.com/products/1234 2. supersite.com/products/e47d1ce09e будет один товар Quote Link to post Share on other sites
sergeevizh Posted July 18 Report Share Posted July 18 Ну или на край сделать добавление Id товара к url supersite.com/products/1234-kakoito-tovar Quote Link to post Share on other sites
get31 Posted July 19 Report Share Posted July 19 17 часов назад, alexivchenko сказал: supersite.com/products/e47d1ce09eeea6783300addf49551aeeb Да, можно так, но при каждом сохранении будет меняться урл $product->url = uniqid('') . substr(md5(time()), 0, 10); а смена урла тоже плохо Quote Link to post Share on other sites
sergeevizh Posted July 20 Report Share Posted July 20 if(empty($product['url'])) { $product['url'] = substr(md5(time()), 0, 10); } else { $product['url'] = $product['url']; } Quote Link to post Share on other sites
sergeevizh Posted July 20 Report Share Posted July 20 (edited) 23 часа назад, get31 сказал: Да, можно так, но при каждом сохранении будет меняться урл $product->url = uniqid('') . substr(md5(time()), 0, 10); а смена урла тоже плохо вью трогать не нужно, выше код для api/Products.php раздел add_product. url нужно создавать только в момент добавления товара, то есть в модели, а во вью нужно его только выводить. В случае, если нужно для товара задать уникальный url в модели есть проверка, если url пустой задать уникальный url, а если мы задали свой, то его и присвоить. Edited July 20 by alexivchenko Quote Link to post Share on other sites
fuckmoney Posted October 14 Report Share Posted October 14 В 18.07.2024 в 19:49, sergeevizh сказал: Ну или на край сделать добавление Id товара к url supersite.com/products/1234-kakoito-tovar А как привести все новые товары, категории и бренды к url типа url и id через тире, ну то есть simplacms.ru/products/samsung-s7070-diva-17 simplacms.ru/catalog/bytovaya-tehnika-2 simplacms.ru/brands/apple-1 Хочу чтобы товар был доступен и по url и по id Цитата simplacms.ru/products/samsung-s7070-diva-17 simplacms.ru/products/17 Цитата simplacms.ru/catalog/bytovaya-tehnika-2 simplacms.ru/catalog/2 Цитата simplacms.ru/brands/apple-1 simplacms.ru/brands/1 И что бы при переходе по ид товара, категории или бренда перекидывала на урл. сделал так и в htaccess прописал вместо RewriteRule ^products/([^/]+)/?$ index.php?module=ProductView&product_url=$1 [L,QSA] это RewriteRule ^products/(.*)-([0-9]+)$ index.php?module=ProductView&product_url=$1&product_id=$2 [L,QSA] а дальше то что? подскажите Quote Link to post Share on other sites
phukortsin Posted October 20 Report Share Posted October 20 В 14.10.2024 в 15:47, fuckmoney сказал: Хочу чтобы товар был доступен и по url и по id И что бы при переходе по ид товара, категории или бренда перекидывала на урл. Совсем просто такое вряд ли получится. Надо дорабатывать распознавание адресов. Если готовы оплачивать,обращайтесь в личку... 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.