getName() restituisce null
-
12-12-2019 - |
Domanda
Mi sono imbattuto in questo blocco di codice in un'estensione che scorre tra i prodotti secondari e tenta di restituire la quantità di stock corrente e il nome dei prodotti secondari:
<?php foreach ($this->getChildProducts() as $childProduct) : ?>
<?php $childProductStockQty = $this-> getProductStockQty($childProduct);?>
<?php if ($childProductStockQty > 0) : ?>
<tr>
<td><?php echo $childProduct->getName() ?></td>
<td class="a-center"><?php echo $childProductStockQty ?></td>
</tr>
<?php endif ?>
<?php endforeach ?>
In CE 1.9.0.1
ha funzionato perfettamente, restituendo sia i nomi dei prodotti che le quantità di stock come previsto.In CE 1.9.1
, restituirà le quantità di stock corrette, ma il nome restituirà null.
La mia domanda non è tanto "cosa c'è che non va in questa estensione?", ho inviato una domanda anche allo sviluppatore.Mi chiedo se qualcuno di voi è a conoscenza di eventuali cambiamenti CE 1.9.1
su come recuperare il nome di un prodotto figlio.
Leggendo il codice lungo il Mage/CatalogInventory/Block/Stockqty
La tana del coniglio non ha emesso alcuna luce che io possa rilevare.
Qualsiasi consiglio è apprezzato.
Soluzione
È interessante che il nome restituisca null.Cercando il codice in cui finisce getUsedProducts
che dovrebbe Retrieve array of "subproducts"
e restituisce una raccolta di prodotti.
Non ci sono cambiamenti che posso vedere confrontando un repository locale da 1.9.0.1 a 1.9.1, quindi è un piccolo mistero.Ancora più strano che ti venga restituito lo stock ma il nome è nullo..Entrambi dovrebbero essere presenti nel modello in quanto sono campi obbligatori.Forse il modulo apporta alcune modifiche aggiuntive alla raccolta che influiscono sul comportamento principale.
Ma per rispondere alla domanda.Non riesco a vedere nulla che sia cambiato tra queste due versioni.
Altri suggerimenti
Io risolto questo con questa riga
<?php $childProduct = Mage::getModel('catalog/product')->load($childProduct->getId()); ?>
.
Quindi ottengo tutte le informazioni sui minori del prodotto, e ora il getname ottiene ciò che ci aspettiamo.
Spero che questo aiuti!Non è il modo migliore, ma funziona.
In primo luogo, hai anche oggetti di prodotto validi nel ciclo?I.e. $childProduct->getId()
che restituisce un ID o null
?Se è così, qualcosa è rotto quando hai aggiornato.Si prega di notare che $this->getProductStockQty()
e $childProduct->getName()
sono non lo stesso metodo.Quindi, non devono avere necessariamente lavorare reciprocamente insieme o fallire insieme.
Secondo, è necessario esaminare il metodo getChildProducts()
del rispettivo blocco.Da lì, puoi rintracciare come la collezione è messa insieme.Potrebbe essere perché la collezione (per qualsiasi motivo dopo aver aggiornato) non include il campo name
nel suo filtro addAttributeToFilter()
.