必須パラメーター「theme_dir」が渡されませんでした


61

エラーメッセージとは何ですか:

必須パラメーター「theme_dir」が渡されませんでした

Magento 2に関連していますか?そして、この問題はどのように修正できますか?


テーマフォルダーの許可を変更することでこれを修正しました
taoufiqaitali

すべてのソリューションを試し、最終的にmagentoを再インストールしました
Robert Sinclair

回答:


86

念のため、テーマを直接削除する場合(Magentoの方法ではありません)。

次に、次の手順を実行します。

ステップ1:ファイル操作

からコンテンツを削除しますapp/design/frontend/<Vendor>(必ず最初にバックアップしてください)。

フォルダvar/view_preprocessed&のすべてのコンテンツを削除しますpub/static/frontend

ステップ2:DB操作

themeテーブルに移動して、作成したテーマのエントリを削除します。

その後...

core_config_dataテーブルに移動して検索するthemedesign/theme/theme_id、デフォルトのテーマIDを置き換えるようなパスレコードが取得されます。

ステップ3:キャッシュをフラッシュする

キャッシュをフラッシュする php bin/magento cache:flush

それでも問題が解決しない場合はお知らせください。


ありがとう。テーマを削除したときに同じ問題が発生しました。データベースに残っている残りを削除することを忘れないでください。theme-tableを修正しましたが、core_config_data値を忘れていました。
ゲルバーカーズ

@GielBerkers:ようこそ:)
Kaushal Suthar

@KaushalSutharこれはまったく機能しませんでしたが、代わりに管理者はテキスト形式になりました。その後、setup:static-content:deployadmin を実行した後、UIに戻りました。
アシュワニシュクラ

@AshwaniShukla:あなたは...プロセス中にいくつかのミスを犯したかもしれない
Kaushal Suthar

@KaushalSuthar私が犯した唯一の間違いpub/static/.htaccessはそこになかった。おかげで
アシュワニシュクラ

28

このエラーメッセージは、ファイルシステム上に存在しない(もう)テーマが設定されていることを意味します。

代わりに有効なテーマを選択することで簡単に修正できます。行くコンテンツ- >設定、スコープ(グローバル、ウェブサイト、store_view)を選択し、テーマを変更します。完了したら、コンテンツ->テーマからも削除する必要があります。

ストアのテーマを変更

参照資料


これは、テーマディレクトリに適切な権限がない場合にも当てはまります。
ネイサンモインバジリ

アクセス許可はいくつかのMagentoスクリプトで確認する必要がありますが、それは同じです。アクセスできないディレクトリは、多くの場合、存在しないディレクトリと同様に動作します。
-hakre

3
これは、これが配置されている場所ではなくなりました。コンテンツタブにあります。
CarComp 16

@CarComp:更新されたスクリーンショットを提供し、答えを編集してください。私が答えたとき、それは文書化されたとおりでした。
hakre

11

私の場合、ベンダーのディレクトリから子テーマを削除しました。しかし、DBエントリはまだthemeテーブルにありました。そのため、themeテーブルに移動して、削除されたテーマを指すレコードを削除します。


ベンダーディレクトリからどのように削除しましたか?作曲家とはcomposer remove vendor/theme
hakre

いいえ、ちょうどrm -rf vendor/theme
Arvind07

7

themeテーブルのエントリとmagento\app\design\frontend\<Vendor>エントリが同じであることを確認してください。

そうでない場合、この問題が発生します。

Admin- > Content-> Design-> Themesで不要なテーマを削除します。消して。したがって、DBエントリも削除されます。

フォルダーを削除するだけの場合は機能しません


7

この問題は、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()
    ]
);

これにより、汚い小さなハックをする必要がなくなります。


この深さで共有していただきありがとうございます。この回答は、それ自体でよくあるFAQになります。
-hakre

4

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

その後、クリアpub/static/frontendvar/view_preprocessingvar/cachevar/page_cacheディレクトリを。


1

@hakreは正しいです。同じエラーが発生しましたRequired parameter 'theme_dir' was not passed。以下にエラーの原因を説明します。

app / design / frontend / MyVendorTheme2 / myThemeName2ディレクトリーにテーマを作成し、Magento 2管理ブラウザーで「MyVendorTheme2-myThemeName2」というテーマを選択して構成しました(ストア>構成>テーマ設定>一般>設計>設計テーマ) 。しかし、その後、「myThemeName2」ディレクトリ(新しいテーマを含む)を別の(既存の)ベンダーフォルダー「MyVendorTheme1app / design / frontend / MyVendorTheme1 / myThemeName2の下に移動し、「MyVendorTheme2」フォルダーから削除することにしました前だった。私は(資産をコンパイルするために進めすなわちgrunt cleangrunt exec:myThemeName2grunt 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管理ブラウザー(ストア>設定>テーマ設定>一般>デザイン>デザインテーマ)に戻ることでエラーを解決したため、正しいテーマを選択しました。


redis構成の「キャッシュ」をenv.phpに追加する場合にのみ、このエラーが発生します。変更を削除すると、正常に機能します。それでは、なぜ「キャッシュ」を追加するときだけですか?配列の構文を確認しましたが、問題ありません。同じキャッシュ=>値がステージングサーバーで機能している(切り取り/貼り付け)
スコット

1

カスタムテーマをインストールした後に製品イメージを保存すると、このエラーが発生しました。

仮想タイプとして設定されたカスタムテーマがありました。つまり、テーマテーブルのDBのtype = 1です。私の場合、テーマを使用しなくなったため、テーブルから削除しました。


1

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

0

何も機能しない場合は、カテゴリセクションを確認することを忘れないでください。そこにも設計設定があります。正しいデザインテーマが割り当てられていることを確認してください。私の場合、一部のカテゴリでのみエラーが発生していました。


この問題が発生する可能性のあるシナリオ例を教えてください。私が考えることができるのは、レイアウトがカスタムテーマ内にのみ存在するオプションに変更された場合、そのテーマは削除されます。しかし、デフォルトのレイアウト(または同じ名前を使用したデフォルトの修正バージョン)のみを使用してこれが発生した場合、Magentoソフトウェア自体ではなく、カスタムテーマに間違いがあることを意味しますか?
ジョシュア洪水

0

製品を追加または編集する場合は、[デザイン]セクションに移動してレイアウトオプションを変更します。

ここに画像の説明を入力してください


0

以下のクエリを実行すると、DBから未使用のテーマを直接削除できます。

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

未使用のテーマが未使用のテーマであり、キャッシュを作成した後


0

偶然app / desing / adminhtml / theme-nameフォルダーで削除したときにこの問題が発生しました。戻すことで問題が解決しました。さらに、管理パネルに入ろうとしたときにのみ発生しました。


0

場合によっては、カスタムテーマを不適切に削除すると、このエラーに直面することもあります。この状況では:

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'

消えたページエラーを更新します。


0

問題を解決しました。私の場合、問題はMagento2ではなく、次のように間違った操作でした:app / design / frontend / MyFolder / MyThemeで相対パスを作成するテーマを作成し、Magento 2オンラインドキュメントの説明に従って登録しました。次に、テーマをキャンセルし、代わりに適切なコマンドを使用することにしました:bin / magento theme:unfront frontend / MyFolder / MyThemeフォルダーを直接削除しました。データベースは期限情報で更新されないため、これは適切な操作ではありません。解決策:phpmyadminとしてデータベースのエディターを使用して、削除されたフォルダーに対応する「テーマ」テーブルのレコードを削除します。これが役立つことを願っています!


0

私はこの質問がかなり古いことを知っていますが、今日私がこれに遭遇し、私の問題が何であるかをすぐに見つけたので、私はPhpStormを使用してMagentoと連携するすべての人へのリマインダーとして私の答えを投稿することにしました:ブランチを切り替えるときは、必ずファイルをチェックアウトしてください。

私の場合、作業しているブランチには必要なテーマファイルがありません(テーマブランチからマスターブランチに変更したときにPhpStormによって隠されていました)。まだマージされていないためです。エラー。

これが誰かを助けるかもしれないことを願っています。


-1

Webサイトで使用していないすべてのテーマ一時ファイルを削除し、使用していないテーマからも削除して、cache:flushを実行します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.