แสดงรายการคำศัพท์อนุกรมวิธานที่คั่นด้วยเครื่องหมายจุลภาคหรือไม่


10

Drupal 7

ใน node.tpl.php ของฉันฉันต้องการพิมพ์รายการคำศัพท์ taxonomy (taxonomy เรียกว่า "channels.") ถ้าฉันใช้:

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

เห็นได้ชัดว่าทำงานได้ดีที่สุด แต่สิ่งที่ดีที่สุดที่ฉันสามารถทำได้เพื่อให้พวกเขาอินไลน์คือการใช้ CSS เพื่อปล่อยให้พวกมันลอย ฉันต้องการให้คั่นด้วยเครื่องหมายจุลภาค ความคิดใด ๆ

ขอบคุณ.

คำตอบ:


11

คุณอาจจะลองชุดรูปแบบของข้อมูลโดยใช้หรือfield.tpl.phptheme_field()

เป็นตัวอย่าง (ใช้field.tpl.php):

  1. คัดลอกfield.tpl.phpไปยังไดเรกทอรีธีมของคุณจาก "modules / field / theme"
  2. ทำสำเนาของไฟล์นั้นและเปลี่ยนชื่อเป็น field--field-channel.tpl.php
  3. แก้ไขไฟล์ตามที่คุณต้องการ

ในฐานะที่เป็นตัวอย่างรวดเร็ว / สกปรกสำหรับการทำงานนี้field--field-channel.tpl.phpอาจมีลักษณะ:

<div class="<?php print $classes; ?> clearfix"<?php print $attributes; ?>>
  <?php if (!$label_hidden) : ?>
    <div class="field-label"<?php print $title_attributes; ?>><?php print $label ?>:&nbsp;</div>
  <?php endif; ?>
  <div class="field-items"<?php print $content_attributes; ?>>
    <?php foreach ($items as $delta => $item) : ?>
      <div style="display:inline;" class="field-item <?php print $delta % 2 ? 'odd' : 'even'; ?>"<?php print $item_attributes[$delta]; ?>>
        <?php 
          print render($item);
          // Add comma if not last item
          if ($delta < (count($items) - 1)) {
            print ','; 
          }
        ?>
      </div>
    <?php endforeach; ?>
  </div>
</div>

อาจมีหลายวิธีในการทำให้สำเร็จโดยใช้ไฟล์. tpl แต่นี่เป็นเพียงตัวเลือกเดียว ฉันแนะนำให้เพิ่มคลาสใน DIV แทนสไตล์และทำการเปลี่ยนแปลงในสไตล์ชีทของคุณแทนที่จะใช้สไตล์อินไลน์


เยี่ยมมากมันทำงานได้อย่างสมบูรณ์ ฉันไม่รู้ว่าคุณสามารถใช้เทมเพลตในฟิลด์เช่นนั้นได้ ยังมีอะไรอีกมากมายให้เรียนรู้เกี่ยวกับสิ่งนี้ ขอบคุณอีกครั้ง.
Mike

การใช้ไฟล์ tpl เป็นทรัพยากรที่เข้มข้นขึ้นอีกเล็กน้อยและโหมดที่ต้องการคือการใช้คำแนะนำ hook_field ด้านล่าง
shaneonabike

11

ข้อความฟอร์แมตโมดูลนี้สามารถใช้ได้สำหรับ Drupal 7 และช่วยให้คุณทำเช่นนี้โดยไม่ต้องทำงานธีมที่กำหนดเอง


โมดูลตัวจัดรูปแบบข้อความน่าจะเป็นคำตอบที่เหมาะสมที่สุดในตอนนี้ซึ่งตรงข้ามกับคำตอบที่เลือกไว้ด้านบนซึ่งจำเป็นต้องมีการแมปในเลเยอร์ธีม
JamesWilson

7

นี่คือวิธีหนึ่งในการใช้theme_fieldวิธีการ (เพิ่มลงในtemplate.phpไฟล์ของคุณ):

/**
 * Implements theme_field()
 *
 * Make field items a comma separated unordered list
 */
function THEMENAME_field__NAME_OF_FIELD__NAME_OF_CONTENT_TYPE($variables) {
  $output = '';

  // Render the label, if it's not hidden.
  if (!$variables['label_hidden']) {
    $output .= '<div class="field-label"' . $variables['title_attributes'] . '>' . $variables['label'] . ':&nbsp;</div>';
  }

  // Render the items as a comma separated inline list
  $output .= '<ul class="field-items"' . $variables['content_attributes'] . '>';
  for ($i=0; $i < count($variables['items']); $i++) {
    $output .= '<li>'. drupal_render($variables['items'][$i]);
    $output .= ($i == count($variables['items'])-1) ? '</li>' : ', </li>';
  }
  $output .= '</ul>';

  return $output;
}

1
ขอบคุณสุดยอดเยี่ยมนี่ช่วยได้มากจริงๆ! ด้วยวิธีการที่ต้องการแล้วไฟล์ tpl!
shaneonabike

4

คุณสามารถทำได้อย่างง่ายดายเพียงแค่ใน CSS:

.field-type-taxonomy-term-reference .field-items .field-item {
  จอแสดงผล: บล็อกแบบอินไลน์;
  * จอแสดงผล: อินไลน์;
  * ซูม: 1;
}
.field-type-taxonomy-term-reference .field-items .field-item: หลัง {
  เนื้อหา: ", ";
}
.field-type-taxonomy-term-reference .field-items .field-item: last-child: หลัง {
  เนื้อหา: "";
}

1
ขอบคุณแม้ว่าฉันจะต้องใช้ Unicode ที่หลบหนีสำหรับพื้นที่เช่นนี้content: ", \00a0": stackoverflow.com/a/5467676/724176
Hugo


0
<?php
if ($node->taxonomy) {
    foreach($node->taxonomy as $term) {
        if ($term->vid == 3) { // the id of the vocabulary
            $my_terms[] = l(
                t($term->name),
                'taxonomy/term/' . $term->tid
            );
        }
    }
}

if ($my_terms) { ?>
    <div class="clear-block">
        <div class="terms">
            <?php print implode(", ", $my_terms); ?>
        </div>
    </div>
<?php } ?>

3
นี่คือการหลีกเลี่ยงระบบชุดรูปแบบการวางตรรกะการแสดงผลที่เข้ารหัสอย่างหนักลงในไฟล์ tpl และสร้างการปวดหัวการบำรุงรักษา
เจเรมีฝรั่งเศส

มันจะดีกว่าถ้าใช้โมดูลด้านข้างซึ่งเกือบจะเหมือนกันหรือไม่? คุณช่วยระบุรหัสที่เป็นมิตรกับการบำรุงรักษามากขึ้นได้ไหม
Rootical V.

0

ง่ายยิ่งขึ้นสำหรับตัวคั่นและตัวตัดคำคุณใช้โมดูล Taxonomy Formatter: http://drupal.org/project/taxonomy_formatter

รายละเอียดเพิ่มเติมจากหน้าโครงการ:

นี่เป็นโมดูลขนาดเล็กที่เขียนเพื่อจัดรูปแบบกำหนดเองสำหรับรายการ taxonomy ตัวจัดรูปแบบเริ่มต้นให้ผลลัพธ์เป็นคำที่ล้อมรอบด้วย div โมดูลนี้เพิ่มตัวจัดรูปแบบใหม่ที่อนุญาตให้คุณระบุประเภทองค์ประกอบชนิดตัวห่อคลาสสำหรับทั้งสองตัวคั่นที่ใช้และถ้าพวกมันเชื่อมโยงไปยังหน้าคำหรือไม่ สิ่งนี้ให้ตัวเลือกเค้าโครงที่ปรับแต่งได้มากขึ้น

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