Коллекция категорий с фильтром Magento2
Я создал пользовательский раскрывающийся атрибут для категории с кодом атрибута "is_homecategory"
Для его создания использовались следующие методы.
Setup/InstallData.php
public function install(
ModuleDataSetupInterface $setup,
ModuleContextInterface $context
) {
$eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
$eavSetup->addAttribute(
\Magento\Catalog\Model\Category::ENTITY,
'is_homecategory',
[
'type' => 'int',
'label' => 'Is Home Category',
'input' => 'select',
'sort_order' => 333,
'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',
'global' => 1,
'visible' => true,
'required' => false,
'user_defined' => false,
'default' => '0',
'group' => 'General Information',
'backend' => ''
]
);
}
И view/adminhtml/ui_component/category_from.xml
<fieldset name="general">
<field name="is_homecategory">
<argument name="data" xsi:type="array">
<item name="options" xsi:type="object">Magento\Eav\Model\Entity\Attribute\Source\Boolean</item>
<item name="config" xsi:type="array">
<item name="required" xsi:type="boolean">false</item>
<item name="validation" xsi:type="array">
<item name="required-entry" xsi:type="boolean">false</item>
</item>
<item name="sortOrder" xsi:type="number">333</item>
<item name="dataType" xsi:type="string">string</item>
<item name="formElement" xsi:type="string">select</item>
<item name="label" translate="true" xsi:type="string">Is Home Category</item>
</item>
</argument>
</field>
</fieldset>
, который создается с выпадающим списком "Да/нет" в разделе "Администратор".
Я получаю коллекцию, как показано ниже, в файле по блокам.
class Index extends \Magento\Framework\View\Element\Template {
protected $collectionFactory;
public function __construct(
\Magento\Catalog\Block\Product\Context $context,
\Magento\Catalog\Model\ResourceModel\Category $collectionFactory,
array $data = []) {
parent::__construct($context, $data);
$this->collectionFactory = $collectionFactory;
}
public function getCategoryData(){
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$category = $objectManager->create('Magento\Catalog\Model\ResourceModel\Category\Collection');
$category->addAttributeToSelect('*')
->setPageSize(1)
->addAttributeToFilter('is_homecategory',['eq'=>1]
->setOrder('updated_at', 'desc')
);
return $category;
/* $categories = $this->collectionFactory->create()
->addAttributeToFilter('is_homecategory',1)->load();
return categories; */
}
}
Который не возвращает мне никаких результатов.
Все я ищу, нужно ли мне получить только одну категорию, недавно установленную как is_homecategory, как "Да".
Могу ли я фильтровать коллекцию категорий таким образом? Пожалуйста, кто-нибудь, проверьте это и помогите мне. заранее спасибо.
1 answers
Вам необходимо заполнить скобку addAttributeToFilter(). Используйте этот код ниже:
$category = $objectManager->create('Magento\Catalog\Model\ResourceModel\Category\Collection');
$category->addAttributeToSelect('*')
->setPageSize(1)
->addAttributeToFilter('is_homecategory',['eq'=>1])
->setOrder('updated_at', 'desc');
Используйте аргумент по умолчанию в конфигурации для значения по умолчанию
<item name="default" xsi:type="string">1</item>