Jump to content

[Solucionado] Ocultar módulos en paginas CMS concretas


MakeOn

Recommended Posts

Hola!
Quiero dejar por aquí una solución con la que he dado tras navegar por el foro y creo que a alguno le podría interesar. Quería añadirlo como respuesta en un topic donde se trata el tema pero ya fue cerrado y no acepta más respuestas. No se si un moderador puede hacerlo o añadir un enlace a este nuevo topic (Por si alguien como yo llega a aquel buscando esta solución como me ocurrió a mi).

Estaba buscando la forma de ocultar un módulo en una página CMS en concreto y veía que Prestashop en las excepciones de módulos solo permite ocultarla en todas las páginas CMS a la vez sin especificar.

Vi que el todopoderoso, omnipresente y querido @nadie en el otro topic, como siempre, daba la solución, pero intuyo que era para la versión 1.5 ó 1.6 pues no encuentro lo que indica y yo estoy usando la 1.7 (1.7.4.3)

https://www.prestashop.com/forums/topic/236031-ocultar-modulos-en-paginas-cms-solucionado-by-nadie

La solución para la versión 1.5 ó 1.6 (supongo) que daba es la siguiente:

Cita

Posted March 29, 2013

[...]

Ve al fichero:

/themes/default/header.tpl

Busca esto:

<body {if isset($page_name)}id="{$page_name|escape:'htmlall':'UTF-8'}"{/if} class="{if $hide_left_column}hide-left-column{/if}
{if $hide_right_column}hide-right-column{/if} {if $content_only} content_only {/if}">
Y dejalo asi:

<body {if isset($page_name)}id="{$page_name|escape:'htmlall':'UTF-8'}"{/if} class="{if $hide_left_column}hide-left-column{/if}
{if $hide_right_column}hide-right-column{/if} {if $content_only} content_only {/if} {if $smarty.get.id_cms}cms{$smarty.get.id_cms}{/if}">
 

Guarda los cambios.

Recuerda ir a la pestaña Parametros Avanzados -> Rendimiento y forzar compilación.

Ahora vamos al fichero:


http://solufrio.com/themes/default/css/global.css
 

Y añade esto:


.cms20 #right_column {
display:none;
}


.cms20 #center_column {
width: 754px;
margin-right: 3px;
}

 

Como la estructura de archivos a cambiado no encuentro la ruta /themes/default/header.tpl mencionada buscando lo más parecido ha sido la siguiente:

\themes\classic\templates\layouts\layout-both-columns.tpl

Con esta línea:

 <body id="{$page.page_name}" class="{$page.body_classes|classnames}">

 

Tras esto he analizado el código que se genera en el CMS de interés en mi versión 1.7.4.3 y me he dado cuenta de que ya NO hace falta realizar cambios en ningún archivo pues en las clases del Body prestashop ya incluye el ID del CMS en cuestión con esta estructura:
cms-id-6 (Siendo 6 el identificador único de esa página CMS)

Teniendo esto, si en una página concreta quieres hacer que no aparezca por ejemplo el menú podrías crear esta regla CSS:

.cms-id-6 .menu {
    display: none;
}

De esta forma el menú cuando aparezca como descendiente de la clase del CMS especificado no será mostrado, mientras que en el resto de páginas al no ser descendiente de esa clase específica sí será mostrado.

Espero que esta información le pueda servir a alguien como a mi otras de este foro me han ayudado.
Si alguien tiene una solución más simple o eficaz que me lo haga saber por aquí.

P.D.: La ruta donde incluir la regla CSS sería: /themes/classic/assets/css/theme.css ¿O quizá en un override para evitar perderlo en actualizaciones?

Edited by nadie
Moderación del foro añade la palabra "Solucionado" al título del tema para conseguir una mayor organización. (see edit history)
  • Like 1
Link to comment
Share on other sites

hace 5 horas, MakeOn dijo:

Hola!
Quiero dejar por aquí una solución con la que he dado tras navegar por el foro y creo que a alguno le podría interesar. Quería añadirlo como respuesta en un topic donde se trata el tema pero ya fue cerrado y no acepta más respuestas. No se si un moderador puede hacerlo o añadir un enlace a este nuevo topic (Por si alguien como yo llega a aquel buscando esta solución como me ocurrió a mi).

Estaba buscando la forma de ocultar un módulo en una página CMS en concreto y veía que Prestashop en las excepciones de módulos solo permite ocultarla en todas las páginas CMS a la vez sin especificar.

Vi que el todopoderoso, omnipresente y querido @nadie en el otro topic, como siempre, daba la solución, pero intuyo que era para la versión 1.5 ó 1.6 pues no encuentro lo que indica y yo estoy usando la 1.7 (1.7.4.3)

https://www.prestashop.com/forums/topic/236031-ocultar-modulos-en-paginas-cms-solucionado-by-nadie

La solución para la versión 1.5 ó 1.6 (supongo) que daba es la siguiente:

 

Como la estructura de archivos a cambiado no encuentro la ruta /themes/default/header.tpl mencionada buscando lo más parecido ha sido la siguiente:

\themes\classic\templates\layouts\layout-both-columns.tpl

Con esta línea:


 <body id="{$page.page_name}" class="{$page.body_classes|classnames}">

 

Tras esto he analizado el código que se genera en el CMS de interés en mi versión 1.7.4.3 y me he dado cuenta de que ya NO hace falta realizar cambios en ningún archivo pues en las clases del Body prestashop ya incluye el ID del CMS en cuestión con esta estructura:
cms-id-6 (Siendo 6 el identificador único de esa página CMS)

Teniendo esto, si en una página concreta quieres hacer que no aparezca por ejemplo el menú podrías crear esta regla CSS:


.cms-id-6 .menu {
    display: none;
}

De esta forma el menú cuando aparezca como descendiente de la clase del CMS especificado no será mostrado, mientras que en el resto de páginas al no ser descendiente de esa clase específica sí será mostrado.

Espero que esta información le pueda servir a alguien como a mi otras de este foro me han ayudado.
Si alguien tiene una solución más simple o eficaz que me lo haga saber por aquí.

P.D.: La ruta donde incluir la regla CSS sería: /themes/classic/assets/css/theme.css ¿O quizá en un override para evitar perderlo en actualizaciones?

Veo que salgo mencionado en el mensaje :)

Respecto al CSS, añade los cambios del css en el /themes/plantilla/custom.css, evitando añadirlos en el theme.css

Respecto a lo que comentas de que ya aparece el ID impreso (en la 1.7 sin modificar el TPL) lo comente en mi blog hace unos días (17 de octubre 2018) => https://victor-rodenas.com/2018/10/17/fondo-independiente-en-las-paginas-de-contenido-en-prestashop/, con un ejemplo distinto, pero que de un modo u otro veo que es lo que has realizado.

Por otro lado,

Si bien, puedes ocultarlo con un display:none en el CSS, (lo digo porque aunque lo ocultes, en código esta, y si no quieres que ni siquiera  este el código), es mejor editar la clase del módulo (hacer su correspondiente override) y cortar la ejecución dentro de la función correspondiente con un if.

Edited by nadie (see edit history)
  • Like 1
Link to comment
Share on other sites

hace 1 hora, nadie dijo:

 

Si bien, puedes ocultarlo con un display:none en el CSS, (lo digo porque aunque lo ocultes, en código esta, y si no quieres que ni siquiera  este el código), es mejor editar la clase del módulo (hacer su correspondiente override) y cortar la ejecución dentro de la función correspondiente con un if.

No me he podido resistir y sobre este último punto que te comentaba, te he construido una guía (rápida) aquí => https://victor-rodenas.com/ocultar-modulo-por-pagina-de-contenido-en-prestashop-1-7/

Saludos

  • Thanks 1
Link to comment
Share on other sites

11 hours ago, nadie said:

Veo que salgo mencionado en el mensaje :)

Respecto al CSS, añade los cambios del css en el /themes/plantilla/custom.css, evitando añadirlos en el theme.css

Respecto a lo que comentas de que ya aparece el ID impreso (en la 1.7 sin modificar el TPL) lo comente en mi blog hace unos días (17 de octubre 2018) => https://victor-rodenas.com/2018/10/17/fondo-independiente-en-las-paginas-de-contenido-en-prestashop/, con un ejemplo distinto, pero que de un modo u otro veo que es lo que has realizado.

Por otro lado,

Si bien, puedes ocultarlo con un display:none en el CSS, (lo digo porque aunque lo ocultes, en código esta, y si no quieres que ni siquiera  este el código), es mejor editar la clase del módulo (hacer su correspondiente override) y cortar la ejecución dentro de la función correspondiente con un if.

 

Omnipresente, si ya decía yo! =P

Perfecto lo del CSS en Custom, a eso me refería con lo de override del final, que no sabía donde era para el CSS

Vaya! El artículo que comentas me lo debí de saltar, Estuve rebuscando por allí sin éxito y resulta que estaba delante de mis narices :facepalm:

Sin duda es una de mis fuentes habituales, aprovecho para darte la enhorabuena. =)

He leído el artículo, Interesante saber que también se indica el identificador del CMS en la sección content seguro que me es de utilidad.

Por ahora lo he hecho así con display:none porque, por un lado no sabía hacerlo de la otra forma jejeje, y por otra porque no se como dejaré finalmente el diseño y eso me permite hacer y deshacer rápidamente.

Además he estado probando también a eliminar ocultar así fácilmente el logo, el Breadcrum y el título.

La idea es crear una landing page sin distracciones para que el visitante no se disperse y siga la ruta de venta establecida, lo cual mejorará su experiencia y nuestra conversión ;)

Salu2!

Link to comment
Share on other sites

10 hours ago, nadie said:

No me he podido resistir y sobre este último punto que te comentaba, te he construido una guía (rápida) aquí => https://victor-rodenas.com/ocultar-modulo-por-pagina-de-contenido-en-prestashop-1-7/

Saludos

 

Ya le he echado un ojo, lo voy a tener muy en cuenta para esta tarea (Todo lo que pueda eliminar de la carga en la landing es bienvenido!) Seguro que lo uso además en otras futuras tareas en las que me pueda encontrar.

De nuevo muchas gracias por compartir tu conocimiento =)

Salu2!

Link to comment
Share on other sites

  • 4 years later...

Buenas, necesito hacer esto mismo que explicáis más arriba, pero no termino de encontrar el id:

<body id="module-zakeke-customizer" class="lang-es country-es currency-eur layout-full-width page- tax-display-enabled product-id-9 product-dogo-premium product-id-category-3 product-id-manufacturer-0 product-id-supplier-0 product-available-for-order add1 filter_lay1 elementor-editor-active side_lay1" data-elementor-device-mode="desktop">

De todos modos, me he dado cuenta, que bloqueando el módulo del slider en todas las excepciones que da del hook, desaparece de todas partes, menos de la página que necesito que desaparezca, que cosas. No sé si este modo he de hacerlo con cada artículo o si se puede hacer con todos los artículos de la categoría que seleccione.

No se si pedir ayuda con el código que planteais aquí, que no he conseguido que desaparezca, o si se pudiera añadir la página que realmente necesito en excepciones para que no cargue en dicha página (aunque si que aparecen excepciones del módulo del que quiero quitarlo, pero aunque las añada no le afecta).

Resumo que no me he explicado bien:

1. tengo un módulo en mi prestashop para dar opciones de personalización de artículos al cliente.

2. tengo el slider revolution para la página principal.

3. tengo en la configuración del slider revolution activadas/seleccionadas todas las excepciones excepto el index que es en el único sitio que quiero que se vea.

4 quiero, que cuando el cliente entre a configurar el artículo no aparezca el slider revolution, que a pesar de tener las excepciones de dicho módulo marcadas, sigue saliendo.

a vuestra sabiduría me encomiendo.

 

excepciones.jpg

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...