Jump to content

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


Recommended Posts

Всем привет!

 

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

 

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

 

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

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

 

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites

Хочется, чтобы товар открывался по 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 by Maksclub
Link to post
Share on other sites

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

 

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

 

Link to post
Share on other sites

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

 

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

 

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

        {

...............

        }

 

вставить

 

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

        {

            $product['url'] = $product['id'];

        }

 

 

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

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...