問題描述
我想在 Magento 中遍歷一系列產品 ID.在循環中,我將產品的一些自定義屬性顯示為:
I want to loop over an array of product IDs in Magento. In the loop I am displaying some custom attributes of the products as:
foreach ($products as $product) {
$model = Mage::getSingleton('catalog/product')->load($product['id']);
echo '<br>' . $model->getCredits();
}
問題是,如果第一項的 getCredits()
值為 true
,那么所有后續項都顯示 true
,即使它們沒有值 true
.
Problem is that if the value of getCredits()
for the first item is true
then all the subsequent items show true
even if they do not have the value true
.
但是當我使用 Mage::getModel()
而不是 Mage::getSingleton()
時,屬性值顯示正確.
But when I use Mage::getModel()
instead of Mage::getSingleton()
, the attribute values are displayed correct.
誰能解釋一下這個區別?
Can anyone please explain this difference?
推薦答案
Mage::getModel() 將始終為給定模型返回一個新對象:
Mage::getModel() will always return a new Object for the given model:
/**
* Retrieve model object
*
* @link Mage_Core_Model_Config::getModelInstance
* @param string $modelClass
* @param array|object $arguments
* @return Mage_Core_Model_Abstract|false
*/
public static function getModel($modelClass = '', $arguments = array())
{
return self::getConfig()->getModelInstance($modelClass, $arguments);
}
Mage::getSingleton() 將檢查給定模型的對象是否已經存在,如果存在則返回.如果它不存在,它將創建一個給定模型的新對象,并將其放入已存在的注冊表中.下一次調用不會返回新對象,而是返回現有對象:
Mage::getSingleton() will check whether the Object of the given model already exists and return that if it does. If it doesn't exist, it will create a new object of the given model and put in registry that it already exists. Next call will not return a new object but the existing one:
/**
* Retrieve model object singleton
*
* @param string $modelClass
* @param array $arguments
* @return Mage_Core_Model_Abstract
*/
public static function getSingleton($modelClass='', array $arguments=array())
{
$registryKey = '_singleton/'.$modelClass;
if (!self::registry($registryKey)) {
self::register($registryKey, self::getModel($modelClass, $arguments));
}
return self::registry($registryKey);
}
在您的情況下,您總是想要一個全新的 Product 對象/模型,因為每個產品都是獨一無二的...
In your case you always want a completely new Product object/model since every product is unique...
這篇關于Magento getSingleton() 與 getModel() 問題的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!