Was ist der Unterschied zwischen einem benutzerdefinierten Attribut und einem nicht benutzerdefinierten Attribut?

11

Ich habe ein Kundenattribut wie folgt definiert:

$customerSetup->addAttribute(Customer::ENTITY, "attr_code",  [
            "type"     => "varchar",
            "backend"  => "",
            "label"    => "Attribute Label",
            "input"    => "text",
            "source"   => "Magento\Eav\Model\Entity\Attribute\Source\Table",
            "visible"  => true,
            "required" => false,
            "default"  => "",
            "frontend" => "",
            "unique"   => false,
            "note"     => "",
            'system'   => 0,
            'user_defined' => true
]);

Meine Frage ist: Was ist der Unterschied auf dem Attribut , wenn ich gesetzt user_definedzu false? Und Situationen , in denen sollte ich user_definedzu trueoder false?

PY Yick
quelle

Antworten:

22

Tatsächlich werden Magento user_defined = false-Attribute als Systemattribute bezeichnet. Magento hat also einige seiner Systemattribute, die wir nicht aus dem Admin-Panel löschen können. Magento erlaubt also nicht, dass Systemattribute gelöscht werden. Wir können sie über die Datenbank löschen, aber es ist nicht sicher.

Attribute, die dringend erforderlich sind, um ein System auszuführen, das wir als Systemattribute erstellen können. Auf der anderen Seite können wir jedoch einfach benutzerdefinierte Attribute aus dem Admin-Bereich löschen.

Hoffe es hilft Danke.

Dhaval Solanki
quelle
5

Magento-Systemattribute werden falsefür user_defined festgelegt, daher sollten unsere benutzerdefinierten Attribute auf festgelegt werden true. Systemattribute können nicht gelöscht werden. Wenn Sie also user_defined festlegen false, funktioniert Ihr Attribut als Systemattribut.

Kishan Patadia
quelle
1
Du meinst also, es ist nur ein Hinweis, keine wirklichen Unterschiede zwischen ihnen?
PY Yick
3

Um dies hinzuzufügen:

Wenn Sie Attribute über hinzufügen, Install-/ UpdateSchemastellen Sie sicher, dass Sie hinzufügen 'user_defined' => true. Für konfigurierbare Produkte können nur Nicht-Systemattribute (z. B. is_user_defined = 1) verwendet werden.

CloudySi
quelle
2

Tatsächlich bemerke ich einen großen Unterschied, als ich Magento 1 lernte . Wenn ein Attribut auf user_defined = true festgelegt ist , wird es nicht in der Tabelle eav_entity_attribute erstellt . Sie finden es jedoch weiterhin in der Tabelle eav_attribute . Wenn user_defined = false festgelegt ist , wird es beim Erstellen sowohl in den Tabellen eav_entity_attribute als auch eav_attribute angezeigt . Aber im Gegenzug weiß ich nicht, warum dies den Unterschied ausmacht.

Ich bin mir bei Magento 2 nicht sicher, aber ich denke, Sie können es leicht überprüfen und andere wissen lassen.

Nero
quelle
1

Wenn ein Attribut als 'user_defined' festgelegt ist, kann ein Benutzer die Optionswerte innerhalb der Attributbenutzeroberfläche definieren.

Wenn Sie jedoch ein Quellmodell verwenden, muss 'user_defined' auf false gesetzt werden, da sonst die Optionen aus dem Quellmodell nicht geladen werden.

NetStorm
quelle
1

user_defined = true Attribute werden im Allgemeinen vom Katalogmanager erstellt, um produktspezifische Informationen zu erhalten.
user_defined = false für Magento-Standardattribute, die erforderlich sind, damit einige Funktionen funktionieren, oder für Module, die zusätzliche Attribute basierend auf Attributen bereitstellen , wie z . B. sku , qty , website_ids , product_online. Dies sind Systemattribute, die zum Verwalten von Menge und Umfang des Produkts erforderlich sind show_on_homepage kann ein Attribut sein, das im Backend etwas tut, um eine Funktion bereitzustellen, und sollte nicht vom Administrator gelöscht werden, da dies die Funktionalität beeinträchtigen könnte.

Aman Srivastava
quelle
1

Eine andere vom Benutzer definierte Funktion bestimmt, ob Sie die Optionen des Attributs auf der Attributbearbeitungsseite im Backoffice bearbeiten können oder nicht. Wenn Sie also ein Attribut mit bestimmten Bezeichnungen haben, das ein Administrator nicht ändern soll, Sie sollten "user_defined" auf false setzen.

Adrian Caragea
quelle