Обязательный параметр 'theme_dir' не был передан

61

Что такое сообщение об ошибке:

Обязательный параметр 'theme_dir' не был передан

Это связано с Magento 2? И как можно решить эту проблему?

hakre
источник
я исправил это, изменив разрешение папки темы
taoufiqaitali
попробовал все решения, в итоге переустановил magento
Роберт Синклер

Ответы:

87

На всякий случай, если вы удаляете тему напрямую (не в 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: Добро пожаловать :)
Каушал Сутар
@KaushalSuthar это не сработало вообще, вместо этого администратор перешел в текстовый формат. Затем после запуска setup:static-content:deployадмин вернулся в интерфейс.
Ашвани Шукла
@AshwaniShukla: вы, возможно, допустили некоторую ошибку во время процесса ...
Каушал Сутар
@KaushalSuthar единственная ошибка, которую я сделал, pub/static/.htaccessбыла не там. спасибо
Ашвани Шукла
28

Это сообщение об ошибке означает, что у вас настроена тема, которой больше нет в файловой системе (больше).

Это можно легко исправить, выбрав правильную тему. Перейдите в Content -> Configuration , выберите область (global, website, store_view) и измените тему. После того, как вы это сделали, вы также должны удалить его из Content -> Themes .

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

Рекомендации

hakre
источник
Это также может быть в том случае, если каталог вашей темы не имеет надлежащих разрешений.
Натан Моинвазири
Разрешения должны быть проверены некоторыми из сценариев Magento AFAIK, но вы правы, это квалифицируется как то же самое: недоступный каталог часто ведет себя подобно несуществующему каталогу.
hakre
3
Это больше не место, где это находится. сейчас на вкладке контента.
CarComp
@CarComp: не стесняйтесь предоставлять обновленный скриншот и редактировать ответ. Когда я ответил, это было так же задокументировано.
hakre
11

В моем случае я удалил дочернюю тему из каталога Vendor. Но запись БД все еще была в themeтаблице. Итак, зайдите в themeтаблицу и удалите запись, которая указывает на удаленную тему.

Arvind07
источник
Как вы удалили из каталога продавца? С композитором composer remove vendor/theme?
Хакре
Нет, простоrm -rf vendor/theme
Arvind07
7

Убедитесь, что themeзапись в таблице и magento\app\design\frontend\<Vendor>запись будут одинаковыми.

Если нет, то это вызывает эту проблему.

Удалите ненужную тему через Admin -> Content -> Design -> Themes . Удалите это. Так что это также удалит запись в БД.

Если вы удалите только папку, она не будет работать

Анкит Шах
источник
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каталоги.

Ansyori
источник
1

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

Я создал тему в каталоге app / design / frontend / MyVendorTheme2 / myThemeName2 , а затем настроил ее, выбрав тему « MyVendorTheme2 - myThemeName2 » в браузере администратора Magento 2 ( Магазины> Конфигурация> НАСТРОЙКИ ТЕМЫ> ОБЩИЕ> Дизайн> Тема оформления ) , Но затем я решил переместить каталог « 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 (« Магазины»> «Конфигурация»> «ТЕМАТИЧЕСКИЕ НАСТРОЙКИ»> «ОБЩИЕ»> «Дизайн»> «Тема оформления» ), в котором была выбрана моя предыдущая и теперь недопустимая тема оформления, поэтому я выбрал правильную.

Люк Шон
источник
Я получаю эту ошибку только при добавлении 'cache' для конфигурации redis в env.php. Удалите изменения, и все работает нормально. Так почему же это только при добавлении «кеша»? Я проверил синтаксис массива, и это нормально. На моем промежуточном сервере работает то же значение cache => (вырезано / вставлено)
Скотт,
1

Эта ошибка произошла со мной при сохранении изображений продукта после установки пользовательской темы.

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

Когда неиспользованная тема является неиспользуемой темой, а после вы очистите свой кеш

Мохамед Эль Мрабет
источник
0

У меня была эта проблема, когда я случайно удалил папку app / desing / adminhtml / theme-name. Возвращение решило мою проблему. Более того, это происходило только тогда, когда я пытался войти в панель администратора.

embed0
источник
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: uninstall frontend / MyFolder / MyTheme, я удалил папки напрямую. Это не очень хорошая операция, так как база данных не обновляется необходимой информацией. Решение: с помощью редактора базы данных phpmyadmin удалите запись в таблице «Тема», соответствующую удаленным папкам. Я надеюсь, это поможет!

Soundararajan м
источник
0

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

В моем случае у ветви, над которой я работал, не было необходимых файлов темы (они были спрятаны PhpStorm, когда я перешел из ветви темы в основную ветку), потому что они еще не были объединены, поэтому ошибка.

Надеюсь, это может кому-то помочь.

Ренан Лазаротто
источник
-1

удалите все временные файлы темы, которые не используются на сайте, а также удалите из темы, которая не используется, и запустите кеш: flush

Зешан Рахман
источник