Erforderlicher Parameter 'theme_dir' wurde nicht übergeben


Antworten:


86

Nur für den Fall, dass Sie das Thema direkt entfernen (nicht in Magento-Weise).

Folgen Sie dann diesen Schritten.

SCHRITT 1: Dateivorgänge

Löschen Sie den Inhalt von app/design/frontend/<Vendor>(stellen Sie sicher, dass Sie ihn zuerst sichern).

Löschen Sie den gesamten Inhalt des Ordners var/view_preprocessed& pub/static/frontend.

SCHRITT 2: DB-Operationen

Gehen Sie zu Ihrem themeTisch und löschen Sie den Eintrag für Ihr erstelltes Thema.

Nachdem...

Gehen Sie zu Ihrem core_config_dataTisch und suchen Sie nach, themeund Sie erhalten design/theme/theme_idPfadaufzeichnungen, in denen Sie Ihre Standardthema-ID ersetzen können.

SCHRITT 3: Cache leeren

Leeren Sie Ihren Cache php bin/magento cache:flush

Lassen Sie mich wissen, wenn Sie danach noch Probleme haben.


Vielen Dank. Ich hatte das gleiche Problem, als ich ein Thema löschte. Vergessen Sie nicht, die in der Datenbank verbliebenen Reste zu löschen. Ich habe die theme-Tabelle repariert, aber den core_config_dataWert vergessen .
Giel Berkers

@ GielBerkers: Willkommen :)
Kaushal Suthar

@KaushalSuthar das hat überhaupt nicht funktioniert, stattdessen ist der Admin in das Textformat gegangen. Nachdem setup:static-content:deployadmin ausgeführt wurde, kehrte er zur Benutzeroberfläche zurück.
Ashwani Shukla

@ AshwaniShukla: Möglicherweise haben Sie während des Vorgangs einen Fehler gemacht ...
Kaushal Suthar

@KaushalSuthar der einzige Fehler, den ich gemacht habe, pub/static/.htaccesswar nicht da. Danke
Ashwani Shukla

28

Diese Fehlermeldung bedeutet, dass Sie ein Design konfiguriert haben, das auf dem Dateisystem nicht mehr vorhanden ist.

Es kann leicht behoben werden, indem stattdessen ein gültiges Thema ausgewählt wird. Gehen Sie zu Inhalt -> Konfiguration , wählen Sie den Bereich (global, Website, store_view) und ändern Sie das Thema. Nachdem Sie dies getan haben, sollten Sie es auch aus Inhalt -> Themen entfernen .

Thema für den Shop ändern

Verweise


Dies kann auch der Fall sein, wenn Ihr Themenverzeichnis nicht über die entsprechenden Berechtigungen verfügt.
Nathan Moinvaziri

Die Berechtigungen sollten von einigen Magento-Skripten geprüft werden, AFAIK, aber Sie haben Recht, dies gilt auch für: Ein Verzeichnis, auf das nicht zugegriffen werden kann, verhält sich häufig ähnlich wie ein nicht vorhandenes Verzeichnis.
Hakre

3
Dies ist nicht mehr der Ort, an dem sich das befindet. Es ist jetzt in der Registerkarte Inhalt.
CarComp

@CarComp: Sie können jederzeit einen aktualisierten Screenshot bereitstellen und die Antwort bearbeiten. Als ich antwortete, war es wie dokumentiert.
Hakre

11

In meinem Fall habe ich ein untergeordnetes Thema aus dem Anbieterverzeichnis gelöscht. Aber der DB-Eintrag war noch in der themeTabelle vorhanden. Gehen Sie also zu der themeTabelle und löschen Sie den Datensatz, der auf das gelöschte Thema verweist.


Wie haben Sie aus dem Anbieterverzeichnis gelöscht? Mit dem Komponisten von composer remove vendor/theme?
Hakre

Nein, nurrm -rf vendor/theme
Arvind07

7

Stellen Sie sicher, dass der themeTabelleneintrag und der magento\app\design\frontend\<Vendor>Eintrag identisch sind.

Wenn nicht, verursacht es dieses Problem.

Entfernen Sie unnötige Designs über Admin -> Inhalt -> Design -> Designs . Lösche es. Daher wird auch DB Entry entfernt.

Wenn Sie nur Ordner entfernen, funktioniert es nicht


7

Dieses Problem kann auch auftreten, wenn Sie sich in einem emulierten Zustand befinden, beispielsweise in einem CLI-Befehl. Ich hatte eine Situation, in der ich in der CLI keine E-Mail senden konnte, weil der Befehl wrapping in einem emulierten Zustand ausgeführt wurde:

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

Wenn im obigen Beispiel versucht wurde, das Vorlagenverzeichnis der E-Mail zu ermitteln, wurde eine Zuordnung zu dieser E-Mail vorgenommen global/Magento/backend, die nicht vorhanden ist. Um dies zu beheben, musste ich es manuell in meinem Konstruktor hinzufügen:

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

Nach diesem Fix wurde das Problem behoben und ich konnte die E-Mail senden.

Aktualisieren:

Wenn Sie E-Mails über die CLI senden, ist die Verwendung der Emulation ein geeigneterer Ansatz. Zum Beispiel:

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

Auf diese Weise müssen Sie Ihre schmutzigen kleinen Hacks nicht.


Vielen Dank für Ihre Teilnahme an dieser Tiefe. Diese Antwort wird zu einer FAQ für sich, sehr schön zu sehen.
Hakre

4

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

dann löschen Sie die pub/static/frontend, var/view_preprocessing, var/cache, var/page_cacheVerzeichnisse.


1

@hakre ist richtig. Ich habe den gleichen Fehler bekommen Required parameter 'theme_dir' was not passed. Im Folgenden erkläre ich, was ich getan habe, um den Fehler zu verursachen:

Ich erstelle ein Thema im Verzeichnis app / design / frontend / MyVendorTheme2 / myThemeName2 und konfiguriere es dann, indem ich das Thema " MyVendorTheme2 - myThemeName2 " im Magento 2 Admin-Browser auswähle ( Stores> Configuration> THEMENEINSTELLUNGEN> GENERAL> Design> Design Theme ) . Aber ich habe dann beschlossen , die „zu bewegen myThemeName2 “ Verzeichnis (mein neues Thema enthält) unter einem anderen (vorhandenen) Anbieter Ordner „sein MyVendorTheme1app / design / frontend / MyVendorTheme1 / myThemeName2 , und entfernt sie aus dem „ MyVendorTheme2 “ Ordner , in dem es war davor. Ich ging Vermögenswerte zu kompilieren ( das heißt grunt clean, grunt exec:myThemeName2,grunt less:myThemeName2) und öffnete dann meinen Browser in meiner Themen-Unterdomäne (dh http: // myvirtualhostdomain: myport / myvendortheme1_mythemename2_magento2_quickstart / ).

Anfangs habe ich einen unbekannten Fehler erhalten: There has been an error processing your request Exception printing is disabled by default for security reasons. Error log record number:

Ich habe die Fehlerberichterstattung durch Umbenennen pub/errors/local.xml.samplein aktiviert local.xmlund die Seite aktualisiert. Mir wurde dann der Fehler präsentiert Required parameter 'theme_dir' was not passed.

Ich habe den Fehler behoben, indem ich in meinen Magento 2 Admin-Browser ( Stores> Configuration> THEMENEINSTELLUNGEN> ALLGEMEIN> Design> Designthema ) zurückgekehrt bin, in dem mein vorheriges und jetzt ungültiges Designthema ausgewählt war, und daher das richtige ausgewählt habe.


Ich erhalte diese Fehlermeldung nur, wenn ich 'Cache' für die Redis-Konfiguration zur env.php hinzufüge. Entfernen Sie die Änderungen, und es funktioniert einwandfrei. Warum ist es nur beim Hinzufügen von "Cache"? Ich habe die Syntax des Arrays überprüft und es ist in Ordnung. Der gleiche Cache => Wert funktioniert auf meinem Staging-Server (Ausschneiden / Einfügen)
Scott

1

Dieser Fehler ist mir beim Speichern von Produktabbildungen nach der Installation eines benutzerdefinierten Designs passiert.

Ich hatte das benutzerdefinierte Design, das als virtueller Typ festgelegt wurde, dh in der DB in der Designtabelle, Typ = 1. In meinem Fall habe ich das Design nicht mehr verwendet und es daher aus der Tabelle gelöscht.


1

1 - Verwenden Sie den folgenden Befehl, um die Themen im Admin-Bereich zu identifizieren.

n98-magerun2 dev:theme:list

2 - Führen Sie den Befehl aus, um die installierten Designs zu identifizieren:

ls -lha app/design/frontend/MyThemePackage/

3- Führen Sie die folgenden Befehle aus, um das Thema zu erstellen, das nicht vorhanden ist:

n98-magerun2 deploy:mode:set developer
n98-magerun2 dev:console
make:theme frontend MyThemePackage MyThemeName

0

Wenn nichts funktioniert hat, vergessen Sie nicht, den Abschnitt Kategorien zu überprüfen. Dort gibt es auch eine Designeinstellung. Stellen Sie sicher, dass das richtige Designthema zugewiesen ist. In meinem Fall wurde der Fehler nur in einigen Kategorien angezeigt.


Könnten Sie bitte ein Beispielszenario angeben, in dem dieses Problem auftreten könnte? Das einzige, woran ich denken kann, ist, wenn das Layout in eine Option geändert wurde, die nur in einem benutzerdefinierten Thema vorhanden ist, dann wird das Thema entfernt. Wenn dies jedoch nur unter Verwendung von Standardlayouts (oder modifizierten Versionen der Standardlayouts mit demselben Namen) der Fall sein sollte, liegt sicherlich ein Fehler am benutzerdefinierten Design und nicht an der Magento-Software selbst vor?
Joshua Flood

0

Wenn Sie ein Produkt hinzufügen oder bearbeiten, wechseln Sie zum Abschnitt Design und ändern Sie die Layoutoption.

Bildbeschreibung hier eingeben


0

Sie können das nicht verwendete Design direkt aus der Datenbank entfernen, indem Sie die folgende Abfrage ausführen:

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

Wann nicht verwendet, ist das nicht verwendete Thema, und nachdem Sie Ihren Cache clena


0

Ich hatte dieses Problem, als ich versehentlich den Ordner app / desing / adminhtml / theme-name entfernte. Das Problem wurde behoben, indem ich es zurückbrachte. Außerdem trat es nur auf, als ich versuchte, Admin Panel zu betreten.


0

In einigen Fällen löschen Sie ein benutzerdefiniertes Design auf eine nicht ordnungsgemäße Weise. In diesem Fall tritt auch dieser Fehler auf. In dieser 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'

Aktualisieren Sie den Seitenfehler weg.


0

Ich habe das Problem behoben. In meinem Fall war das Problem nicht Magento2, sondern eine falsche Operation, die ich vor einiger Zeit wie folgt ausgeführt habe: Ich habe ein Design erstellt, das den relativen Pfad in app / design / frontend / MyFolder / MyTheme erstellt und wie in der Magento 2-Online-Dokumentation beschrieben registriert. Dann habe ich beschlossen, das Thema abzubrechen und stattdessen den entsprechenden Befehl zu verwenden: bin / magento theme: deinstalliere Frontend / MyFolder / MyTheme Ich habe die Ordner direkt gelöscht. Dies ist keine gute Operation, da die Datenbank nicht mit den erforderlichen Informationen aktualisiert wird. Lösung: Löschen Sie mit einem Datenbankeditor wie phpmyadmin den Datensatz in der Tabelle "Theme", der den gelöschten Ordnern entspricht. Ich hoffe das wird helfen!


0

Ich weiß, dass diese Frage ziemlich alt ist, aber da ich erst heute darauf gestoßen bin und schnell herausgefunden habe, was mein Problem ist, habe ich beschlossen, meine Antwort als Erinnerung für all diejenigen zu posten, die wie ich PhpStorm für die Arbeit mit Magento verwenden: Denken Sie daran, Ihre Dateien beim Wechseln der Zweige auszuchecken.

In meinem Fall verfügte der Zweig, an dem ich arbeitete, nicht über die erforderlichen Themendateien (diese wurden von PhpStorm gespeichert, als ich vom Themenzweig zum Hauptzweig wechselte), da sie noch nicht darin zusammengeführt wurden Error.

Hoffe das könnte jemandem helfen.


-1

Löschen Sie alle temporären Themendateien, die nicht auf der Website verwendet werden, und löschen Sie auch die temporären Themendateien, die nicht verwendet werden, und führen Sie den Cache aus: flush

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.