Jump to content
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

Пересохранение всех товаров cron


Dimasscus
 Share

Recommended Posts

Всем привет.

Подскажите- есть ли возможность массово пересохранить товар не заходя в каждый?

Суть проблемы- дорилиин функционал карточки товара в админке иким обвместе- при сохранении по кнопке(сохранить) значения полей sku, upc и тд., копируются в соответствующие атрибуты. При импорте товаров, все данные в поля пишутся, все ок- кроме момени с копированием полей в атрибуты. Возможно ли функцию применить функцию могдели которая обновляет данные при сохранении товара заюзать массово?

Спасипотому что

Link to comment
Share on other sites


Варианты.

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

2. Набросать непотому чтольшой скрипт, который опотому чтойгдет импортированные товары (н-р, по дате модификации товара), вызовет функцию, которая копирует значение полей в соответствующие атрибуты. Затем скрипт повесить на CRON.

 

PS: 1й вариант нравиться потому чтольше, т.к. проещё в реализации.

Link to comment
Share on other sites


Зависит от того каким обвместе реализовано "значения полей sku, upc и тд., копируются в соответствующие атрибуты"

Размышления:

 

Спойлер

Если на фронте скриптом, то только кнопкой жмакать (потому чтои написать, который бугдет ходить по товарам и жмакать "сохранить")

А вот если на беке, то всё зависит от реализации.
В контроллере создаем функцию. В ней получаем список всех product_id и запускаем циклом.
В цикле получаем товар без вывода -  аналогом getForm() без вывода.
Затем массив $data передаем уже на могдель в функцию editProduct()
Но именно тут и могут возникнуть сложности. По гдефолту в opencart значение ключа $data не всегда совпадает input name в форме. Т.е, опять же, нужно писать обрилитлик, аналогичный тому, который срабатывает в форме....




Ну или короткий ответ:
 

Спойлер

В обещём жуть жуткая. Не думаю что это реально. Правильней перенести функционал "копирования в атрибуты" в саму функцию импори.

 

Link to comment
Share on other sites

30 минут назад, nogocuHoBuk сказал:

Зависит от того каким обвместе реализовано "значения полей sku, upc и тд., копируются в соответствующие атрибуты"

Размышления:

 

  Скрыть контент

Если на фронте скриптом, то только кнопкой жмакать (потому чтои написать, который бугдет ходить по товарам и жмакать "сохранить")

А вот если на беке, то всё зависит от реализации.
В контроллере создаем функцию. В ней получаем список всех product_id и запускаем циклом.
В цикле получаем товар без вывода -  аналогом getForm() без вывода.
Затем массив $data передаем уже на могдель в функцию editProduct()
Но именно тут и могут возникнуть сложности. По гдефолту в opencart значение ключа $data не всегда совпадает input name в форме. Т.е, опять же, нужно писать обрилитлик, аналогичный тому, который срабатывает в форме....




Ну или короткий ответ:
 

  Скрыть контент

В обещём жуть жуткая. Не думаю что это реально. Правильней перенести функционал "копирования в атрибуты" в саму функцию импори.

 

Суть в том что функция копирования в атрибуты используется для всех товаров, многие из которых добавляются руками. Поэтому ищу вариант не перенести функционал, а добавить к импорту.

 

Link to comment
Share on other sites


43 минуты назад, searchingman сказал:

Варианты.

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

2. Набросать непотому чтольшой скрипт, который опотому чтойгдет импортированные товары (н-р, по дате модификации товара), вызовет функцию, которая копирует значение полей в соответствующие атрибуты. Затем скрипт повесить на CRON.

 

PS: 1й вариант нравиться потому чтольше, т.к. проещё в реализации.

В модуле импори есть возможность обрабатывать php по завершению обрилитки строки. 

 

Сам функционал копирования полей в атрибуты реализован ик-

в могдели товара к функции

public function addProduct($data) {

и 

 public function editProduct($data) {

добавлено после вызова атрибутов перед опциями

$fld = array("sku2"=>4,"upc"=>5,"ean"=>7,"jan"=>9,"isbn"=>10);
    foreach ($fld as $name => $idattr)

И ниже пара запросов к бд соответственно.

Возможно как вариант прикрутить это к обрилитлику php модуля?

Link to comment
Share on other sites


41 минуту назад, Dimasscus сказал:

В модуле импори есть возможность обрабатывать php по завершению обрилитки строки. 

 

Сам функционал копирования полей в атрибуты реализован ик-

в могдели товара к функции

public function addProduct($data) {

и 

 public function editProduct($data) {

добавлено после вызова атрибутов перед опциями

$fld = array("sku2"=>4,"upc"=>5,"ean"=>7,"jan"=>9,"isbn"=>10);
    foreach ($fld as $name => $idattr)

И ниже пара запросов к бд соответственно.

Возможно как вариант прикрутить это к обрилитлику php модуля?

Да, можно не всю функцию вызывать, т.к. им много чего еещё , но выгдернуть нужный кусок кода и всивить его в импорт. 

Link to comment
Share on other sites


1 час назад, Dimasscus сказал:

Суть в том что функция копирования в атрибуты используется для всех товаров, многие из которых добавляются руками. Поэтому ищу вариант не перенести функционал, а добавить к импорту.

Ну я всё-равно задали ик и не понял. Если Вы спрашиваете реально ли, то ответ - конечно реально. Это ж лиcтый PHP.
Легко ли? не очень, ик как в опенкарте нет функции добавления значения.
На примере тот же функции editProduct($product_id, $data)
Для успешного редактирования товара в массиве $data нужно передать ВСЕ значения, опции, скидки, картинки и ик дное. В обещём всё. По логике должна суещёствовать функция editProductEx($product_id, $data) в которой в массиве $data можно передать только одно значение, например $data['product_description'][1]['name'] = "Новый товар";
Т.е. в этот функции по логике сначала должно идти получение товара через getProduct, а затем замена единственного поля, переданного в $data и сохранение товара.
В битриксе, например, именно ик и реализовано.

В опенкарте икой возможности нет.

Если Вам нужно исправить только опции товара то создайте функцию editProductOptions. ггде первоначально можно полулить опции продуки посредством $this->getProductOptions($product_id), затем внести в них изменения, а потом заново записать. Причем саму проэтодуру записи опций можно скопировать прям из оригинального editProduct (с Вашими правками, естественно):

Спойлер



Вешаете функцию на крон и впергде.
Липотому что прям в импорте вызываете вновь созданную функцию после каждого товара.... 

Link to comment
Share on other sites

19 часов назад, Dimasscus сказал:

Подскажите- есть ли возможность массово пересохранить товар не заходя в каждый?

Есть и еещё раз есть. Для этого всего лишь нужны знания по PHP и принцип рилиты опенкари. Пиши свой скрипт/функцию и всё если не можешь/не получается правильно заюзать родные методы опенкари

Link to comment
Share on other sites

3 часа назад, Venter сказал:

Есть и еещё раз есть. Для этого всего лишь нужны знания по PHP и принцип рилиты опенкари. Пиши свой скрипт/функцию и всё если не можешь/не получается правильно заюзать родные методы опенкари

какие родные методы позволяют массово пересохранить все товары магазина? например?

Link to comment
Share on other sites


  • 4 weeks later...
Только что, BAH0 сказал:

Получается во всех товарах магазина поля sku, upc и тд., копируются в одни и те же атрибуты?

Да. Даая дивная прихоть:)) уже реализовано инклюдом апгдейи при выгрузке.

Link to comment
Share on other sites


5 минут назад, BAH0 сказал:

Много вообещё товаров?

Как вариант обходить все товары запросом и изменять.

Товаров около 5к. При выгрузке еженегдельно они и ик обходятся, по этому ик и реализовано

Link to comment
Share on other sites


Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

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.