Kết xuất văn bản đơn giản dưới dạng HTML trong Drupal 8 twig


16

Tôi đã chạy vào một bức tường cố gắng kết xuất mã đánh dấu hình ảnh svg thành html từ một trường văn bản thuần túy.

Tôi đang tìm cách kết xuất mã svg từ trường văn bản đơn giản mà không ghi đè kết xuất trường văn bản đơn giản ở mọi nơi khác.

định dạng văn bản thuần túy hiện chuyển đổi tất cả các thẻ html và <> thành &lt; &gt;.

Tôi đã tạo một mẫu trường và thử cả hai xuất nội dung trường dưới dạng

{{ item.content.context.value }}

{{ item.content|raw }}

cả hai đều hiển thị giá trị dưới dạng chuỗi bao quanh mỗi dòng bằng "dấu ngoặc kép" và chuyển đổi dấu ngắt dòng thành <br/>thẻ.

Trước đây tôi có loại văn bản được định dạng trường, nhưng nó cũng bao bọc mọi thứ trong <pre>thẻ, ngay cả khi tất cả các thẻ được cho phép. Tôi thực sự muốn làm cho nó hoạt động với văn bản đơn giản.

Ví dụ về mã Svg mà trường phải giữ ở dạng văn bản:

<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
         viewBox="0 0 290 290" enable-background="new 0 0 290 290" xml:space="preserve">
    <g>
        <path fill="none" stroke="#78C681" stroke-width="3" stroke-miterlimit="10" d="M261.1,273.1H28.9c-6.6,0-12-5.4-12-12V28.9
            c0-6.6,5.4-12,12-12h232.1c6.6,0,12,5.4,12,12v232.1C273.1,267.7,267.7,273.1,261.1,273.1z"/>
        <circle fill="none" stroke="#1B435D" stroke-width="2" stroke-miterlimit="10" cx="145.2" cy="166.9" r="62.7"/>
        <line fill="none" stroke="#78C681" stroke-width="3" stroke-miterlimit="10" x1="16.9" y1="60.8" x2="273.1" y2="60.8"/>
        <circle fill="none" stroke="#1B435D" stroke-width="2" stroke-miterlimit="10" cx="178.3" cy="152.3" r="6.8"/>
        <path fill="none" stroke="#1B435D" stroke-width="2" stroke-linecap="round" stroke-miterlimit="10" d="M115.1,167.9
            c8.8,0,22.3,3.2,28.4,4.7"/>
        <path fill="none" stroke="#1B435D" stroke-width="2" stroke-linecap="round" stroke-miterlimit="10" d="M151.9,216.9
            c0,0,17.2-1.5,29.6-14.8"/>
    </g>
</svg>

Hy vọng ai đó có thể giúp đỡ.

Tốt,

Alari


Văn bản đơn giản ngoài hộp có bộ lọc thoát khỏi đánh dấu. |rawkhông unescape đã thoát đánh dấu. Việc trốn thoát đang diễn ra sớm hơn so với thoát tự động của Twig.
Cottser

Câu trả lời:


17

Một giải pháp của iworkyon từ cộng đồng Drupal:

trường - nút - [tên trường] .html.twig:

{% if svg %}
  <div class="my-svg">
    {{ svg|raw }}
  </div>
{% endif %}

THEME.info:

/**
* Implements hook_preprocess_field().
*/
function MYTHEME_preprocess_field(&$variables, $hook) {
    switch ($variables['element']['#field_name']) {
      case 'field_svg_test':
        $variables['svg'] = $variables['items'][0]['content']['#context']['value'];
        break;
    }
}

Hehe, có vẻ như "Tôi đang ở nơi làm việc" biệt danh IRC của tôi đã lẻn vào đây: D Khám phá thú vị trong khi googling!
ividyon

Hy vọng bạn không phiền :) Nó đã giúp tôi, vì vậy tôi nghĩ tôi muốn chia sẻ.
Alari Truuts 28/03/2017

7

Bạn đã thử áp dụng bộ lọc thô trên giá trị?

{{ item.content.context.value|raw }}

Nhưng điều này không an toàn. Để xuất tệp, bạn có thể sử dụng một trường tệp. Điều này có các trình định dạng trường chính xác để tạo liên kết. Nếu bạn không thể định cấu hình liên kết trong ui theo nhu cầu của mình, bạn có thể sửa đổi twig hoặc tiền xử lý cho trường cụ thể này.


rawđang / đã bị xóa: drupal.org/node/2603074
Clive

4k4: Trường là trường văn bản thuần túy và không phải là tệp. Giá trị trường sẽ là đánh dấu được sao chép của một hình ảnh svg. Tôi đã thử giải pháp của bạn, nhưng không có gì khác biệt, vẫn nhận được vấn đề gói dấu ngoặc kép và ngắt dòng. Ngoài ra bây giờ tôi lo lắng về việc sử dụng | thô sau những gì Clive nói và thậm chí còn đi xa hơn để đạt được một giải pháp.
Alari Truuts

Bạn thậm chí còn đi xa hơn để đạt được một giải pháp, bởi vì bạn cố gắng lừa tự động thoát khỏi drupal cố gắng mọi thứ để ngăn cản bạn làm điều này. Sử dụng tốt hơn cơ chế có sẵn để cung cấp các liên kết tệp như được mô tả trong câu trả lời của tôi. Và sau đó sử dụng các mẫu twig thích hợp xuống dòng để thay đổi kết xuất.
4k4

4k4: Bây giờ tôi hơi bối rối, vì nội dung mà trường phải giữ không phải là một tệp. nó ở dạng văn bản / mã Svg. Tôi đã cập nhật câu hỏi với một ví dụ.
Alari Truuts

Văn bản thuần túy sẽ không thể xuất mã Svg này. Bạn đã thử định dạng văn bản "Full Html", nếu điều này có thể xử lý mã Svg? Nếu không, tốt nhất bạn nên đặt svg trong tập tin svg của chính nó.
4k4

6

Điều này làm việc cho tôi:

{{ item.content['#context'].value|raw }}
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.