Drupal 8 dalında düz metni HTML olarak işle


15

Düz metin alanından html içine bir svg görüntü biçimlendirme kodu oluşturmaya çalışırken bir duvara koştum.

Başka bir yerde render düz metin alanı geçersiz kılmadan düz metin alanından svg kodu oluşturmak için arıyorum.

düz metin biçimi şu anda tüm html etiketlerini ve <> öğesini dönüştürür &lt; &gt;.

Bir alan şablonu oluşturdum ve hem alan içeriğini hem de çıktı olarak

{{ item.content.context.value }}

ve

{{ item.content|raw }}

her ikisi de değeri "tırnak işaretleri" ile her satırı saran ve satır sonlarını <br/>etiketlere dönüştüren dize olarak işler .

Daha önce alan türü biçimlendirilmiş metin vardı, ama aynı zamanda <pre>tüm etiketlere izin verildiğinde bile etiketlerde her şeyi tamamladı . Gerçekten düz metinle çalışmasını istiyorum.

Alanın metin biçiminde tutması gereken svg kodu örneği:

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

Umarım birisi yardımcı olabilir.

En iyi,

Alari


Kutudan çıktığı gibi düz metinde işaretlemeden kaçan bir filtre vardır. |rawunescape zaten biçimlendirmeden kaçmadı. Kaçış Twig'in otomatik kaçışından önce gerçekleşiyor.
Cottser

Yanıtlar:


17

Drupal topluluğundan iworkyon tarafından bir çözüm :

alan - düğüm - [alan adı] .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, benim "işteyim" gibi görünüyor burada IRC takma adı: D Googling yaparken eğlenceli keşif!
17'de ividyon

Umursamıyorsun :) Bana yardımcı oldu, bu yüzden paylaşacağımı düşündüm.
Alari Truuts

7

Ham filtreyi değere uygulamayı denediniz mi?

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

Ama bu güvenli değil. Dosya çıktısı almak için bir dosya alanı kullanabilirsiniz. Bu, bağlantıyı oluşturmak için doğru alan biçimlendiricilerine sahiptir. Kullanıcı arayüzündeki bağlantıyı gereksinimlerinize göre yapılandıramıyorsanız, bu belirli alanın dalını veya önişlemini değiştirebilirsiniz.


rawkaldırılıyor / kaldırıldı: drupal.org/node/2603074
Clive

4k4: Alan bir dosya değil, düz bir metin alanıdır. Alan değeri, bir svg görüntüsünün kopyalanan biçimlendirmesi olacaktır. Çözümünüzü denedim, ancak hiçbir şey farklı değil, yine de tırnak işareti sarma ve satır sonu sorunu olsun. Ayrıca şimdi Clive'nin söylediklerinden sonra | raw kullanma konusunda endişeliyim ve bir çözüme ulaşmaktan daha da uzaktayım.
Alari Truuts

Bir çözüme ulaşmaktan daha da uzaktasınız, çünkü otomatik olarak kaçan ve drupal'ı kandırmaya çalıştığınızda, bunu yapmanıza engel olmak için her şey denenir. Cevabımda açıklandığı gibi dosya bağlantıları sağlamak için orada bulunan mekanizmayı daha iyi kullanın. Ardından, oluşturmayı değiştirmek için uygun dal şablonları kullanın.
4k4

4k4: Alanın tutması gereken içerik bir dosya olmadığı için biraz kafam karıştı. metin / svg kodu biçimindedir. Soruyu bir örnekle güncelledim.
Alari Truuts

Düz metin bu svg kodunu çıkaramaz. Svg kodunu işleyebiliyorsa "Full Html" metin biçimini denediniz mi? Değilse, svg'yi kendi svg dosyasına koymanız daha iyi olur.
4k4

6

Bu benim için çalıştı:

{{ item.content['#context'].value|raw }}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.