Laden einer Produktsammlung nach einem bestimmten Attribut-Dropdown-Wert
-
13-12-2019 - |
Frage
Ich versuche, ein bestimmtes virtuelles Produkt mit seinen benutzerdefinierten Optionen zu laden, aber stattdessen erhalte ich immer wieder ein leeres Array.
Mein Attribut ist 'part_identifier' im Attributsatz 'boat_part' Es ist ein Dropdown-Attribut mit mehreren Optionen.Die Option, an der ich versuche zu ziehen, ist 'Schau'.
Hier ist mein Code:
$attribute = 'msh_boat_part_identifier';
$boatLookProducts = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter($attribute, array('like'=>'Look'))
->load()
->getItems();
foreach($boatLookProducts as $boatLookProduct)
{
$return[] = array(
"id" => (int)$boatLookProduct->getEntityId(),
"name" => $boatLookProduct->getName(),
"type" => "profile",
"shortDesc" => $boatLookProduct->getShortDescription(),
"desc" => $boatLookProduct->getDescription(),
"active" => ($boatLookProduct->getStatus() === "2" ? false : true)
);
}
echo Mage::helper('pb')->ConvertToJson($return);
Wenn ich in meiner Abfrage für die Sammlung das Array in ändere
->addAttributeToFilter($attribute, array('like'=>'%%'))
es wird erfolgreich alle Projekte zurückgeben, aber ich kann nicht das gewünschte bekommen!
Lösung
Als part_identifier
ist ein Dropdown-Attribut, können Sie die Sammlung nicht nach der Optionsbezeichnung filtern.
Um eine Sammlung nach einer Option zu filtern, müssen Sie die ID dieser Optionsbezeichnung (tatsächlicher Optionswert) abrufen.
Dann können Sie die Sammlung nach dieser Options-ID filtern:
// use your own attribute code here
$attributeCode = 'your_attribute_here';
$attributeOption = 'Look';
$attributeDetails = Mage::getSingleton('eav/config')
->getAttribute(Mage_Catalog_Model_Product::ENTITY, $attributeCode);
$options = $attributeDetails->getSource()->getAllOptions(false);
$selectedOptionId = false;
foreach ($options as $option){
// print_r($option) and find all the elements
echo $option['value'];
echo $option['label'];
if ($option['label'] == $attributeOption) {
$selectedOptionId = $option['value'];
}
}
if ($selectedOptionId) {
$products = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('*')
->addAttributeToFilter($attributeCode, array('eq' => $selectedOptionId))
}
Andere Tipps
Das ist spät und vielleicht nicht gültig zum Zeitpunkt des Anfragens, obwohl ich einen prägnanten Weg gefunden habe:
generasacodicetagpre.Verwenden Sie es dann in dem Sammelfilter wie üblich