Jump to content

[PHP Notice #8] Trying to get property of non-object (/var/www/vhosts/luckyfour.cz/httpdocs/modules/


jiritomekeu

Recommended Posts

Zdravím,

 

když někdy jdu do košíku nebo po přihlášení nebo registraci, vyskočí mi v debug módu tato hláška.

 

 Trying to get property of non-object (/var/www/vhosts/luckyfour.cz/httpdocs/modules/blockcart/blockcart.php, line 26)

v blockcart.php je od 26. řádku toto:

[code]
if ((int)$params['cart']->id_currency && (int)$params['cart']->id_currency != $this->context->currency->id)
$currency = new Currency((int)$params['cart']->id_currency);
else
$currency = $this->context->currency;
[/code]

Link to comment
Share on other sites

Zkus před && dát enter, ať vidíš v které části je problém, ať to vypadá takto a pak napiš na kterém řádku je problém

 

if ((int)$params['cart']->id_currency
&& (int)$params['cart']->id_currency != $this->context->currency->id)
  $currency = new Currency((int)$params['cart']->id_currency);
 else
  $currency = $this->context->currency;

Link to comment
Share on other sites

Zkus před && dát enter, ať vidíš v které části je problém, ať to vypadá takto a pak napiš na kterém řádku je problém

 

if ((int)$params['cart']->id_currency
&& (int)$params['cart']->id_currency != $this->context->currency->id)
  $currency = new Currency((int)$params['cart']->id_currency);
 else
  $currency = $this->context->currency;

 

Tak jsem to tak udělal a chyba je hned na prvním řádku, takže v:

 

if ((int)$params['cart']->id_currency

 

Horší je, že to jednou vyhodí a pak to třikrát nevyhodí a většinou to udělá, když necháš zboží v košíku a odhlásíš se, tak hned po přihlášení a nebo když dáš zboží do košíku a klikneš na Objednávku ( tzn. Nákupní košík ), ale problém je v bloku košíku, který je na každé stránce.

Link to comment
Share on other sites

Tak jsem to tak udělal a chyba je hned na prvním řádku, takže v:

 

if ((int)$params['cart']->id_currency

 

Horší je, že to jednou vyhodí a pak to třikrát nevyhodí a většinou to udělá, když necháš zboží v košíku a odhlásíš se, tak hned po přihlášení a nebo když dáš zboží do košíku a klikneš na Objednávku ( tzn. Nákupní košík ), ale problém je v bloku košíku, který je na každé stránce.

 

A když dáš při této chybě refresh, tak už je to v pohodě.

 

Můžeš vyzkoušet: http://luckyfour.cz/index.php

Link to comment
Share on other sites

Zkus rozšířit o $params['cart'] na začátku IFu

 

 

if ( $params['cart']
&& (int)$params['cart']->id_currency
&& (int)$params['cart']->id_currency != $this->context->currency->id)
  $currency = new Currency((int)$params['cart']->id_currency);
 else
  $currency = $this->context->currency;

Link to comment
Share on other sites

Zkus rozšířit o $params['cart'] na začátku IFu

 

 

if ( $params['cart']
&& (int)$params['cart']->id_currency
&& (int)$params['cart']->id_currency != $this->context->currency->id)
  $currency = new Currency((int)$params['cart']->id_currency);
 else
  $currency = $this->context->currency;

Tak teď to háže chybu pořád... http://luckyfour.cz/index.php

 

Btw: proč je tam vlastně to (int) před proměnnou? To je, že jde v každém případě o číselnou hodnotu?

 

Ta chyba, kterou to háže, je že to není object, předpokládám? Myslím tu první, ne teď.

Link to comment
Share on other sites

Tak teď to háže chybu pořád... http://luckyfour.cz/index.php

 

Btw: proč je tam vlastně to (int) před proměnnou? To je, že jde v každém případě o číselnou hodnotu?

 

Ta chyba, kterou to háže, je že to není object, předpokládám? Myslím tu první, ne teď.

Tak jsem odstranil to (int) na začátku z toho tvého návrhu a hází to chybu zase jinde...

 

if ( $params['cart'] && (int)$params['cart']->id_currency && (int)$params['cart']->id_currency != $this->context->currency->id)
  $currency = new Currency((int)$params['cart']->id_currency);
 else
  $currency = $this->context->currency;
 if ($params['cart']->id_customer)

 

Teď to háže chybu s objectem na posledním řádku, který zde vidíš.

Link to comment
Share on other sites

Tak ne... teď to hází, když nechám zboží v košíku a odhlásím se a přihlásím toto:

 

Fatal error: Call to a member function getProducts() on a non-object in /var/www/vhosts/luckyfour.cz/httpdocs/modules/blockcart/blockcart.php on line 41

 

Řádek 41 začíná takto:

$products = $params['cart']->getProducts(true);
 $nbTotalProducts = 0;
 foreach ($products as $product)
  $nbTotalProducts += (int)$product['cart_quantity'];
 $cart_rules = $params['cart']->getCartRules();

Link to comment
Share on other sites

vypíše ti to celý obsah proměnné ať je jaká je.

 

tady teďka vidím, že z nějakého důvodu se ti nenaplní v $params['cart'], tak se to bude muset udělat ručně, vlož úplně na začátek této funkce tento kód :

 

if( !$params['cart'] )
  $params['cart'] = new Cart($params['id_cart']);

 

a to co jsme upravovali na začátku můžeš vrátit. Teď už to pojede

Link to comment
Share on other sites

můžeš poslat co máš na řádku 27 ?

 

To cos mi poslal ty...

 

if( !$params['cart'] )
	    $params['cart'] = new Cart($params['id_cart']);

 

Nechápu, jak to mlže takhle dělat chyby, jen jsem upravoval vzhled v blockcart.tpl, v tomhle souboru jsem vubec nic neupravoval a jeste jsem upravoval ajax-cart.js, aby to pridalo i ten horni radek nad seznam produktu, tak to fakt nechapu.

Link to comment
Share on other sites

jasně, moje chyba, má tam být toto:

 


if( !$params['cart'] )
$params['cart'] = new Cart((int)$params['cookie']->id_cart);

 

špatně jsem to odzkoušel

 

už to zase hází tu chybu co jsme řešili...

 Trying to get property of non-object (/var/www/vhosts/luckyfour.cz/httpdocs/modules/blockcart/blockcart.php, line 30)

[code]
if ((int)$params['cart']->id_currency && (int)$params['cart']->id_currency != $this->context->currency->id)
$currency = new Currency((int)$params['cart']->id_currency);
else
$currency = $this->context->currency;
if ($params['cart']->id_customer)
{
$customer = new Customer((int)$params['cart']->id_customer);
$taxCalculationMethod = Group::getPriceDisplayMethod((int)$customer->id_default_group);
}
else
$taxCalculationMethod = Group::getDefaultPriceDisplayMethod();
[/code]

Link to comment
Share on other sites

tak to už nedává smysl, teď by to mělo jet, není teď problém v druhé části ?

$this->context->currency->id;

zkus odentrovat nebo dej před

var_dump($this->context->currency->id);
var_dump($params['cart']->id_currency);

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

tak to už nedává smysl, teď by to mělo jet, není teď problém v druhé části ?

$this->context->currency->id;

zkus odentrovat nebo dej před

var_dump($this->context->currency->id);
var_dump($params['cart']->id_currency);

odentrovano a pridal jsem tam i ty var_dump... ja mam v tom takovej gulas....
Link to comment
Share on other sites

tak ten nefunkční if uprav takto:

 

if ( (int)$params['cart']->id_currency
  && is_object($this->context->currency)
  && (int)$params['cart']->id_currency != $this->context->currency->id)
  $currency = new Currency((int)$params['cart']->id_currency);
 else
  $currency = $this->context->currency;

Link to comment
Share on other sites

tak ten nefunkční if uprav takto:

 

if ( (int)$params['cart']->id_currency
  && is_object($this->context->currency)
  && (int)$params['cart']->id_currency != $this->context->currency->id)
  $currency = new Currency((int)$params['cart']->id_currency);
 else
  $currency = $this->context->currency;

tak jsem to tam pridal, jdu testovat zase
Link to comment
Share on other sites

vrať se zpátky do blockcart.php a nahoru do funkce assignContentVars přidej toto:

 

 if( !is_object($this->context->currency) )
  $this->context->currency = new Currency((int)$params['cart']->id_currency);

Link to comment
Share on other sites

vrať se zpátky do blockcart.php a nahoru do funkce assignContentVars přidej toto:

 

 if( !is_object($this->context->currency) )
  $this->context->currency = new Currency((int)$params['cart']->id_currency);

jo a mam tamto nechat a tohle dat na zacatek?
Link to comment
Share on other sites

jo a mam tamto nechat a tohle dat na zacatek?

tak tohle uz je na me moc...

 

 Undefined index: img_dir (/var/www/vhosts/luckyfour.cz/httpdocs/cache/smarty/compile/443cf8b4d3c2da86a0a4ec888437ca143d02b0ae.file.blockcart.tpl.php, line 64)
Link to comment
Share on other sites

jj, tamto tam nech, jen ty var_dumpy jestli jsi tam nechal, tak můžeš smazat.

 

img_dir ... přidej do

$this->smarty->assign(array(

...

 

'img_dir' => _THEME_IMG_DIR_,

...

));

 

je jedno kam tam, nejlépe někde doprostřed

Link to comment
Share on other sites

Vypadá to, že je to vyřešené, tak moc děkuji, je vidět, že se vyznáš. Těch pár chyb, co tam ještě hází smarty, už zvládnu.

 

Chtěl jsem se spíš ještě zeptat, je možné dostat do shrnutí objednávky doručovací adresu, kterou zákazník zvolil?

Link to comment
Share on other sites

Myslíš do souboru order-confirmation.tpl ?

u cashondelivery je to validation.tpl a u bankwire je to payment_execution.tpl

 

chtel bych to tam dat neco jako overeni pro klienta ( pouze dorucovaci adresu ) na jeden radek neco jako jsem to pomoci promennych vlozil do nakupniho kosiku u vyberu adres.

Link to comment
Share on other sites

musíš pro každou platbu upravit php controller aby jsi dostal do smarty proměnou s tou adresou.

 

Například pro cashondelivery musíš upravit soubor /modules/cashondelivery/controllers/front/validation.php a v něm funkci initContent(), kde si musíš získat adresu nějak takto :

 

$adresa = new Adress((int)$this->context->cart->id_address_delivery);

 

a pak v $this->context->smarty->assign() přiřadíš například

'ulice' => $adresa->address2;

 

a tak tam naskládáš co chceš a pak to normálně můžeš použít v šabloně.

 

To stejné musíš udělat i u bankwire

Link to comment
Share on other sites

musíš pro každou platbu upravit php controller aby jsi dostal do smarty proměnou s tou adresou.

 

Například pro cashondelivery musíš upravit soubor /modules/cashondelivery/controllers/front/validation.php a v něm funkci initContent(), kde si musíš získat adresu nějak takto :

 

$adresa = new Adress((int)$this->context->cart->id_address_delivery);

 

a pak v $this->context->smarty->assign() přiřadíš například

'ulice' => $adresa->address2;

 

a tak tam naskládáš co chceš a pak to normálně můžeš použít v šabloně.

 

To stejné musíš udělat i u bankwire

Zkusím a dám vědět. Děkuju moc za tvou pomoc, nějak se totiž ztrácím v OOP :-(
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...