Agregar bloque de contenido a la página de inicio, eliminar 'std' <div>

9

Quiero hacer algunas cosas, y soy nuevo y estoy muy, muy lejos de ser competente con Magento; Lo que pido es la mejor y más concisa forma de hacer lo siguiente:

  1. Me gustaría editar el contenido de mi página de inicio, y probablemente cualquier otra página de CMS, a medida que avance en este proyecto, en mi editor de texto y no en el panel de administración WYSIWYG. Supongo que tendría una plantilla como la que home-content.phtmlcontiene mi marcado para mi carrusel (s) y cualquier otra cosa que termine poniendo en mi página de inicio. Me pareció que la forma más lógica de hacer esto es adjuntar mi home-content.phtmlal getChildHtml('content')método en el Panel de administración -> CMS -> Páginas -> Página de inicio -> pestaña 'Diseño' -> Actualización de diseño xml con código como este:

    <reference name="content">
                <block type="core/template" name="home-content"
                       as="home-content" template="home-content.phtml" />
    </reference>

    Sin embargo, eso fue arruinado por lo siguiente que quería hacer ...

  2. En mi opinión, la estructura HTML predeterminada de Magento está horriblemente inflada, con demasiados anidados div( wrapper -> página -> main-container col1-layout -> main -> col-main solo para llegar al contenido de una página) . Hace que el estilo con Sass sea una pesadilla para mí, con todos los estilos de esas clases divididos en 5 parciales Sass diferentes. Entonces, estoy limpiando la estructura predeterminada para que coincida con mis propios principios de diseño. Parte de esto significa eliminar elementos vacíos, como el infame <div class="std"> </div>. La forma más eficaz de deshacerse de esto (ya que no planeo usar el panel de administración para el contenido) es con <remove name="cms.wrapper">el XML de actualización de diseño de inicio de CMS. El problema es que esto elimina todo lo que agrego con el método anterior ( reference name="content").

Básicamente: ¿Cómo puedo agregar contenido a mi página de inicio con a .phtml y eliminar el <div class="std"> </div>sin conflicto? No entiendo cómo la funcionalidad de admin -> CMS -> XML de actualización de diseño difiere de la funcionalidad de layout.xml, o por qué debería usar uno sobre el otro (por ejemplo, ¿no podría usarlo <cms index-index>para hacer lo mismo?) .

Gracias de antemano a todos.

Ezratic
fuente
En mi caso, .stdagrega estilos de lista donde no se desean. Predeciblemente con Magento, es un procedimiento largo de resolver.
rybo111

Respuestas:

12

Permítanos dividir su problema en 3 secciones y revisarlo.

1. Necesita agregar un archivo de plantilla a su página CMS

El método que adopte aquí funcionará con seguridad. Es necesario agregar este fragmento de código dentro de su página de cms, en la pestaña de diseño

<reference name="content"><block type="core/template" name="home-content"  template="test.phtml" /></reference>

Dado que su archivo de plantilla está directamente contentbloqueado, el contenido de su plantilla será procesado por magento. Por lo tanto, no necesita usar aspropiedades en su core/template block.

2. Cómo evitar <div class="std"></div>

Este div es en realidad un elemento div de contenedor para páginas cms. Vea la definición de este bloque aquí.

  <block type="page/html_wrapper" name="cms.wrapper" translate="label">
        <label>CMS Content Wrapper</label>
        <action method="setElementClass"><value>std</value></action>
        <block type="cms/page" name="cms_page"/>
  </block>

Como puede ver, el cms.wrapperbloque es de tipo page/html_wrapper. Lo que hace este bloque es que envolverá todo su bloque secundario con un elemento div (elemento predeterminado) y renderizará los bloques secundarios automáticamente.

Para evitar este bloqueo, ha utilizado este código

<remove name="cms.wrapper">

Sin embargo, está completamente equivocado. Elimina el envoltorio div de hecho. Pero junto con eso también elimina el bloqueo infantil cms_page. Esto cms_pagees con un tipo cms/page. Eso significa que hace referencia al bloque Mage_Cms_Block_Page. Este bloque es el "corazón" de las páginas de CMS. Entonces, al quitar el envoltorio, también se eliminó el bloque cardíaco de la página CMS. Es por eso que no obtuvo ningún resultado en su página de cms.

Entonces, ¿qué debes hacer para evitar este envoltorio? La respuesta es bastante simple. Escape cms_pagedel envoltorio y luego retire el envoltorio de forma segura. Así que aquí está el código que debe usar en la sección de diseño de página de su cms.

<reference name="content"><remove name="cms.wrapper" /><block type="core/template" name="home-content"  template="test.phtml" /><block type="cms/page" name="cms_page"/></reference>

Como puede ver en el código xml de diseño, primero eliminamos el contenedor y, por lo tanto, insertamos el cms_pagebloque a través de nuestro código. También usamos nuestro bloque de plantillas como puedes ver. Esto mostrará el contenido del archivo de plantilla primero en su página y luego el contenido de la página cms.

3. Cómo admin -> CMS -> XML de actualización de diseño difiere de la funcionalidad de layout.xml

Supongamos que desea tener una apariencia especial para una de las páginas de CMS que tiene en su sitio. Para eso, el mejor método que puede optar es agregar una actualización de diseño a través de admin-> CMS-> Diseño. Esto se aplicará únicamente para la página CMS solamente.

Pero si necesita aplicar algunos cambios generales a todas las páginas de CMS, sería fácil hacerlo layout.xml.

Por lo tanto, en general, qué método debería adoptar para cambiar el diseño depende únicamente de lo que desea lograr. Dependiendo de eso, debe ir con un método. No todo el método.

Espero que ayude

Rajeev K Tomy
fuente
3

Si solo hay una página ofensiva, entonces la mejor y más fácil manera de IMO:

Edite la "Design"pestaña de la página CMS .

Haga referencia al elemento contenedor, use el setElementClassmétodo para aplicar sin clase o una nueva clase.

<reference name="cms.wrapper">
<action method="setElementClass"><value>none</value></action>
</reference>
MES
fuente
0

Debería modificar el diseño, normalmente 1column.phtml, 2columns.phtml, etc. y hacerlos como desee / necesite.

Esos PHTML son la estructura básica de cualquier diseño y están llenos programáticamente de actualizaciones XML.

Esto no afectará a nada más si mantiene la coherencia entre sus plantillas y diseños en su propio tema.

mbalparda
fuente
¿Como qué, agregar un condicional if this is the home page, include this code ...en todas las páginas de diseño y luego eliminarlo getCHildHtml('content')en todas las páginas? Quiero aprender a usar Magento y sus herramientas son mejores, no solo el problema.
Ezratic
No, los diseños se utilizan en todo el sitio, en diferentes circunstancias y con diferentes actualizaciones según la ruta. Haga una pregunta a la vez, si tiene más dudas, haga más preguntas, pero no edite esta o podría cerrarse.
mbalparda
No estoy tratando de ser grosero aquí; Le agradezco que se haya tomado el tiempo de responderme. Sin embargo, no creo que tu respuesta me ayude. Estoy tratando de eliminar un elemento y agregar un bloque a una sola página de CMS, pero mi método no funciona, por lo que solicito uno que funcione. Soy consciente del propósito general de los diseños y las plantillas, y su "Usar las cosas correctamente y funcionará" no responde a mi pregunta.
Ezratic
Usted está confundiendo esta página con un "hacer que otras personas trabajen gratis". La respuesta es válida y probablemente la que está buscando y una vez que sepa cómo funcionan las cosas en Magento, encontrará que esta respuesta es la forma de proceder en este caso.
mbalparda
Lea esto y encontrará la mayoría de lo que necesita: magentocommerce.com/knowledge-base/entry/…
mbalparda
0

Me tomó un minuto entender todas las instrucciones en la respuesta aceptada, así que para aprovecharla, esto es todo lo que se necesitaba para eliminar el envoltorio de todas las páginas de CMS: <div class="std"></div>

En cms.xml, cambie el bloque cms_page a:

<cms_page translate="label">
    <label>CMS Pages (All)</label>
    <reference name="content">
        <block type="core/template" name="page_content_heading" template="cms/content_heading.phtml"/>
        <block type="cms/page" name="cms_page"/>
    </reference>
</cms_page>
Justin
fuente