Uso del componente Drupal Diff en formularios personalizados

Drupal 8 viene con un componente Diff en el núcleo. Se utiliza principalmente para mostrar cambios en la configuración o revisiones de contenido. Sin embargo, también se puede usar de otras maneras. Aquí hay algunos pasos rápidos para mostrar cómo usar el componente Diff en tus formularios o controladores personalizados.

Una forma en que Drupal Core utiliza el componente Diff es mostrar la diferencia entre la configuración 'Activo' y 'En etapas'. Ver \Drupal\Core\Config\ConfigManager::diffpara más detalles.

Recientemente, estaba creando un formulario donde tenía que mostrar la diferencia entre dos versiones de una entidad. El componente Diff está diseñado como un componente independiente que se puede usar para mostrar la diferencia entre dos matrices o cadenas. Entonces, ¿por qué no usar eso en nuestros propios formularios?

Aquí hay un ejemplo rápido:

use Drupal\Component\Diff\Diff;
use Drupal\Core\Serialization\Yaml;
    $diffFormatter = \Drupal::service('diff.formatter');
    $from = explode("\n", Yaml::encode($current->toArray()));
    $to = explode("\n", Yaml::encode($revision->toArray()));
    $diff = new Diff($from, $to);
    $diffFormatter->show_header = FALSE;
    // Add the CSS for the inline diff.
    $form['#attached']['library'][] = 'system/diff';
    $form['diff'] = [
      '#type' => 'table',
      '#attributes' => [
        'class' => ['diff'],
      ],
      '#header' => [
        ['data' => t('From'), 'colspan' => '2'],
        ['data' => t('To'), 'colspan' => '2'],
      ],
      '#rows' => $diffFormatter->format($diff),
    ];

Espero que esto ayude.

Tags

¿Tienes algún proyecto en mente?

Si quieres hacer algo en Drupal tal vez puedas contratarme.

Ya sea para consultoría, desarrollo o mantenimiento de sitios web Drupal.