web-dev-qa-db-ja.com

githubからMarkdownコンテンツを使用するためのソリューション?

私はMarkdownがとても好きで、そこにコンテンツを保存するためにgithubを使用したいと思っています(また、誰でもPRを送信できるという追加の利点もあります)。

私はJoomlaのMarkdownエディターには興味がありません。githubからMarkdownファイルを取得し、HTMLに変換できる拡張機能です(さらに、一定期間キャッシュするため)。

JoomlaToolsと同じです。

github => ウェブサイト

7
Valentin Despa

現在のステータス:概念実証、公開されていない。

歴史

一時的な名前gitcmsを使用して、自分のソリューションの作業を開始しました。これは一言で言えばアーキテクチャです:

gitcms architecture

これはどのように機能するかです:

Githubリポジトリ

コミットがリポジトリにプッシュされるたびに、イベントがトリガーされます。基本的にJSON形式のメタデータをアドレスに送信してさらに処理できるようにするWebhookを使用して、このイベントをキャッチすることができます。

gitcms

ミドルウェアソリューションとして実装され、CMS固有ではありません。 githubからPushイベントを受け取り、変更されたファイルを特定し、githubからraw形式でファイルをフェッチして、HTMLに変換します。変換が完了すると、登録されているアダプタにメッセージが送信されます。

アダプター

これはCMS固有のビルドであり、ミドルウェアからのメッセージを解釈できます。最終的には、記事を作成、更新、削除する必要があります。

保留中の案件

  • 画像またはその他のメディアファイルを処理する方法。
  • 呼び出しは同期的です。メッセージキューを使用して分離することを検討してください。
2
Valentin Despa

私が確認できる限り、実際にリポジトリ内の情報を取得する唯一の方法は手動です。ただし、コミットなどすべてを調べて、何がどこにあるのかを理解したくない場合を除きます。どちらの方法でも、リポジトリのコピーをどこかに置くのが最善です(自動プル更新などすべてのローカルファイルがraw形式になります)。

したがって、最善の方法は、指定されたディレクトリに更新を時々プルし、メニューのディレクトリ構造を使用してファイルを表示するcronjobを用意することです。それらを解析するための最良の方法は、独自のライブラリーを使用することですが、Joomlaでは、そのように使用できるJGithubクラスがあります。

$github = new JGithub;

$result = $github->markdown->render('text here most likely the contents of a file');

echo $result; //will be html

ただし、APIを使用してレンダリングするため、API制限に達してしまうという問題が発生する可能性があります。 oauthを使用してそれを回避することもできますが、そのような単純なニーズにはライブラリを使用するのが最善です。

ファイルをロー形式でローカルにしておくと、ファイルをその場で解析するだけでパフォーマンスの問題が大幅に軽減されます。したがって、実際に行われているのは、必要に応じてファイルを読み取っているだけなので、キャッシュの必要性が少なくなります。この時点でそれはjoomlaのカスタマイズされた拡張であるため、Joomlaのキャッシングに結び付けることができます。

$cache = JCache::getInstance();
//data = rendered output, file is the path (dot separated is best) and extensionName is the custom extension
$cache->store($data,$file,$extensionName);

//then it can be called/checked like this
$cache->get($file,$extensionName);

私はJModelに自動的にキャッシュさせるだけなので、上の例は完全には正しくないかもしれませんが、どこかに移動するのに十分近いはずです。

ここでの私の例は非常に曖昧ですが、これをどのように処理するかについてのちょっとしたメモです。これは少なくとも誰かを助けるはずですが、私が質問を完全に理解していることを100%確信していないので、それは単純にしてください:)

2
Jordan Ramstad

それが私だったら、あなたに合った方法(file_get_contentsかもしれませんが、curlが好きですが、何でも)を使用して取得し、次にParsedownクラスを使用してHTMLに変換します。

http://parsedown.org/

Joomlaには独自のgithubクラスがありますが、実際にそれが何をするのか見ていません。

1
Michael