Как сделать сравнение в стиле wiki / wordpress в PHP? - PullRequest
3 голосов
/ 07 июня 2011

Немного похоже на это из WordPress: Wordpress diff

Или это из MediaWiki: Wikipedia diff

Я пробовал несколько разностных движков в PHP, наиболее всеобъемлющим кажется (http://www.raymondhill.net/finediff/viewdiff-ex.php) и PEAR Text_Diff, но я не могу найти какой-либо вариант, чтобы обе версии были сложены рядом, как на картинках выше. Я думаю, что это легче читать, чем иметь обе версии в одной.

Ответы [ 2 ]

5 голосов
/ 07 июня 2011

Нашли решение - взяв класс WP_Text_Diff_Renderer_Table из WordPress (wp-includes / wp-diff.php), который используется в сочетании с PEAR Text_Diff:

$diff = new Text_Diff('auto', array($lines1, $lines2));
$render = new WP_Text_Diff_Renderer_Table;
echo $render->render($diff);

Когда обернут в теги вышеКод создает тот же HTML-макет, что и на приведенном выше снимке экрана WordPress.Затем есть четыре CSS-правила для стиля:

  • .diff-deleteline - абзац / строка, которая отличается от исходного текста
  • .diff-Addedline - абзац / строка, котораяизменяется в тексте назначения
  • del - отдельное слово, измененное из источника
  • ins - отдельное слово, которое изменяется в месте назначения

Подробнее здесь: http://www.webdevguides.co.uk/php-2/wordpress-style-diff-in-php

3 голосов
/ 29 июня 2011

Я автор finediff.php, на который вы ссылаетесь в своем посте.

Решение с использованием класса PHP FineDiff довольно простое: получите HTML-строку diff с помощью стандартного рендерера FineDiff :: renderDiffToHTMLFromOpcodes (), после чего вы можете использовать одну и ту же результирующую строку в двух разных DIV, каждый в соответствующем стиле CSS, например, так :

<?php
    ...
    $diff = FineDiff::getDiffOpcodes($fromText, $toText);
    $diffHTML = FineDiff::renderDiffToHTMLFromOpcodes($fromText, $diff);
    ?>
<div id="from"><?php echo $diffHTML; ?></div>
<div id="to"><?php echo $diffHTML; ?></div>

Тогда нужно правильно оформить стиль, чтобы показать только то, что вы хотите:

#from ins {display:none}
#to del {display:none}

Редактировать: ПО второй мысли, я понимаю, что вы могли бы хотеть, чтобы обе стороны были надлежащим образом закреплены вместе, что мое решение не подойдет.

...