5

I have custom multiselect attribute and want to get selected values on Product List Page.

If attribute has used_in_product_listing=1, I can get only string of ids on Product List Page (something like $_product->getCustomMultAttr() == '236,238,239').

Could somebody tell me how to save in flat table values of this attribute, but not ids?

asked Mar 30, 2017 at 14:40

1 Answer 1

3

I think what you are really looking for is a way of printing in your template the attribute value labels corresponding to those comma-separated IDs. I see no point storing the labels themselves in the database flat tables, as this will require significant overhead whenever an attribute value label is changed in Admin: you would need to have code that iterates over all occurrences of that value ID (say 239) and update all related flat tables accordingly. Also, if you amended only the flat tables, this would cause issues when flat tables are disabled for any reasons.

You can include the labels in your template either by using:

echo $_product->getResource()->getAttribute('custom_mult_attr')->getFrontend()->getValue($_product);

or by splitting the comma-separated list of IDs and fetching the correct store value label for each, for example by using something like:

if (($attr = $_product->getResource()->getAttribute('custom_mult_attr')) && $attr->usesSource()) {
 if ($ids = explode(',', $_product->getData('custom_mult_attr'))) {
 foreach ($ids as $id) {
 echo $attr->getSource()->getOptionText($id);
 }
 }
}

This - of course - is just an example, the actual code may have to be amended to suit your needs, but it should give you an idea.

Should you still want to store the labels in the flat tables, I'd suggest you create another attribute of type text, and populate/update it on product or attribute save with the label values obtained as per the examples above.

answered Jan 4, 2018 at 22:11

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.