El parámetro requerido 'theme_dir' no se pasó

61

Cuál es el mensaje de error:

El parámetro requerido 'theme_dir' no se pasó

¿Está relacionado con Magento 2? ¿Y cómo se puede solucionar este problema?

hakre
fuente
Lo arreglé cambiando el permiso de la carpeta de temas
taoufiqaitali
probé todas las soluciones, terminé reinstalando magento
Robert Sinclair

Respuestas:

86

Por si acaso, si está eliminando el tema directamente (no en modo Magento).

Luego sigue estos pasos.

PASO 1: Operaciones de archivo

Elimine el contenido de app/design/frontend/<Vendor>(asegúrese de hacer una copia de seguridad primero).

Eliminar todo el contenido de la carpeta var/view_preprocessed& pub/static/frontend.

PASO 2: Operaciones DB

Vaya a su themetabla y elimine la entrada para su tema creado.

Después de esto...

Vaya a su core_config_datatabla y busque themey obtendrá registros de ruta como design/theme/theme_idreemplazar su identificación de tema predeterminada.

PASO 3: Vaciar caché

Vacía tu caché php bin/magento cache:flush

Avísame si aún tienes problemas después de eso.

Kaushal Suthar
fuente
Gracias. Tuve el mismo problema cuando eliminé un tema. No olvide eliminar los restos que quedan en la base de datos. Arreglé la themetabla, pero olvidé el core_config_datavalor.
Giel Berkers
@GielBerkers: Bienvenido :)
Kaushal Suthar
@KaushalSuthar esto no funcionó en absoluto, en cambio el administrador entró en formato de texto. Luego, después de ejecutar setup:static-content:deployadmin regresó a la interfaz de usuario.
Ashwani Shukla
@AshwaniShukla: puede que hayas cometido algún error durante el proceso ...
Kaushal Suthar
@KaushalSuthar el único error que cometí pub/static/.htaccessfue que no estaba allí. gracias
Ashwani Shukla
28

Este mensaje de error significa que tiene un tema configurado que no existe en el sistema de archivos (más).

Se puede solucionar fácilmente seleccionando un tema válido en su lugar. Vaya a Contenido -> Configuración , seleccione el alcance (global, sitio web, store_view) y cambie el tema. Después de hacerlo, también debe eliminarlo de Contenido -> Temas .

cambiar tema para tienda

Referencias

hakre
fuente
Este también puede ser el caso si su directorio de temas no tiene los permisos adecuados.
Nathan Moinvaziri
Algunos de los scripts de Magento AFAIK deben verificar los permisos, pero tiene razón, esto califica de la misma manera: un directorio inaccesible a menudo se comporta de manera similar a un directorio no existente.
Hakre
3
Este ya no es el lugar donde se encuentra. está en la pestaña de contenido ahora.
CarComp
@CarComp: siéntase libre de proporcionar una captura de pantalla actualizada y editar la respuesta. Cuando respondí, estaba tan documentado.
hakre
11

En mi caso, eliminé un tema secundario del directorio de proveedores. Pero la entrada DB todavía estaba allí en la themetabla. Vaya a la themetabla y elimine el registro que apunta al tema eliminado.

Arvind07
fuente
¿Cómo eliminó del directorio de proveedores? Con compositor de composer remove vendor/theme?
Hakre
No, solorm -rf vendor/theme
Arvind07
7

Asegúrese de que la themeentrada a la mesa y la magento\app\design\frontend\<Vendor>entrada sean las mismas.

Si no, causa este problema.

Elimine temas innecesarios a través de Admin -> Contenido -> Diseño -> Temas . Bórralo. Por lo tanto, también eliminará la entrada de DB.

Si solo elimina la carpeta, entonces no funcionará

Ankit Shah
fuente
7

Este problema también puede ocurrir cuando está en un estado emulado, por ejemplo, en un comando CLI. Tuve una situación en la que no podía enviar un correo electrónico en la CLI, porque el comando de ajuste se ejecutaba en un estado emulado:

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

En el ejemplo anterior, cuando el correo electrónico intentaba determinar su directorio de plantilla, se asignaba a global/Magento/backend, que no existe. Para solucionar esto, tuve que agregarlo manualmente en mi constructor:

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

Después de esta solución, el problema se resolvió y pude enviar el correo electrónico.

Actualizar:

Cuando se trata de enviar correo utilizando la CLI, un enfoque más adecuado sería utilizar la emulación. Por ejemplo:

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

De esta manera no tienes que hacer tus pequeños trucos sucios.

Giel Berkers
fuente
Gracias por compartir en esta profundidad. Esta respuesta se convierte en una pregunta frecuente por sí misma, muy agradable de ver.
Hakre
4

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

a continuación, desactive las pub/static/frontend, var/view_preprocessing, var/cache, var/page_cachedirectorios.

Ansyori
fuente
1

@hakre es correcto. Tengo el mismo error Required parameter 'theme_dir' was not passed. A continuación explico lo que hice para causar el error:

Creé un tema en el directorio app / design / frontend / MyVendorTheme2 / myThemeName2 , y luego lo configuré seleccionando el tema " MyVendorTheme2 - myThemeName2 " en el navegador Magento 2 Admin ( Tiendas> Configuración> CONFIGURACIÓN DE TEMAS> GENERAL> Diseño> Tema de diseño ) . Pero luego decidí mover el directorio " myThemeName2 " (que contiene mi nuevo tema) para que esté bajo una carpeta de proveedor diferente (existente) " MyVendorTheme1 " app / design / frontend / MyVendorTheme1 / myThemeName2 , y lo eliminé de la carpeta " MyVendorTheme2 " donde fue antes. Procedí a compilar los activos (es decir grunt clean, grunt exec:myThemeName2,grunt less:myThemeName2), y luego abrí mi navegador en mi subdominio de tema (es decir, http: // myvirtualhostdomain: myport / myvendortheme1_mythemename2_magento2_quickstart / ).

Inicialmente recibí un error no especificado: There has been an error processing your request Exception printing is disabled by default for security reasons. Error log record number:

He activado el informe de errores al cambiar el nombre pub/errors/local.xml.samplede local.xml, y refrescado la página. Entonces me presentaron el error Required parameter 'theme_dir' was not passed.

Resolví el error volviendo a mi navegador Magento 2 Admin ( Tiendas> Configuración> CONFIGURACIÓN DE TEMAS> GENERAL> Diseño> Tema de diseño ), que tenía mi tema de diseño anterior y ahora no válido, así que elegí el correcto.

Luke Schoen
fuente
Recibo este error solo cuando agrego 'caché' para la configuración de redis al env.php. Elimina los cambios y funciona bien. Entonces, ¿por qué es solo cuando se agrega 'caché'? Verifiqué la sintaxis de la matriz y está bien. El mismo valor de caché => funciona en mi servidor provisional (cortado / pegado)
Scott,
1

Este error me ocurrió al guardar las imágenes del producto después de instalar un tema personalizado.

Tenía el tema personalizado que se estableció como un tipo virtual, que está en la base de datos en la tabla de temas, tipo = 1. En mi caso, ya no estaba usando el tema, así que lo eliminé de la tabla.

Pablo
fuente
1

1 - Utilice el siguiente comando para identificar los temas en el panel de administración.

n98-magerun2 dev:theme:list

2 - Ejecute el comando para identificar los temas instalados:

ls -lha app/design/frontend/MyThemePackage/

3- Ejecute estos comandos a continuación para crear el tema que no existe:

n98-magerun2 deploy:mode:set developer
n98-magerun2 dev:console
make:theme frontend MyThemePackage MyThemeName
Rafael Corrêa Gomes
fuente
0

Si nada ha funcionado, no olvides consultar la sección de categorías. Hay una configuración de diseño allí también. Asegúrese de asignar el tema de diseño correcto. En mi caso, recibí el error solo en algunas categorías.

T. Sherpa
fuente
¿Podría por favor proporcionar un escenario de ejemplo donde este problema pueda ocurrir? Lo único que se me ocurre es que si el diseño se cambió a una opción que solo existe dentro de un tema personalizado, entonces el tema se elimina. Pero, si esto ocurriera mientras solo se usan diseños predeterminados (o versiones modificadas de los valores predeterminados, con el mismo nombre), ¿entonces seguramente implica una falla con el tema personalizado y no con el software magento en sí?
Joshua Flood
0

Cuando agrega o edita un producto, vaya a la sección Diseño y cambie la opción de diseño.

ingrese la descripción de la imagen aquí

Abhishek
fuente
0

Puede eliminar el tema no utilizado de DB directamente ejecutando esta consulta a continuación:

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

cuando un tema no utilizado es el tema no utilizado, y después de que limpie su caché

Mohamed El Mrabet
fuente
0

Tuve este problema cuando eliminé por accidente la carpeta app / desing / adminhtml / theme-name. Recuperarlo resolvió mi problema. Además, solo ocurrió cuando intenté ingresar al Panel de administración.

embed0
fuente
0

En algunos casos, elimina el tema personalizado de la manera adecuada, entonces también se enfrentará a este error. En esta situación:

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'

Actualice el error de página desaparecido.

Hassan Ali Shahzad
fuente
0

Resolví el problema. En mi caso, el problema no era Magento2, sino una operación incorrecta que hice hace tiempo como sigue: creé un tema creando la ruta relativa en app / design / frontend / MyFolder / MyTheme y lo registré como se explica en la documentación en línea de Magento 2. Luego decidí cancelar el tema y, en su lugar, usar el comando apropiado: tema bin / magento: desinstalar frontend / MyFolder / MyTheme Eliminé las carpetas directamente. Esta no es una buena operación ya que la base de datos no se actualiza con la información debida. Solución: con un editor de base de datos como phpmyadmin, elimine el registro en la tabla "Tema" correspondiente a las carpetas eliminadas. ¡Espero que esto sea de ayuda!

Soundararajan m
fuente
0

Sé que esta pregunta es bastante antigua, pero como me encontré con esto hace poco y descubrí rápidamente cuál era mi problema, decidí publicar mi respuesta como un recordatorio para todos aquellos que, como yo, usan PhpStorm para trabajar con Magento: recuerde revisar sus archivos cuando cambie de sucursales.

En mi caso, la rama en la que estaba trabajando no tenía los archivos de tema requeridos (fueron escondidos por PhpStorm cuando cambié de la rama de tema a la rama maestra) porque aún no se han fusionado, por lo tanto, el error.

Espero que esto pueda ayudar a alguien.

Renan Lazarotto
fuente
-1

elimine todos los archivos temporales del tema que no está utilizando en el sitio web y elimine también del tema que no está utilizando y ejecute el caché: flush

zeshan rahman
fuente