cum să rezolvați eroarea de proprietate nedefinită (Drupal, Noduri, Depanare)

aashi a intrebat.

Acesta este codul meu:

function my_module_node_presave($node){
  if ($node->type == 'add_stock') {
    $stock_value = $node->field_stock_value['und'][0]['value'];
    drupal_set_message('stock_value :'.$stock_value);

    $sku = $node->field_sku['und'][0]['value'];
    drupal_set_message('sku :'. $sku);

    $key = $node->field_reference['und'][0]['nid'];
    drupal_set_message('key :'. $key);

    $key1 = node_load($key);
    //$pnode =  $key1->field_product_stock['und'][0]['value'];
    //drupal_set_message('key1 :'.$key1);
    //if (module_exists('uc_stock') && function_exists('uc_stock_adjust')) {

      uc_stock_set($node->$sku, $stock_value);
      uc_stock_adjust($node->$sku, $stock_value);

    //}
  }
}

Eroarea pe care o primesc este următoarea:

Notice: Proprietate nedefinită: stdClass::$tshirt-11 în my_module_node_presave() (linia 40 din
D:xampphtdocsphotophotogallarysitesallmodulesmy_modulemy_module.module).

Notă: Proprietate nedefinită: stdClass::$tshirt-11 in my_module_node_presave() (line 41 of D:xampphtdocsphotophotogallarysitesallmodulesmy_modulemy_module.module).

Comentarii

  • și aceeași eroare dacă folosesc $key în loc de $sku în ultimele linii de cod –  > Por aashi.
  • ar trebui să fie $node->sku sau $node->key fără $ – -.  > Por Mohammed Shameem.
  • după eliminarea semnului $ eroarea este Notă: Proprietate nedefinită: stdClass::$sku în my_module_node_presave() (linia 40 din D:xampphtdocsphotophotogallarysitesallmodulesmy_modulemy_modulemy_module.module). Notă: Proprietate nedefinită: stdClass::$sku in my_module_node_presave() (line 41 of D:xampphtdocsphotophotogallarysitesallmodulesmy_modulemy_module.module). –  > Por aashi.
  • asta înseamnă că nu există o variabilă numită sku cu în obiectul nod. ai putea face ceva de genul drupal_set_message”<pre> . print_r($node, true) . „</pre>”); –  > Por Mohammed Shameem.
1 răspunsuri
kiamlaluno

Când scrieți $node->$sku, , PHP ia valoarea lui $sku și o folosește ca nume al unei proprietăți.
În cazul tău, $sku conține 'tshirt-11', , și $node->$sku este echivalent cu $node->tshirt-11. Deoarece $node->tshirt-11 nu este definit, veți obține eroarea pe care o vedeți.

Codul pe care ar trebui să-l scrieți este următorul.

  uc_stock_set($sku, $stock_value);
  uc_stock_adjust($sku, $stock_value);

Ca o notă suplimentară, valoarea unui câmp este accesată folosind field_get_items(). Codul pe care îl utilizați pentru a seta $sku ar trebui rescris după cum urmează.

$items = field_get_items('node', $node, 'field_sku');
$sku = $items[0];

Comentarii

  • ok, eroarea este eliminată. dar ceea ce încerc să fac nu funcționează. Vreau să măresc valoarea stocului din nodul meu de produs.Dar aceasta nu se schimbă, ci rămâne aceeași –  > Por aashi.
  • Deoarece folosesc uc_stock_adjust($sku, $stock_value); pentru a crește valoarea stocului nodului meu de tip produs, care este referit la nodul pe care îl codific în prezent cu my_module_node_presave($node) –  > Por aashi.
  • Aceasta este o altă întrebare. :) Întrebarea întreabă cum să remediezi mesajul de eroare, ceea ce este ceea ce spune acest răspuns. –  > Por kiamlaluno.
  • dacă fac așa: $items = field_get_items(‘node’, $node, ‘field_sku’); drupal_set_message(‘item :’. $item); $sku = $items[0]; drupal_set_message(‘sku :’. $sku); –  > Por aashi.
  • nu dă nimic în răspuns. și încă ceva field_get_items(‘node’, $node, ‘field_sku’); ce face? –  > Por aashi.