web-dev-qa-db-fra.com

Solution pour utiliser le contenu Markdown de github?

J'aime beaucoup Markdown et j'aimerais utiliser github pour enregistrer le contenu là-bas (également avec l'avantage supplémentaire que tout le monde peut soumettre un PR).

Je ne suis pas intéressé par un éditeur de Markdown pour Joomla, mais simplement par une extension capable de récupérer des fichiers de Markdown à partir de github et de les transformer en HTML (en plus de les mettre en cache pendant un certain temps).

Semblable à ce que fait JoomlaTools.

github => site web

7
Valentin Despa

état actuel: preuve de concept, non publié.

Histoire

J'ai commencé à travailler sur ma propre solution, avec le nom temporaire de gitcms . Voici l'architecture en quelques mots:

gitcms architecture

Voilà comment cela fonctionne:

référentiel Github

Chaque fois qu'un commit est poussé dans le référentiel, l'événement est déclenché. Il est possible de capturer cet événement à l'aide d'un Webhook qui permet d'envoyer des métadonnées au format JSON à une adresse en vue d'un traitement ultérieur.

gitcms

Mis en œuvre en tant que solution middleware, il n'est pas spécifique au CMS. Il reçoit l'événement Push de github, détermine quels fichiers ont été modifiés, récupère les fichiers de github au format brut et les convertit au format HTML. Une fois la conversion terminée, un message est envoyé aux adaptateurs enregistrés.

Adaptateur

Ceci est spécifique au CMS et peut interpréter le message du middleware. En fin de compte, il doit créer, mettre à jour et supprimer des articles.

Questions en suspens

  • Comment traiter les images ou tout autre fichier multimédia.
  • Les appels étant synchrones, envisagez le découplage à l'aide des files de messages.
2
Valentin Despa

Autant que je sache, le seul moyen d’obtenir réellement les informations dans un référentiel est manuellement, à moins que vous ne souhaitiez parcourir les validations et déterminer tout ce qui se passe où. Quoi qu’il en soit, il serait préférable d’avoir une copie du dépôt quelque part (mises à jour automatiques, etc., de sorte que les fichiers locaux soient au format brut).

Le meilleur moyen consiste donc à utiliser un fichier cronjob qui tente d'extraire les mises à jour de temps en temps dans un répertoire spécifié et à utiliser la structure de répertoires pour votre menu et l'affichage des fichiers. La meilleure façon de les analyser consiste à utiliser votre propre bibliothèque, mais avec Joomla, vous avez la classe JGithub qui peut être utilisée comme telle.

$github = new JGithub;

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

echo $result; //will be html

Un petit avertissement cependant, qui utilise l'API pour le rendre, vous pourriez donc rencontrer des problèmes pour respecter les limites de l'API. Vous pouvez également utiliser oauth pour vous aider à le contourner, mais pour un besoin aussi simple, il est préférable d’utiliser une bibliothèque.

Le fait de disposer de fichiers au format brut évite beaucoup moins de les analyser à la volée. Il est donc moins nécessaire de mettre en cache car tout ce qui se passe réellement, c’est que vous lisez un fichier de toute façon, le cas échéant. pour le mettre en cache quand même, car à ce stade, il s'agirait d'une extension personnalisée pour joomla, mais vous pourriez vous connecter à la mise en cache de 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);

Je dois simplement laisser JModel mettre automatiquement les choses en cache pour moi, mon exemple ci-dessus n'est peut-être pas tout à fait correct, mais il devrait être suffisamment proche pour en arriver à quelque chose.

Mes exemples ici sont très vagues, juste quelques notes sur la façon dont je gérerais cela. C'est simple, je ne suis pas sûr à 100% de bien comprendre la question, même si cela devrait au moins aider quelqu'un :)

2
Jordan Ramstad

Si c'était moi, j'utiliserais la méthode qui vous conviendrait (file_get_contents peut-être, j'aime bien curl, mais peu importe) puis utiliser la classe Parsedown pour la convertir en HTML.

http://parsedown.org/

Joomla a sa propre classe de github, mais je n'ai pas cherché à voir ce qu'elle faisait réellement.

1
Michael