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


Фото
- - - - -

Индивидуальные URL при добавлении товара.

url

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

#1 interyes

interyes
  • Пользователь
  • 24 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x

Опубликовано 24.03.2018 - 15:32

Всем привет!

 

Столкнулся с проблемой. Много товаров с одним названием. Есть ли решение как подставлять в url товара _id?

 

Пробовал через product.tpl при создании подставляет, а при обновлении подставляет снова. итог tovar_2_2 и так далее до бесконечности.



#2 interyes

interyes
  • Пользователь
  • 24 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x

Опубликовано 24.03.2018 - 16:29

в 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';
        }

Никак не могу понять как заставить его работать при ручном добавлении товара



#3 Maksclub

Maksclub

    Помогаю с Симплой и c PHP

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

Опубликовано 24.03.2018 - 17:20

в api/Products.php в функции add_product есть код 


Никак не могу понять как заставить его работать при ручном добавлении товара

 

ну добавьте вы $product['id'] к примеру



#4 interyes

interyes
  • Пользователь
  • 24 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x

Опубликовано 24.03.2018 - 17:58

ну добавьте вы $product['id'] к примеру

не совсем понял. выводит сообщение, что товар с этим адресом уже есть. я так понимаю, что до исполнения этой функции дело просто не доходит. ошибаюсь? можно подробнее, что вы имеете ввиду?



#5 question

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

Опубликовано 24.03.2018 - 18:00

А подскажите, как выводить в url не $product->url, а $product->id.

Хочу видеть url товара вида site.ru/product/10/



#6 phukortsin

phukortsin
  • Пользователь
  • 157 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 24.03.2018 - 18:54

update s_products set url=id



#7 question

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

Опубликовано 25.03.2018 - 06:36

update s_products set url=id

Шикарное решение, но мне хотелось бы без правки базы



#8 question

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

Опубликовано 25.03.2018 - 06:42

Хочется, чтобы товар открывался по id, например, site.ru/index.php?module=ProductView&id=894



#9 Maksclub

Maksclub

    Помогаю с Симплой и c PHP

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

Опубликовано 25.03.2018 - 06:59

Хочется, чтобы товар открывался по 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


Изменено: Maksclub, 25.03.2018 - 13:55


#10 interyes

interyes
  • Пользователь
  • 24 сообщений
  • Дизайн, Верстка
  • Версия CMS:2.x

Опубликовано 25.03.2018 - 08:58

Для того чтоб срабатывал код



// Если есть товар с таким 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));
            //}

 



#11 phukortsin

phukortsin
  • Пользователь
  • 157 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 25.03.2018 - 09:19

Шикарное решение, но мне хотелось бы без правки базы

 

То же самое можно получить если  в api/Products.php в функции add_product после (или вместо)

 

        if(empty($product['url']))
        {
...............

        }


вставить

 

        if(empty($product['url']))
        {
            $product['url'] = $product['id'];
        }
 

 

Аналогично в функции update_product.







Также с меткой «url»

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

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