GitHub Get nace como una necesidad personal de poder incrustar código desde GitHub en WordPress. GitHub Get hace uso de WordPress HTTP API, Autenticación Básica e Identificador de Acceso Personal para acceder a los servicios Restful de GitHub. Dentro de las características de GitHub Get podemos mencionar
- Permite incrustar código desde un repositorio público o privado
- Permite incrustar código desde un repositorio o desde Gist
- Syntaxis basada en shortcode
- Cachea las respuesta usando la función nativa de WordPress set_transient, esto permite usar el plugin en sitios de alta demanda. Si el fichero o gist cambia no es necesario limpiar la caché, GitHub Get detecta el cambio y actualiza la caché mostrándose la versión actualizada.
- Fácil de usar y configurar.
- Compatible con WP Code Highlight.js
- Software libre, liberado bajo licencia GPL v3.
Instalar y configurar
El modelo de desarrollo está basado en una sola rama (master) y cada versión está marcada por un commit en la forma: Release vx.x.x y un tag en la forma: vx.x.x. Este modelo de desarrollo simple permite usar GitHub Updater para mantenerme actualizado con los cambios de una versión a otra. Si UD. no usa GitHub Updater entonces puede descargar el compactado desde GitHub y seguir el procedimiento descrito en Manual_Plugin_Installation
Configurar
- Autenticarse en la administración de WordPress
- Menú > Ajustes > GitHub Get
- Especificar el usuario e identificador de Acceso Personal de GitHub
- Save
Sintaxis
[ghget atributo=valor]contenido[/ghget]
Contenido
El valor del contenido para un gist es el identificador del gist o sea el hash. Para el caso de un fichero que está en un repo es el camino/ruta de acceso del fichero dentro del repo. Para encontrar la ruta de acceso, navegar por el repositorio de GitHub hasta encontrar el fichero, luego utilizar la función «Copy path» de GitHub, no se debe pegar el resultado en el editor visual de WordPress debido a que copiará la URL completa, recomiendo que lo copie primero en un editor de texto.
Atributos
Todos los atributos son opcionales. Se puede especificar los siguientes atributos (En negrita los valores por defecto)
- ribbon=true|false. Muestra el ribbon.
- repo=true|false, true si desea incrustar un fichero que está en un repositorio.
- container=contenedor|». Pemite específicar el contenedor del fichero incrustado. Este atributo acepta un string con el siguiente formato: contenedor1(clases){estilos}.contenedor2(clases){estilos}. Útil si se usa con ribbon=true ya que mostrará el ribbon fuera del contenedor.
- filename=nombre-del-fichero-gist|». Si tiene un Gist con ficheros múltiples puede específicar que fichero desea incrustar de lo contrario se muestra el primer fichero encontrado.
- account=nombre-de-la-cuenta|». Por defecto GitHutb Get obtendrá el contenido del fichero usando las credenciales establecidas en las opciones de configuración. Este parámetro sobreescribe ese comportamiento permitiendo incrustar contenido desde un repo o gist externo y público.
- htmlenc=true|false. Por defecto aplicará la función htmlspecialchars para evitar que el navegador interprete tags html si desea cambiar este compartamiento establezca el valor de este atributo en false.
Ejemplos
Para incrustar contenido desde GitHub inserte el shortcode en el Post o Página deseada.
Incrustando contenido desde un Repo
[ghget repo="true" container=pre.code(perl)]sysadmin/pscript/filereader[/ghget]
#!/usr/bin/env perl
# This script is released under GPL V2+
open(FILEREAD, "< /home/yoander/projects/cake/.perms");
my @arr;
while (<FILEREAD>) {
my($line) = $_;
chomp($line);
push(@arr,$line);
}
close FILEREAD;
exit join(' ',@arr);
Usanso el atributo filename para un Gist con ficheros múltiples
[ghget filename="file2.yaml" container=pre(yaml)]ca53e97e02cbd4e24dc2babc9b676bb7[/ghget]
--- firstName: John lastName: Smith age: 25 job: Software Developer address: streetAddress: 21 2nd Street city: New York state: NY postalCode: 10021 phoneNumber: - type: home number: 212 555-1234 - type: fax number: 646 555-4567 gender: type: male
Usando el atributo account
[ghget repo="true" account=symfony container=pre(markdown)]symfony/README.md[/ghget]
<p align="center"><a href="https://symfony.com" target="_blank"> <img src="https://symfony.com/logos/symfony_dynamic_01.svg" alt="Symfony Logo"> </a></p> [Symfony][1] is a **PHP framework** for web and console applications and a set of reusable **PHP components**. Symfony is used by thousands of web applications and most of the [popular PHP projects][2]. Installation ------------ * [Install Symfony][4] with Composer (see [requirements details][3]). * Symfony follows the [semantic versioning][5] strictly, publishes "Long Term Support" (LTS) versions and has a [release process][6] that is predictable and business-friendly. Sponsor ------- Symfony 7.1 is [backed][27] by - [Rector][29] - [JoliCode][30] - [Les-Tilleuls.coop][31] **Rector** helps successful and growing companies to get the most of the code they already have. Including upgrading to the latest Symfony LTS. They deliver automated refactoring, reduce maintenance costs, speed up feature delivery, and transform legacy code into a strategic asset. They can handle the dirty work, so you can focus on the features. **JoliCode** is a team of passionate developers and open-source lovers, with a strong expertise in PHP & Symfony technologies. They can help you build your projects using state-of-the-art practices. **Les-Tilleuls.coop** is a team of 70+ Symfony experts who can help you design, develop and fix your projects. They provide a wide range of professional services including development, consulting, coaching, training and audits. They also are highly skilled in JS, Go and DevOps. They are a worker cooperative! Help Symfony by [sponsoring][28] its development! Documentation ------------- * Read the [Getting Started guide][7] if you are new to Symfony. * Try the [Symfony Demo application][23] to learn Symfony in practice. * Discover Symfony ecosystem in detail with [Symfony The Fast Track][26]. * Master Symfony with the [Guides and Tutorials][8], the [Components docs][9] and the [Best Practices][10] reference. Community --------- * [Join the Symfony Community][11] and meet other members at the [Symfony events][12]. * [Get Symfony support][13] on GitHub Discussions, Slack, etc. * Follow us on [GitHub][14], [Twitter][15] and [Facebook][16]. * Read our [Code of Conduct][24] and meet the [CARE Team][25]. Contributing ------------ Symfony is an Open Source, community-driven project with thousands of [contributors][19]. Join them [contributing code][17] or [contributing documentation][18]. Security Issues --------------- If you discover a security vulnerability within Symfony, please follow our [disclosure procedure][20]. About Us -------- Symfony development is led by the [Symfony Core Team][22] and supported by [Symfony contributors][19]. [1]: https://symfony.com [2]: https://symfony.com/projects [3]: https://symfony.com/doc/current/reference/requirements.html [4]: https://symfony.com/doc/current/setup.html [5]: https://semver.org [6]: https://symfony.com/doc/current/contributing/community/releases.html [7]: https://symfony.com/doc/current/page_creation.html [8]: https://symfony.com/doc/current/index.html [9]: https://symfony.com/doc/current/components/index.html [10]: https://symfony.com/doc/current/best_practices/index.html [11]: https://symfony.com/community [12]: https://symfony.com/events/ [13]: https://symfony.com/support [14]: https://github.com/symfony [15]: https://twitter.com/symfony [16]: https://www.facebook.com/SymfonyFramework/ [17]: https://symfony.com/doc/current/contributing/code/index.html [18]: https://symfony.com/doc/current/contributing/documentation/index.html [19]: https://symfony.com/contributors [20]: https://symfony.com/security [22]: https://symfony.com/doc/current/contributing/code/core_team.html [23]: https://github.com/symfony/symfony-demo [24]: https://symfony.com/coc [25]: https://symfony.com/doc/current/contributing/code_of_conduct/care_team.html [26]: https://symfony.com/book [27]: https://symfony.com/backers [28]: https://symfony.com/sponsor [29]: https://getrector.com [30]: https://jolicode.com [31]: https://les-tilleuls.coop
Ejemplo exótico
En este ejemplo usaremos el atributo container creando 2 div y dándole estilos para crear el efecto de una cita
[ghget htmlenc=false container="div(myclass1){border-left:3px solid #2196f3;font-style:italic;}.div{background-color:#ddffff;padding:7px;}(myclass2)"]a9507adb2aa40a23ca7daa1d06ef183a[/ghget]
GNU, which stands for Gnu's Not Unix, is the name for the complete Unix-compatible software system which I am writing so that I can give it away free to everyone who can use it.
Richard Stallman.
Errores
Si GitHub Get no puede obtener el contenido del fichero deseado mostrará un mensaje informativo con el objetivo de darle alguna pista sobre lo que puede estar mal.
Nombre inválido de fichero que está en un Repo
Invalid repo file: sysadmin/shscript/acl-webdev1 (Not Found), Repos
Nombre inválido de fichero que está en un Gist
Invalid file name: file2.json, Gist
Gist inválido
Invalid Gist: ca53e97e02cbd4e24dc2babc9b676bbss7 (Not Found), Gists
Como nota final es recomendable usar este plugin conjuntamente con Transients Manager de modo que puede borrar la cache si lo desea. Todas las llaves de la cache tienen en común la palabra ghget