Thêm khối nội dung vào Trang chủ, xóa 'std' <div>


9

Tôi muốn làm một vài điều, và tôi là người mới và rất xa thành thạo với Magento; những gì tôi đang yêu cầu là cách tốt nhất, ngắn gọn nhất để làm như sau:

  1. Tôi muốn chỉnh sửa nội dung của trang chủ của tôi và có lẽ là mọi trang CMS khác, khi tôi tìm hiểu thêm về dự án này trong trình soạn thảo văn bản của mình chứ không phải trong bảng quản trị WYSIWYG. Tôi đoán tôi chỉ cần có một mẫu như home-content.phtmlchứa đánh dấu của tôi cho (các) băng chuyền của tôi và bất cứ điều gì khác cuối cùng tôi đưa lên trang chủ của mình. Dường như đối với tôi cách hợp lý nhất để làm điều này là chú của tôi home-content.phtmlđến getChildHtml('content')phương pháp trong bảng điều khiển quản trị -> CMS -> Trang -> Trang chủ -> 'Thiết kế' tab -> Layout Update xml với mã như thế này:

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

    Tuy nhiên, điều đó đã bị rối tung bởi điều tiếp theo tôi muốn làm ...

  2. Theo tôi, cấu trúc Magento HTML mặc định rất khủng khiếp, với quá nhiều bố cụcdiv ( trình bao bọc -> trang -> ngăn chứa col1 chính -> chính -> col-main chỉ để đi đến nội dung của trang) . Nó khiến việc tạo kiểu với Sass trở thành cơn ác mộng đối với tôi, với tất cả các phong cách của các lớp đó được chia thành 5 phần khác nhau của Sass. Vì vậy, tôi đang làm sạch cấu trúc mặc định để phù hợp với hiệu trưởng thiết kế của riêng tôi. Một phần của điều này có nghĩa là loại bỏ các yếu tố trống rỗng, chẳng hạn như khét tiếng <div class="std"> </div>. Cách hiệu quả nhất để loại bỏ điều này (vì tôi không có kế hoạch sử dụng bảng quản trị cho nội dung) là <remove name="cms.wrapper">trong XML Cập nhật Bố cục Trang chủ CMS. Vấn đề là, điều này loại bỏ bất cứ điều gì tôi thêm bằng phương thức trên ( reference name="content").

Về cơ bản: Làm cách nào tôi có thể thêm nội dung vào Trang chủ của mình bằng một .phtml xóa <div class="std"> </div>mà không có xung đột? Tôi không hiểu chức năng của quản trị viên -> CMS -> XML cập nhật bố cục khác với chức năng của layout.xml như thế nào hoặc tại sao tôi nên sử dụng cái này hơn cái kia (như, tôi không thể sử dụng <cms index-index>để làm điều tương tự?) .

Cảm ơn trước mọi người.


Trong trường hợp của tôi, .stdthêm các kiểu danh sách mà họ không muốn. Có thể dự đoán với Magento, đây là một thủ tục dài để giải quyết.
rybo111

Câu trả lời:


12

Hãy để chúng tôi chia vấn đề của bạn thành 3 phần và xem xét nó.

1. Bạn cần thêm một tệp mẫu vào Trang CMS của bạn

Phương pháp bạn áp dụng ở đây sẽ làm việc chắc chắn. Đó là bạn cần thêm đoạn mã này vào trang cms của mình, dưới tab thiết kế

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

Vì tệp mẫu của bạn trực tiếp nằm dưới contentkhối, nội dung mẫu của bạn sẽ được magento hiển thị. Vì vậy, bạn không cần phải sử dụng astài sản trong của bạn core/template block.

2. Cách tránh <div class="std"></div>

Div này thực sự là một phần tử div bao bọc cho các trang cms. Xem định nghĩa của khối này ở đây.

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

Như bạn có thể thấy, cms.wrapperkhối là loại page/html_wrapper. Những gì khối này làm là, nó sẽ bao bọc tất cả các khối con của nó bằng một phần tử div (phần tử mặc định) và tự động kết xuất các khối con.

Để tránh khối này, bạn đã sử dụng mã này

<remove name="cms.wrapper">

Tuy nhiên nó hoàn toàn sai. Nó thực sự loại bỏ div bao bọc thực sự. Nhưng cùng với đó nó cũng loại bỏ nó con cms_page. Đây cms_pagelà với một loại cms/page. Điều đó có nghĩa là nó tham chiếu đến khối Mage_Cms_Block_Page. Khối này là "trái tim" của Trang CMS. Vì vậy, loại bỏ trình bao bọc cũng xóa sạch khối trái tim của Trang CMS. Đó là lý do tại sao bạn không nhận được bất kỳ đầu ra nào trong trang cms của mình.

Vì vậy, những gì bạn nên làm để tránh bọc này? Câu trả lời là khá đơn giản. Thoát cms_pagekhỏi bọc và sau đó gỡ bỏ bọc một cách an toàn. Vì vậy, đây là mã mà bạn cần sử dụng trên phần bố trí trang cms của bạn.

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

Như bạn có thể thấy trong mã xml bố cục, trước tiên chúng tôi xóa trình bao bọc và do đó chèn cms_pagekhối thông qua mã của chúng tôi. Chúng tôi cũng đã sử dụng khối mẫu của chúng tôi như bạn có thể thấy. Điều này sẽ hiển thị nội dung của tệp mẫu trước trong trang của bạn, sau đó là nội dung trang cms.

3. Cách quản trị viên -> CMS -> cập nhật bố cục XML khác với chức năng của layout.xml

Giả sử bạn muốn có sự xuất hiện đặc biệt cho một trong các Trang CMS mà bạn có trong trang web của mình. Vì thế, phương pháp tốt nhất mà bạn có thể chọn là, thêm cập nhật bố cục thông qua quản trị viên-> CMS-> Bố cục. Điều này sẽ chỉ áp dụng cho trang CMS.

Nhưng nếu bạn cần áp dụng một số thay đổi chung cho tất cả các Trang CMS, thì nó sẽ dễ dàng thực hiện layout.xml.

Vì vậy, nói chung, phương pháp nào nên áp dụng để thay đổi bố cục hoàn toàn phụ thuộc vào những gì bạn muốn đạt được. Tùy thuộc vào đó, bạn cần phải đi với một phương pháp. Không phải tất cả phương pháp.

Mong rằng sẽ giúp


3

Nếu chỉ có một trang vi phạm, thì IMO là cách tốt nhất và dễ nhất:

Chỉnh sửa "Design"tab của trang CMS .

Tham chiếu phần tử trình bao bọc, sử dụng setElementClassphương thức để áp dụng không có lớp hoặc lớp mới.

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

0

Bạn nên sửa đổi bố cục, thông thường là 1column.phtml, 2columns.phtml, v.v. và làm cho chúng như bạn muốn / cần.

Các PHTML đó là cấu trúc cơ bản của bất kỳ bố cục nào và được lấp đầy bằng các bản cập nhật XML.

Điều này sẽ không ảnh hưởng đến bất cứ điều gì khác nếu bạn giữ sự thống nhất giữa các mẫu và bố cục trong chủ đề của riêng bạn.


Giống như những gì, thêm một điều kiện if this is the home page, include this code ...trên tất cả các trang bố trí, sau đó chỉ cần xóa getCHildHtml('content')trên tất cả các trang? Tôi muốn tìm hiểu cách sử dụng Magento và các công cụ của nó tốt hơn, không chỉ là vấn đề.
Ezratic

Không, bố cục được sử dụng tất cả xung quanh trang web, trong các trường hợp khác nhau và với các cập nhật khác nhau tùy theo tuyến đường. Đặt một câu hỏi tại thời điểm đó, nếu bạn có nhiều nghi ngờ, hãy đặt nhiều câu hỏi hơn, nhưng không chỉnh sửa câu hỏi này hoặc nó có thể bị đóng.
mbalparda

Tôi không cố tỏ ra thô lỗ ở đây; Tôi đánh giá cao bạn dành thời gian để trả lời tôi. Tuy nhiên, tôi không nghĩ rằng câu trả lời của bạn giúp tôi. Tôi đang cố gắng loại bỏ một phần tử và thêm một khối vào một trang CMS, nhưng phương pháp của tôi không hoạt động. Vì vậy, tôi đang yêu cầu một phần tử hoạt động. Tôi nhận thức được mục đích chung của bố cục và mẫu và "Sử dụng chính xác mọi thứ và nó sẽ hoạt động" không trả lời câu hỏi của tôi.
Ezratic

Bạn đang nhầm trang này là "làm người khác làm việc miễn phí". Câu trả lời là hợp lệ và có lẽ là câu bạn đang tìm kiếm và một khi bạn biết cách mọi thứ hoạt động trong Magento, bạn sẽ thấy câu trả lời này là cách để tiến hành trong trường hợp này.
mbalparda

Đọc cái này và bạn sẽ tìm thấy hầu hết những gì bạn cần: magentoc Commerce.com/ledgeledge-base/entry/iêu
mbalparda

0

Tôi mất một phút để hiểu tất cả các hướng trong câu trả lời được chấp nhận, vì vậy để cõng nó, đây là tất cả những gì cần thiết để xóa trình bao cho tất cả các trang CMS: <div class="std"></div>

Trong cms.xml, thay đổi khối cms_page thành:

<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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.