İzin Verilen HTML etiketlerini değiştirme: Yardım metni giriş alanı için @ etiketler


11

Bu alanın (tam olarak dosya alanı) yardım metninin bir parçası olarak bir form alanı altında basit bir tablo görüntülemek istiyorum. Tamamen zihinsel miyim yoksa bu metin alanı için izin verilen html etiketlerini değiştirmenin gerçekten kolay bir yolu yok mu? Şu an gösterdim:

Instructions to present to the user below this field on the editing form. Allowed HTML tags: a b big code del em i ins pre q small span strong sub sup tt ol ul li p br img

Kolay bir yol yoksa, bunu yapmanın bir sonraki en kolay yolu nedir?

GÜNCELLEME:

Clive, bunu özel bir modülle aşağıda yapmanın harika bir yolunu buldu. Yardım metnini aşağıdaki gibi katlanabilir yapmak için ctools'u kullanarak buna da ekleyebilirsiniz:

// Implement hook_field_widget_form_alter()
function MYMODULE_field_widget_form_alter(&$element, &$form_state, &$context) {
  // If some condition is matched based on the element provided...
  if (isset($element[0]) && $element[0]['#field_name'] == 'field_test') {
    // Alter the description using your more permissive set of tags
    $reworked = filter_xss($context['instance']['description'], _MYMODULE_field_filter_xss_allowed_tags());
    $element[0]['#description'] = theme('ctools_collapsible', array('handle' => 'Help text', 'content' => $reworked, 'collapsed' => TRUE));
  }
}

// Provide a more permissive set of tags to be used with filter_xss()
function _MYMODULE_field_filter_xss_allowed_tags() {
  // Merge the new set of allowed tags with the less permissive defaults
  $new_tags = array('table', 'thead', 'tbody', 'tfoot', 'tr', 'th', 'td');
  return array_merge(_field_filter_xss_allowed_tags(), $new_tags);
}

Bir metin alanı (soru başlığı) veya dosya alanı (soru açıklaması) hakkında mı konuşuyorsunuz?
googletorp

@ 7wonders Soruya eklediğiniz şey cevap olarak iyi olurdu.
kiamlaluno

Yanıtlar:


7

Bunu yapmanın kolay bir yolu yok, izin verilen etiketlerin listesi _field_filter_xss_allowed_tags()işleve sabit kodlanmış .

Bu, field_filter_xss()veri veritabanına kaydedildiğinde değil, görüntülendiğinde çağrılır field_default_form().

Neyse ki bir yol var ama bunu yapmak için küçük bir özel modül gerekiyor. Temel olarak, alanın widget formu için bir form değiştirme kancası uygulamak ve öğenin açıklamasını filter_xss()daha izin veren bir etiket kümesiyle kullanılacak şekilde ayarlamak istiyorsunuz.

Bu çizgiler boyunca bir şey:

// Implement hook_field_widget_form_alter()
function MYMODULE_field_widget_form_alter(&$element, &$form_state, &$context) {
  // If some condition is matched based on the element provided...
  if (isset($element[0]) && $element[0]['#field_name'] == 'field_test') {
    // Alter the description using your more permissive set of tags
    $element[0]['#description'] = filter_xss($context['instance']['description'], _MYMODULE_field_filter_xss_allowed_tags());
  }
}

// Provide a more permissive set of tags to be used with filter_xss()
function _MYMODULE_field_filter_xss_allowed_tags() {
  // Merge the new set of allowed tags with the less permissive defaults
  $new_tags = array('table', 'thead', 'tbody', 'tfoot', 'tr', 'th', 'td');
  return array_merge(_field_filter_xss_allowed_tags(), $new_tags);
}

Bu, yalnızca denilen bir öğe için yeni etiketlere izin vermek istediğiniz öncülüne dayanır field_test, açıkçası diğer alanlar için aynı şeyi yapmak istiyorsanız, bunu farklı bir koşulla eşleşecek şekilde değiştirmeniz gerekir. Form değiştirme işlevinizde nesneyi incelemek için dpm()dahil edilen mükemmel işlevi kullanmanızı öneririm Devel module.

Ben sadece yukarıda test ettik ve işe yarıyor (şimdi benim dosya alan açıklamasının normalde olduğu bir tablo var), teknik olarak kurallara yapışmasına rağmen biraz hack gibi geliyor ama umarım sizi alır yol.


Mükemmel çalıştı. Birisi kesinlikle bunu yapmak için bir modül oluşturmalıdır (bu nasıl bilmiyorum çekirdek bir özellik olamaz!).
7

@ 7wonders Evet, kesinlikle kaçırılmış bir fırsat gibi görünüyor ama sanırım geliştiricilerin bakış açısından bu alan modülü kendi metin biçimini korumak anlamına gelirdi ve bu aşırıya kaçmış sayılabilirdi. Değiştirmek için özel bir seçenek olsa güzel olurdu. Bunu daha kullanışlı bir modüle dönüştürebilir ve drupal.org'a gönderebilirim, sizi haberdar edecek :)
Clive

Kulağa iyi bir fikir gibi geliyor. Bir sanal alanınız olduğunda bana bildirin ve sizin için mutlu bir şekilde test edeceğim.
7Wonders

2

D6 kullanıyorsanız, / admin / settings / filter öğesine gidebilirsiniz. Burada, "Filtrelenmiş HTML" nin "yapılandır" seçeneğini tıklamanız gerekir. Ardından, yapılandır sekmesine tıklayın. size "İzin verilen HTML etiketleri" etiketli bir metin kutusu sunulur. Kullanmanız gereken html etiketlerini buraya girin.

D7 durumunda admin / config / content / formatlar / filter_html adresine gidin. Filtre Ayarları altında, "İzin verilen HTML etiketlerini sınırla" sekmesini tıklayın. Kullanmak istediğiniz HTML etiketlerini metin kutusuna girin.


D7 kullanıyorum ve bana güvenin, ilk yaptığım şeydi ve işe yaramadığında şok oldu! (evet önbelleği de birkaç kez temizledim). Gerçekten şaşırtıcı ve sitem için tüm yardım metin alanlarında durum gibi görünüyor. Düz metin için izin verilen html filtre eklemek ve tablo tr td eklemek bile çalışmıyor. Çok sinir bozucu.
7

Sadece bir d7 yeni kurulum ekledim ve varsayılan davranışını onaylayabilirim. Yardım bölümündeki etiketlerin değiştirilmesine izin vermiyor = delilik! Hangi kanca bunu geçersiz kılabilir?
7

1
Varsayılan giriş biçimi olarak "Full html" ayarını yapmayı deneyin ve ardından kontrol edin.
aerozeppelin

Filtrelenmiş HTML için izin verilen etiketleri Drupal 7.10 ile değiştirebildiğimi ve filtrenin yanı sıra 'izin verilen etiketler' görüntüsünü de çalıştırabildiğimi doğrulayabilirim. Gerçekten aerozeppelin'in cevabı doğrudur. :-)
paul-m

1
Ancak Paul sorusunu okursanız, bir alanın yardım metninde izin verilen etiketlerle ilgilidir, bu nedenle cevap doğru değildir.
7wonders
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.