Предотвращение преобразования в html сущности CDATA (views rss)

Главные вкладки

Аватар пользователя alexandra_b alexandra_b 5 сентября 2018 в 16:44

Здравствуйте. Возникла проблема при добавлении rss для yandex zen. Для [content:encoded] я беру текст из параграфа, выводится все нормально, но мне надо добавить к выводу <![CDATA[ ]] ]>. Я делаю так: $variables['elements'][0]['value'] = '<![CDATA['.$variables['elements'][0]['value'].' ]]'>; и после этого знаки преобразуются в html сущности. Каким образом это можно исправить?
Заранее спасибо)

Лучший ответ

Аватар пользователя alexandra_b alexandra_b 6 сентября 2018 в 15:22

Всем спасибо) С проблемой справилась. Вот код(может кому пригодится):

$variables['elements'][0]['value'] =   [
          '#type' => 'inline_template',
          '#template' => "<![CDATA[ {{data}} ]]>",
          '#context' => [
              'data' => $variables['elements'][0]['value'],
          ],
      ];

Комментарии

Аватар пользователя OldWarrior OldWarrior 6 сентября 2018 в 11:25

Попутный вопрос: а зачем исправлять сущности в CDATA ?
Насколько я помню, назначение CDATA - как раз таки вывод значений в виде символьных данных.

Аватар пользователя fairrandir fairrandir 6 сентября 2018 в 13:03

У вас точно Drupal 8?
По идее, вам нужен hook_views_rss_feed_alter(&$rss_feed), в котором приблизительно

<?php
function yourmodule_views_rss_feed_alter(&$rss_feed) {
  
$channel = &$rss_feed['value'][0]['value'];

  foreach (

$channel as $key => &$channel_item) {
    switch (
$channel_item['key']) {
      case 
'item':
        
$item = &$channel_item['value'];
        foreach (
$item as $key => &$element) {
          switch (
$element['key']) {
            case 
'description':
            case 
'content:encoded':
              
$element['value'] = '<![CDATA[' $element['value'] . ']]>';
              
$element['encoded'] = TRUE;
              break;
          }
        }
        break;
    }
  }
}
?>

Ключевой момент - $element['encoded'] = TRUE;

Аватар пользователя alexandra_b alexandra_b 6 сентября 2018 в 15:22

Всем спасибо) С проблемой справилась. Вот код(может кому пригодится):

$variables['elements'][0]['value'] =   [
          '#type' => 'inline_template',
          '#template' => "<![CDATA[ {{data}} ]]>",
          '#context' => [
              'data' => $variables['elements'][0]['value'],
          ],
      ];