Qual é a diferença entre um atributo definido pelo usuário e um atributo não definido pelo usuário?

11

Eu tenho um atributo de cliente definido da seguinte maneira:

$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
]);

Minha pergunta é: qual é a diferença no atributo se eu definir user_defineda false? E em que situações devo definir user_defineda trueou false?

PY Yick
fonte

Respostas:

22

Na verdade, Magento user_defined = atributos falsos são conhecidos como atributos do sistema. Portanto, o Magento possui alguns dos atributos do sistema, que não podemos excluir do painel de administração. Portanto, o magento não permitirá que os atributos do sistema sejam excluídos. Podemos excluí-los através do banco de dados, mas não é seguro.

Portanto, atributos que são altamente necessários para executar um sistema com esse tipo de atributo que podemos criar como atributos do sistema. Mas no lado oposto, podemos excluir facilmente os atributos definidos pelo usuário no painel de administração.

Espero que ajude Obrigado.

Dhaval Solanki
fonte
5

Os atributos do sistema Magento são configurados falsepara user_defined, portanto nossos atributos personalizados devem ser configurados para true. Os atributos do sistema não podem ser excluídos; portanto, se você definir falsecomo definido pelo usuário , seu atributo funcionará como atributo do sistema.

Kishan Patadia
fonte
11
Então você quer dizer que é apenas para indicação, não há diferenças reais entre eles?
PY YICK
3

Para adicionar a isso:

Se você adicionar atributos via, Install-/ UpdateSchemacertifique-se de adicionar a 'user_defined' => true. Somente atributos que não são do sistema (por exemplo, is_user_defined = 1) podem ser usados ​​para produtos configuráveis.

CloudySi
fonte
2

De fato, noto uma grande diferença quando aprendi o Magento 1 . Se um atributo estiver definido como user_defined = true , ele não será criado na tabela eav_entity_attribute . Mas ainda assim você pode encontrá-lo na tabela eav_attribute . Se conjunto user_defined = false , então quando ele é criado ele aparecerá em ambos os eav_entity_attribute e eav_attribute tabelas. Mas, em troca, não sei por que isso faz a diferença / afeta.

Não tenho certeza sobre o Magento 2, mas acho que você pode verificá-lo facilmente e informar aos outros.

Nero
fonte
1

Se um atributo for definido como 'definido pelo usuário', o usuário poderá definir os valores das opções na interface do usuário do atributo.

No entanto, se você estiver usando um modelo de origem, 'user_defined' deve ser definido como false, caso contrário, as opções do modelo de origem não serão carregadas.

NetStorm
fonte
1

user_defined = true atributos geralmente são criados pelo gerenciador de catálogos para ter informações específicas do produto.
user_defined = false para os atributos padrão do Magento, necessários para que algumas funcionalidades funcionem ou para qualquer módulo que forneça algum recurso adicional com base no atributo, como sku , qty , website_ids , product_online são atributos do sistema necessários para gerenciar a quantidade e o escopo do produto, da mesma forma que é show_on_homepage pode ser algum atributo que faz algo no back-end para fornecer algum recurso e não deve ser excluído pelo usuário administrador que pode quebrar a funcionalidade.

Aman Srivastava
fonte
1

Outra coisa que o usuário define é que ele determina se é possível editar ou não as opções do atributo na página de edição de atributos no back office, portanto, se você possui um atributo com rótulos específicos que não deseja que um usuário administrador altere, você deve definir "user_defined" como false.

Adrian Caragea
fonte