2

「軽い」コンテンツ管理システムの例:

それらに共通しているのは、編集可能にしたい Web ページの部分に特定のクラス名を追加するだけであるということです。バックエンドでは、編集したスニペットを編集したファイル (データベースなし) に保存します。

オリジナルコンテンツと編集コンテンツの例:

元の HTML コード

<div class="editable">

<ul>
<li>an</li>
<li>unordered list</li>
</ul>

</div>

編集された HTML コード

<div class="editable">

<ol>
<li>an</li>
<li>ordered list</li>
</ol>

</div>

フロントエンドはかなり明確ですが、バックエンド (PHP) についてはどうすればよいでしょうか?

動的な PHP コードが引き続き機能するようにする必要があるため、ファイル全体を更新するだけでは不十分です。

この手法を検索しましたが、これを行うための詳細なアイデアや方法が見つからなかったため、リソースやポインターは大歓迎です。
上記のライト コンテンツ管理システムはオープン ソースではないため、ソースから学ぶこともできません。

編集

PHP DOM を使用したくないと述べましたが、状況が変わりました。Surreal CMS と CushyCMS の両方がそれを使用しています。これは、それが進むべき道であることを示しています。

PHP DOM で私が経験している問題は、ユーザーが編集した元のドキュメントの一部だけを置き換えることができないことです。元のファイルをロードするとき、 PHP DOM は、メタ タグを変更したり、一重引用符を二重引用符に変換したりするなど、文書に対して不要なこと
を行います 。ドキュメントはそのままにしておく必要があるためです (ユーザーはこれを編集していません)。

Cushy と Surreal はどちらも、PHP DOM がドキュメントの残りの部分に触れないようにする方法を知っているようですが、私は知りません。知っているなら、私に知らせてください。

4

3 に答える 3

2

あなたの質問は少し漠然としていますが、おそらくこれが役に立ちます:

パート A: 編集

軽量ページを編集するには、JavaScript をページに挿入する必要があります。この JavaScript は、「編集可能」クラスを持つすべての要素を検索し、それらを編集可能に設定します (これについては、非常に基本的な出発点としてcontentEditableプロパティを参照してください)。

id、xpath、インデックスなど、編集された要素の識別情報を保持します。テキストを保存するには、サーバーに ajax するだけです。

パート B: ファイルへの保存

ピースをデータベースに保存することもできますが、ファイルを直接変更する必要があると思います。これを行うには、各要素のコンテンツを AJAX 経由で受け取ったものに置き換えるだけです。ソースコード内の要素を見つけるには、PHP の SimpleDOM などを使用する必要があります (これは、HTML ページが有効な XHTML であることも意味します)。

要素を見つけて、変更を書き込んで、ファイルを書き込んで完了です。

ただし、実際のプロジェクトで機能させたい場合は、はるかに複雑になることに注意してください。

編集:質問の「PHPコードは機能し続ける必要があります」という部分を見ました。これにはいくつかの正規表現マジックを検討してください - それぞれ/(<?.*?>)/をテキスト プレースホルダー ("-PHPCODE-$i-" など) に置き換え、dom ツリーを更新した後、これらのプレースホルダーを元に戻します。いずれにせよ、大変な仕事です。

于 2011-07-19T14:25:06.243 に答える
1

あなたの質問は最善の方法を見つけるにはあまりにも漠然としています.私の方法は10の良い方法のうちの1つの良い方法かもしれません. ある人にとっては、私のやり方は 100 分の 1 の悪いやり方でさえあります。

このclass="editable"属性について: これらのサーバーサイドは PHP では使用できません。私はこれらの軽量 CMS を知りませんが、おそらくクラスを対象とし、おそらく編集ボタンを追加する Javascript/AJAX を使用しています。

UDPATE確かに、これらの「軽い CMS」は Web ページ ファイルを変更します。さて、これが問題です。これらは CMS ではなく、オンラインの HTML エディターです。この場合、最善の方法は何らかの理由で望まない DOM Document です。

于 2011-07-18T21:35:58.033 に答える