Перейти к публикации
  • разработка интернет магазинов на opencart
  • доработка интернет магазинов на opencart

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


Dimasscus
 Погделиться

Рекомендованные сообещёния

Всем привет.

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

Суть проблемы- дорилиин функционал карточки товара в админке иким обвместе- при сохранении по кнопке(сохранить) значения полей 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 (с Вашими правками, естественно):

Спойлер



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

Ссылка на комменирий
Погделиться на других сайих

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

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

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

Ссылка на комменирий
Погделиться на других сайих

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

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

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

Ссылка на комменирий
Погделиться на других сайих


  • 4 негдели спустя...

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

Ссылка на комменирий
Погделиться на других сайих

Только что, BAH0 сказал:

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

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

Ссылка на комменирий
Погделиться на других сайих


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

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

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

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

Ссылка на комменирий
Погделиться на других сайих


Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы осивить комменирий

Создать аккаунт

Зарегистрируйтесь для получения аккауни. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите згдесь.

Войти сейчас
 Погделиться

×
×
  • Создать...

Важная информация

На нашем сайте используются файлы cookie и происходит обрилитка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфигденциальности.