render 및 node.tpl.php로 추가 된 div 제거


15

Drupal 7 용 HTML5 템플릿을 만들려고하는데 깨끗한 코드가 매우 중요합니다. 나는 대부분 자신의 사용자 정의 테마를 사용하는 HTML과 CSS를 완전히 제어하기를 원합니다. 즉, Drupal에서와 마찬가지로 정확하게 사용하려는 HTML5 및 CSS 세트가 있습니다. 나는 전처리 기능이 어떻게 작동하는지에 대해 너무 잘 알고 있지 않습니다.

내 page.tpl.php 파일에서 'print render ($ page ['content '])'를 사용하면 추가됩니다.

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

이 div를 원하지 않습니다. 그것들을 어떻게 제거합니까?


$ node-> body [$ node-> language] [0] [ 'value'];를 사용할 수 있습니다. page.tpl.php 안에 원하는 것을 표시하지만 각 콘텐츠 유형에 대해 사용자 정의 node.tpl.php 페이지를 사용할 수 있다는 이점을 잃습니다. 즉, page.tpl.php 안에 조건문을 사용하여 각 콘텐츠 유형마다 다른 클래스를 추가하여 원하는 것을 얻을 수 있지만 지저분한 솔루션으로 보입니다.
잭 맥켄지

답변:


16

$ page [ 'content'] 안에있는 div id와 클래스는 region.tpl.php> block.tpl.php> node.tpl.php에서 가져옵니다 Drupal 컨텐츠는 이러한 템플릿 파일을 통과하며, 각 단계는 div를 추가합니다.

  • 1 단계

region.tpl.php 파일은 다음과 같은 코드를 포함합니다

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

이제이 파일을 변경하면 페이지의 모든 영역에 영향을 미칩니다. 컨텐트 영역 만 제어하려면 해당 파일 붙여 넣기에서만 영역 인 content.tpl.php라는 새 파일 이름을 만듭니다.

<?php if ($content): ?>

    <?php print $content; ?>

<?php endif; ?>

콘텐츠 영역에 대해서만 생성 된 div가 제거됩니다.

  • 2 단계

block.tpl.php를 복사하고 (block.tpl.php에서 변경하면 모든 블록이 적용됨) 블록 이름을 block-content.tpl.php로 지정하고 div를 제거하거나 변경하십시오. div가 없으면 파일에 내용을 출력하는 다음 코드가 포함됩니다.

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

이것은 bock.tpl.php에 의해 생성 된 div를 제거합니다

  • 3 단계

이제 node.tpl.php 파일을 편집하여 div를 제거하거나 변경하십시오. div가 없으면 파일에 내용을 출력하는 다음 코드가 포함됩니다. > ">

    <?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);하지만 두 번째 div는 남아 있습니다. 파일에 텍스트를 추가 할 때 올바른 노드 파일을 선택하는 것이 좋습니다.
잭 맥켄지

4
나는 당신이 올바른 방향으로 나를 가리키는 다음에 그것을 해결했다고 생각합니다. 한 줄만 포함 된 field.tpl.php 파일을 추가했습니다 foreach ($items as $delta => $item) { print render($item); }. 그러나 다른 사람은 전체 field.tpl.php로 시작하고 싶을 수도 있습니다. 왜냐하면 당신이하려는 일에 따라 중요 할 수있는 몇 줄을 가져 갔기 때문입니다. 마지막 3 개의 div 가이 파일에 의해 추가되었습니다. 문서 에서이 파일이 사용되지 않고 사용자 정의 시작점에만 제공된다고 말하는 것이 약간 혼란 스럽습니다.
잭 맥켄지

-2

나를 위해 완벽하게 작동하는 것은 다음과 같습니다. strip_tags(render($var));


이것은 갈 길이 아닙니다. 테마 기능 또는 전처리 기능을 사용하십시오.
gagarine
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.