Eu estou procurando uma boa abordagem com adicionar / atualizar já preparado (por padrão) o formulário do usuário Magento (usuário do módulo). O formulário pode ser acessado no painel de administração por este caminho:
Sistema> Todos os usuários> [usuário_ escolhido]> guia principal de edição do usuário (informações da conta)
Agora estou tentando usar o di.xml no meu módulo personalizado, onde especifico dependências: `
<preference for="Magento\User\Block\User\Edit\Tab\Main" type="Vendor_Name\Module_Name\Block\User\Edit\Tab\Main" />
<preference for="Magento\User\Block\Role\Grid\User" type="Vendor_Name\Module_Name\Block\Role\Grid\User" />
`
Este é o conteúdo que eu já criei para uma classe Main.php
// @codingStandardsIgnoreFile namespace Nome do Fornecedor \ Nome do Módulo \ Bloco \ Usuário \ Editar \ Guia; use \ Magento \ Usuário \ Bloco \ Usuário \ Editar \ Guia \ Principal como UserEditMainTab; use \ Magento \ Backend \ Block \ Template \ Context; use \ Magento \ Framework \ Registry; use \ Magento \ Framework \ Data \ FormFactory; use \ Magento \ Backend \ Model \ Auth \ Session; use \ Magento \ Framework \ Locale \ ListsInterface; classe Main estende UserEditMainTab { função pública __construct ( Contexto $ context, Registry $ registry, FormFactory $ formFactory, Sessão $ authSession, ListsInterface $ localeLists, matriz $ data = [] ) { parent :: __ constrói ($ context, $ registry, $ formFactory, $ authSession, $ localeLists, $ data); } função protegida _prepareForm () { / ** @var $ model \ Magento \ Usuário \ Modelo \ Usuário * / $ model = $ this -> _ coreRegistry-> registry ('usuário_acesso'); / ** @var \ Magento \ Framework \ Data \ Form $ form * / $ form = $ this -> _ formFactory-> create (); $ form-> setHtmlIdPrefix ('usuário_'); $ baseFieldset = $ form-> addFieldset ('base_fieldset', ['legend' => __ ('Informações da conta __ TEST')]); if ($ model-> getUserId ()) { $ baseFieldset-> addField ('user_id', 'hidden', ['name' => 'user_id']); } outro { if (! $ model-> hasData ('is_active'))) { $ model-> setIsActive (1); } } $ baseFieldset-> addField ( 'user_image', 'imagem', [ 'name' => 'user_image', 'label' => __ ('Imagem do usuário'), 'id' => 'imagem_do_usuário', 'title' => __ ('Imagem do usuário'), 'obrigatório' => falso, 'note' => 'Permitir tipo de imagem: jpg, jpeg, png' ] ); $ baseFieldset-> addField ( 'nome do usuário', 'texto', [ 'nome' => 'nome de usuário', 'label' => __ ('Nome do usuário'), 'id' => 'nome de usuário', 'title' => __ ('Nome do usuário'), 'obrigatório' => verdadeiro ] ); $ baseFieldset-> addField ( 'primeiro nome', 'texto', [ 'name' => 'firstname', 'label' => __ ('Primeiro nome'), 'id' => 'primeiro nome', 'title' => __ ('Primeiro nome'), 'obrigatório' => verdadeiro ] ); $ baseFieldset-> addField ( 'último nome', 'texto', [ 'nome' => 'sobrenome', 'label' => __ ('Sobrenome'), 'id' => 'sobrenome', 'title' => __ ('Sobrenome'), 'obrigatório' => verdadeiro ] ); $ baseFieldset-> addField ( 'o email', 'texto', [ 'name' => 'email', 'label' => __ ('Email'), 'id' => 'customer_email', 'title' => __ ('E-mail do usuário'), 'class' => 'entrada obrigatória validar e-mail', 'obrigatório' => verdadeiro ] ); $ isNewObject = $ model-> isObjectNew (); if ($ isNewObject) { $ passwordLabel = __ ('Senha'); } outro { $ passwordLabel = __ ('Nova senha'); } $ confirmLabel = __ ('Confirmação de senha'); $ this -> _ addPasswordFields ($ baseFieldset, $ passwordLabel, $ confirmLabel, $ isNewObject); $ baseFieldset-> addField ( 'interface_locale', 'selecionar', [ 'name' => 'interface_locale', 'label' => __ ('Local da interface'), 'title' => __ ('Localidade da interface'), 'values' => $ this -> _ LocaleLists-> getTranslatedOptionLocales (), 'classe' => 'selecionar' ] ); if ($ this -> _ authSession-> getUser () -> getId ()! = $ model-> getUserId ()) { $ baseFieldset-> addField ( 'está ativo', 'selecionar', [ 'name' => 'is_active', 'label' => __ ('Esta conta é'), 'id' => 'is_active', 'title' => __ ('Status da conta'), 'class' => 'seleção de entrada', 'opções' => ['1' => __ ('Ativo'), '0' => __ ('Inativo')] ] ); } $ baseFieldset-> addField ('user_roles', 'hidden', ['name' => 'user_roles', 'id' => '_user_roles']); $ currentUserVerificationFieldset = $ form-> addFieldset ( 'current_user_verification_fieldset', ['legend' => __ ('Verificação atual de identidade do usuário')] ); $ currentUserVerificationFieldset-> addField ( self :: CURRENT_USER_PASSWORD_FIELD, 'senha', [ 'name' => self :: CURRENT_USER_PASSWORD_FIELD, 'label' => __ ('Sua senha'), 'id' => self :: CURRENT_USER_PASSWORD_FIELD, 'title' => __ ('Sua senha'), 'class' => 'texto de entrada validar-senha-atual-entrada obrigatória', 'obrigatório' => verdadeiro ] ); $ data = $ model-> getData (); não definido ($ data ['senha']); não definido ($ data [self :: CURRENT_USER_PASSWORD_FIELD]); $ form-> setValues ($ dados); $ this-> setForm ($ formulário); retornar pai :: _ prepareForm (); } }
e algum código para User.php
namespace Nome_Vendedor \ Nome_Módulo \ Bloco \ Função \ Grade; use \ Magento \ Usuário \ Bloco \ Função \ Grade \ Usuário como RoleGridUser; use \ Magento \ Backend \ Block \ Widget \ Grid \ Extended como ExtendedGrid; classe User estende RoleGridUser { função protegida _prepareColumns () { pai :: _ prepareCollection (); $ this-> addColumn ( 'user_image', [ 'header' => __ ('Imagem do usuário'), 'width' => 5, 'align' => 'left', 'classificável' => verdadeiro, 'index' => 'imagem_do_usuário' ] ); return ExtendedGrid :: _ prepareCollection (); } }
Se você olhar mais de perto, já está tentando adicionar um campo à imagem do usuário.
Infelizmente, não vejo nenhuma alteração na frente do administrador. Obviamente, a coluna necessária foi adicionada pelo script InstallSchema anteriormente à tabela ' admin_user '.
Conteúdo dos diretórios em um formato de árvore:
Nome do módulo ├── Bloco │ ├── Catálogo │ │ └── Produto Related │ └── RelatedPosts.php │ ├── Função │ │ └── Grade User │ ─── User.php │ └── Usuário Edit └── Editar Guia Tab └── Main └── Main.php Compos── composer.json ├── etc Di ├── di.xml Module └── module.xml ├── Configuração Install── InstallSchema.php
O que eu fiz errado?
Respostas:
Para adicionar campo de imagem, você pode tentar usar o plug-in e sempre tentar substituir a classe inteira.
Fornecedor / módulo / etc / adminhtml / di.xml
Fornecedor / Módulo / Plugin / Bloco / Adminhtml / Usuário / Editar / Guia / Main.php
Limpar cache.
fonte
/module-user/Controller/Adminhtml/User/Save.php
- salve a string com o caminho da imagem na tabela 'admin_user'. Desculpe por muitas perguntas. Agradeço sua ajuda! Felicidades!depois de alguma pesquisa conseguiu uma solução para isso
com o valor que você precisa. veja o exemplo:
Espero que ajude alguns de vocês ..
fonte
Substituindo a instrução
com isso
trabalhou para mim. Aqui está o código completo. Adicionando o campo "Accessible Store" da seguinte maneira.
E obrigado @Rob por compartilhar a pista por onde começar.
fonte
Apenas para adicionar outro exemplo, consegui substituir a página de administração do site. Eu estava tentando adicionar um campo de URL à página de edição do site.
Fiz exatamente o que foi dito na resposta validada, mas não adicionei um novo conjunto de campos. Em vez disso, concluí o existente, usando seu ID definido na classe Website.
Além disso, usei a herança para recuperar o modelo do site e recuperar o valor atual do banco de dados para colocá-lo no formulário (também é copiado da classe Magento Website).
Como pré-requisito, é necessário adicionar a coluna 'url' na tabela store_website do banco de dados magento.
Aqui está o resultado do trabalho (testado no Magento 2.1):
E o arquivo di.xml no diretório Vendor / Store / etc / adminhtml (nada de novo aqui na resposta validada):
fonte
Acabei de fazer uma pequena alteração na sua solução e funcionou para mim:
Se você quiser, posso postar toda a solução - mas preciso revisá-la porque, de acordo com as normas da minha empresa, não consigo mostrar o código em fóruns públicos. Então, deixe-me saber se você pode fazer isso sozinho.
fonte