Jump to content
Esox

Обновление цен из прайса поставщика.

Recommended Posts

Добрый день.

Существует ли решение для оперативного обновления цен в магазине. Из прайс листа поставщика.

Например на основе артикула или модели.

Интересует именно только обновление, а не загрузка из прайса товаров в магазин и прочие комплексные решения делающие все и вся.

В которых на настройку уходит времени столько же как ручками поправить цены в 100-200 товаров.

Спасибо.

 

 

Share this post


Link to post
Share on other sites
42 минуты назад, Esox сказал:

Добрый день.

Существует ли решение для оперативного обновления цен в магазине. Из прайс листа поставщика.

Например на основе артикула или модели.

Интересует именно только обновление, а не загрузка из прайса товаров в магазин и прочие комплексные решения делающие все и вся.

В которых на настройку уходит времени столько же как ручками поправить цены в 100-200 товаров.

Спасибо.

 

 

Рассмотрите АОП. После установки модуля одним действием сделаете смену модели на код товара в магазине, и модуль будет обновлять их из прайса. Но в прайсе обязательно должны быть такие же артикулы как в магазине. Это важно.

Share this post


Link to post
Share on other sites

@Esox Лучше сделать импорт через csv. Проще и быстрее. Скопировали два столбика - модель и цена(модель первый столбик, цена второй столбик), закинули в пустой эксель и сохранили как csv с разделителем - точка с запятой.

А там 20 строк кода, так как не нужно подключать библиотеку и делать разбора эксель файла с кучей настроек и мегакомбайнов типа АОП.

Вот вам функция, можете допилить под свои нужды и требования и чтобы красиво было. 

 

public function price() {
        if($this->request->server['REQUEST_METHOD'] == 'POST' && $this->validate()) {
            if(is_uploaded_file($this->request->files['price']['tmp_name'])) {
                if (is_file($this->request->files['price']['tmp_name'])){ 
                    $csv = file( $this->request->files['price']['tmp_name'] ); 
                    $ok  = 0;
                    $errCount = 0;
                    foreach ( $csv as $prod ) {
                        $str = explode(';',$prod); 
                        $model  = $str[0];
                        if($str[1]<= 0){$price= 0;} else {$price = $str[1];}
                        if(isset($model) && $model > 0){
                            $isset = $this->db->query( "SELECT COUNT(product_id) as find FROM " . DB_PREFIX . "product WHERE model = '$model'" );
                            if ( ! empty( $isset->row['find'] ) && $isset->row['find'] > 0 ) {
                                $updateProd = $this->db->query( "UPDATE " . DB_PREFIX . "product SET price = '$price', date_modified = '" . date( 'Y-m-d H:i:s' ) . "' WHERE model = '$model'" );
                                if ( ! empty( $updateProd ) ) {
                                    $ok ++;
                                } else {
                                    $errCount ++;
                                }
                            } else {
                                $errCount ++;
                            }
                        }
                    }
                    $this->session->data['success'] = "Обновлено товаров: $ok<br/>Нет в базе: $errCount";
                }else{
                    echo 'not file';
                }
            }
            $this->redirect($this->url->link('module/updatecsv', 'token=' . $this->session->data['token'], 'SSL'));
        }
    }

 

Edited by niger

Share this post


Link to post
Share on other sites
20 часов назад, freelancer сказал:

в своё время для этих целей делал https://opencartforum.com/files/file/511-eksport-import-tovarov-v-formate-csv/

но там версия 1.5 и только csv формат

цена разработки под ваш прайс ~3тр

В текущей ситуации разумнее купить АОП.

Спасибо за помощь

Share this post


Link to post
Share on other sites
20 часов назад, Atlet сказал:

Рассмотрите АОП. После установки модуля одним действием сделаете смену модели на код товара в магазине, и модуль будет обновлять их из прайса. Но в прайсе обязательно должны быть такие же артикулы как в магазине. Это важно.

Слишком громоздкое решение.

Share this post


Link to post
Share on other sites
19 часов назад, niger сказал:

@Esox Лучше сделать импорт через csv. Проще и быстрее. Скопировали два столбика - модель и цена(модель первый столбик, цена второй столбик), закинули в пустой эксель и сохранили как csv с разделителем - точка с запятой.

А там 20 строк кода, так как не нужно подключать библиотеку и делать разбора эксель файла с кучей настроек и мегакомбайнов типа АОП.

Вот вам функция, можете допилить под свои нужды и требования и чтобы красиво было. 

 


public function price() {
        if($this->request->server['REQUEST_METHOD'] == 'POST' && $this->validate()) {
            if(is_uploaded_file($this->request->files['price']['tmp_name'])) {
                if (is_file($this->request->files['price']['tmp_name'])){ 
                    $csv = file( $this->request->files['price']['tmp_name'] ); 
                    $ok  = 0;
                    $errCount = 0;
                    foreach ( $csv as $prod ) {
                        $str = explode(';',$prod); 
                        $model  = $str[0];
                        if($str[1]<= 0){$price= 0;} else {$price = $str[1];}
                        if(isset($model) && $model > 0){
                            $isset = $this->db->query( "SELECT COUNT(product_id) as find FROM " . DB_PREFIX . "product WHERE model = '$model'" );
                            if ( ! empty( $isset->row['find'] ) && $isset->row['find'] > 0 ) {
                                $updateProd = $this->db->query( "UPDATE " . DB_PREFIX . "product SET price = '$price', date_modified = '" . date( 'Y-m-d H:i:s' ) . "' WHERE model = '$model'" );
                                if ( ! empty( $updateProd ) ) {
                                    $ok ++;
                                } else {
                                    $errCount ++;
                                }
                            } else {
                                $errCount ++;
                            }
                        }
                    }
                    $this->session->data['success'] = "Обновлено товаров: $ok<br/>Нет в базе: $errCount";
                }else{
                    echo 'not file';
                }
            }
            $this->redirect($this->url->link('module/updatecsv', 'token=' . $this->session->data['token'], 'SSL'));
        }
    }

 

Я не программист.

Решение не понятно. Куда это вставлять?!

Share this post


Link to post
Share on other sites
В 18.08.2018 в 11:37, Esox сказал:

Я не программист.

Решение не понятно. Куда это вставлять?!

В контроллер. Но раз вы не программист - тогда вам это не поможет. Так как это практически готовое решение, но не оформленное как модуль. Осталось только вьюху запилить и немного в контроллер строк добавить.

Share this post


Link to post
Share on other sites
2 часа назад, niger сказал:

В контроллер. Но раз вы не программист - тогда вам это не поможет. Так как это практически готовое решение, но не оформленное как модуль. Осталось только вьюху запилить и немного в контроллер строк добавить.

 

какова цена?

Share this post


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
You are posting as a guest. If you have an account, please sign in.
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.


  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.