Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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


Dimasscus

Recommended Posts

Всем привет.

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

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

Спасибо

Надіслати
Поділитися на інших сайтах


Варианты.

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

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

 

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

Надіслати
Поділитися на інших сайтах


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

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

 

Спойлер

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

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




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

Спойлер

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

 

Надіслати
Поділитися на інших сайтах

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

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

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

 

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

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

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




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

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

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

 

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

 

Надіслати
Поділитися на інших сайтах


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 модуля?

Надіслати
Поділитися на інших сайтах


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 модуля?

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

Надіслати
Поділитися на інших сайтах


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 (с Вашими правками, естественно):

Спойлер

image.thumb.png.461e5ff1056dc5baf16df854a7e44e32.png



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

Надіслати
Поділитися на інших сайтах

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

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

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

Надіслати
Поділитися на інших сайтах

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

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

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

Надіслати
Поділитися на інших сайтах


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

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

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

Надіслати
Поділитися на інших сайтах


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

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

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

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

Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.