Le paramètre requis 'theme_dir' n'a pas été transmis

61

Quel est le message d'erreur:

Le paramètre requis 'theme_dir' n'a pas été transmis

Est-ce lié à dans Magento 2? Et comment résoudre ce problème?

hakre
la source
j'ai corrigé cela en changeant la permission du dossier de thèmes
taoufiqaitali
essayé toutes les solutions, a fini par réinstaller magento
Robert Sinclair

Réponses:

87

Juste au cas où vous supprimeriez le thème directement (pas de manière Magento).

Puis suivez ces étapes.

ÉTAPE 1: Opérations sur les fichiers

Supprimez le contenu de app/design/frontend/<Vendor>(assurez-vous de le sauvegarder en premier).

Supprimer tout le contenu du dossier var/view_preprocessed& pub/static/frontend.

ÉTAPE 2: Opérations de base de données

Accédez à votre themetable et supprimez l'entrée du thème créé.

Après ça...

Accédez à votre core_config_datatable, recherchez-la themeet vous obtiendrez des enregistrements de chemin d'accès, comme le design/theme/theme_idremplacement de votre identifiant de thème par défaut.

ÉTAPE 3: Vider le cache

Videz votre cache php bin/magento cache:flush

Faites-moi savoir si vous rencontrez toujours des problèmes après cela.

Kaushal Suthar
la source
Merci. J'ai eu le même problème quand j'ai supprimé un thème. N'oubliez pas de supprimer les restes laissés dans la base de données. J'ai réparé la themetable, mais j'ai oublié la core_config_datavaleur.
Giel Berkers
@GielBerkers: Bienvenue :)
Kaushal Suthar
@ KaushalSuthar cela n'a pas du tout fonctionné, mais l'administrateur est passé au format texte. Puis, après avoir exécuté, l' setup:static-content:deployadministrateur est retourné à l'interface utilisateur.
Ashwani Shukla
@AshwaniShukla: vous avez peut-être commis une erreur pendant le processus ...
Kaushal Suthar
@ KaushalSuthar la seule erreur que j'ai faite était de pub/static/.htaccessne pas être là. merci
Ashwani Shukla
28

Ce message d'erreur signifie que vous avez un thème configuré qui n'existe plus (pas plus) dans le système de fichiers.

Il peut être facilement corrigé en sélectionnant un thème valide. Allez à Contenu -> Configuration , sélectionnez la portée (globale, site Web, store_view) et changez le thème. Une fois que vous avez terminé, vous devez également le supprimer de Contenu -> Thèmes .

changer de thème pour le magasin

Références

hakre
la source
Cela peut également être le cas si votre répertoire de thème ne dispose pas des autorisations appropriées.
Nathan Moinvaziri
Les autorisations doivent être vérifiées par certains des scripts Magento selon ce que je sais, mais vous avez raison, cela est identique: un répertoire inaccessible se comporte souvent de la même manière qu'un répertoire non existant.
hakre
3
Ce n'est plus l'endroit où il se trouve. son dans l'onglet contenu maintenant.
CarComp
@CarComp: N'hésitez pas à fournir une capture d'écran mise à jour et à modifier la réponse. Quand j'ai répondu, c'était comme documenté.
Hakre
11

Dans mon cas, j'ai supprimé un thème enfant du répertoire des fournisseurs. Mais l'entrée DB était toujours là dans la themetable. Allez donc à la themetable et supprimez l'enregistrement qui pointe vers le thème supprimé.

Arvind07
la source
Comment avez-vous supprimé du répertoire des fournisseurs? Avec compositeur par composer remove vendor/theme?
hakre
Non, justerm -rf vendor/theme
Arvind07
7

Assurez-vous que l' themeentrée et l'entrée de la table magento\app\design\frontend\<Vendor>seront les mêmes.

Sinon, cela cause ce problème.

Supprimer le thème inutile via Admin -> Contenu -> Conception -> Thèmes . Supprime-le. Donc, cela supprimera aussi DB Entry.

Si vous ne supprimez que le dossier, cela ne fonctionnera pas

Ankit Shah
la source
7

Ce problème peut également se produire lorsque vous êtes dans un état émulé, par exemple dans une commande CLI. Je ne pouvais pas envoyer de courrier électronique dans l'interface de ligne de commande car la commande d'habillage s'exécutait dans un état émulé:

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

Dans l'exemple ci-dessus, lorsque le courrier électronique tentait de déterminer son répertoire modèle, il était mappé sur global/Magento/backend, ce qui n'existe pas. Pour résoudre ce problème, je devais l'ajouter manuellement dans mon constructeur:

/** @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')
);

Après ce correctif, le problème était résolu et je pouvais envoyer le courrier électronique.

Mise à jour:

Lorsqu'il s'agit d'envoyer un courrier à l'aide de la CLI, une approche plus appropriée consisterait à utiliser l'émulation. Par exemple:

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

De cette façon, vous n'avez pas à faire votre sale petit bidouillage.

Giel Berkers
la source
Merci de partager dans cette profondeur. Cette réponse devient plutôt une FAQ en soi, très agréable à voir.
hakre
4

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

puis désactivez les pub/static/frontend, var/view_preprocessing, var/cache, var/page_cacherépertoires.

Ansyori
la source
1

@hakre est correct. J'ai la même erreur Required parameter 'theme_dir' was not passed. Ci-dessous, j'explique ce que j'ai fait pour provoquer l'erreur:

Je crée un thème dans le répertoire app / design / frontend / MyVendorTheme2 / myThemeName2 , puis je le configure en sélectionnant le thème " MyVendorTheme2 - myThemeName2 " dans le navigateur Admin Magento 2 ( Boutiques> Configuration> PARAMÈTRES THÈME> GÉNÉRAL> Design> Thème de conception ). . Mais j'ai ensuite décidé de déplacer le répertoire " myThemeName2 " (contenant mon nouveau thème) pour le placer dans un autre dossier de fournisseur (existant) " MyVendorTheme1 " app / design / frontend / MyVendorTheme1 / myThemeName2 , et je l' ai supprimé du dossier " MyVendorTheme2 ". c'était avant. J'ai procédé à la compilation des actifs (c. grunt clean-à- d . grunt exec:myThemeName2,grunt less:myThemeName2), puis ouvrez mon navigateur dans mon sous-domaine de thème (par exemple, http: // myvirtualhostdomain: myport / myvendortheme1_mythemename2_magento2_quickstart / ).

Au départ, j'ai eu une erreur non spécifiée: There has been an error processing your request Exception printing is disabled by default for security reasons. Error log record number:

J'ENABLED erreur de déclaration en renommant pub/errors/local.xml.sampleà local.xml, et rafraîchi la page. On m'a alors présenté l'erreur Required parameter 'theme_dir' was not passed.

J'ai résolu l'erreur en revenant dans le navigateur de mon administrateur Magento 2 ( Magasins> Configuration> PARAMÈTRES DU THÈME> GÉNÉRAL> Design> Thème de conception ), mon thème de conception précédent et maintenant non valide étant sélectionné, j'ai donc choisi le bon.

Luke Schoen
la source
Je reçois cette erreur uniquement lors de l'ajout de 'cache' pour la configuration de Redis à env.php. Supprimez les modifications et cela fonctionne bien. Alors pourquoi est-ce seulement lors de l'ajout de 'cache'? J'ai vérifié la syntaxe du tableau et tout va bien. Le même cache => valeur fonctionne sur mon serveur de transfert (couper / coller)
Scott
1

Cette erreur m’est arrivée lors de l’enregistrement des images du produit après l’installation d’un thème personnalisé.

J'avais le thème personnalisé défini en tant que type virtuel, c'est-à-dire dans la base de données DB de la table theme. Dans mon cas, je n'utilisais plus le thème. Je l'ai donc supprimé de la table.

Paul
la source
1

1 - Utilisez la commande ci-dessous pour identifier les thèmes dans le panneau d'administration.

n98-magerun2 dev:theme:list

2 - Exécutez la commande pour identifier les thèmes installés:

ls -lha app/design/frontend/MyThemePackage/

3- Exécutez ces commandes ci-dessous pour créer le thème qui n'existe pas:

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

Si rien n'a fonctionné, n'oubliez pas de vérifier la section des catégories. Il y a aussi des paramètres de conception. Assurez-vous que le bon thème de conception est attribué. Dans mon cas, l'erreur ne concernait que certaines catégories.

T. Sherpa
la source
Pourriez-vous s'il vous plaît fournir un exemple de scénario dans lequel ce problème pourrait survenir? La seule chose à laquelle je puisse penser est que si la disposition a été changée en une option qui n'existe que dans un thème personnalisé, le thème est supprimé. Mais, si cela se produisait en utilisant uniquement des dispositions par défaut (ou des versions modifiées des valeurs par défaut, en utilisant le même nom), cela impliquerait sûrement une erreur avec le thème personnalisé et non avec le logiciel magento lui-même?
Joshua Flood
0

Lorsque vous ajoutez ou modifiez un produit, accédez à la section Conception et modifiez l’option de présentation.

entrez la description de l'image ici

Abhishek
la source
0

Vous pouvez supprimer directement le thème inutilisé de la base de données en exécutant la requête ci-dessous:

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

Quand Thème Inutilisé est le thème inutilisé, et après vous clena votre cache

Mohamed El Mrabet
la source
0

J'ai eu ce problème lorsque j'ai supprimé par accident le dossier app / desing / adminhtml / theme-name. Le ramener a résolu mon problème. De plus, cela ne s'est produit que lorsque j'ai essayé d'entrer dans le Panneau d'administration.

incorporer0
la source
0

Dans certains cas, si vous supprimez le thème personnalisé de manière appropriée, vous devrez également faire face à cette erreur. Dans cette situation:

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'

Actualiser l'erreur de page disparue.

Hassan Ali Shahzad
la source
0

J'ai résolu le problème. Dans mon cas, le problème n'était pas Magento2, mais une opération fausse que j'avais effectuée il y a longtemps: j'ai créé un thème créant le chemin relatif dans app / design / frontend / MyFolder / MyTheme et l'ai enregistré comme expliqué dans la documentation en ligne de Magento 2. Ensuite, j'ai décidé d'annuler le thème et d'utiliser la commande appropriée suivante: bin / magento theme: uninstall frontend / MyFolder / MyTheme J'ai supprimé les dossiers directement. Ce n'est pas une bonne opération car la base de données n'est pas mise à jour avec les informations requises. Solution: avec un éditeur de base de données tel que phpmyadmin, supprimez l'enregistrement dans le tableau "Thème" correspondant aux dossiers supprimés. J'espère que cela aidera!

Soundararajan m
la source
0

Je sais que cette question est assez ancienne, mais depuis que je suis tombée dessus aujourd'hui et que j'ai rapidement découvert quel était mon problème, j'ai décidé de poster ma réponse comme rappel à tous ceux qui, comme moi, utilisent PhpStorm pour travailler avec Magento: n'oubliez pas de consulter vos fichiers lorsque vous changez de branche.

Dans mon cas, la branche sur laquelle je travaillais ne possédait pas les fichiers de thème requis (ils ont été cachés par PhpStorm lorsque je suis passé de la branche de thème à la branche principale) car ils ne sont pas encore fusionnés. Erreur.

J'espère que cela pourrait aider quelqu'un.

Renan Lazarotto
la source
-1

supprime tous les fichiers temporaires de thème non utilisés sur le site Web et supprime également le thème ne pas utiliser et exécute le cache: flush

Zeshan Rahman
la source