Een productkenmerk maken
Het toevoegen van een productkenmerk is een van de meest gebruikte bewerkingen in Commerce . Kenmerken zijn een krachtige manier om veel praktische taken met betrekking tot een product op te lossen. Er is een eenvoudig proces om een dropdown-type attribuut aan een product toe te voegen.
In deze video:
- Voeg een attribuut met de naam kleding_material met de mogelijke waarden toe: Katoen, Leer, Zijde, Jeans, Fur en Wol
- Dit kenmerk zichtbaar maken op de pagina met productweergave, in vetgedrukte tekst
- Wijs het toe aan de Standaardkenmerkenreeks en voeg een beperking toe
- Het nieuwe kenmerk toevoegen
Voor wie is deze video?
- Ontwikkelaars nieuw aan handel die moeten leren hoe te om een productattribuut programmatically te creëren
Video-inhoud
Codevoorbeeld
Maak eerst de benodigde mappen, xml- en PHP-bestanden:
- app/code/Learning/ClothingMaterial/registration.php
- app/code/Learning/ClothingMaterial/etc/module.xml
- app/code/Learning/ClothingMaterial/Model/Attribute/Backend/Material.php
- app/code/Learning/ClothingMaterial/Model/Attribute/Frontend/Material.php
- app/code/Learning/ClothingMaterial/Model/Attribute/Source/Material.php
- app/code/Learning/ClothingMaterial/Setup/InstallData.php
app/code/Learning/ClothingMaterial/registration.php
<?php
use Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(
ComponentRegistrar::MODULE,
'Learning_ClothingMaterial',
__DIR__);
app/code/Learning/ClothingMaterial/etc/module.xml
NOTE
Als uw module het Verklarende Schema gebruikt, en de meesten sinds 2.3.0 hebben zou u setup_version moeten weglaten. Nochtans als u sommige erfenisprojecten hebt kunt u deze gebruikte methode zien. Zie developer.adobe.com voor meer informatie.
OPMERKING: voor het werken van deze voorbeeldcode moet u setup_version opnemen anders wordt InstallData.php niet uitgevoerd.
OPMERKING: voor het werken van deze voorbeeldcode moet u setup_version opnemen anders wordt InstallData.php niet uitgevoerd.
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="Learning_ClothingMaterial" setup_version="0.0.1"/>
</config>
app/code/Learning/ClothingMaterial/Model/Attribute/Backend/Material.php
NOTE
Ben zeker om kenmerkenreeks te gebruiken identiteitskaart die in uw project is, in dit voorbeeld is het aantal 9.
<?php
declare(strict_types=1);
namespace Learning\ClothingMaterial\Model\Attribute\Backend;
use Magento\Catalog\Model\Product;
use Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend;
use Magento\Framework\Exception\LocalizedException;
class Material extends AbstractBackend
{
/**
* @param Product @object
* @throws LocalizedException
*/
public function validate($object)
{
$value =$object->getData($this->getAttribute()->getAttributeCode());
// Be sure to validate that your ID number it is likely to be different
if (($object->getAttributeSetId() == 9) && ($value == 'fur')) {
throw new LocalizedException(__('Bottoms cannot be fur'));
}
}
}
app/code/Learning/ClothingMaterial/Model/Attribute/Frontend/Material.php
<?php
declare(strict_types=1);
namespace Learning\ClothingMaterial\Model\Attribute\Frontend;
use Magento\Eav\Model\Entity\Attribute\Frontend\AbstractFrontend;
use Magento\Framework\DataObject;
class Material extends AbstractFrontend
{
public function getValue(DataObject $object): string
{
$value = $object->getData($this->getAttribute()->getAttributeCode());
return "<b>$value</b>";
}
}
app/code/Learning/ClothingMaterial/Model/Attribute/Source/Material.php
<?php
declare(strict_types=1);
namespace Learning\ClothingMaterial\Model\Attribute\Source;
use Magento\Eav\Model\Entity\Attribute\Source\AbstractSource;
class Material extends AbstractSource
{
/**
* Get all options
*
* @retrun array
*/
public function getAllOptions(): array
{
if(!$this->_options){
$this->_options = [
['label' => __('Cotton'), 'value' => 'cotton'],
['label' => __('Leather'), 'value' => 'leather'],
['label' => __('Silk'), 'value' => 'silk'],
['label' => __('Fur'), 'value' => 'fur'],
['label' => __('Wool'), 'value' => 'wool'],
];
}
return $this->_options;
}
}
app/code/Learning/ClothingMaterial/Setup/InstallData.php
<?php
declare(strict_types=1);
namespace Learning\ClothingMaterial\Setup;
use Learning\ClothingMaterial\Model\Attribute\Frontend\Material as Frontend;
use Learning\ClothingMaterial\Model\Attribute\Source\Material as Source;
use Learning\ClothingMaterial\Model\Attribute\Backend\Material as Backend;
use Magento\Catalog\Model\Product;
use Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface;
use Magento\Framework\Setup\InstallDataInterface;
use Magento\Framework\Setup\ModuleContextInterface;
use Magento\Framework\Setup\ModuleDataSetupInterface;
class InstallData implements InstallDataInterface
{
protected $eavSetupFactory;
public function __construct(
\Magento\Eav\Setup\EavSetupFactory $eavSetupFactory
)
{
$this->eavSetupFactory = $eavSetupFactory;
}
/**
* @param ModuleDataSetupInterface $setup
* @param ModuleContextInterface $context
* {@inheritDoc}
*
* @SuppressWarnings(PHPMD.CyclomaticComplexity)
* @suppressWarnings(PHPMD.ExessiveMethodLength)
* @SuppressWarnings(PHPMD.NPathComplexity)
*/
public function install(ModuleDataSetupInterface $setup, ModuleContextInterface $context)
{
$eavSetup = $this->eavSetupFactory->create();
$eavSetup->addAttribute(
Product::ENTITY,
'clothing_material',
[
'group' => 'Product Details',
'type' => 'varchar',
'label' => 'Clothing Material',
'input' => 'select',
'source' => Source::class,
'frontend' => Frontend::class,
'backend' => Backend::class,
'required' => false,
'sort_order' => 50,
'global' => ScopedAttributeInterface::SCOPE_GLOBAL,
'is_used_in_grid' => false,
'is_visible_in_grid' => false,
'is_filterable_in_grid' => false,
'visible' => true,
'is_html_allowed_on_frontend' => true,
'visible_on_front' => true,
]
);
}
}
3a5f7e19-f383-4af8-8983-d01154c1402f