Jump to content
  • 0

roznice miedzy 1.6.0.6 a wyzej?


design4VIP

Question

tworze modul i zglupialem ;/  pos 1.6.0.6 i nizszymi dziala bez problemu, powyzej (sprawdzane 1.6.0.8, .1.6.1.1, 1.6.1.2) wywala blad:

 

Property Product->link_rewrite is empty
at line 954 in file classes/ObjectModel.php

 

tylko na co mu link_revrite? gdzie to siedzi?

private function ProductDateAdd($select_prods_id, $select_date_add)
{
	if (count($select_prods_id) > 0)
	{
		foreach ($select_prods_id as $id_product)
		{
			$product = new Product((int)$id_product, true, $this->context->language->id, $this->context->shop->id);
			$product->date_add = $select_date_add;
			$product->save();
		}
	}
}

mam cos takiego... wszystko pieknie ladnie.... jak psialem na > 1.6.0.6 jak to wyglada ogolnie:

 

mam w module do wyboru checkboxami wysweittlone produkty, poza tym jedna zmienna (date_add) do wybrania z datepickera. produkty moge wybrac zaznaczajac checkboxami, te od zwracane sa porpawnie przez $select_prods_id - do tego momentu dziala przednio. klikam zapisz i... powyzszy blad, po powrocie zmieniony jest tylko pierwszy produkt.

 

problem jest w samym save(); jak zmienie na add(); to dziala porpawnie i nie wywala bledu, dziala porpawnie.

 

czy wzlegem tych wersji sa jakeis zmiany w save() ? za cholere nie moge sie tego doszukac ;/

 

z gory dzieki za odpowiedzi/podpowiedzi.

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

nie lubie pobijania, ale....

 

przelecialem juz wszlekie mozliwe, odpowiedzialne za zapis do tabel od storny modulu, kontroelry i... pomysly juz mi sie skonczyly ;/

 

proste pytanie, w takim wypadku, jak z poziomu modulu naniesc jakiekolwiek zmiany w tabelach produktu (pamietajac o tabelach _shop przy multistore) tak zeby nie wrzucac osobnych zapytan do bazy danych. no, bez sensu obciazac presta czyms co jest juz zrobione... tylko dlaczego dziala przed 1.6.0.6 a po tej wersji wywala bledy ? ;/

Link to comment
Share on other sites

  • 0

doszedlem juz tyle, ze problem pojawia sie w klasie produktu. jezeli w override wrzuce plik z np. 1.6.0.3 to dziala bez zarzutu... przerzucam calosc i dalej nie moge doszukac sie bledow... construct bez wiekszych zmian... dalej tez niewiele niepokojacego ;/

 

czy ktos cos? cokolwiek?

Panowie "wyzszej polki", czy inkt z was nie probowal w nowszyshc wersjach przez jakikolwiek modul implementowac zmian w tabeli produktu? mass update, csv, xml.... w tym powinno sie wlasnie wykorzysytac wlasnie pokrewne $product->save(); zaniast przepisywac bezsensownie fukcje od poczatku ;)

Link to comment
Share on other sites

  • 0

A, że tak zapytam...

 

1. nie masz przypadkiem jakiegoś produktu gdzie przez jakiś błąd wkradł się zły link_rewrite? ;)

2. Próbowałeś włączyć profiler? On pokaże nieco więcej informacji,

3. czy zawsze testujesz wszystko na tych samych produktach czy zawsze masz sytuacje, że drugi produkt nie przechodzi?

4. czy testowałeś moduł na innej, świeżej instalacji PrestaShop?

 

Jeżeli szukasz zmian na save to raczej nie w Product.php, a w ObjectModel.php, tam było kilka zmian dotyczących zapisywania daty dla multi-shop, sama metoda update() w Product.php nie robi nic szczególnego, odwołuje się ona do ObjectModel::update (tutaj zmiany powinieneś sprawdzić), a także wywołuje dwa hooki actionProductSave/actionProductUpdate - w tym wypadku powinieneś sprawdzić czy nie masz podpiętych jakiś modułów do tych hooków, które mogłyby powodować konflikt.

 

Zakładam, że to jakiś problem u Ciebie bo mój testowy kod:

require(dirname(__FILE__).'/config/config.inc.php');

$front = new FrontController;
$front->init();

$products = array(1,2,3,4,5,6,7);

foreach ($products as $id_product) {
	$instance = new Product((int)$id_product, true, Context::getContext()->language->id, Context::getContext()->shop->id);
	if (Validate::isLoadedObject($instance)) {
		$instance->date_add = '1970-01-01 01:01:01';
		$instance->save();
	}
}

działa bez zarzutu na 1.6.1.1.

Edited by Krystian Podemski (see edit history)
Link to comment
Share on other sites

  • 0

2. - profiler? co i gdzie?

 

testowalem na 3 swiezych istalacjach:

1.6.0.6 (dziala bez problemu),

1.6.0.14 (nie dziala),

1.6.1.1 (nie dziala),

 

wersje z upgrate:

.1.1 do .1.2 (nie dziala)

..0.3 do .0.14 (nie dziala)

 

wersje kombinowane z nadpisami ./override, przeorbkami modulow:

.0.3 (dziala)

.0.6 (dziala)

.0.9 (nie dziala)

 

czyli wszystko powyzej 1.6.0.6 nie dziala ;/ ponizej nie ma problemu ;/

 

 

no ale... jeden, niby banalny, niby niepotrzebny element ;)Validate::isLoadedObject <- to rowiazuje sprawe ;) wielkie poklony i dzieki

 

 

EDIT:

teraz jak juz wiedzialem co i gdzie szukac to znalazlem ;)

jednak klasa Product ;)

 

w <1.6.0.6 przy add () jest odwolanie do hook:

        Hook::exec('actionProductSave', array('id_product' => $this->id));

 

a od 1.6.0.8 (.7 nie sprawdzalem):

        Hook::exec('actionProductSave', array('id_product' => (int)$this->id, 'product' => $this));
        Hook::exec('actionProductUpdate', array('id_product' => (int)$this->id, 'product' => $this));

 

czyli robi fukcje dwa razy, dlatego tez przy zapetleniu w foreach tworzyl dwa razy array $product, z czego druga pusta przez co dalej blokowalo jej dalsze wykonanie. wprowadzenie validacji pomija ta druga.

 

tylko pytanie, po jaka cholere dwa razy wywoluja to samo? czy tutaj nie powinno byc jakies zaleznosci, ze przy if 'add' idzie w hook Save, a przy 'update' idzie w hooka Update ? jaki cel ma takie podwojone wywolanie wszelkich funkcji zapisu produktu ?

Edited by design4VIP (see edit history)
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...