Menambahkan blok konten ke Home Page, menghapus 'std' <div>

9

Saya ingin melakukan beberapa hal, dan saya baru dan sangat jauh dari mahir dengan Magento; apa yang saya minta adalah cara terbaik dan paling ringkas untuk melakukan hal berikut:

  1. Saya ingin mengedit konten halaman rumah saya — dan mungkin setiap halaman CMS lainnya, saat saya melanjutkan proyek ini — dalam editor teks saya dan bukan di panel admin WYSIWYG. Saya kira saya hanya memiliki template seperti home-content.phtmlberisi markup untuk carousel (s) saya dan apa pun yang akhirnya saya pasang di halaman rumah saya. Tampaknya bagi saya cara yang paling logis untuk melakukan ini adalah melampirkan saya home-content.phtmlke getChildHtml('content')metode dalam panel Admin -> CMS -> Pages -> Halaman -> 'Desain' tab -> Tata Letak Perbarui xml dengan kode seperti ini:

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

    Namun, itu kacau oleh hal berikutnya yang ingin saya lakukan ...

  2. Menurut pendapat saya, struktur HTML Magento default adalah membengkak mengerikan, dengan terlalu banyak bersarang div( wrapper -> halaman -> main-container col1-layout -> main -> col-main hanya untuk mendapatkan konten halaman) . Membuat gaya dengan Sass menjadi mimpi buruk bagi saya, dengan semua gaya kelas dibagi menjadi 5 bagian Sass yang berbeda. Jadi, saya membersihkan struktur default agar sesuai dengan prinsip desain saya sendiri. Bagian dari ini berarti menghilangkan elemen kosong, seperti yang terkenal <div class="std"> </div>. Cara paling ampuh untuk menghilangkan ini (karena saya tidak berencana menggunakan panel admin untuk konten) adalah dengan <remove name="cms.wrapper">di XML Pembaruan Tata Letak CMS. Masalahnya adalah, ini menghapus apa pun yang saya tambahkan dengan metode di atas ( reference name="content").

Pada dasarnya: Bagaimana saya bisa menambahkan konten ke Halaman Beranda saya dengan .phtml dan menghapus <div class="std"> </div>tanpa konflik? Saya tidak mengerti bagaimana fungsi admin -> CMS -> pembaruan tata letak XML berbeda dari fungsionalitas layout.xml, atau mengapa saya harus menggunakan yang satu di atas yang lain (seperti, bisakah saya tidak menggunakan <cms index-index>untuk melakukan hal yang sama?) .

Terima kasih sebelumnya, semuanya.

Ezratic
sumber
Dalam kasus saya, .stdtambahkan gaya daftar di tempat yang tidak diinginkan. Bisa ditebak dengan Magento, itu adalah prosedur yang panjang untuk diselesaikan.
rybo111

Jawaban:

12

Biarkan kami membagi masalah Anda menjadi 3 bagian dan memeriksanya.

1. Anda perlu menambahkan file template ke Halaman CMS Anda

Metode yang Anda adopsi di sini pasti akan berhasil. Itu adalah Anda perlu menambahkan potongan kode ini di dalam halaman cms Anda, di bawah tab desain

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

Karena file template Anda langsung contentdiblokir, konten template Anda akan diberikan oleh magento. Jadi, Anda tidak perlu menggunakan asproperti di core/template block.

2. Cara menghindarinya <div class="std"></div>

Div ini sebenarnya merupakan elemen div pembungkus untuk halaman cms. Lihat definisi dari blok ini di sini.

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

Seperti yang Anda lihat, cms.wrapperblok adalah tipe page/html_wrapper. Apa yang dilakukan blok ini adalah, ia akan membungkus semua blok anaknya dengan elemen div (elemen default) dan membuat blok anak secara otomatis.

Untuk menghindari blok ini, Anda telah menggunakan kode ini

<remove name="cms.wrapper">

Namun itu sama sekali salah. Memang menghapus div pembungkus memang. Tetapi seiring dengan itu juga menghapus itu blok anak cms_page. Ini cms_pagedengan tipe cms/page. Itu berarti referensi ke blok Mage_Cms_Block_Page. Blok ini adalah "jantung" dari Halaman CMS. Jadi melepas pembungkus juga menghapus blok jantung CMS Page. Itu sebabnya Anda tidak mendapatkan output apa pun di halaman cms Anda.

Jadi apa yang harus Anda lakukan untuk menghindari bungkus ini? Jawabannya cukup sederhana. Keluar cms_pagedari pembungkus dan kemudian lepaskan pembungkus dengan aman. Jadi di sini adalah kode yang perlu Anda gunakan pada bagian tata letak halaman cms Anda.

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

Seperti yang Anda lihat di kode tata letak xml, pertama-tama kita menghapus pembungkus dan karenanya memasukkan cms_pageblok melalui kode kita. Kami juga menggunakan blok template kami seperti yang Anda lihat. Ini akan membuat konten file templat pertama di halaman Anda, kemudian diikuti oleh konten halaman cms.

3. Bagaimana admin -> CMS -> pembaruan tata letak XML berbeda dari fungsionalitas tata letak.xml

Misalkan Anda ingin memiliki tampilan khusus untuk salah satu Halaman CMS yang Anda miliki di situs Anda. Untuk itu, metode terbaik yang dapat Anda pilih adalah, tambahkan pembaruan tata letak melalui admin-> CMS-> Layout. Ini akan diterapkan secara unik untuk halaman CMS saja.

Tetapi jika Anda perlu menerapkan beberapa perubahan umum pada semua Halaman CMS, maka itu akan mudah dilakukan layout.xml.

Jadi secara umum, metode apa yang harus diadopsi untuk mengubah tata letak murni tergantung pada apa yang ingin Anda capai. Tergantung pada itu, Anda harus menggunakan satu metode. Tidak semua metode.

Semoga itu bisa membantu

Rajeev K Tomy
sumber
3

Jika hanya ada satu halaman yang menyinggung, maka cara IMO terbaik dan termudah:

Edit "Design"tab halaman CMS .

Referensi elemen pembungkus, gunakan setElementClassmetode untuk menerapkan kelas tanpa atau kelas baru.

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

Anda harus memodifikasi tata letak, biasanya 1column.phtml, 2columns.phtml, dll dan menjadikannya seperti yang Anda inginkan / butuhkan.

PHTML tersebut adalah struktur dasar tata letak apa pun dan secara program terisi dengan pembaruan XML.

Ini tidak akan mempengaruhi hal lain jika Anda menjaga konsistensi antara templat dan tata letak di tema Anda sendiri.

mbalparda
sumber
Seperti apa, menambahkan syarat if this is the home page, include this code ...pada semua halaman tata letak, lalu hanya menghapus getCHildHtml('content')pada semua halaman? Saya ingin belajar cara menggunakan Magento dan alat-alatnya lebih baik, bukan hanya palu masalah.
Ezratic
Tidak, tata letak digunakan di sekitar situs, dalam keadaan yang berbeda dan dengan pembaruan berbeda tergantung rute. Buat satu pertanyaan saat itu, jika Anda memiliki lebih banyak keraguan, buat lebih banyak pertanyaan, tetapi jangan edit yang ini atau mungkin sudah ditutup.
mbalparda
Saya tidak berusaha bersikap kasar di sini; Saya menghargai Anda meluangkan waktu untuk menjawab saya. Namun, saya kira jawaban Anda tidak membantu saya. Saya mencoba untuk menghapus elemen dan menambahkan blok ke satu halaman CMS, tetapi metode saya tidak berfungsi — Jadi saya meminta elemen yang berfungsi. Saya menyadari tujuan umum tata letak dan templat, dan "Gunakan semuanya dengan benar dan akan berfungsi" tidak menjawab pertanyaan saya.
Ezratic
Anda salah halaman ini karena "melakukan pekerjaan orang lain secara gratis". Jawabannya valid dan mungkin yang Anda cari dan setelah Anda mengetahui cara kerja di Magento Anda akan menemukan jawaban ini adalah cara untuk melanjutkan dalam kasus ini.
mbalparda
Baca ini dan Anda akan menemukan sebagian besar yang Anda butuhkan: magentocommerce.com/knowledge-base/entry/…
mbalparda
0

Butuh satu menit untuk memahami semua arahan dalam jawaban yang diterima, jadi untuk mendukungnya, inilah yang diperlukan untuk menghapus pembungkus untuk semua halaman CMS: <div class="std"></div>

Di cms.xml, ubah blok cms_page ke:

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