Revizyon Değişiklikler - Görme gösteren değişiklikler

6 Cevap php

Rollback of an article


I have deleted a lot of the body of this question because I realised I should rephrase it. Here it the rephrase:

Nasıl grev geçişlerinde bir şey uygulayabilirsiniz? Önceki bir revizyon güncellemesi karşılaştırılması. Ben sadece benim MySQL veritabanında o işleyebilir, çünkü başına revizyon veya sürüm kontrol istemiyorum, ama ben visually neredeyse değişmek güncellemeleri sayesinde yeşil ve kırmızı vuruşla değişiklikleri tespit edebilmek istiyorum sayfası gibi (kullanıcı bunu görmek isteyen gerekir).

SO üzerinde revizyon değişiklikler üzerinde benzer bir şey gördük ve böyle bir şey yapmak istersiniz?

I think my question now is fundamentally different from the original, sorry

Ama burada: http://stackoverflow.com/posts/2326658/revisions

6 Cevap

Öneriniz tamamen bana mantıklı geliyor: revizyona başına bir satır ile bir masa ve etkin revizyonlar tablo içinde geçerli revizyona bağlantılar "görüntülenebilen makalenin" başına bir satır ile bir tablo. Ne bu konuda ayrıntılı var?

Sen could tek bir tabloda "güncel" sütununda çeşit sahte, ama sonra emin sadece bir revizyon bana çok kötü sesler herhangi bir yazı, için geçerli olduğunu yapmak olurdu.

Part-1: data structure (from original question),

  1. One row per version -VS- all versions in one row:
    Store one revision per row, do not pack all revisions into one row as XML or any other multi-value supporting types. Initially the article might be edited few times and the revisions will be asked for by the author(s), but later on only the most recent version will be requested by your application. In this case there is no point in loading all the change history.

  2. One table -VS- two tables:
    Third_normal_form would suggest using 2 tables:
    - Article[ActicleID(int,PK), AuthorID(int,FK), ...]
    - ArticleRevisions[ArticleID(int,UK), RevisionID(int,UK), Content, RevisionComment, RevisionTimeStamp, ...]
    In any case store complete articles and do not play with delta-type implementation - your use case does not call for the complexity, but for simplicity. Also you might redundantly store the LatestRevisionID in the Article table for easier retrieval of latest revision.
    You might opt for the solution with one table. For an example look at line 76 (Table('wiki'...) in the database schema of Trac. Also you might take a look how Trac does it for its simple Wikis by looking at example of their revision history and revision diff, which are quite similar to those on StackOverflow.

Part-2: detecting and presenting differences between two revisions:
First of all, one does not visually identifies the changes, but rather programmatically. What you need is a library which given two files (strings/lists of strings) will provide you will a diff result. In many cases one opts for line-by-line comparison, as did stackoverflow). Then you need a mean of presenting those results to the use (with greens, reds, strikeouts etc).

PHP ve kütüphaneler hakkında çok az bilgi olmasına rağmen, aşağıdaki bağlantılar başlamak gerekir:

Bir XML olarak kaydetmeyi deneyin

As far as I can understand the problem. It can be solved if we store each line as a row. But that will be bad because number of rows increases tremendously.

Arka arkaya Yani veri deposu olarak

<row num=1>How would you structure something like this. I want to allow my authors to create articles. However, </row>
<row num=2>should they choose, I would like to be able to allow each save to be a new revision and then allow each </row>
............

Everything in one row but in xml format. When u retrieve it, you can compare rows using num attribute.

Sizin soru olarak özetlenebilir "sürüm kontrolü nasıl uygulanır?" Her zamanki Her revizyon eski sürümü yerine tekrar tekrar tüm metin (varyasyonları çok olmasına rağmen) bir fark olarak depolanır olmasıdır. Çoğu sistemleri / onlar "çizgi" halinde değişiklikler izole edemez olmayan metin biçimleri için komple tüm sürümlerini depolar olabilir.

Ben doğru etiketleri anlamak, PHP diff bir uygulama arıyoruz. Düzeltin? Biz birden fazla dil ve böyle yapmak planı ne bilmiyorum - Eğer veritabanında depolamak nasıl gerçekten şu anda göremiyorum faktörlere bağlıdır. Her neyse, ne kalır her revizyon bir kayıtta her nasılsa bir mysql text alanı, olacak olmasıdır. Daha sonra diff kullanarak bu revizyonlar ikisini karşılaştırmak istiyorsunuz.

İşte bazı ilginç görünümlü PHP uygulamaları vardır. Bunlardan herhangi biri ile çalıştı değil, bu yüzden onlar gereksinimlerini karşılamak olmadığını ne kadar iyi olduklarını söyleyebilirim ve olamaz, ama en azından bir başlangıç ​​noktası olabilir:

Sunucu yapılandırmasına bağlı olarak, aynı zamanda, örneğin Linux komut satırı diff kullanmak mümkün olabilir.

Ben kod farklarını ya da daha genel belgeler ile uğraşıyoruz olmadığını söyleyemem. Ben yan tarafından iki versiyonu tarafı, wiki belgelerin sürümleri diffs görüntülenen birkaç yıl önce bir uygulama yaptım, silmeler eski sürümü üzerinde kırmızı işaretli, yeni bir sürümü üzerinde yeşil eklemeler. Tüm bu ilk (arka plan renklerini değiştirmek için stilleri kullanarak) vurgulamak için ne belirlemek için fark sonuçlarını kullanarak sonra (diff_match_patch.js kullanarak), ve bu diffing, HTML sadece metin parçaları ayıklanması, javascript yapıldı. Mükemmel, oldukça zor değil (ama yeterince yakın) ve DOM manipülasyon biraz karışmış. Yani, yapılabilir, ama kolay değil.