Loại bỏ div được thêm bởi render và node.tpl.php


15

Tôi đang cố gắng xây dựng một mẫu HTML5 cho Drupal 7 và tôi khá đặc biệt về mã sạch. Tôi muốn toàn quyền kiểm soát HTML và CSS, phần lớn tôi có thể sử dụng chủ đề tùy chỉnh của riêng mình. Nói cách khác, tôi có một bộ HTML5 và CSS mà tôi muốn sử dụng chính xác như trong Drupal. Tôi không quá bận tâm về cách thức hoạt động của toàn bộ chức năng tiền xử lý.

Khi tôi sử dụng 'print render ($ page [' content '])' trong tệp page.tpl.php của tôi, nó sẽ thêm

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

Và sau đó khi tôi thêm 'print render ($ content)' trong nút - custom.tpl.php, nó sẽ thêm

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

Tôi không muốn bất kỳ divs nào. Làm thế nào để tôi thoát khỏi chúng?


Tôi có thể sử dụng $ node-> body [$ node-> ngôn ngữ] [0] ['value']; để hiển thị những gì tôi muốn bên trong page.tpl.php, nhưng sau đó tôi mất lợi thế là có thể sử dụng các trang node.tpl.php tùy chỉnh cho từng loại nội dung. Điều này có nghĩa là tôi có thể sử dụng các câu lệnh có điều kiện bên trong page.tpl.php để thêm các lớp khác nhau cho từng loại nội dung để có được những gì tôi muốn, nhưng đó có vẻ là một giải pháp lộn xộn.
Jack McKenzie

Câu trả lời:


16

Các id và lớp div mà bạn nhìn thấy bên trong $ page ['content'] xuất phát từ area.tpl.php> block.tpl.php> node.tpl.php Nội dung Drupal đi qua các tệp mẫu này, mỗi bước thêm một số div.

  • Bước một

Tập tin area.tpl.php chứa mã như sau

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

Bây giờ nếu bạn thực hiện thay đổi trong tệp này, nó sẽ ảnh hưởng đến tất cả các vùng trên trang của bạn. Nếu bạn chỉ muốn kiểm soát vùng nội dung, hãy tạo một tên tệp mới theo vùng - content.tpl.php trong tệp đó chỉ dán

<?php if ($content): ?>

    <?php print $content; ?>

<?php endif; ?>

Điều này sẽ thoát khỏi div được tạo cho chỉ khu vực nội dung.

  • Bước hai

Tạo một bản sao (nếu chúng tôi thực hiện thay đổi trong block.tpl.php, tất cả các khối sẽ được thực hiện) của block.tpl.php và đặt tên cho nó là block - content.tpl.php và xóa hoặc thay đổi div. Không có div, tập tin sẽ chứa đoạn mã sau để xuất nội dung.

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

Điều này sẽ thoát khỏi div được tạo bởi bock.tpl.php

  • Bước thứ ba

Bây giờ chỉnh sửa tệp node.tpl.php để loại bỏ hoặc thay đổi div. Không có div, tập tin sẽ chứa đoạn mã sau để xuất nội dung. > ">

    <?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']); ?>

Điều này sẽ thoát khỏi tất cả div và các lớp. Bây giờ bạn có thể bọc nội dung với divs của riêng bạn. Xin vui lòng cho tôi biết nếu nó làm việc cho bạn.


Xin chào dkiscool, Cảm ơn câu trả lời cũng được giải thích của bạn. Cho đến nay tôi đã có một nửa cách đó. Sử dụng các thay đổi block.tpl.php và area.tpl.php cho phép tôi thoát khỏi ba div đầu tiên (tức là tập hợp hàng đầu trong câu hỏi của tôi). Tuy nhiên, tệp node.tpl.php của tôi bây giờ chỉ chứa một dòng: print render($content);nhưng ba div thứ hai vẫn còn. Tôi biết nó chọn tập tin nút bên phải như khi tôi thêm một số văn bản vào tập tin.
Jack McKenzie

4
Tôi nghĩ rằng tôi đã giải quyết nó, theo dõi từ bạn chỉ cho tôi đi đúng hướng. Tôi đã thêm một tệp field.tpl.php chỉ chứa một dòng foreach ($items as $delta => $item) { print render($item); }. Bất cứ ai khác có thể muốn bắt đầu với một trường đầy đủ.tpl.php tuy nhiên vì tôi đã lấy ra một vài dòng có thể quan trọng tùy thuộc vào những gì bạn đang cố gắng làm. Ba div cuối cùng đã được thêm vào bởi tệp này - mặc dù tôi hơi bối rối khi tài liệu nói rằng tệp này không được sử dụng và chỉ được cung cấp cho điểm bắt đầu tùy chỉnh.
Jack McKenzie

-2

Những gì làm việc hoàn hảo cho tôi là: strip_tags(render($var));


Đây không phải là con đường để đi. Sử dụng chức năng chủ đề hoặc chức năng tiền xử lý.
gagarine
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.