Produktattribut erstellen
Letzte Aktualisierung: 19. Februar 2025
- Themen:
- Konfiguration
- Backend-Entwicklung
Erstellt für:
- Einsteiger
- Fortgeschrittener
- Admin
- Benutzende
Das Hinzufügen eines Produktattributs ist einer der beliebtesten Vorgänge in Commerce. Attribute sind eine leistungsstarke Methode, um viele praktische Aufgaben im Zusammenhang mit einem Produkt zu lösen. Es gibt einen einfachen Prozess zum Hinzufügen eines Attributs vom Typ Dropdown zu einem Produkt.
In diesem Video:
- Fügen Sie ein Attribut namens „Clothing_material“ mit den möglichen Werten hinzu: Baumwolle, Leder, Seide, Denim, Fell und Wolle.
- Dieses Attribut auf der Produktansichtsseite in Fettdruck anzeigen
- Dem Standardwert zuweisen und eine Einschränkung hinzufügen
- Hinzufügen des neuen Attributs
Für wen ist dieses Video bestimmt?
- Entwickler, die noch nicht mit Commerce vertraut sind und lernen müssen, wie ein Produktattribut programmgesteuert erstellt wird
Videoinhalt
Code-Beispiel
Erstellen Sie zunächst die erforderlichen Ordner, XML- und PHP-Dateien:
- 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
Wenn Ihr Modul ein deklaratives Schema verwendet und die meisten davon seit 2.3.0 verwenden, sollten Sie setup_version auslassen. Wenn Sie jedoch über ältere Projekte verfügen, wird diese Methode möglicherweise verwendet. Weitere Informationen finden unter.adobe.com.
BITTE BEACHTEN SIE: Damit dieser Beispielcode funktioniert, müssen Sie die setup_version einbeziehen, sonst wird InstallData.php nicht ausgeführt.
BITTE BEACHTEN SIE: Damit dieser Beispielcode funktioniert, müssen Sie die setup_version einbeziehen, sonst wird InstallData.php nicht ausgeführt.
<?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
Stellen Sie sicher, dass Sie die Attributsatz-ID verwenden, die sich in Ihrem Projekt befindet, in diesem Beispiel ist dies die Zahl 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,
]
);
}
}
Nützliche Ressourcen
recommendation-more-help
3a5f7e19-f383-4af8-8983-d01154c1402f