/ / Magento - Chybné atribúty pri načítaní produktu? - php, magento

Magento - Zlé atribúty pri načítavaní produktu? - php, magento

Vytváram vlastné pravidlá, ktoré môžem automaticky pridaťprodukty do kategórií. Nižšie uvedený kód je od môjho pozorovateľa. Problém, s ktorým sa stretávam, je, že po spustení tohto kódu sa do mojej kategórie pridajú produkty bez atribútu (napríklad „shirt_color“).

Môže niekto objasniť, prečo je to takdeje? Z nejakého dôvodu sa k produktu stále pripája „uhlie šedá“ bez „košele_farby“. Pri porovnaní („uhlie šedá“ == „uhlie šedá“) sa zmení na „true“, a preto $ r == 1;

Vďaka.

Výstup príkladu:

#product w/ a "shirt_color" attribute
productEntityId=628
productName=Rogue GRAY International Shirt XXL
productSKU=HW0003-XXL
string ==
product attributeSTRTOLOWER="charcoal grey"
value STRTOLOWER="charcoal grey"
r=1

#product w/o a "shirt_color" attribute
productEntityId=629
productName=O"Neill Hyperfreak White
productSKU=
string ==
product attributeSTRTOLOWER="charcoal grey"
value STRTOLOWER="charcoal grey"
r=1

kód:

public function onCategoryRuleSave($observe)
{
$model = Mage::getModel("catalog/product");
$collection =
$model->getCollection()
->addAttributeToSelect("entity_id");
$write = Mage::getSingleton("core/resource")->getConnection("core_write");

foreach ($collection as $product) {
echo "productEntityId=" . $product->getId() . "<br>";
$product = $product->load($product->getId());
$productAttributeValue =
$model->load($product->getId())
->getAttributeText( $observe["attribute_code"] );
$r = 0;

echo "productName=" . $product->getName() . "<br>";
echo "productSKU=" . $product->getSku() . "<br>";
if ( is_numeric($observe["value"]) ) {
echo "operator= " . $observe["operator"] . "<br>";
switch($observe["operator"]) {
case "<":
echo "numeric <<br>";
$r = ($productAttributeValue < $observe["value"]) ? 1 : 0;
break;
case ">":
echo "numeric ><br>";
$r = ($productAttributeValue > $observe["value"]) ? 1 : 0;
break;
case "<=":
echo "numeric <=<br>";
$r = ($productAttributeValue <= $observe["value"]) ? 1 : 0;
break;
case ">=":
echo "numeric >=<br>";
$r = ($productAttributeValue >= $observe["value"]) ? 1 : 0;
break;
case "==":
echo "numeric ==<br>";
$r = ($productAttributeValue == $observe["value"]) ? 1 : 0;
break;
case "!=":
echo "numeric !=<br>";
$r = ($productAttributeValue != $observe["value"]) ? 1 : 0;
break;
}
}
else {
switch($observe["operator"]) {
case "==":
echo "string ==<br>";
echo "product attributeSTRTOLOWER="" . strtolower($productAttributeValue) . ""<br>";
echo "value STRTOLOWER="" . strtolower($observe["value"]) . ""<br>";
$r = (
strtolower($productAttributeValue) == strtolower($observe["value"])
) ? 1 : 0;
echo "r=" . $r . "<br>";
break;
case "!=":
echo "string !=<br>";
echo "product attributeSTRTOLOWER="" . strtolower($productAttributeValue) . ""<br>";
echo "value STRTOLOWER="" . strtolower($observe["value"]) . ""<br>";
$r = (
strtolower($productAttributeValue) != strtolower($observe["value"])
) ? 1 : 0;
echo "r=" . $r . "<br>";
break;
}
}
echo "<br>";
if ($r==1) {
$write->query(
"REPLACE INTO `catalog_category_product` (`category_id`, `product_id`)
VALUES (" . $observe["category_id"] . "," . $product->getId() . ")"
);
}
}
die();

}

Prešiel z ovládača:

Mage::dispatchEvent(
"category_rule_save",
array(
"rule_id"        => $id,
"attribute_code" => $data["attribute_code"],
"operator"       => $data["operator"],
"value"          => $data["value"],
"category_id"    => $data["category"],
"store_id"       => $data["store_id"]
)
);

odpovede:

0 pre odpoveď č. 1

Prišiel na problém. Pretože som to vyhlásil $model = Mage::getModel("catalog/product"); predtým sa niečo dalo ďalej. Namiesto

$model->load($product->getId())

Teraz mám

Mage::getModel("catalog/product")->load($product->getId()).

To isté som urobil aj pre Mage::getModel("catalog/product")->getCollection().