Drupal https://planet.communia.org/ca ca Caches de drupal https://planet.communia.org/ca/content/caches-de-drupal <span class="field-wrapper p-name">Caches de drupal</span> <span class="field-wrapper"><a href="/user/1" class="visually-hidden p-author h-card" rel="author" title="kinta">kinta <img src="https://planet.communia.org/sites/default/files/pictures/aleixwar2.jpg" alt="kinta" /> </a> <a title="View user profile." href="/ca/users/kinta" lang="" about="/ca/users/kinta" typeof="schema:Person" property="schema:name" datatype="">kinta</a></span> <span class="field-wrapper">Thu, 06/07/2018 - 12:04</span> <div class="field-wrapper body field e-content field-node--body field-name-body field-type-text-with-summary field-label-hidden"> <div class="field-items"> <div class="field-item"><p>Caches de drupal</p> </div> </div> </div> <div class="field-wrapper text-content field field-node--field-link field-name-field-link field-type-link field-label-above"> <div class="field-label">Link</div> <div class="field-items"> <div class="field-item"><a href="https://www.dx-experts.nl/blog/2017/drupal-8-development-caching">https://www.dx-experts.nl/blog/2017/drupal-8-development-caching</a></div> </div> </div> <div class="field-wrapper field field-node--field-tags field-name-field-tags field-type-entity-reference field-label-above"> <div class="field-label">Tags</div> <div class="field-items"> <div class="field-item"><a href="/ca/etiquetes/develop" hreflang="ca">develop</a></div> <div class="field-item"><a href="/ca/etiquetes/drupal" hreflang="ca">Drupal</a></div> <div class="field-item"><a href="/ca/etiquetes/cache" hreflang="ca">cache</a></div> </div> </div> <section class="field-wrapper"> <h2 class="field-items">Add new comment</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=6407&amp;2=comment&amp;3=comment" token="7TWLPdUnE5WJ9cRsR9BXb54iS2-o49wgVFIn1_DDqeA"></drupal-render-placeholder> </section> Thu, 07 Jun 2018 10:04:16 +0000 kinta 6407 at https://planet.communia.org https://tecnonucleous.com/2018/06/05/mas-de-115000-sitios-drupal-aun-vulnerables-al-exploit-drupalgeddon2/ https://planet.communia.org/ca/content/httpstecnonucleouscom20180605mas-de-115000-sitios-drupal-aun-vulnerables-al-exploit <span class="field-wrapper p-name">https://tecnonucleous.com/2018/06/05/mas-de-115000-sitios-drupal-aun-vulnerables-al-exploit-drupalgeddon2/</span> <span class="field-wrapper"><a href="/user/5" class="visually-hidden p-author h-card" rel="author" title="mmxals">mmxals <img src="" alt="mmxals" /> </a> <a title="View user profile." href="/ca/users/mmxals" lang="" about="/ca/users/mmxals" typeof="schema:Person" property="schema:name" datatype="">mmxals</a></span> <span class="field-wrapper">Tue, 06/05/2018 - 17:32</span> <div class="field-wrapper text-content field field-node--field-link field-name-field-link field-type-link field-label-above"> <div class="field-label">Link</div> <div class="field-items"> <div class="field-item"><a href="https://tecnonucleous.com/2018/06/05/mas-de-115000-sitios-drupal-aun-vulnerables-al-exploit-drupalgeddon2/">https://tecnonucleous.com/2018/06/05/mas-de-115000-sitios-drupal-aun-vulnerable…</a></div> </div> </div> <div class="field-wrapper field field-node--field-tags field-name-field-tags field-type-entity-reference field-label-above"> <div class="field-label">Tags</div> <div class="field-items"> <div class="field-item"><a href="/ca/etiquetes/drupalgeddon2" hreflang="ca">Drupalgeddon2</a></div> <div class="field-item"><a href="/ca/etiquetes/drupal" hreflang="ca">Drupal</a></div> <div class="field-item"><a href="/ca/etiquetes/seguretat" hreflang="ca">Seguretat</a></div> </div> </div> <section class="field-wrapper"> <h2 class="field-items">Add new comment</h2> <drupal-render-placeholder callback="comment.lazy_builders:renderForm" arguments="0=node&amp;1=6406&amp;2=comment&amp;3=comment" token="qjR9aG1VDb68mtGq5ezh26wE_Zx3ccg2k10s7ku-zh4"></drupal-render-placeholder> </section> Tue, 05 Jun 2018 15:32:40 +0000 mmxals 6406 at https://planet.communia.org Managing multiple drupals (7 and 8, composer and drush) https://planet.communia.org/ca/content/managing-multiple-drupals-7-and-8-composer-and-drush <span class="field-wrapper p-name">Managing multiple drupals (7 and 8, composer and drush)</span> <span class="field-wrapper"><a href="/user/1" class="visually-hidden p-author h-card" rel="author" title="kinta">kinta <img src="https://planet.communia.org/sites/default/files/pictures/aleixwar2.jpg" alt="kinta" /> </a> <a title="View user profile." href="/ca/users/kinta" lang="" about="/ca/users/kinta" typeof="schema:Person" property="schema:name" datatype="">kinta</a></span> <span class="field-wrapper">Tue, 04/03/2018 - 18:38</span> <div class="field-wrapper body field e-content field-node--body field-name-body field-type-text-with-summary field-label-hidden"> <div class="field-items"> <div class="field-item"><p><span>La majoria de projectes en drupal que hem creat des de communia requereixen un manteniment, i quan creix la quantitat de projectes a mantenir es necessita una estratègia per poder fer actuacions en massa com poden ser les instal·lacions de mòduls o llibreries, actualitzacions, neteja de caches o registres per monitoritzar.</span></p> <p><span>Fins la versió 8, drush permetia crear àlies i agrupar-los per fer actuacions per grup. Per exemple es podia fer un grup @autoup que permetia actualitzar els drupals que se sabia que en principi no tenien cap motiu per donar errors en la actualització.</span></p> <p><span>Tot això ha entrat en revisió amb Drupal 8, en el moment en què drupal passa a seguir l’estratègia d’innovació oberta que permet la inclusió de codi no dissenyat especificament per drupal, també conegut com estratègia d’innovació<a class="western" href="https://www.drupal.org/8/standards"> <em>Proudly Found Elsewhere</em></a>(symfony, easyrdf, doctrine, twig...). Per orquestrar totes les dependències es fa via <a class="western" href="https://getcomposer.org/doc/00-intro.md">composer</a>, i concretament a partir de drupal 8 es recomana instal·lar una <a class="western" href="https://github.com/drupal-composer/drupal-project">estructura (scaffolding)</a>.</span></p> <p><span>Això ens dóna aquests canvis en l’estructura del projecte:</span></p> <p><img alt="Drupal 7 structure vs Drupal 8 (with drupal-composer) structure" data-align="center" data-caption="Drupal 7 structure vs Drupal 8 (with drupal-composer) structure" data-entity-type="file" data-entity-uuid="4bd4411c-735b-460a-909a-4db907735ffd" src="/sites/default/files/inline-images/drupal7-vs-drupalcomposer.png" /></p> <p><span>En la qual on realment es gestionen les dependències és una carpeta per sobre de la de web, és en la carpeta arrel de drupal-project on executarem composer per instal·lar dependències.</span></p> <p><span>Tots aquests canvis impliquen una nova perspectiva per gestionar el projecte, ja no podem basar-nos en drush, i de fet la versió de drush 9.x <a class="western" href="https://drushcommands.com/drush-9x/pm/pm:download/">ja ens adverteix</a> que instal·lar mòduls per drush està abandonat.</span></p> <p><span>Com que no he trobat una eina per gestionar múltiples projectes de composer, he creat l’aplicació de consola <a class="western" href="https://github.com/aleixq/druman">druman</a> amb el component de symfony <a class="western" href="https://symfony.com/doc/current/console.html">console command</a>. Així es pot fer una gestió dels projectes siguin basats en drush, o en composer.</span></p> <h2><a id="drumangestor" name="drumangestor"><span><span>Druman gestor de projectes en drupal</span></span></a></h2> <p><span>Aquest programa es basa en una llista definida en yml que estarà a ~/.druman-aliases.yml, on definim algunes propietats per cada projecte: alias, path, groups, manager.</span></p> <p><span>Hi ha un exemple d’un yml a la carpeta examples:</span></p> <ul> <li> <p><span>alias: serà el nom amb el qual indexarem i podrem accedir al projecte.</span></p> </li> <li> <p><span>Path: és la ruta del projecte, si fem servir l’estructura drupal-composer hem de donar l’arrel del projecte (no la de la web). En cas que no fem servir l’estructura drupal-composer hem de posar l’arrel de web. En cas que vulguem un alias remot hem de posar "".</span></p> </li> <li> <p><span>Groups: llista de grups als que pertany el projecte, per exemple autoup si volem fer un grup d’autoactualització o hacked si volem llistar projectes en els quals hem de parar especial atenció a l’hora d’actualitzar o instal·lar mòduls. (es pot posar els noms que vulguin, els que hi han posats a l'exemple són d’exemple).</span></p> </li> <li> <p><span>Manager: Quin gestor farem servir per controlar dependències:</span></p> <ul> <li> <p><span><strong>drush8</strong> Serà útil per la comanda projects:update (sense ús en comanda projects:run), fa servir el gestor drush (v8) per actualitzar seguint el procediment estandar de drupal 7(no recomenat per drupal 8).</span></p> </li> <li> <p><span><strong>drupal-composer</strong> Serà útil per la comanda projects:update (sense ús en comanda projects:run), fa servir el gestor composer per procedir amb l'actualització en estructures drupal-composer.</span></p> </li> <li> <p><span><strong>drush8-alias</strong> Serà útil quan s'actualitza (amb la comanda projects:update) i quan es criden comandes de drush (via comanda projects:run). Indicar el gestor drush8-alias és la via per mantenir un site remot(o local) definit en els àlies de drush, enlloc de reinventar la lògica dels àlies remots de drush, he optat per reaprofitar-ho. Els àlies seran tractats sense canviar al directori de projecte(ja que no està definit path) ni fent un canvi d'usuari, es fa tal com ho fan els àlies de drush(amb els possibles problemes de permisos posteriors que poden sorgir). A l'hora de fer una crida d'una comanda sempre afegirà drush @alias, per tan els àlies de drush i de druman han de coincidir, i s'haura de dir tan sols la comanda de drush, per exemple:</span><br />  </p> <pre> <code class="language-bash">druman project:run -a project_x status</code></pre><p> </p> </li> </ul> </li> </ul> <h3><a id="remots" name="remots"><span><span>Gestió de projectes (només drupal 7) remots.</span></span></a></h3> <p><span>Hem de parar especial atenció que si en un projecte fem servir el manager drush8-alias, per gestionar projectes remots primer haurem de definir l’àlies remot tal com es feia sempre amb drush fins la versió 8. Això és així per no haver de re-escriure la lògica que fa servir drush per connectar a remots (Per afegir un àlies a drush hi ha informació a : <a class="western" href="https://raw.githubusercontent.com/drush-ops/drush/8.x/examples/example.aliases.drushrc.php">https://raw.githubusercontent.com/drush-ops/drush/8.x/examples/example.aliases.drushrc.php</a> ). Així caldrà definir l’àlies a <span>~/.drush/aliases.drushrc.php</span> i a ~/.druman-aliases.yml, potser en un futur això canvia per poder tirar composers en remot.</span></p> <p> </p> <p><span>Si definim un projecte gestionat per <strong>drush8-alias</strong> el path s’haurà de posar en blanc</span></p> <pre> <code class="language-yaml">alias: someexternal_com path: "" groups: hostingatx manager: drush8-alias</code></pre><h2><a name="llista" id="llista"><span><span>Llistar projectes</span></span></a></h2> <p><span>Per volcar la <strong>llista de projectes</strong> podem fer servir:</span></p> <pre> <code class="language-bash">druman projects:list</code></pre><p> </p> <p><span>Per tal de <strong>filtrar</strong> la llista per grup o per origen(local o remot), aquesta ordre permet les següents opcions:</span></p> <pre> <code class="language-bash">druman projects:list -h Usage: projects:list [options] Options: -g, --group[=GROUP] List only projects of specified group -l, --local List only local projects -r, --remote List only remote projects -f, --full Show all fields from list: alias, path, management type and group.</code></pre><p> </p> <h2><a name="projectrun" id="projectrun"><span><span>Executant comandes a l’arrel dels projectes</span></span></a></h2> <p><span>A partir del llistat de projectes definits a .druman-aliases.yml podem realitzar operacions. Podem tirar una ordre a l’arrel del projecte via:</span></p> <pre> <code class="language-bash">projects:run</code></pre><p><span><span>Tindrem les mateixes opcions de filtratge que quan llistem i a més a més l’opció de seleccionar un únic alies directament. Les opcions són:</span></span></p> <pre> <code class="language-bash">druman projects:run -h Usage: projects:run [options] [--] [&lt;order&gt;] Arguments: order Command to run. Options: -g, --group[=GROUP] Run only on these projects which are members of specified group -a, --alias[=ALIAS] Run only on this specific alias -l, --local List only local projects -r, --remote List only remote projects -all, --all Run in all alias, excluding those using drush8-alias manager, if specified no filters will be used </code></pre><p><span>Abans d’executar la comanda ho farà havent <strong>canviat d’usuari</strong> al que sigui el propietari de la carpeta definida al path de l’àlies.</span></p> <h2><a name="projectupdate" id="projectupdate"><span><span>Executant actualitzacions dels projectes</span></span></a></h2> <p><span>Per actualitzar hi ha la comanda <span>druman projects:update</span><span>, </span><span>que permet les mateixes opcions que la comanda </span><span>projects:run</span><span> .</span></span></p> <pre> <code class="language-bash">projects:update -h -g, --group[=GROUP] Run only on these projects which are members of specified group -a, --alias[=ALIAS] Run only on this specific alias -l, --local List only local projects -r, --remote List only remote projects -all, --all Run in all alias, excluding those using drush8-alias manager </code></pre><p><span>La manera com actualitza els projectes gestionats <span>per</span><strong> drush8-alias </strong>o <strong>drush8</strong> segueix les ordres per actualitzar un <strong>drupal 7</strong>. La manera com actualitza els projectes gestionats per <strong>drupal-composer</strong> segueixen el procediment per actualitzar un <strong>drupal 8</strong>. Es pot veure els procediments a <a class="western" href="https://github.com/aleixq/druman/blob/master/src/Command/ManagerRunnerProjectsCommand.php">https://github.com/aleixq/druman/blob/master/src/Command/ManagerRunnerProjectsCommand.php</a> .</span></p> <h2><span><span>Què queda pendent:</span></span></h2> <ul> <li> <p><span>Remots, poder gestionar drupals remots amb composer. Potser la via seria afegir propietats ssh al .druman-aliases.yml . O igual que amb els indicats amb gestor drush8-alias definir un alias remot com explica a <a class="western" href="https://raw.githubusercontent.com/drush-ops/drush/master/examples/example.site.yml">https://raw.githubusercontent.com/drush-ops/drush/master/examples/example.site.yml</a> .</span></p> </li> <li> <p><span>També poder afegir, treure o actualitzar projectes del .druman-aliases.yml interactivament.</span></p> </li> </ul> </div> </div> </div> <div class="field-wrapper field field-node--field-tags field-name-field-tags field-type-entity-reference field-label-inline clearfix"> <div class="field-label">Tags</div> <div class="field-items"> <div class="field-item"><a href="/ca/etiquetes/drupal" hreflang="ca">Drupal</a></div> <div class="field-item"><a href="/ca/etiquetes/tutorials" hreflang="ca">tutorials</a></div> <div class="field-item"><a href="/ca/etiquetes/documentacio" hreflang="ca">documentació</a></div> <div class="field-item"><a href="/ca/etiquetes/composer" hreflang="ca">composer</a></div> <div class="field-item"><a href="/ca/etiquetes/php" hreflang="ca">php</a></div> <div class="field-item"><a href="/ca/etiquetes/drush" hreflang="ca">drush</a></div> </div> </div> Tue, 03 Apr 2018 16:38:23 +0000 kinta 6396 at https://planet.communia.org Linkback module tagged alpha https://planet.communia.org/content/linkback-module-tagged-alpha <span class="field-wrapper p-name">Linkback module tagged alpha</span> <div class="field-wrapper image field field-node--field-image field-name-field-image field-type-image field-label-hidden"> <div class="field-items"> <div class="field-item"> <a href="/sites/default/files/webmention-logo-380_0_0.png"> <img srcset="/sites/default/files/styles/max_325x325/public/webmention-logo-380_0_0.png?itok=WRUx7Pve 325w, /sites/default/files/styles/max_650x650/public/webmention-logo-380_0_0.png?itok=wJueH0N0 380w" sizes="(min-width: 1290px) 325px, (min-width: 851px) 25vw, (min-width: 560px) 50vw, 100vw" src="/sites/default/files/styles/max_325x325/public/webmention-logo-380_0_0.png?itok=WRUx7Pve" alt="" typeof="foaf:Image" /> </a> </div> </div> </div> <span class="field-wrapper"><a href="/user/1" class="visually-hidden p-author h-card" rel="author" title="kinta">kinta <img src="https://planet.communia.org/sites/default/files/pictures/aleixwar2.jpg" alt="kinta" /> </a> <a title="View user profile." href="/ca/users/kinta" lang="" about="/ca/users/kinta" typeof="schema:Person" property="schema:name" datatype="">kinta</a></span> <span class="field-wrapper">Mon, 12/04/2017 - 15:48</span> <div class="field-wrapper body field e-content field-node--body field-name-body field-type-text-with-summary field-label-hidden"> <div class="field-items"> <div class="field-item"><p>The <a href="https://www.drupal.org/project/linkback">Linkback module</a>(<a href="https://planet.communia.org/content/manual-de-linkback-drupal-8">background information</a>) for Drupal 8 has been tagged alpha today!  here a good intro about it written by <a href="http://hongpong.com/">HongPong</a>. We've done a lot of work to get there!</p> <blockquote> <p>Note for alpha1 release:</p> <p>We are proud to bring you the first alpha release of <strong>Linkback</strong>, an interesting suite of modules which can help integrate your website with the wider internet. Linkback provides the backend functionality to save both outgoing and incoming pings and webmentions involving remote sites.</p> <p>This first release focuses on a robust, spam resistant and fault tolerant approach to processing and storing Linkbacks as Drupal entities, which provides a standardized and efficient storage structure that can be easily queried and extended. (Anyone interested in improving the theming is invited to file an issue or share code with us :) More information about the functions in the Linkback suite is in Developer.md and the Readme.md files inside each child module.</p> <p>linkback_pingback creates the appropriate endpoints on your site to receive pingbacks from other sites (that is, someone on a WordPress site includes a link to your site and attempts to send a pingback; linkback_pingback receives the ping, scans the originating site URL to see if it a really existing anchor there, and if so, then it saves a new Linkback with the pingback handler attached to it.</p> <p>linkback_webmention provides much the same functionality for your site to send and receive Webmentions. (see other <a href="https://webmention.net/implementations/" rel="nofollow">Webmention implementations</a> - this module should interoperate with them). Services such as <a href="https://brid.gy/" rel="nofollow">brid.gy</a> can help connect proprietary content silos like Facebook and Twitter to your webmentions.</p> <p>Linkback has been cleverly structured to apply the best of Drupal 8 and Symfony architecture while reapplying many of the ideas from its predecessor <a href="https://drupal.org/project/vinculum" rel="nofollow">Vinculum</a> which provided similar services in Drupal 7. It should be feasible to extend Linkback to store other similar types of entities as records of intra-site communication.</p> <p>Thank you for trying Linkback - it is a product of several years of effort including bringing "<a href="https://indieweb.org/" rel="nofollow">indieweb</a>" principles and specifications into Drupal.</p> </blockquote></div> </div> </div> <div class="field-wrapper field field-node--field-tags field-name-field-tags field-type-entity-reference field-label-inline clearfix"> <div class="field-label">Tags</div> <div class="field-items"> <div class="field-item"><a href="/en/etiquetes/sil-hostil" hreflang="en">sil-hostil</a></div> <div class="field-item"><a href="/ca/etiquetes/webmentions" hreflang="ca">webmentions</a></div> <div class="field-item"><a href="/ca/etiquetes/linkback" hreflang="ca">linkback</a></div> <div class="field-item"><a href="/ca/etiquetes/semantica" hreflang="ca">semantica</a></div> <div class="field-item"><a href="/ca/etiquetes/rdf" hreflang="ca">rdf</a></div> <div class="field-item"><a href="/ca/etiquetes/microformats2" hreflang="ca">microformats2</a></div> <div class="field-item"><a href="/en/etiquetes/pingbacks" hreflang="en">pingbacks</a></div> <div class="field-item"><a href="/ca/etiquetes/drupal-8" hreflang="ca">Drupal 8</a></div> <div class="field-item"><a href="/ca/etiquetes/drupal" hreflang="ca">Drupal</a></div> </div> </div> Mon, 04 Dec 2017 14:48:52 +0000 kinta 6374 at https://planet.communia.org Manual de Linkback per drupal 8 https://planet.communia.org/content/manual-de-linkback-drupal-8 <span class="field-wrapper p-name">Manual de Linkback per drupal 8</span> <div class="field-wrapper image field field-node--field-image field-name-field-image field-type-image field-label-hidden"> <div class="field-items"> <div class="field-item"> <a href="/sites/default/files/webmention-logo-380_0.png"> <img srcset="/sites/default/files/styles/max_325x325/public/webmention-logo-380_0.png?itok=qBkStNvE 325w, /sites/default/files/styles/max_650x650/public/webmention-logo-380_0.png?itok=SU0ngvBJ 380w" sizes="(min-width: 1290px) 325px, (min-width: 851px) 25vw, (min-width: 560px) 50vw, 100vw" src="/sites/default/files/styles/max_325x325/public/webmention-logo-380_0.png?itok=qBkStNvE" alt="" title="webmentions" typeof="foaf:Image" /> </a> </div> </div> </div> <span class="field-wrapper"><a href="/user/1" class="visually-hidden p-author h-card" rel="author" title="kinta">kinta <img src="https://planet.communia.org/sites/default/files/pictures/aleixwar2.jpg" alt="kinta" /> </a> <a title="View user profile." href="/ca/users/kinta" lang="" about="/ca/users/kinta" typeof="schema:Person" property="schema:name" datatype="">kinta</a></span> <span class="field-wrapper">Tue, 05/02/2017 - 00:33</span> <div class="field-wrapper body field e-content field-node--body field-name-body field-type-text-with-summary field-label-hidden"> <div class="field-items"> <div class="field-item"><p><strong>¡¡Aquesta entrada té un contingut amb llenguatge tècnic, sobre com instal·lar i desenvolupar un blog federable-federat dins la blogosfera</strong>!!</p> <h2>Instal·lació i configuració</h2> <p>Avís: el mòdul <a href="https://www.drupal.org/project/linkback">linkback</a> està en desenvolupament, i tot i que hi ha una versió en dev, que sigui en dev significa que to el que explico a continuació és susceptible a canvis.</p> <p>Descarrega el módul de linkbacks i activa linkback_pingback i linkback webmention. El mòdul linkback s'activarà com a dependència. Com que té dependències d'algunes llibreries via composer, s'haurà de modificar el composer.json de l'arrel, això s'haurà de fer cada cop que s'actualitzi el core:</p> <ul> <li> <p>Activar el repo de github per la lib de microformats/test , dependència de mf2:</p> <ul> <li> <pre> composer config repositories.1 vcs https://github.com/microformats/tests</pre></li> </ul> </li> <li> <p>Activar la llibreria de mf2:</p> <ul> <li> <pre> composer require mf2/mf2:dev-master</pre></li> </ul> </li> <li> <p>Activar el client de webmention :</p> <ul> <li> <pre> composer require indieweb/mention-client:dev-master</pre></li> </ul> </li> <li> <p>Afegim el camp linkbacks al tipus de contingut que vulguem (de moment només es pot associar a entitats de tipus node [contingut]). Amb això ja tindrem la base.</p> </li> <li> <p>Hi han poques coses a configurar: si vols processar els linkbacks rebuts o enviats via cron o manualment, per llocs en producció més val confiar en el cron. Arribats a aquest punt quan rebem pingbacks/webmentions la nostra web ho porcessarà.</p> </li> <li> <p>Tot i això podem treure més suc de les relacions de web a web i dotar d'una semàntica bàsica el nostre site, podem triar microformats2 o rdf. Tot i que amb RDF podrem construir descripcions més acurades, com a punt de partida i tenint en compte que volem tenir un blog pel segle XXI amb microformats ja en tindrem prou. En una propera entrada de blog ja especificaré com es podria fer per dotar de descriptors rdf el nostre site i adaptar el mòdul linkbacks per tal que processi rdf's més complexes.</p> </li> </ul> <h2>Oferta microformats2</h2> <p>Pel que fa al processament de microformats2 el mòdul linkbacks ja té tot el que ha de tenir, fa servir la <a href="https://packagist.org/packages/mf2/mf2">llibreria mf2</a>. El que no tindrem preparat és l'oferta de microformats al nostre lloc web. Per fer-ho haurem de modificar una mica el tema que haguem escollit pel nostre drupal. En el nostre cas fem servir un subtema de <a href="http://foundation.zurb.com/">foundation 6</a>, però es pot aplicar al que vulguem. Hi han dos entitats que necessiten ser modificades:</p> <ul> <li> <p>El tipus de contingut que fem servir per crear entrades de blog. Normalment article o blog_entry.</p> </li> <li> <p>L'usuari. Això es configura al directori themes/nomdeltema/nomdeltema.theme i s'afegeixen les plantilles pertinents al directori themes/nomdeltema/templates/.</p> </li> </ul> <h3>Theming del tipus de contingut</h3> <p>Hi han algunes aplicacions globals: e-content pel que fa a body i p-name pel que fa a títols. Així doncs en tots els camps on s'utilitzi aquests camps afegirem la classe corresponent. Al fitxer nomdeltema.theme:</p> <pre> /** * Implements template_preprocess_field(). */ function planet_founding_preprocess_field(&amp;$variables) { $element = $variables['element']; switch($element['#field_name']){ case 'body': $apply_mf = "e-content"; break; case 'title': $apply_mf = "p-name"; break; } if (!empty($apply_mf)){ $variables['attributes']['class'][] = $apply_mf; $variables['items'][0]['content']['#options']['attributes']['class'][] = $apply_mf; } }</pre><p>Un cop fet això podem modificar les plantilles per tal que s'afegeixin algunes classes i per adaptar l'estructura del DOM. A node.html.twig:</p> <pre> /** * El tag de html 'article' es descriu com a: h-entry. * * @todo Remove the id attribute (or make it a class), because if that gets * rendered twice on a page this is invalid CSS for example: two lists * in different view modes. * * @ingroup themeable */ #} {# !MF2 Afegim la descripció de h-entry a l'etiquta article #} &lt;article id="node-{{ node.id }}" {{ attributes.addClass('h-entry') }} &gt; {# !MF2 Afegim el link a la url del node amb text buit i la propietat u-url #} &lt;a class="u-url" href="{{ url }}"&gt;&lt;/a&gt; {{ title_prefix }} {% if teaser %} {# !MF2 En cas de teaser afegir la propietat p-name al títol#} &lt;h1{{ title_attributes.addClass('teaser').addClass('p-name') }}&gt; &lt;a href="{{ url }}" rel="bookmark"&gt;{{ label }}&lt;/a&gt; &lt;/h1&gt; {% elseif not page %} &lt;h2{{ title_attributes }}&gt; {# !MF2 En cas que no sigui teaser i tampoc pàgina completa afegir la propietat p-name al títol #} &lt;a href="{{ url }}" rel="bookmark" class="p-name" &gt;{{ label }}&lt;/a&gt; &lt;/h2&gt; {% elseif page %} {# !MF2 En cas que sigui pàgina completa afegir la propietat p-name al títol #} &lt;span class="hidden p-name"&gt;{{ label }}&lt;/span&gt; {% endif %} {{ title_suffix }} {% if display_submitted %} &lt;small&gt; &lt;p&gt; &lt;div class="posted row"&gt; &lt;div class="columns shrink align-self-middle"&gt; &lt;div class="float-left"&gt; {{ author_picture }} &lt;/div&gt; &lt;div{{ author_attributes.addClass('float-left').addClass('submitted') }}&gt; {# !MF2 Afegim la propietat de data del post dt-published #} {% trans %}Submitted by {{ author_name }} on &lt;time class="dt-published"&gt;{{ date }}&lt;/time&gt;{% endtrans %} {{ metadata }} &lt;/div&gt; {% if content.field_tags|length &gt; 2 and not is_front %} &lt;div class="tags fi-pricetag-multiple"&gt; {{ content.field_tags }} &lt;/div&gt; {% endif %} &lt;/div&gt; &lt;/div&gt; &lt;/p&gt; &lt;/small&gt; {% endif %} {# We hide the comments and links now so that we can render them later. #} &lt;div{{ content_attributes }}&gt; {# En cas que fem servir un tipus de comentari diferent per cada tipus de contingut , Amaguem els comentaris associats al tipus de contingut per poder-lo mostrar després #} {{ content|without('comment','comment_node_blog', 'links', 'field_tags') }} &lt;/div&gt; {{ content.links }} {{ content.comment }} &lt;/article&gt; &lt;hr class="superspace"&gt; </pre><h3>Theming de l'usuari</h3> <p>Pel que fa a l'usuari s'ha d'afegir microformats a l'username insertat a dins el tipus de contingut(modificant la plantilla username), i també a la pròpia pàgina de l'usuari(full). A la pàgina pròpia de l'usuari també afegirem la variable view_mode per tal de poder treure etiquetes només en cas que es mostri l'usuari amb el display 'full'.</p> <p>Haurem d'afegir les propietats de l'usuari:</p> <p>- url</p> <p>- nom d'usuari</p> <p>- thumbnail</p> <p>Amb una estructura(especificada a <a href="http://microformats.org/wiki/microformats-2">http://microformats.org/wiki/microformats-2</a>) similar a: <a href="http://microformats.org/wiki/microformats-2">http://microformats.org/wiki/microformats-2</a> :</p> <pre> &lt;a class="h-card" href="http://url_de_l_usuari"&gt; &lt;img alt="nom de l'autor" src="urldelaimatge.jpg" /&gt; &lt;/a&gt;</pre><p>Pel que fa a <b>thumbnail</b> afegirem la variable userthumb als dos llocs per disposar de la url a la imatge de l'avatar sencera, tant des del node com des de l'usuari. A nomdeltema.theme:</p> <pre> /** * Implements template_preprocess_username(). */ function planet_founding_preprocess_username(&amp;$variables){ if (!$variables['account']-&gt;user_picture-&gt;isEmpty()) { $fid = $variables['account']-&gt;user_picture-&gt;first()-&gt;target_id; $file = \Drupal\file\Entity\File::load($fid); $variables['user_thumb'] = file_create_url($file-&gt;getFileUri()); } } /** * Implements template_preprocess_user * * Add template suggestions and classes */ function planet_founding_preprocess_user(&amp;$variables) { if (!$variables['user']-&gt;user_picture-&gt;isEmpty()) { $variables['user_thumb'] = file_create_url($variables['user']-&gt;user_picture-&gt;entity-&gt;getFileUri()); } $variables['view_mode'] = $variables['elements']['#view_mode']; }</pre><p>Pel que fa a l'estructura del <b>dom username</b> dins cada entrada de blog es mostrarà amb la plantilla username.html.twig:</p> <pre> {# /** * @file * Theme override for displaying a username. * * Available variables: * - account: The full account information for the user. * - name: The user's name, sanitized. * - extra: Additional text to append to the user's name, sanitized. * - link_path: The path or URL of the user's profile page, home page, * or other desired page to link to for more information about the user. * - link_options: Options to set on the \Drupal\Core\Url object if linking the * user's name to the user's page. * - attributes: HTML attributes for the containing element. * * @see template_preprocess_username() * - user_thumb: the thumbnail */ #} {% if link_path -%} &lt;a href="/{{ link_path }}" class="visually-hidden p-author h-card" rel="author" title="{{ name }}"&gt;{{ name }} &lt;img src="{{ user_thumb }}" alt="{{ name }}" /&gt; &lt;/a&gt; &lt;a{{ attributes }}&gt;{{ name }}{{ extra }}&lt;/a&gt; {%- else -%} &lt;span{{ attributes }}&gt;{{ name }}{{ extra }}&lt;/span&gt; {%- endif -%} </pre><p>Pel que fa al display de <b>l'usuari sencer</b> modificarem la plantilla user.html.twig afegirem una estructura similar a:</p> <pre> + * + * - view_mode: the rendered view mode string. */ #} -&lt;article{{ attributes }}&gt; +&lt;article{{ attributes.addClass('h-card') }}&gt; +{% if view_mode == "full" %} + &lt;a class="visually-hidden p-name u-url" href="user/{{ user.uid.value }}" rel="me" title=&gt;{{ user.name.value }}&lt;/a&gt; + &lt;img class="hidden u-photo" src="{{ user_thumb }}" /&gt; +{% endif %}</pre><p>  </p> <h3>Dotar de semàntica els links que afegim al cos de l'entrada de blog</h3> <p>Per tal de poder afegir semàntica als links que afegim via l'editor de text enriquit podem instal·lar el mòdul <a href="https://www.drupal.org/sandbox/kinta/2865999">editorsemanticlink</a> que ens permetrà dotar de semàntica a cada link a que afegim via l'editor ckeditor. (Configurar correctament a admin/config/content/formats/manage/basichtml o admin/config/content/formats/manage/fullhtml afegint atributs class i rel a l'etiqueta a) Amb això ja podrem afegir links semàntics al cos de text de les entrades de blog.</p> <h2>Consum de linkbacks</h2> <p>Cada cop que rebem un linkback s’anirà al lloc d’origen i s’intentarà fer un parsing de la metainformació del lloc que ens menciona, si té microformats2 o RDF crearà un array json que s’emmagatzemarà al camp metainfo del linkback. Si volem utilitzar aquesta metainformació (per exemple per fer llistats de linkbacks filtrables o agrupables), hauriem de mapejar camps del json a camps del linkback.</p> <p>Per fer-ho haurem d’anar a admin/structure/linkback/manage i afegir els camps que vulguem. El mapejarem anant a l’edició del field, i al camp de text afegirem la proietat de l’array json: per exemple si creem el camp autor, al mapeig hi posarem «author/name» per agafar la propietat:</p> <pre> { «autor» : {«name» : «alison»}, «url»: «http://myurl» }</pre><p>Si es vol agafar la propietat url, simplement es posa «url»</p> <p>Cada cop que es guardi processarà el mapeig i assignarà el valor.</p> <p>Pel mapeig hi ha més informació a: <a href="https://www.drupal.org/docs/8/modules/linkback/metainfo-mappinghttps://www.drupal.org/docs/8/modules/linkback/metainfo-mappinghttps://www.drupal.org/docs/8/modules/linkback/metainfo-mapping">https://www.drupal.org/docs/8/modules/linkback/metainfo-mapping</a></p> <h3>Mostrar linkbacks</h3> <p>Un cop fet això ja podrem rebre i enviar linkbacks semàntics i quedarà mostrar a cada entrada de blog un comptador i el llistat de comentaris.</p> <p>Per tenir-ho podem utilitzar <a href="https://www.drupal.org/sandbox/kinta/2873693">el módul Linkback semantic</a>. Que crea el camp semantic_type a l’entitat linkback i instal·la un bloc.</p> <p>Aquest es pot configurar perquè només es mostri als tipus de contingut que ens interessi i farà que quan rebem linkbacks i aquests siguin categoritzables semànticament, es pugui veure un comptador per tipus i un llistat de comentaris agrupats per tipus.</p> <p>També disposa d'una plantilla per tal de poder fer el theming corresponent. Si no convenç la llista de comentaris, es pot fer amb views.</p> </div> </div> </div> <div class="field-wrapper field field-node--field-tags field-name-field-tags field-type-entity-reference field-label-inline clearfix"> <div class="field-label">Tags</div> <div class="field-items"> <div class="field-item"><a href="/en/etiquetes/sil-hostil" hreflang="en">sil-hostil</a></div> <div class="field-item"><a href="/ca/etiquetes/webmentions" hreflang="ca">webmentions</a></div> <div class="field-item"><a href="/ca/etiquetes/linkback" hreflang="ca">linkback</a></div> <div class="field-item"><a href="/ca/etiquetes/semantica" hreflang="ca">semantica</a></div> <div class="field-item"><a href="/ca/etiquetes/rdf" hreflang="ca">rdf</a></div> <div class="field-item"><a href="/ca/etiquetes/microformats2" hreflang="ca">microformats2</a></div> <div class="field-item"><a href="/en/etiquetes/pingbacks" hreflang="en">pingbacks</a></div> <div class="field-item"><a href="/ca/etiquetes/drupal-8" hreflang="ca">Drupal 8</a></div> <div class="field-item"><a href="/ca/etiquetes/drupal" hreflang="ca">Drupal</a></div> </div> </div> Mon, 01 May 2017 22:33:32 +0000 kinta 126 at https://planet.communia.org Módulo gnusocial para drupal8 https://planet.communia.org/content/modulo-gnusocial-para-drupal8 <span class="field-wrapper p-name">Módulo gnusocial para drupal8 </span> <div class="field-wrapper image field field-node--field-image field-name-field-image field-type-image field-label-hidden"> <div class="field-items"> <div class="field-item"> <a href="/sites/default/files/gnusocial-drupal_0.png"> <img srcset="/sites/default/files/styles/max_325x325/public/gnusocial-drupal_0.png?itok=XGc1VuAo 325w, /sites/default/files/styles/max_650x650/public/gnusocial-drupal_0.png?itok=rrdTtP9i 649w, /sites/default/files/styles/max_1300x1300/public/gnusocial-drupal_0.png?itok=cgIvH2fo 800w" sizes="(min-width: 1290px) 325px, (min-width: 851px) 25vw, (min-width: 560px) 50vw, 100vw" src="/sites/default/files/styles/max_325x325/public/gnusocial-drupal_0.png?itok=XGc1VuAo" alt="" typeof="foaf:Image" /> </a> </div> </div> </div> <span class="field-wrapper"><a href="/user/1" class="visually-hidden p-author h-card" rel="author" title="kinta">kinta <img src="https://planet.communia.org/sites/default/files/pictures/aleixwar2.jpg" alt="kinta" /> </a> <a title="View user profile." href="/ca/users/kinta" lang="" about="/ca/users/kinta" typeof="schema:Person" property="schema:name" datatype="">kinta</a></span> <span class="field-wrapper">Fri, 06/03/2016 - 10:05</span> <div class="field-wrapper body field e-content field-node--body field-name-body field-type-text-with-summary field-label-hidden"> <div class="field-items"> <div class="field-item"><p>(English <a href="http://cgit.drupalcode.org/sandbox-kinta-2732077/tree/README.txt?h=8.x-1.x">README</a>).</p> <p>El módulo gnusocial  habilita los comentarios de gnusocial a cualquier tipo de contenido de Drupal 8. Depende únicamente del módulo <a href="https://bojanz.wordpress.com/2015/09/18/d8-composer-definitive-intro/">composer manager</a>  para solucionar las dependencias del plugin de guzzle <a href="https://github.com/guzzle/oauth-subscriber">oauth-subscriber</a>.</p> <p>Puedes usar este módulo para postear un status cuando nuevo contenido es publicado en drupal, o simplemente para añadir cualquier conversación  que viva en una instancia gnusocial que implementa la api de statusnet.</p> <p>Basándome en el plugin de <a href="https://wordpress.org/plugins/wp-gnusocial/">wpgnusocial</a> y su idea de fondo: permitir comentarios de una red federada de conversaciones. </p> <p>Esto se consigue teniendo una cuenta del site en gnusocial (léase communiabot por ejemplo), esta será la que publicará la "notice" en gnusocial cuando un blog post se publique.</p> <p>Hay algunos cambios respeto a wpgnusocial:</p> <ul> <li>El<strong> método de autentificación </strong>entre gnusocial y drupal se hace via Oauth 3-legged. Eso requiere crear previamente una aplicación en tu nodo de gnusocial. Ganamos evitar ir pasando contraseñas de un sitio a otro, y permitimos revocación de la conexión por parte de gnusocial.</li> <li>Posibilidad de <strong>asociar manualmente cualquier conversación </strong>de cualquier instancia gnusocial (configurada en el drupal o no) a un blog post generado, o editarla posteriormente.</li> <li>Se <strong>asocia a</strong> un elemento de la api de statusnet <strong>conversation</strong> (as in <a href="https://git.gnu.io/gnu/gnu-social/blob/master/actions/apiconversation.php">https://git.gnu.io/gnu/gnu-social/blob/master/actions/apiconversation.p…</a> | <a href="https://github.com/andstatus/andstatus/issues/328">https://github.com/andstatus/andstatus/issues/328</a> ).</li> <li><em>Está previsto (no implementado aún) de que si la publicación de comentarios sea en dos sentidos, o sea permitir comentarios en el site y  que la cuenta de gnu social asociada al site publique respuestas-comentarios.</em></li> <li><em>En un futuro se podrá configurar la visualización de la conversación de dos formas, obteniendo el hilo en</em><em> el lado del servidor via php, (tal como está desarrollado actualmente), o e</em><em>n el lado cliente(pendiente), para evitar trabajos en el servidor.</em></li> <li>Theming de la lista de comentarios y de cada status vía plantillas <a href="http://twig.sensiolabs.org/">twig</a>.</li> </ul> <p>Intenta seguir en todo lo que puede las <a href="https://www.drupal.org/coding-standards">recomendaciones de drupal</a>, usando las librerías que usa drupal (<a href="http://docs.guzzlephp.org/en/latest/psr7.html">Guzzle</a>, <a href="http://symfony.com/">symfony</a>...), y usa la <a href="https://api.drupal.org/api/drupal/core%21modules%21field%21field.module/group/field/8.2.x">field api</a> de drupal para insertar los comentarios en las <a href="https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Entity%21entity.api.php/group/entity_api/8.2.x">entidades</a>, con toda la flexibilidad que permite esto.</p> <h3>Pasos para configurarlo</h3> <p>(copiado del <a href="http://cgit.drupalcode.org/sandbox-kinta-2732077/tree/README.txt?h=8.x-1.x">README.txt</a> en inglés) :</p> <pre> If you want to simply attach the conversation --------------------------------------------- You'll have to add the field to the content you want in field configuration check "Gnusocial Comments" and uncheck "Post to GnuSocial". For every post you'll have to manually fill the field with the conversation json url. It's your job to get it. To get full functionality (attach comments and post to gnusocial): ------------------------------------------------------------------ You'll need to configure both in gnusocial and drupal. For Gnusocial part create the user that will act as bot. It will create the statuses anouncing your blog entries, allowing to create a conversation over. Go to: Settings &gt;connections; There click on register an Oauth client applic- ation in right sidebar (https://gnusocialurl/settings/oauthapps). You'll have to register a new application, so fill the fields: - Icon if you want it, - Name: a descriptive name of the app, for example drupal_gnusocial. - Description: Explain this application, for example: Communicates with a drupal site. - Source Url: The drupal url. - Organization: Optionally, the name of the organization that owns the drupal with gnusocial integration. - Homepage: The homepage of the organization . - Callback url: http://yourdrupal/admin/config/services/gnusocial. - Type of application: Browser. - Read-write After that a "Consumer key" and "Consumer secret" will be provided. Copy these in a text editor. Don't close the gnusocial tab (session) yet. We'll go to your drupal instance, there configure in: configuration &gt; services &gt; gnusocial. It will do a 3-legged authentication against the provided gnusocial url, so add the base url of gnusocial ( https://yourgnusocial.url.com ), OAuth consumer key, the "Consumer secret" and click save. After saving, click "update tokens", it will redirect to gnusocial url to complete the authentication, allowing the application to interact with gnusocial, after that it will redirect to drupal and the process will be completed. Developer info: --------------- You can use templates to theme the comments: - field: You can use the field template as gnusocial comments is a field. - gnusocial-conversation.html.twig will be the container of each conversation (between field wrapper and each status). It has the statuses list, the more link, and the conversation link. - gnusocial-status.html.twig will be the template used to render each status. </pre></div> </div> </div> <div class="field-wrapper field field-node--field-tags field-name-field-tags field-type-entity-reference field-label-inline clearfix"> <div class="field-label">Tags</div> <div class="field-items"> <div class="field-item"><a href="/ca/etiquetes/gnusocial" hreflang="ca">Gnusocial</a></div> <div class="field-item"><a href="/ca/etiquetes/drupal" hreflang="ca">Drupal</a></div> <div class="field-item"><a href="/ca/etiquetes/drupal-8" hreflang="ca">Drupal 8</a></div> </div> </div> Fri, 03 Jun 2016 08:05:33 +0000 kinta 113 at https://planet.communia.org