it-swarm.dev

Soluzione per l'utilizzo di Markdown Content da github?

Mi piace molto Markdown e vorrei usare Github per salvare lì il contenuto (anche con l'ulteriore vantaggio che chiunque può inviare una PR).

Non mi interessa un editor Markdown per Joomla, solo un'estensione che può recuperare i file Markdown da github e trasformarli in HTML (in aggiunta per memorizzarli nella cache per un periodo).

Simile a quello che fa JoomlaTools.

github => sito web

7
Valentin Despa

Stato attuale: proof of concept, non rilasciato pubblicamente.

Storia

Ho iniziato a lavorare sulla mia soluzione, con il nome temporaneo di gitcms . Ecco in breve l'architettura:

gitcms architecture

È così che funziona:

repository Github

Ogni volta che viene inviato un commit nel repository e l'evento verrà attivato. È possibile catturare questo evento utilizzando un webhook che sostanzialmente consente di inviare alcuni metadati in formato JSON a un indirizzo per ulteriori elaborazioni.

gitcms

Implementato come soluzione middleware, non è specifico per CMS. Riceve l'evento Push da github, capisce quali file sono stati modificati, recupera i file da github in formato raw e li converte in HTML. Al termine della conversione, invia un messaggio agli Adapter registrati.

adattatore

Questo è specifico per CMS di build e può interpretare il messaggio dal middleware. Alla fine ha bisogno di creare, aggiornare ed eliminare articoli.

Questioni in sospeso

  • Come gestire immagini o altri file multimediali.
  • Le chiamate sono sincronizzate, considera il disaccoppiamento usando le code dei messaggi.
2
Valentin Despa

Per quanto posso vedere, l'unico modo per ottenere davvero le informazioni in un repository è manualmente, a meno che tu non voglia esaminare tutti i commit e tutti, capire cosa va dove. Sebbene in entrambi i casi sarebbe meglio avere una copia del repository da qualche parte (aggiornamenti automatici di pull e tutto il resto, quindi avrebbe file locali in formato non elaborato).

Quindi il modo migliore è avere un cronjob che tenti di estrarre gli aggiornamenti ogni tanto in una directory specificata e usare la struttura delle directory per il tuo menu e visualizzare i file. Analizzarli nel modo migliore è usare la tua libreria ma con Joomla hai la classe JGithub che può essere usata in questo modo.

$github = new JGithub;

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

echo $result; //will be html

Un piccolo avvertimento che utilizza l'API per renderizzarlo, quindi potresti riscontrare problemi di esecuzione nei limiti dell'API. Puoi anche usare oauth per aiutare a bypassarlo, ma per una necessità così semplice è meglio usare una libreria.

Avere i file locali in formato raw rende molto meno un problema di prestazioni anche solo analizzarli al volo, quindi meno necessità di memorizzazione nella cache in quanto tutto ciò che sta realmente accadendo è che stai leggendo un file comunque, se è necessario memorizzarlo nella cache ancora allora, perché a questo punto sarebbe un'estensione personalizzata per joomla, comunque si potrebbe legare alla cache di 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);

Devo solo lasciare che JModel memorizzi automaticamente nella cache le cose per me, quindi il mio esempio sopra potrebbe non essere del tutto corretto, ma dovrebbe essere abbastanza vicino da poterci andare da qualche parte.

I miei esempi qui sono molto vaghi, solo alcune note su come gestirlo. È stato semplice perché non sono sicuro al 100% di aver compreso appieno la domanda, anche se questo dovrebbe almeno aiutare qualcuno :)

2
Jordan Ramstad

Se fossi in me, recupererei usando il metodo che preferisci (file_get_contents forse, mi piace il ricciolo, ma qualunque cosa) e poi userei la classe Parsedown per trasformarlo in HTML.

http://parsedown.org/

Joomla ha una sua classe di github, ma non ho cercato di vedere cosa fa realmente.

1
Michael