Jump to content
  • 0

W ps_product aktualizuje się data i czas w kolumnie date_upd v.1.7.5.1


czarn-y

Question

Witam, mam problem jak w temacie. Przy wielu produktach, nawet tych nieaktywnych co jakiś czas(nawet co kilkanaście minut) aktualizuje mi się data w kolumnie date_upd. Gdzie szukać przyczyny? Crontab odpada. Potrzebne mi dane z tego pola do własnego skryptu, niestety nie mogę z niego skorzystać przez te 'samoistne' zmiany. Podaję przykład: Produkt został zdeaktywowany w czerwcu 2020, a wpolu date_upd pojawia się dzisiejsza data i czas z przed kilkunastu minut. Nic nie robię, nie edytuję produktu, tylko sprawdzam wartość tego pola z poziomu phpmyadmin.

Edited by czarn-y (see edit history)
Link to comment
Share on other sites

5 answers to this question

Recommended Posts

  • 0

Ok, dziękuję za informację, zabieram się za szukanie. Proszę o informację czy takie zachowanie sklepu jest prawidłowe? Może z góry źle założyłem, że wartość kolumny 'date_upd', powinna się zmieniać tylko podczas edycji lub aktywacji/deaktywacji produktu. Bo jeśli te wartości zmieniają się z jakiegoś ważnego powodu, to może nie ma co w tym grzebać i rozwiązać problem inaczej. Potrzebuję tę wartość do skryptu masowego usuwania produktów. Np. chcę usunąć wszystkie nieaktywne produkty gdzie data ostatniej modyfikacji(deaktywacji) jest starsza niż 3 tygodnie.

Link to comment
Share on other sites

  • 0

Zmiana `date_upd` to normalne zachowanie, dzieje się tak z wielu powodów, za każdym razem gdy system musi wykonać aktualizacje jakiegoś elementu powiązanego z produktem, np. czasami przy nadawaniu cen specyficznych (reguły katalogu).

Żeby udzielić tutaj dobrej porady musiałbym znać kontekst, dlaczego usuwać produkty ze sklepu? Czy to jakaś zamknięta platforma? Czy produkty na 100% nigdy nie wrócą na stan? Czy nie można ich przekierować do innych?

Jeżeli decyzja jest w 100% poparta decyzjami biznesowymi i jest to całkowicie zamierzane zachowanie, to ja bym sugerował dodanie jakiegoś customowego pola w produkcie np. last_status_change i tam trzymanie realnej daty gdy produkt zmieniał swój status lub zmieniały się jakieś konkretne rzeczy. Można to sprawdzać odwołując się do dynamicznych Hook znajdujących się w classes/ObjectModel.php

  • Thanks 1
Link to comment
Share on other sites

  • 0

Tak, są to towary pojedyncze i unikatowe, które nigdy nie wrócą na stan. Chcę je usuwać co jakiś czas, aby zapobiec niepotrzebnemu rozrastaniu się bazy, przy okazji zwalniać miejsce na dysku(choć na tą chwilę go nie brakuje). Sklep jest również połączony z zamkniętą platformą, której prędkość działania w jakimś stopniu zależy od wielkości bazy danych. Samo poruszanie się w BackOffice też będzie szybsze i wygodniejsze, jeśli zmniejszę ilość niepotrzebnych już produktów. Także zastosuję się do rady i stworzę dodatkowe pole w bazie. Dziękuję i pozdrawiam.

Link to comment
Share on other sites

  • 0

Stworzyłem nowy moduł i odwołałem się do hooka:

public function hookActionProductUpdate($params) {
        $product_id = $params['id_product']; // Product Id

        Db::getInstance()->execute('UPDATE ' . _DB_PREFIX_ . 'product  SET last_status_change = NOW() WHERE `id_product` = ' . $product_id . ' LIMIT 1');
    }

Na tą chwilę wszystko działa poprawnie. Chociaż będę to jeszcze monitorował, czy nie będzie jakiś nie potrzebnych zmian jak w przypadku kolumny 'date_upd.' Nie za bardzo jeszcze ogarniam system presty, możliwe że można to było inaczej zrobić. Najpierw chciałem skorzystać z hookActionObjectProductUpdateAfter przerabiając przykład zawarty w dokumentacji https://devdocs.prestashop.com/1.7/development/database/objectmodel/

use Product;
// In a module

public function hookActionObjectProductUpdateAfter(Product $product)
{

    Db::getInstance()->execute('UPDATE ' . _DB_PREFIX_ . 'product  SET last_status_change = NOW() WHERE `id_product` = ' . $product->id_product. ' LIMIT 1'); 
}

Niestety użycie 'use Product;' w kodzie modułu powodował błąd, który uniemożliwiał instalację modułu. Może ktoś wytłumaczyć różnicę między tymi hookami i co zrobiłem źle.

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
×
×
  • Create New...