Обов’язковий параметр 'theme_dir' не був переданий


61

Що таке повідомлення про помилку:

Обов’язковий параметр 'theme_dir' не був переданий

Це пов’язано з Magento 2? І як цю проблему можна виправити?


Я виправив це, змінивши дозвіл папки теми
taoufiqaitali

спробував кожне рішення, закінчився перевстановленням магенто
Роберт Сінклер

Відповіді:


86

Про всяк випадок, якщо ви видаляєте тему безпосередньо (Не в Magento).

Потім виконайте ці кроки.

КРОК 1: Операції з файлами

Видаліть вміст із нього app/design/frontend/<Vendor>(переконайтесь, що ви створили його назад).

Видаліть увесь вміст папки var/view_preprocessed& pub/static/frontend.

КРОК 2: Операції з БД

Перейдіть до themeтаблиці та видаліть запис для створеної теми.

Після того...

Перейдіть до свого core_config_dataстолу та шукайте, themeі ви отримаєте записи траєкторій, такі як design/theme/theme_idзамініть ідентифікатор теми за замовчуванням у ньому.

КРОК 3: Очищення кешу

Очистіть кеш php bin/magento cache:flush

Повідомте мене, якщо ви все-таки стикаєтесь з якимись проблемами після цього.


Дякую. У мене була така ж проблема, коли я видалив тему. Не забудьте видалити залишки, залишені в базі даних. Я зробив виправлення theme-table, але забув про core_config_dataзначення.
Giel Berkers

@GielBerkers: Ласкаво просимо :)
Kaushal Suthar

@KaushalSuthar це зовсім не спрацювало, натомість адміністратор перейшов у текстовий формат. Потім після запуску setup:static-content:deployадміністратор повернувся до інтерфейсу користувача.
Ashwani Shukla

@AshwaniShukla: ти, можливо, помилився під час процесу ...
Kaushal Suthar

@KaushalSuthar єдиною помилкою, яку я зробив, pub/static/.htaccessбуло не там. спасибі
Ashwani Shukla

28

Це повідомлення про помилку означає, що у вас налаштована тема, яка не існує у файловій системі (більше).

Це можна легко виправити, вибравши замість цього дійсну тему. Перейдіть до Змісту -> Конфігурація , виберіть область застосування (глобальний, веб-сайт, магазин_погляд) та змініть тему. Після того, як ви зробите це, вам слід також видалити його із вмісту -> теми .

змінити тему для магазину

Список літератури


Це також може бути, якщо ваш тематичний каталог не має належних дозволів.
Натан Моінвазірі

Дозволи повинні перевірятися деякими сценаріями Magento AFAIK, але ви праві, це кваліфікується як те саме: Недоступний каталог часто поводиться аналогічно неіснуючому каталогу.
хакре

3
Це вже не місце, де це знаходиться. його зараз на вкладці вмісту.
CarComp

@CarComp: Не соромтеся надати оновлений скріншот та відредагувати відповідь. Коли я відповів, це було як задокументовано.
хакре

11

У моєму випадку я видалив дочірню тему з каталогу постачальників. Але запис БД все ще був у themeтаблиці. Тому перейдіть до themeтаблиці та видаліть запис, який вказує на видалену тему.


Як ви видалили з каталогу постачальників? З композитором composer remove vendor/theme?
hakre

Ні, простоrm -rf vendor/theme
Арвінд07

7

Переконайтеся, що themeзапис та запис таблиці magento\app\design\frontend\<Vendor>будуть однаковими.

Якщо ні, це викликає це питання.

Видаліть непотрібну тему через адміністратор -> вміст -> дизайн -> теми . Видаліть його. Таким чином, він також видалить Введення БД.

Якщо ви видалите лише папку, вона не працюватиме


7

Ця проблема також може виникнути, коли ви перебуваєте в емульованому стані, наприклад, у команді CLI. У мене виникла ситуація, коли мені не вдалося надіслати електронний лист у 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()
    ]
);

Таким чином, вам не доведеться до своїх брудних маленьких хаків.


Дякуємо, що поділились у цій глибині. Ця відповідь цілком стає самим поширеним запитанням, дуже приємно бачити.
хакре

4

бігати sql UPDATE core_config_data SET value=NULL WHERE path='design/theme/theme_id'

потім очистити pub/static/frontend, var/view_preprocessing, var/cache, var/page_cacheкаталоги.


1

@hakre правильний. Я отримав таку ж помилку Required parameter 'theme_dir' was not passed. Нижче я пояснюю, що я зробив, щоб викликати помилку:

Я створюю тему в каталозі app / design / frontend / MyVendorTheme2 / myThemeName2 , а потім конфігурував її, вибравши тему " MyVendorTheme2 - myThemeName2 " у браузері адміністратора Magento 2 ( Магазини> Конфігурація> НАСТРОЙКИ ТЕМИ> ЗАГАЛЬНІ> Дизайн> Тема дизайну ) . Але я вирішив перемістити каталог " myThemeName2 " (що містить мою нову тему), щоб він знаходився під іншою (існуючою) папкою постачальника " MyVendorTheme1 " додаток / дизайн / 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 Admin ( Магазини> Конфігурація> НАЛАШТУВАННЯ ТЕМИ> ЗАГАЛЬНО> Дизайн> Тема дизайну ), у якому була обрана моя попередня і тепер недійсна тема дизайну, тому я вибрав правильну.


Я отримую цю помилку лише при додаванні "кешу" для конфігурації redis до env.php. Видаліть зміни, і це прекрасно працює. То чому це лише при додаванні "кешу"? Я перевірив синтаксис масиву і це добре. Це ж кеш => значення працює на моєму сервісі постановки (вирізати / вставити)
Скотт

1

Ця помилка трапилася зі мною під час збереження зображень продукту після встановлення власної теми.

У мене була власна тема, яка була встановлена ​​як віртуальний тип, тобто в БД в таблиці тем, 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

Ви можете видалити невикористану тему з БД безпосередньо, виконавши цей нижче запит:

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

whee unusedtheme - це невикористана тема, і після цього ви очистите кеш


0

У мене виникла ця проблема, коли мене випадково видалили папку app / desing / adminhtml / topic-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, а в неправильній операції, яку я робив час тому наступним чином: я створив тему, що створює відносний шлях у програмі / дизайні / frontend / MyFolder / MyTheme, і зареєстрував її, як пояснено в онлайн-документації Magento 2. Тоді я вирішив скасувати тему, а замість цього скористався відповідною командою: bin / magento theme: uninstall frontend / MyFolder / MyTheme. Я видалив папки безпосередньо. Це не дуже добре, оскільки база даних не оновлюється відповідною інформацією. Рішення: за допомогою редактора бази даних у вигляді phpmyadmin видаліть запис у таблиці "Тема", що відповідає видаленим папкам. Сподіваюся, це допоможе!


0

Я знаю, що це питання досить давнє, але оскільки я сьогодні зіткнувся з цим питанням і швидко з'ясував, у чому моя проблема, я вирішив опублікувати свою відповідь як нагадування для всіх тих, хто, як і я, використовує PhpStorm для роботи з Magento: не забудьте перевірити свої файли при переключенні гілок.

У моєму випадку гілка, над якою я працював, не мала потрібних файлів тем (вони були перезаписані PhpStorm, коли я перейшов з гілки теми в головну гілку), оскільки вони ще не були об'єднані в неї, таким чином помилка.

Сподіваюся, це може комусь допомогти.


-1

видалити всі тимчасові файли теми, які не використовуються на веб-сайті, а також видалити з теми, яка не використовує та не керує кешем: flush

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.