Wymagany parametr „theme_dir” nie został przekazany

61

Jaki jest komunikat o błędzie:

Wymagany parametr „theme_dir” nie został przekazany

Czy ma to związek z Magento 2? Jak rozwiązać ten problem?

hakre
źródło
naprawiłem to, zmieniając uprawnienia do folderu motywów
taoufiqaitali
wypróbowałem wszystkie rozwiązania, w końcu przeinstalowałem magento
Robert Sinclair

Odpowiedzi:

86

Na wszelki wypadek, jeśli usuwasz motyw bezpośrednio (nie w sposób Magento).

Następnie wykonaj następujące kroki.

KROK 1: Operacje na plikach

Usuń zawartość z app/design/frontend/<Vendor>(najpierw wykonaj kopię zapasową).

Usuń całą zawartość folderu var/view_preprocessedi pub/static/frontend.

KROK 2: Operacje DB

Przejdź do themetabeli i usuń wpis utworzonego motywu.

Po tym...

Przejdź do core_config_datatabeli i wyszukaj, themea otrzymasz rekordy ścieżek, takie jak design/theme/theme_idzastąp w nim domyślny identyfikator motywu.

KROK 3: Opróżnij pamięć podręczną

Opróżnij pamięć podręczną php bin/magento cache:flush

Daj mi znać, jeśli nadal będziesz mieć problemy.

Kaushal Suthar
źródło
Dzięki. Miałem ten sam problem, gdy usunąłem motyw. Nie zapomnij usunąć resztek pozostawionych w bazie danych. Zrobiłem naprawić theme-Tabela, ale zapomniał o core_config_datawartości.
Giel Berkers
@GielBerkers: Witamy :)
Kaushal Suthar
@KaushalSuthar to w ogóle nie działało, zamiast tego administrator przeszedł do formatu tekstowego. Następnie po uruchomieniu setup:static-content:deployadministrator wrócił do interfejsu użytkownika.
Ashwani Shukla
@AshwaniShukla: mogłeś popełnić jakiś błąd podczas procesu ...
Kaushal Suthar
@KaushalSuthar jedynym błędem, jaki popełniłem, pub/static/.htaccessnie było. dzięki
Ashwani Shukla
28

Ten komunikat o błędzie oznacza, że ​​masz skonfigurowaną kompozycję, która już nie istnieje w systemie plików (więcej).

Można to łatwo naprawić, wybierając prawidłowy motyw. Przejdź do Treść -> Konfiguracja , wybierz zakres (globalny, strona internetowa, store_view) i zmień motyw. Po wykonaniu tej czynności należy również usunąć go z Treści -> Motywy .

zmień motyw sklepu

Bibliografia

hakre
źródło
Może tak być również w przypadku, gdy katalog motywów nie ma odpowiednich uprawnień.
Nathan Moinvaziri
Uprawnienia powinny być sprawdzane przez niektóre skrypty Magento AFAIK, ale masz rację, kwalifikuje się to tak samo: Niedostępny katalog często zachowuje się podobnie do nieistniejącego katalogu.
hakre
3
To już nie jest miejsce, w którym się znajduje. jest teraz na karcie treści.
CarComp
@CarComp: możesz zaktualizować zrzut ekranu i edytować odpowiedź. Kiedy odpowiedziałem, było to udokumentowane.
hakre
11

W moim przypadku usunąłem motyw podrzędny z katalogu dostawcy. Ale pozycja DB wciąż była w themetabeli. Przejdź do themetabeli i usuń rekord wskazujący na usunięty motyw.

Arvind07
źródło
Jak usunąłeś z katalogu dostawcy? Z kompozytorem composer remove vendor/theme?
hakre
Nie, tylkorm -rf vendor/theme
Arvind07,
7

Upewnij się, że themewpis i wpis w tabeli magento\app\design\frontend\<Vendor>będą takie same.

Jeśli nie, powoduje to problem.

Usuń niepotrzebny motyw za pomocą Administratora -> Treść -> Projekt -> Motywy . Usuń to. Więc usunie również DB Entry.

Jeśli usuniesz tylko folder, to nie będzie działać

Ankit Shah
źródło
7

Ten problem może również wystąpić, gdy jesteś w stanie emulowanym, na przykład w poleceniu CLI. Miałem sytuację, w której nie mogłem wysłać wiadomości e-mail w interfejsie CLI, ponieważ polecenie owijania działało w stanie emulowanym:

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

W powyższym przykładzie, gdy wiadomość e-mail próbowała ustalić, że jest katalogiem szablonu, zostanie zamapowana na global/Magento/backend, która nie istnieje. Aby to naprawić, musiałem ręcznie dodać to do mojego konstruktora:

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

Po tej poprawce problem został rozwiązany i mogłem wysłać wiadomość e-mail.

Aktualizacja:

Jeśli chodzi o wysyłanie poczty za pomocą interfejsu CLI, bardziej odpowiednim podejściem byłoby użycie emulacji. Na przykład:

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

W ten sposób nie musisz robić swoich brudnych, małych hacków.

Giel Berkers
źródło
Dzięki za udostępnienie w tej głębi. Ta odpowiedź sama w sobie staje się często zadawanym pytaniem, bardzo miło ją zobaczyć.
hakre
4

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

następnie wyczyścić pub/static/frontend, var/view_preprocessing, var/cache, var/page_cachekatalogi.

Ansyori
źródło
1

@hakre jest poprawny. Mam ten sam błąd Required parameter 'theme_dir' was not passed. Poniżej wyjaśniam, co zrobiłem, aby spowodować błąd:

I tworząc temat w / MyVendorTheme2 / myThemeName2 app / design / frontend katalogu, a następnie ustawił go wybierając temat " MyVendorTheme2 - myThemeName2 " w przeglądarce Admin Magento 2 ( Sklepy> Konfiguracja> Ustawienia motywu> Ogólne> Projekt> Projekt Theme ) . Ale potem postanowiłem przenieść katalog „ myThemeName2 ” (zawierający mój nowy motyw) do innego (istniejącego) folderu dostawcy „ MyVendorTheme1app / design / frontend / MyVendorTheme1 / myThemeName2 i usunąłem go z folderu „ MyVendorTheme2 ”, w którym to było wcześniej. I przystąpił do opracowania aktywa (czyli grunt clean, grunt exec:myThemeName2,grunt less:myThemeName2), a następnie otworzyłem przeglądarkę w mojej subdomenie motywu (tj. http: // moja_wirtualnahostdomena: mójport / mojavendortheme1_mythemename2_magento2_quickstart / ).

Początkowo otrzymałem nieokreślony błąd: There has been an error processing your request Exception printing is disabled by default for security reasons. Error log record number:

I włączone raportowanie błędów przez zmianę nazwy pub/errors/local.xml.sample, aby local.xmli odświeżane stronę. Następnie został przedstawiony błąd Required parameter 'theme_dir' was not passed.

Rozwiązałem błąd, wracając do mojej przeglądarki Magento 2 Admin ( Sklepy> Konfiguracja> USTAWIENIA TEMATÓW> OGÓLNE> Projekt> Motyw projektu ), w której wybrano mój poprzedni i teraz nieprawidłowy motyw projektu, więc wybrałem właściwy.

Luke Schoen
źródło
Ten błąd pojawia się tylko podczas dodawania „pamięci podręcznej” konfiguracji redis do env.php. Usuń zmiany i działa dobrze. Dlaczego więc dzieje się tak tylko podczas dodawania „pamięci podręcznej”? Sprawdziłem składnię tablicy i jest w porządku. Ta sama wartość pamięci podręcznej => działa na moim serwerze pomostowym (wycięty / wklejony)
Scott
1

Ten błąd przydarzył mi się podczas zapisywania zdjęć produktów po zainstalowaniu niestandardowego motywu.

Miałem niestandardowy motyw ustawiony jako typ wirtualny, czyli w DB w tabeli motywów, typ = 1. W moim przypadku nie używałem już motywu, więc usunąłem go ze stołu.

Paweł
źródło
1

1 - Użyj poniższego polecenia, aby zidentyfikować motywy w panelu administracyjnym.

n98-magerun2 dev:theme:list

2 - Uruchom polecenie, aby zidentyfikować zainstalowane motywy:

ls -lha app/design/frontend/MyThemePackage/

3- Uruchom poniższe polecenia, aby utworzyć motyw, który nie istnieje:

n98-magerun2 deploy:mode:set developer
n98-magerun2 dev:console
make:theme frontend MyThemePackage MyThemeName
Rafael Corrêa Gomes
źródło
0

Jeśli nic nie zadziałało, nie zapomnij sprawdzić sekcji kategorii. Tam też są ustawienia projektu. Upewnij się, że przypisano poprawny motyw projektu. W moim przypadku błąd występował tylko w niektórych kategoriach.

T. Sherpa
źródło
Czy możesz podać przykładowy scenariusz, w którym może wystąpić ten problem? Jedyne, co mogę wymyślić, to jeśli układ został zmieniony na opcję, która istnieje tylko w niestandardowym motywie, to motyw został usunięty. Ale jeśli miałoby to nastąpić przy użyciu tylko domyślnych układów (lub zmodyfikowanych wersji domyślnych, przy użyciu tej samej nazwy), to z pewnością implikuje błąd niestandardowego motywu, a nie samego oprogramowania magento?
Powódź Jozuego
0

Podczas dodawania lub edycji produktu przejdź do sekcji Projektowanie i zmień opcję układu.

wprowadź opis zdjęcia tutaj

Abhishek
źródło
0

Możesz usunąć nieużywany motyw bezpośrednio z bazy danych, wykonując poniższe zapytanie:

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

whene unusedtheme to nieużywany motyw, a po zamknięciu pamięci podręcznej

Mohamed El Mrabet
źródło
0

Miałem ten problem, gdy przypadkowo usunąłem folder app / desing / adminhtml / theme-name. Przywrócenie go rozwiązało mój problem. Co więcej, zdarzyło się to tylko wtedy, gdy próbowałem wejść do panelu administracyjnego.

embed0
źródło
0

W niektórych przypadkach motyw niestandardowy zostanie usunięty w odpowiedni sposób, wtedy pojawi się również ten błąd. W tej sytuacji:

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'

Odśwież błąd strony zniknął.

Hassan Ali Shahzad
źródło
0

Rozwiązałem problem. W moim przypadku problemem nie był Magento2, ale niepoprawna operacja, którą zrobiłem dawno temu: Stworzyłem motyw tworzący ścieżkę względną w app / design / frontend / MyFolder / MyTheme i zarejestrowałem go, jak wyjaśniono w dokumentacji online Magento 2. Następnie postanowiłem anulować motyw i zamiast tego użyć odpowiedniego polecenia: bin / magento theme: odinstaluj frontend / MyFolder / MyTheme, usunąłem foldery bezpośrednio. Nie jest to dobra operacja, ponieważ baza danych nie jest aktualizowana wymaganymi informacjami. Rozwiązanie: z edytorem bazy danych jako phpmyadmin usuń rekord z tabeli „Motyw” odpowiadający usuniętym folderom. Mam nadzieję, że to pomoże!

Soundararajan m
źródło
0

Wiem, że to pytanie jest dość stare, ale ponieważ natknąłem się na to właśnie dzisiaj i szybko dowiedziałem się, jaki jest mój problem, postanowiłem opublikować moją odpowiedź jako przypomnienie dla wszystkich, którzy podobnie jak ja używają PhpStorm do pracy z Magento: pamiętaj, aby sprawdzić swoje pliki podczas zmiany gałęzi.

W moim przypadku gałąź, nad którą pracowałem, nie miała wymaganych plików motywu (zostały one ukryte przez PhpStorm, gdy zmieniłem gałąź motywu na gałąź master), ponieważ nie zostały jeszcze scalone, więc błąd.

Mam nadzieję, że to może komuś pomóc.

Renan Lazarotto
źródło
-1

usuń wszystkie tymczasowe pliki motywu, które nie są używane na stronie internetowej i usuń również z motywu, który nie używa i uruchom pamięć podręczną:

Zeshan Rahman
źródło