O parâmetro necessário 'theme_dir' não foi passado

61

Qual é a mensagem de erro:

O parâmetro necessário 'theme_dir' não foi passado

Está relacionado no Magento 2? E como esse problema pode ser resolvido?

hakre
fonte
Eu
corrigi
tentei todas as soluções, acabou reinstalando o magento
Robert Sinclair

Respostas:

86

Apenas no caso de você estar removendo o tema diretamente (não da maneira Magento).

Depois siga estes passos.

PASSO 1: Operações de arquivo

Exclua o conteúdo de app/design/frontend/<Vendor>(certifique-se de fazer backup primeiro).

Exclua todo o conteúdo da pasta var/view_preprocessed& pub/static/frontend.

PASSO 2: Operações do banco de dados

Vá para a sua thememesa e exclua a entrada do seu tema criado.

Depois disso...

Vá para sua core_config_datatabela e procure themee você obterá registros de caminho, como design/theme/theme_idsubstituir seu ID de tema padrão.

PASSO 3: Liberar cache

Liberar seu cache php bin/magento cache:flush

Deixe-me saber se você ainda tiver problemas depois disso.

Kaushal Suthar
fonte
Obrigado. Eu tive o mesmo problema quando excluí um tema. Não se esqueça de excluir os remanescentes restantes no banco de dados. Corrigi a themetabela, mas esqueci o core_config_datavalor.
Giel Berkers
@GielBerkers: Welcome :)
Kaushal Suthar /
@KaushalSuthar isso não funcionou, o administrador entrou em formato de texto. Depois de executar o setup:static-content:deployadministrador, retornei à interface do usuário.
Ashwani Shukla
@AshwaniShukla: você pode ter cometido algum erro durante o processo ...
Kaushal Suthar
@KaushalSuthar o único erro que cometi pub/static/.htaccessfoi não estar lá. obrigado
Ashwani Shukla
28

Essa mensagem de erro significa que você tem um tema configurado que não existe no sistema de arquivos (mais).

Pode ser facilmente corrigido selecionando um tema válido. Vá para Conteúdo -> Configuração , selecione o escopo (global, site, store_view) e altere o tema. Depois de fazer isso, você também deve removê-lo de Conteúdo -> Temas .

alterar tema para loja

Referências

hakre
fonte
Esse também pode ser o caso se o diretório do tema não tiver as permissões adequadas.
Nathan Moinvaziri 26/09/16
As permissões devem ser verificadas por alguns dos scripts do Magento AFAIK, mas você está certo, isso é o mesmo: Um diretório inacessível geralmente se comporta de maneira semelhante a um diretório inexistente.
1/16
3
Este não é mais o local em que está localizado. está na guia conteúdo agora.
CarComp
@CarComp: fique à vontade para fornecer uma captura de tela atualizada e editar a resposta. Quando eu respondi, era como documentado.
hakre
11

No meu caso, excluí um tema filho do diretório de fornecedores. Mas a entrada do banco de dados ainda estava lá na themetabela. Então, vá para a themetabela e exclua o registro que aponta para o tema excluído.

Arvind07
fonte
Como você excluiu do diretório de fornecedores? Com compositor de composer remove vendor/theme?
hakre
Não, apenasrm -rf vendor/theme
Arvind07
7

Verifique se a themeentrada e a entrada da tabela magento\app\design\frontend\<Vendor>serão iguais.

Caso contrário, isso causa esse problema.

Remova o tema desnecessário via Admin -> Conteúdo -> Design -> Temas . Delete isso. Portanto, ele removerá a entrada de banco de dados também.

Se você apenas remover a pasta, ela não funcionará

Ankit Shah
fonte
7

Esse problema também pode ocorrer quando você estiver em um estado emulado, por exemplo, em um comando da CLI. Eu tive uma situação em que não pude enviar um email na CLI, porque o comando de agrupamento estava sendo executado em um estado emulado:

$this->appState->emulateAreaCode(AppArea::AREA_GLOBAL, function() {
    // In this section the email was sent
});

No exemplo acima, quando o email tentava determinar seu diretório de modelo, ele seria mapeado para o global/Magento/backendque não existe. Para corrigir isso, tive que adicioná-lo manualmente no meu construtor:

/** @var \Magento\Framework\Component\ComponentRegistrarInterface $componentRegistrar */
// Make the admin theme global accessible for sending e-mails:
\Magento\Framework\Component\ComponentRegistrar::register(
    'theme',
    'global/Magento/backend',
    $componentRegistrar->getPath('theme', 'adminhtml/Magento/backend')
);

Após essa correção, o problema foi resolvido e eu poderia enviar o email.

Atualizar:

Quando se trata de enviar email usando a CLI, uma abordagem mais adequada seria usar emulação. Por exemplo:

/** @var Magento\Framework\App\State $state */
$state->emulateAreaCode(
    'frontend',
    [$this->accountManagement, 'initiatePasswordReset'],
    [
        $customer->getEmail(),
        AccountManagement::EMAIL_REMINDER,
        $customer->getWebsiteId()
    ]
);

Dessa forma, você não precisa de seus pequenos hacks sujos.

Giel Berkers
fonte
Obrigado por compartilhar nesta profundidade. Esta resposta se torna um FAQ por si só, muito agradável de ver.
hakre
4

corre sql UPDATE core_config_data SET value=NULL WHERE path='design/theme/theme_id'

em seguida, limpar os pub/static/frontend, var/view_preprocessing, var/cache, var/page_cachediretórios.

Ansyori
fonte
1

@hakre está correto. Eu recebi o mesmo erro Required parameter 'theme_dir' was not passed. Abaixo, explico o que fiz para causar o erro:

Criei um tema no diretório app / design / frontend / MyVendorTheme2 / myThemeName2 e o configurei selecionando o tema " MyVendorTheme2 - myThemeName2 " no navegador Admin do Magento 2 ( Lojas> Configuração> CONFIGURAÇÕES DE TEMAS> GERAL> Design> Tema do projeto ) . Decidi, então, mover o diretório " myThemeName2 " (contendo meu novo tema) para uma pasta de fornecedor (existente) diferente " MyVendorTheme1 " app / design / frontend / MyVendorTheme1 / myThemeName2 e removi-o da pasta " MyVendorTheme2 " onde foi antes. Eu continuei a compilar ativos (ou seja grunt clean, grunt exec:myThemeName2,grunt less:myThemeName2) e abra o navegador no subdomínio do tema (por exemplo, http: // myvirtualhostdomain: myport / myvendortheme1_mythemename2_magento2_quickstart / ).

Inicialmente, recebi um erro não especificado: There has been an error processing your request Exception printing is disabled by default for security reasons. Error log record number:

Ativei o relatório de erros renomeando pub/errors/local.xml.samplepara local.xmle atualizei a página. Foi-me apresentado o erro Required parameter 'theme_dir' was not passed.

Resolvi o erro voltando ao meu navegador Admin do Magento 2 ( Lojas> Configuração> CONFIGURAÇÕES DE TEMAS> GERAL> Design> Tema do design ), que tinha meu tema de design anterior e agora inválido selecionado, então escolhi o correto.

Luke Schoen
fonte
Eu recebo esse erro apenas ao adicionar 'cache' para a configuração do redis no env.php. Remova as alterações e ele funciona bem. Então, por que é apenas ao adicionar 'cache'? Eu verifiquei a sintaxe da matriz e está tudo bem. O valor mesmo cache => está funcionando no meu servidor de teste (corte / colar)
Scott
1

Este erro ocorreu ao salvar imagens do produto após a instalação de um tema personalizado.

Eu tinha o tema personalizado definido como um tipo virtual, que está no banco de dados na tabela de temas, digite = 1. No meu caso, eu não estava mais usando o tema, então o excluí da tabela.

Paulo
fonte
1

1 - Use o comando abaixo para identificar os temas no painel de administração.

n98-magerun2 dev:theme:list

2 - Execute o comando para identificar os temas instalados:

ls -lha app/design/frontend/MyThemePackage/

3- Execute estes comandos abaixo para criar o tema que não existe:

n98-magerun2 deploy:mode:set developer
n98-magerun2 dev:console
make:theme frontend MyThemePackage MyThemeName
Rafael Corrêa Gomes
fonte
0

Se nada funcionou, não se esqueça de verificar a seção de categorias. Também há configurações de design. Verifique se o tema de design correto está atribuído. No meu caso, eu estava recebendo o erro apenas em algumas categorias.

T. Sherpa
fonte
Você poderia fornecer um exemplo de cenário em que esse problema possa ocorrer? A única coisa em que consigo pensar é que, se o layout foi alterado para uma opção que existe apenas em um tema personalizado, o tema é removido. Mas, se isso ocorrer enquanto estiver usando apenas layouts padrão (ou versões modificadas dos padrões, usando o mesmo nome), certamente implica uma falha no tema personalizado e não no próprio software magento?
21918 Joshua Flood
0

Ao adicionar ou editar produtos, vá para a seção Design e altere a opção de layout.

insira a descrição da imagem aqui

Abhishek
fonte
0

Você pode remover o tema não utilizado do DB diretamente, executando a consulta abaixo:

delete from theme where theme_path in ('unusedtheme');

quando unthetheused é o tema não utilizado, e depois você clena seu cache

Mohamed El Mrabet
fonte
0

Eu tive esse problema ao remover por acidente a pasta app / desing / adminhtml / theme-name. Trazê-lo de volta resolveu meu problema. Além disso, só ocorreu quando tentei entrar no Painel de Administração.

embed0
fonte
0

Em alguns casos, se você excluir o tema personalizado de maneira adequada, também enfrentará esse erro. Nesta situação:

1) you have to delete that entry/row from 'theme' table.
2) set value 1 (1 for blank theme 2 for Luma what ever you want to set) against 'design/theme/theme_id'

Atualize o erro de página desaparecido.

Hassan Ali Shahzad
fonte
0

Eu resolvi o problema. No meu caso, o problema não era o Magento2, mas uma operação incorreta que fiz há algum tempo, como a seguir: criei um tema criando o caminho relativo em app / design / frontend / MyFolder / MyTheme e o registrei conforme explicado na documentação on-line do Magento 2. Decidi cancelar o tema e, em vez disso, use o comando apropriado: bin / magento theme: uninstall frontend / MyFolder / MyTheme Excluí as pastas diretamente. Esta não é uma boa operação, pois o banco de dados não é atualizado com as informações necessárias. Solução: com um editor de banco de dados como phpmyadmin, exclua o registro na tabela "Tema" correspondente às pastas excluídas. Espero que isso ajude!

Soundararajan m
fonte
0

Sei que essa pergunta é bastante antiga, mas desde que me deparei com isso hoje e descobri rapidamente qual era o meu problema, decidi postar minha resposta como um lembrete para todos aqueles que, como eu, usam o PhpStorm para trabalhar com o Magento: lembre-se de verificar seus arquivos ao mudar de ramificação.

No meu caso, o ramo em que eu estava trabalhando não tinha os arquivos de tema necessários (eles foram ocultados pelo PhpStorm quando mudei do ramo de temas para o ramo mestre) porque ainda não foram mesclados nele, portanto, o erro.

Espero que isso possa ajudar alguém.

Renan Lazarotto
fonte
-1

exclua todos os arquivos temporários do tema que não estiver usando no site e exclua também do tema que não está usando e execute o cache: flush

zeshan rahman
fonte