การลบ div ที่เพิ่มโดย render และ node.tpl.php


15

ฉันพยายามสร้างเทมเพลต HTML5 สำหรับ Drupal 7 และฉันค่อนข้างเฉพาะเจาะจงเกี่ยวกับโค้ดที่ชัดเจน ฉันต้องการควบคุม HTML และ CSS อย่างเต็มที่โดยส่วนใหญ่ฉันจะใช้ธีมที่กำหนดเองของฉันเอง ในคำอื่น ๆ ฉันมีชุด HTML5 และ CSS ที่ฉันต้องการใช้ตรงตามที่เป็นใน Drupal ฉันไม่ได้ยึดติดกับการทำงานของฟังก์ชั่น pre-process ทั้งหมด

เมื่อฉันใช้ 'print render ($ page [' content '])' ในไฟล์ page.tpl.php ของฉันมันจะเพิ่มเข้าไป

<div class="region region-content"> 
    <div id="block-system-main" class="block block-system"> 
        <div class="content">

และเมื่อฉันเพิ่ม 'print render ($ content)' ในโหนด - custom.tpl.php จะเพิ่ม

<div class="field field-name-body field-type-text-with-summary field-label-hidden">
    <div class="field-items">
        <div class="field-item even" property="content:encoded">

ฉันไม่ต้องการ Divs เหล่านี้ ฉันจะกำจัดพวกเขาได้อย่างไร


ฉันสามารถใช้ $ node-> body [$ node-> language] [0] ['value']; เพื่อแสดงสิ่งที่ฉันต้องการภายใน page.tpl.php แต่ฉันสูญเสียความได้เปรียบในการใช้หน้า node.tpl.php ที่กำหนดเองสำหรับเนื้อหาแต่ละประเภท ซึ่งหมายความว่าฉันสามารถใช้คำสั่งแบบมีเงื่อนไขภายใน page.tpl.php เพื่อเพิ่มคลาสที่แตกต่างกันสำหรับเนื้อหาแต่ละประเภทเพื่อให้ได้สิ่งที่ฉันต้องการ แต่ดูเหมือนจะเป็นวิธีที่ยุ่งเหยิง
Jack McKenzie

คำตอบ:


16

รหัส div และคลาสที่คุณเห็นใน $ page ['content'] มาจาก region.tpl.php> block.tpl.php> node.tpl.php เนื้อหา Drupal ส่งผ่านไฟล์เทมเพลตเหล่านี้แต่ละขั้นตอนจะเพิ่ม divs บางส่วน

  • ขั้นตอนแรก

ไฟล์ region.tpl.php มีรหัสดังนี้

       <?php if ($content): ?>
  <div class="<?php print $classes; ?>">
    <?php print $content; ?>
  </div>
<?php endif; ?>

ตอนนี้ถ้าคุณทำการเปลี่ยนแปลงในไฟล์นี้มันจะมีผลกับทุกพื้นที่ของหน้าของคุณ หากคุณต้องการควบคุมเฉพาะพื้นที่เนื้อหาให้สร้างชื่อไฟล์ใหม่ที่ชื่อว่า region - content.tpl.php ในไฟล์นั้นวางเท่านั้น

<?php if ($content): ?>

    <?php print $content; ?>

<?php endif; ?>

สิ่งนี้จะกำจัด div ที่สร้างขึ้นสำหรับพื้นที่เนื้อหาเท่านั้น

  • ขั้นตอนที่สอง

ทำสำเนา (ถ้าเราทำการเปลี่ยนแปลงใน block.tpl.php บล็อกทั้งหมดจะได้รับผลกระทบ) ของ block.tpl.php และตั้งชื่อบล็อก - content.tpl.php และลบหรือเปลี่ยนแปลง divs หากไม่มีการหารไฟล์จะมีรหัสต่อไปนี้เพื่อส่งออกเนื้อหา

<?php print render($title_prefix); ?>
    <?php if ($block->subject): ?>
      <h2 class="block-title"<?php print $title_attributes; ?>><?php print $block->subject ?></h2>
    <?php endif;?>
      <?php print render($title_suffix); ?>
      <?php print $content; ?>

สิ่งนี้จะกำจัด div ที่สร้างโดย bock.tpl.php

  • ขั้นตอนที่สาม

ตอนนี้แก้ไขไฟล์ node.tpl.php เพื่อลบหรือเปลี่ยน divs หากไม่มีการหารไฟล์จะมีรหัสต่อไปนี้เพื่อส่งออกเนื้อหา > ">

    <?php print $user_picture; ?>

    <?php if ($display_submitted): ?>
      <span class="submitted"><?php print $date; ?><?php print $name; ?></span>
    <?php endif; ?>


        <?php
          // We hide the comments and links now so that we can render them later.
        hide($content['comments']);
        hide($content['links']);
        print render($content);
       ?>


    <?php if (!empty($content['links']['terms'])): ?>
      <?php print render($content['links']['terms']); ?>
    <?php endif;?>

    <?php if (!empty($content['links'])): ?>
        <?php print render($content['links']); ?>
      <?php endif; ?>




<?php print render($content['comments']); ?>

นี่จะเป็นการกำจัด div และคลาสทั้งหมด ตอนนี้คุณสามารถตัดเนื้อหาด้วย div ของคุณเอง โปรดแจ้งให้เราทราบหากมันเหมาะกับคุณ


สวัสดี dkiscool ขอบคุณสำหรับคำตอบที่อธิบายได้ดี จนถึงตอนนี้ฉันก็ไปครึ่งทางแล้ว การใช้การเปลี่ยนแปลง block.tpl.php และ region.tpl.php ทำให้ฉันสามารถกำจัด div สามตัวแรก (เช่นชุดที่อยู่ในคำถามของฉัน) อย่างไรก็ตามตอนนี้ไฟล์ node.tpl.php ของฉันมีเพียงหนึ่งบรรทัด: print render($content);แต่ divs ที่สองที่เหลืออยู่ ฉันรู้ว่ามันเก็บไฟล์โหนดที่ถูกต้องเหมือนตอนที่ฉันเพิ่มข้อความลงในไฟล์
Jack McKenzie

4
ฉันคิดว่าฉันแก้ไขมันแล้วจากที่คุณชี้ให้ฉันไปในทิศทางที่ถูกต้อง ฉันเพิ่มไฟล์ field.tpl.php foreach ($items as $delta => $item) { print render($item); }ที่มีเพียงหนึ่งบรรทัด ใครก็ตามที่อาจต้องการเริ่มต้นด้วย field.tpl.php เต็มรูปแบบ แต่เนื่องจากฉันเอาออกไม่กี่บรรทัดที่อาจมีความสำคัญขึ้นอยู่กับสิ่งที่คุณพยายามทำ มีการเพิ่ม div สามไฟล์สุดท้าย - แม้ว่าฉันจะสับสนเล็กน้อยในเอกสารประกอบบอกว่าไฟล์นี้ไม่ได้ใช้และมีไว้สำหรับจุดเริ่มต้นปรับแต่งเท่านั้น
Jack McKenzie

-2

สิ่งที่ใช้ได้ผลสำหรับฉันคือ: strip_tags(render($var));


นี่ไม่ใช่วิธีที่จะไป ใช้ฟังก์ชั่นชุดรูปแบบหรือฟังก์ชั่น preprocess
กาการีน
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.