การเพิ่มบล็อกเนื้อหาลงในหน้าแรกโดยลบ 'std' <div>


9

ฉันต้องการทำบางสิ่งและฉันใหม่และไกลมากจากความเชี่ยวชาญของ Magento; สิ่งที่ฉันขอเป็นวิธีที่ดีที่สุดและรัดกุมที่สุดในการทำสิ่งต่อไปนี้:

  1. ฉันต้องการแก้ไขเนื้อหาของหน้าแรกของฉันและอาจเป็นหน้า CMS อื่น ๆ ตามที่ฉันได้รับเพิ่มเติมในโครงการนี้ - ในเครื่องมือแก้ไขข้อความของฉันและไม่ได้อยู่ในแผงการดูแลระบบ WYSIWYG ฉันเดาว่าฉันจะมีเทมเพลตเหมือนhome-content.phtmlที่มีมาร์กอัปของฉันสำหรับม้าหมุน (s) และสิ่งอื่นใดที่ฉันวางลงบนหน้าแรกของฉัน สำหรับฉันแล้ววิธีที่เหมาะสมที่สุดในการทำเช่นนี้คือแนบฉันhome-content.phtmlเข้ากับgetChildHtml('content')วิธีการในแผงผู้ดูแลระบบ -> CMS -> หน้า -> หน้าแรก -> แท็บ 'ออกแบบ' -> ปรับปรุงเค้าโครง xml ด้วยรหัสดังนี้

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

    อย่างไรก็ตามนั่นก็ทำให้ฉันสับสนในสิ่งต่อไปที่ฉันอยากจะทำ ...

  2. ในความคิดของฉันโครงสร้าง HTML แบบวีโอไอพีเริ่มต้นนั้นป่องน่ากลัวโดยมีเลเยอร์มากเกินไปdiv( wrapper -> page -> main-container col1-layout -> main -> col-mainเพียงเพื่อให้ได้เนื้อหาของหน้า) . มันทำให้การแต่งสไตล์ด้วย Sass เป็นฝันร้ายสำหรับฉันด้วยสไตล์ของคลาสเหล่านั้นแบ่งออกเป็น 5 ส่วน Sass ที่แตกต่างกัน ดังนั้นฉันกำลังล้างโครงสร้างเริ่มต้นเพื่อให้ตรงกับหลักการออกแบบของฉันเอง <div class="std"> </div>เป็นส่วนหนึ่งของที่นี้หมายถึงการเอาองค์ประกอบที่ว่างเปล่าเช่นที่น่าอับอาย วิธีที่มีประสิทธิภาพมากที่สุดในการกำจัดสิ่งนี้ (เพราะฉันไม่ได้วางแผนที่จะใช้แผงควบคุมสำหรับเนื้อหา) อยู่<remove name="cms.wrapper">ใน XML Home Layout Update XML ปัญหาคือสิ่งนี้จะลบสิ่งที่ฉันเพิ่มด้วยวิธีการข้างต้น ( reference name="content")

โดยทั่วไป:ฉันจะเพิ่มเนื้อหาในหน้าแรกของฉันด้วย.phtml และลบออก<div class="std"> </div>โดยไม่ขัดแย้งได้อย่างไร ฉันไม่เข้าใจวิธีการทำงานของผู้ดูแลระบบ -> CMS -> XML การอัปเดตโครงร่างแตกต่างจากการทำงานของ layout.xml หรือทำไมฉันจึงควรใช้สิ่งใดสิ่งหนึ่งเหนือสิ่งอื่น (เช่นฉันไม่สามารถใช้<cms index-index>เพื่อทำสิ่งเดียวกันได้หรือไม่) .

ขอบคุณล่วงหน้าทุกคน


ในกรณีของฉัน.stdเพิ่มสไตล์รายการที่พวกเขาไม่ต้องการ การคาดเดาด้วย Magento นั้นเป็นขั้นตอนที่ใช้เวลานานในการแก้ไข
rybo111

คำตอบ:


12

ให้เราแบ่งปัญหาของคุณออกเป็น 3 ส่วนและตรวจสอบปัญหา

1. คุณต้องเพิ่มไฟล์เทมเพลตในหน้า CMS ของคุณ

วิธีที่คุณใช้ที่นี่จะทำงานได้อย่างแน่นอน นั่นคือคุณต้องเพิ่มข้อมูลโค้ดนี้ในหน้า cms ​​ของคุณภายใต้แท็บออกแบบ

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

เนื่องจากไฟล์เทมเพลตของคุณอยู่ภายใต้การcontentบล็อกโดยตรงเนื้อหาเทมเพลตของคุณจะแสดงผลโดย magento ดังนั้นคุณจึงไม่จำเป็นต้องใช้คุณสมบัติในของคุณascore/template block

2. วิธีการหลีกเลี่ยง <div class="std"></div>

div นี้เป็นองค์ประกอบ div wrapper สำหรับหน้า cms ดูคำจำกัดความของบล็อกนี้ที่นี่

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

ในขณะที่คุณสามารถดูบล็อกเป็นประเภทcms.wrapper page/html_wrapperสิ่งที่บล็อกนี้ทำคือมันจะห่อบล็อกย่อยทั้งหมดกับองค์ประกอบ div (องค์ประกอบเริ่มต้น) และแสดงบล็อกย่อยโดยอัตโนมัติ

เพื่อหลีกเลี่ยงการบล็อกนี้คุณได้ใช้รหัสนี้

<remove name="cms.wrapper">

อย่างไรก็ตามมันผิดอย่างสมบูรณ์ มันจะลบ div wrapper แน่นอน cms_pageแต่พร้อมกับว่ามันยังเอามันบล็อกเด็ก นี้อยู่กับชนิดcms_page นั่นหมายความว่าการอ้างอิงไปยังบล็อกcms/page Mage_Cms_Block_Pageบล็อกนี้คือ"หัวใจ"ของหน้า CMS ดังนั้นการเอาเสื้อคลุมออกเช็ดบล็อกหัวใจของ CMS Page ด้วย นั่นคือเหตุผลที่คุณไม่ได้รับผลลัพธ์ใด ๆ ในหน้า cms

ดังนั้นสิ่งที่คุณควรทำเพื่อหลีกเลี่ยงเสื้อคลุมนี้? คำตอบนั้นง่ายมาก หนีcms_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>

ดังที่คุณเห็นในโค้ดเลย์เอาต์ xml อันดับแรกเราจะลบเสื้อคลุมออกก่อนแล้วจึงแทรกcms_pageบล็อกผ่านโค้ดของเรา นอกจากนี้เรายังใช้เทมเพลตบล็อกของเราตามที่คุณเห็น สิ่งนี้จะแสดงเนื้อหาของไฟล์เทมเพลตก่อนในหน้าของคุณจากนั้นตามด้วยเนื้อหาหน้า cms

3. ผู้ดูแลระบบ -> CMS -> XML อัปเดตโครงร่างแตกต่างจากการทำงานของ layout.xml อย่างไร

สมมติว่าคุณต้องการมีลักษณะพิเศษสำหรับหนึ่งในหน้า CMS ที่คุณมีในไซต์ของคุณ สำหรับวิธีการที่ดีที่สุดที่คุณสามารถเลือกได้คือเพิ่มการอัพเดตโครงร่างผ่านผู้ดูแลระบบ> CMS-> โครงร่าง สิ่งนี้จะใช้เฉพาะกับหน้า CMS เท่านั้น

แต่ถ้าคุณต้องการที่จะใช้การเปลี่ยนแปลงทั่วไปบางอย่างเพื่อให้หน้า CMS layout.xmlทั้งหมดแล้วมันจะง่ายที่จะไปกับ

ดังนั้นโดยทั่วไปวิธีการใดที่ควรนำมาใช้เพื่อเปลี่ยนเค้าโครงล้วนขึ้นอยู่กับสิ่งที่คุณต้องการที่จะบรรลุ ขึ้นอยู่กับว่าคุณต้องไปด้วยวิธีการหนึ่ง ไม่ใช่วิธีการทั้งหมด

หวังว่าจะช่วย


3

หากมีเพียงหน้าเว็บที่ละเมิดเพียงหน้าเดียวนั่นคือวิธีที่ดีที่สุดและง่ายที่สุด IMO:

แก้ไข"Design"แท็บของหน้า CMS

อ้างอิงองค์ประกอบ wrapper ใช้setElementClassวิธีการใช้คลาสใดหรือคลาสใหม่

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

0

คุณควรแก้ไขเลย์เอาต์ตามปกติ 1column.phtml, 2columns.phtml ฯลฯ และทำให้เลย์เอาต์ตามที่คุณต้องการ / ต้องการ

PHTML เหล่านั้นเป็นโครงสร้างพื้นฐานของรูปแบบใด ๆ และเต็มไปด้วยโปรแกรมด้วยการปรับปรุง XML

สิ่งนี้จะไม่ส่งผลกระทบต่อสิ่งอื่นหากคุณรักษาความสอดคล้องระหว่างแม่แบบและเค้าโครงในชุดรูปแบบของคุณเอง


ชอบอะไรเพิ่มเงื่อนไขif this is the home page, include this code ...บนหน้าเลย์เอาต์ทั้งหมดแล้วเพียงแค่ลบgetCHildHtml('content')ในทุกหน้า? ฉันต้องการเรียนรู้วิธีการใช้ Magento และเป็นเครื่องมือที่ดีกว่าไม่ใช่แค่ค้อนขนาดใหญ่สำหรับปัญหา
Ezratic

ไม่มีการใช้เลย์เอาต์ทั่วไซต์ในสถานการณ์ที่แตกต่างกันและมีการอัปเดตที่แตกต่างกันไปตามเส้นทาง ตั้งคำถามหนึ่งข้อในเวลานั้นหากคุณมีข้อสงสัยเพิ่มเติมให้ตั้งคำถามเพิ่มเติม แต่อย่าแก้ไขคำถามนี้มิฉะนั้นอาจถูกปิด
mbalparda

ฉันไม่ได้พยายามหยาบคายที่นี่ ฉันขอขอบคุณที่คุณสละเวลาตอบฉัน อย่างไรก็ตามฉันไม่คิดว่าคำตอบของคุณจะช่วยฉันได้ ฉันกำลังพยายามลบองค์ประกอบและเพิ่มบล็อกในหน้า CMS เดียว แต่วิธีการของฉันไม่ทำงาน - ดังนั้นฉันจึงขอสิ่งที่ใช้ได้ ฉันรับทราบถึงวัตถุประสงค์ทั่วไปของเค้าโครงและแม่แบบและ "ใช้สิ่งต่าง ๆ อย่างถูกต้องและใช้งานได้" ไม่ตอบคำถามของฉัน
Ezratic

คุณกำลังเข้าใจผิดหน้านี้สำหรับ "ทำคนอื่นทำงานฟรี" คำตอบนั้นถูกต้องและอาจเป็นสิ่งที่คุณกำลังมองหาและเมื่อคุณได้รับรู้ว่าสิ่งที่ทำงานใน Magento คุณจะพบคำตอบนี้เป็นวิธีการดำเนินการในกรณีนี้
mbalparda

อ่านสิ่งนี้และคุณจะพบกับสิ่งที่คุณต้องการมากที่สุด: magentocommerce.com/knowledge-base/entry/…
mbalparda

0

ฉันใช้เวลาสักครู่เพื่อทำความเข้าใจคำแนะนำทั้งหมดในคำตอบที่ยอมรับดังนั้นหากต้องการย้อนกลับไปสิ่งนี้เป็นสิ่งที่จำเป็นในการลบเสื้อคลุมสำหรับหน้า CMS ทั้งหมด: <div class="std"></div>

ใน cms.xml เปลี่ยน cms_page block เป็น:

<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>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.