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!

War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top