Ajout d'un bloc de contenu à la page d'accueil, suppression de «std» <div>

9

Je veux faire quelques choses, et je suis nouveau et très très loin de maîtriser Magento; ce que je demande, c'est la meilleure façon, la plus concise, de faire ce qui suit:

  1. Je voudrais modifier le contenu de ma page d'accueil - et probablement toutes les autres pages CMS, à mesure que j'avance dans ce projet - dans mon éditeur de texte et non dans le panneau d'administration WYSIWYG. Je suppose que j'aurais juste un modèle comme home-content.phtmlcontenant mon balisage pour mes carrousels et tout ce que je finirais par mettre sur ma page d'accueil. Il m'a semblé que la façon la plus logique de le faire était d'attacher ma home-content.phtmlà la getChildHtml('content')méthode dans le panneau d'administration -> CMS -> Pages -> Page d'accueil -> onglet 'Conception' -> Layout Update xml avec un code comme celui-ci:

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

    Cependant, cela a été gâché par la prochaine chose que je voulais faire ...

  2. À mon avis, la structure HTML Magento par défaut est horriblement gonflée, avec trop d'imbrications div( wrapper -> page -> conteneur principal col1-layout -> main -> col-main juste pour accéder au contenu d'une page) . Cela rend le style avec Sass un cauchemar pour moi, avec tous les styles de ces classes divisés en 5 partiels Sass différents. Donc, je nettoie la structure par défaut pour qu'elle corresponde à mes propres principes de conception. Cela implique en partie de supprimer les éléments vides, tels que l'infâme <div class="std"> </div>. Le moyen le plus efficace de s'en débarrasser (car je ne prévois pas d'utiliser le panneau d'administration pour le contenu) est <remove name="cms.wrapper">dans le XML Home Layout Update XML. Le problème est que cela supprime tout ce que j'ajoute avec la méthode ci-dessus ( reference name="content").

Fondamentalement: comment ajouter du contenu à ma page d'accueil avec un .phtml et supprimer le <div class="std"> </div>sans conflit? Je ne comprends pas en quoi la fonctionnalité de admin -> CMS -> mise à jour XML diffère de la fonctionnalité de layout.xml, ni pourquoi je devrais utiliser l'une sur l'autre (comme, ne pourrais-je pas utiliser <cms index-index>pour faire la même chose?) .

Merci d'avance, tout le monde.

Ezratic
la source
Dans mon cas, .stdajoute des styles de liste là où ils ne sont pas souhaités. Comme prévu avec Magento, c'est une procédure longue à résoudre.
rybo111

Réponses:

12

Laissez-nous diviser votre problème en 3 sections et l'examiner.

1. Vous devez ajouter un fichier modèle à votre page CMS

La méthode que vous adopterez ici fonctionnera à coup sûr. C'est-à-dire que vous devez ajouter cet extrait de code dans votre page cms, sous l'onglet de conception

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

Étant donné que votre fichier de modèle est directement contentbloqué, le contenu de votre modèle sera rendu par magento. Vous n'avez donc pas besoin d'utiliser la aspropriété dans votre core/template block.

2. Comment éviter <div class="std"></div>

Ce div est en fait un élément div wrapper pour les pages cms. Voir la définition de ce bloc ici.

  <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>

Comme vous pouvez le voir, le cms.wrapperbloc est de type page/html_wrapper. Ce que fait ce bloc, c'est qu'il enveloppera tout son bloc enfant avec un élément div (élément par défaut) et rendra les blocs enfants automatiquement.

Afin d'éviter ce blocage, vous avez utilisé ce code

<remove name="cms.wrapper">

Mais c'est complètement faux. Il supprime effectivement le div wrapper. Mais avec cela, il supprime également son bloc enfant cms_page. C'est cms_pageavec un type cms/page. Cela signifie qu'il fait référence au bloc Mage_Cms_Block_Page. Ce bloc est le «cœur» des pages CMS. Ainsi, la suppression de l'emballage a également anéanti le bloc cœur de la page CMS. C'est pourquoi vous n'avez obtenu aucune sortie dans votre page cms.

Alors, que devez-vous faire pour éviter cet emballage? La réponse est plutôt simple. Sortez cms_pagede l'emballage puis retirez-le en toute sécurité. Voici donc le code que vous devez utiliser dans votre section de disposition de page 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>

Comme vous pouvez le voir dans le code XML de mise en page, nous supprimons d'abord le wrapper et donc le cms_pagebloc inséré dans notre code. Nous avons également utilisé notre bloc de modèles comme vous pouvez le voir. Cela rendra le contenu du fichier modèle en premier dans votre page, puis suivi du contenu de la page cms.

3. En quoi admin -> CMS -> mise à jour XML diffère de la fonctionnalité de layout.xml

Supposons que vous souhaitiez avoir une apparence spéciale pour l'une des pages CMS que vous avez dans votre site. Pour cela, la meilleure méthode que vous pouvez choisir est d'ajouter la mise à jour de la mise en page via admin-> CMS-> Mise en page. Ce sera uniquement valable pour la page CMS.

Mais si vous avez besoin d'appliquer des modifications générales à toutes les pages CMS, il serait facile d'y aller layout.xml.

Donc, en règle générale, la méthode à adopter pour modifier la mise en page dépend uniquement de ce que vous souhaitez réaliser. En fonction de cela, vous devez choisir une méthode. Pas toutes les méthodes.

J'espère que cela pourra aider

Rajeev K Tomy
la source
3

S'il n'y a qu'une seule page incriminée, alors la manière la plus simple et la plus simple de l'OMI:

Modifiez l' "Design"onglet de la page CMS .

Référencez l'élément wrapper, utilisez la setElementClassméthode pour n'appliquer aucune classe ou une nouvelle classe.

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

Vous devez modifier la disposition, normalement 1column.phtml, 2columns.phtml, etc. et les faire comme vous le souhaitez / besoin.

Ces PHTML sont la structure de base de toute mise en page et sont remplis par programme de mises à jour XML.

Cela n'affectera rien d'autre si vous gardez la cohérence entre vos modèles et mises en page dans votre propre thème.

mbalparda
la source
Comme quoi, ajouter un conditionnel if this is the home page, include this code ...sur toutes les pages de mise en page, puis simplement supprimer le getCHildHtml('content')sur toutes les pages? Je veux apprendre à utiliser Magento et ses meilleurs outils, pas seulement à marteler le problème.
Ezratic
Non, les mises en page sont utilisées tout autour du site, dans différentes circonstances et avec différentes mises à jour en fonction de l'itinéraire. Posez une question à la fois, si vous avez d'autres doutes, posez plus de questions, mais ne modifiez pas celle-ci ou elle pourrait être fermée.
mbalparda
Je n'essaie pas d'être impoli ici; J'apprécie que vous preniez le temps de me répondre. Cependant, je ne pense pas que votre réponse m'aide. J'essaie de supprimer un élément et d'ajouter un bloc à une seule page CMS, mais ma méthode ne fonctionne pas. Je demande donc un qui fonctionne. Je suis conscient de l'objectif général des mises en page et des modèles, et votre "Utiliser les choses correctement et cela fonctionnera" ne répond pas à ma question.
Ezratic
Vous vous trompez cette page pour un "travail des autres gratuitement". La réponse est valide et probablement celle que vous recherchez et une fois que vous saurez comment les choses fonctionnent dans Magento, vous trouverez que cette réponse est la façon de procéder dans ce cas.
mbalparda
Lisez ceci et vous trouverez la plupart de ce dont vous avez besoin: magentocommerce.com/knowledge-base/entry/…
mbalparda
0

Il m'a fallu une minute pour comprendre toutes les directions de la réponse acceptée, donc pour la superposer, c'est tout ce qui était nécessaire pour supprimer le wrapper de toutes les pages CMS: <div class="std"></div>

Dans cms.xml, remplacez le bloc cms_page par:

<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
la source