エラーメッセージとは何ですか:
必須パラメーター「theme_dir」が渡されませんでした
Magento 2に関連していますか?そして、この問題はどのように修正できますか?
エラーメッセージとは何ですか:
必須パラメーター「theme_dir」が渡されませんでした
Magento 2に関連していますか?そして、この問題はどのように修正できますか?
回答:
念のため、テーマを直接削除する場合(Magentoの方法ではありません)。
次に、次の手順を実行します。
からコンテンツを削除しますapp/design/frontend/<Vendor>
(必ず最初にバックアップしてください)。
フォルダvar/view_preprocessed
&のすべてのコンテンツを削除しますpub/static/frontend
。
theme
テーブルに移動して、作成したテーマのエントリを削除します。
その後...
core_config_data
テーブルに移動して検索するtheme
とdesign/theme/theme_id
、デフォルトのテーマIDを置き換えるようなパスレコードが取得されます。
キャッシュをフラッシュする php bin/magento cache:flush
それでも問題が解決しない場合はお知らせください。
theme
-tableを修正しましたが、core_config_data
値を忘れていました。
setup:static-content:deploy
admin を実行した後、UIに戻りました。
pub/static/.htaccess
はそこになかった。おかげで
このエラーメッセージは、ファイルシステム上に存在しない(もう)テーマが設定されていることを意味します。
代わりに有効なテーマを選択することで簡単に修正できます。行くコンテンツ- >設定、スコープ(グローバル、ウェブサイト、store_view)を選択し、テーマを変更します。完了したら、コンテンツ->テーマからも削除する必要があります。
この問題は、CLIコマンドなどでエミュレートされた状態にある場合にも発生する可能性があります。wrappingコマンドがエミュレートされた状態で実行されていたため、CLIで電子メールを送信できない状況がありました。
$this->appState->emulateAreaCode(AppArea::AREA_GLOBAL, function() {
// In this section the email was sent
});
上記の例では、電子メールがテンプレートdirを決定しようとしたときに、global/Magento/backend
存在しないにマッピングされます。これを修正するには、コンストラクタに手動で追加する必要がありました。
/** @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')
);
この修正の後、問題は解決され、電子メールを送信できました。
更新:
CLIを使用してメールを送信する場合、より適切なアプローチはエミュレーションを使用することです。例えば:
/** @var Magento\Framework\App\State $state */
$state->emulateAreaCode(
'frontend',
[$this->accountManagement, 'initiatePasswordReset'],
[
$customer->getEmail(),
AccountManagement::EMAIL_REMINDER,
$customer->getWebsiteId()
]
);
これにより、汚い小さなハックをする必要がなくなります。
@hakreは正しいです。同じエラーが発生しましたRequired parameter 'theme_dir' was not passed
。以下にエラーの原因を説明します。
app / design / frontend / MyVendorTheme2 / myThemeName2ディレクトリーにテーマを作成し、Magento 2管理ブラウザーで「MyVendorTheme2-myThemeName2」というテーマを選択して構成しました(ストア>構成>テーマ設定>一般>設計>設計テーマ) 。しかし、その後、「myThemeName2」ディレクトリ(新しいテーマを含む)を別の(既存の)ベンダーフォルダー「MyVendorTheme1」app / design / frontend / MyVendorTheme1 / myThemeName2の下に移動し、「MyVendorTheme2」フォルダーから削除することにしました前だった。私は(資産をコンパイルするために進めすなわちgrunt clean
、grunt exec:myThemeName2
、grunt less:myThemeName2
)、ブラウザをテーマのサブドメイン(つまり、http:// myvirtualhostdomain:myport / myvendortheme1_mythemename2_magento2_quickstart /)で開きました。
最初は不特定のエラーが発生しました:
There has been an error processing your request
Exception printing is disabled by default for security reasons.
Error log record number:
に名前pub/errors/local.xml.sample
を変更してエラー報告を有効にしlocal.xml
、ページを更新しました。その後、エラーが表示されましたRequired parameter 'theme_dir' was not passed
。
以前の無効なデザインテーマが選択されていたMagento 2管理ブラウザー(ストア>設定>テーマ設定>一般>デザイン>デザインテーマ)に戻ることでエラーを解決したため、正しいテーマを選択しました。
1-以下のコマンドを使用して、管理パネルでテーマを識別します。
n98-magerun2 dev:theme:list
2-コマンドを実行して、インストールされているテーマを特定します。
ls -lha app/design/frontend/MyThemePackage/
3-次のコマンドを実行して、存在しないテーマを作成します。
n98-magerun2 deploy:mode:set developer
n98-magerun2 dev:console
make:theme frontend MyThemePackage MyThemeName
何も機能しない場合は、カテゴリセクションを確認することを忘れないでください。そこにも設計設定があります。正しいデザインテーマが割り当てられていることを確認してください。私の場合、一部のカテゴリでのみエラーが発生していました。
以下のクエリを実行すると、DBから未使用のテーマを直接削除できます。
delete from theme where theme_path in ('unusedtheme');
未使用のテーマが未使用のテーマであり、キャッシュを作成した後
場合によっては、カスタムテーマを不適切に削除すると、このエラーに直面することもあります。この状況では:
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'
消えたページエラーを更新します。
問題を解決しました。私の場合、問題はMagento2ではなく、次のように間違った操作でした:app / design / frontend / MyFolder / MyThemeで相対パスを作成するテーマを作成し、Magento 2オンラインドキュメントの説明に従って登録しました。次に、テーマをキャンセルし、代わりに適切なコマンドを使用することにしました:bin / magento theme:unfront frontend / MyFolder / MyThemeフォルダーを直接削除しました。データベースは期限情報で更新されないため、これは適切な操作ではありません。解決策:phpmyadminとしてデータベースのエディターを使用して、削除されたフォルダーに対応する「テーマ」テーブルのレコードを削除します。これが役立つことを願っています!