Dopo aver esaminato cosa offre la Jed sono sconfortato. Io mi chiedo perchè per usare due righe di codice dovrei mettere backlink e scemenze varie... capisco fosse un componente complesso. Apro sempre i files per dare un occhiata alle eventuali "imperizie macroscopiche" da correggere prima di inserire quel codice nel mio e vedo cose che voi umani... ma ne parlerò più approfonditamente, per ora accontentatevi di questo codice, pulito, senza nessun obbligo di fare nulla.
Come sempre la soluzione migliore è scriversi da soli le estensioni, non sarà il miglior codice ma almeno pago solo i miei di errori. Così ho messo giù un plugin che ho chiamato "Yoube" che permetterà di inserire negli articoli di joomla le miniature dei video del vostro canale YouTube o condividere quelli degli altri usando l'url di condivisione.
La stringa chiave di ricerca del link all'interno del contenuto è customizzabile, come lo sono le dimensioni oltre a quelle standard proposte da YouTube.
Le impostazioni nella configurazione del plugin avranno effetto su tutti i filmati che inserirete ma aggiungere anche opzioni per ogni articolo non è difficile basta passarlo insieme alla key e allo short url del contenuto. L'array match sarà di 3 elementi anzichè due (un elemento per stringa senza spazi).
Nel punto dell'articolo in cui volete appaia la miniatura del video usate questo codice:
{<vostra_key><spazio><url_youtube>}
Non sono presenti files per la lingua ma anche questo è banale da implementare, a me non occorre e non mi occorre nemmeno che sia un pacchetto da installare, basta copiare la cartella coi files all'interno di /plugins/content/. La cartella si chiamerà come il vostro plugin: yoube/ e conterrà oltre ai files del plugin anche il solito index.html vuoto. Ora il codice:
yoube.php
<?php /** * @package Joomla.Plugin * @subpackage Content.yoube * @author Maurizio <job[at]spazioalchimia.it> * @license GNU General Public License version 2 or later. */ defined('_JEXEC') or die; class PlgContentYoube extends JPlugin{ public function __construct(& $subject, $config){ parent::__construct($subject, $config); } public function onContentPrepare($context, &$article, &$params, $page = 0){ // Don't run this plugin when the content is being indexed if ($context == 'com_finder.indexer'){ return true; } // Plugin key param $plgkey = (string)trim($this->params->get('key', 'youtube')); // Simple performance check to determine whether bot should process further if (strpos($article->text, $plgkey) === false){ // return true; } // Movie size $size = $this->getmediaSize(); // Expression to search for configured plugin key $pattern = '/{'.$plgkey.'\s(.*?)}/i'; preg_match_all($pattern, $article->text, $matched, PREG_SET_ORDER); // see whats founded // print_r($matched); // Array ( [0] => Array ( [0] => {yoube : pippo} [1] => : pippo ) ) foreach($matched as $media){ // Init replacement code $replacement = ''; // Init link to the movie $youbelink = ''; switch((string)$this->params->get('mode', 'iframe')){ case 'iframe': $replacement = '<iframe width="'.$size[0].'" height="'.$size[1].'" src="//www.youtube.com/embed/'.$media[1].'" frameborder="0" allowfullscreen></iframe>'; break; case 'object': $replacement = '<object width="'.$size[0].'" height="'.$size[1].'"> <param name="movie" value="//www.youtube.com/v/'.$media[1].'?hl=it_IT&version=3"></param> <param name="allowFullScreen" value="true"></param><param name="allowscriptaccess" value="always"></param> <embed src="//www.youtube.com/v/'.$media[1].'?hl=it_IT&version=3" type="application/x-shockwave-flash" width="'.$size[0].'" height="'.$size[1].'" allowscriptaccess="always" allowfullscreen="true"></embed> </object>'; break; } $article->text = preg_replace($pattern, $replacement, $article->text); } return true; } private function getmediaSize(){ $size = array(); // media params //-> Sizes: 0->Custom, 1->560x315, 2->640x360, 3->853x480, 4->1280x720 switch($this->params->get('size', '1')){ case '0': $size = array($this->params->get('customw', '560'), $this->params->get('customw', '315')); break; case '1': $size = array('560', '315'); break; case '2': $size = array('640', '360'); break; case '3': $size = array('853', '480'); break; case '4': $size = array('1280', '720'); break; } return $size; } }
E il file "manifesto" yoube.xml
<?xml version="1.0" encoding="utf-8"?> <extension version="3.3" type="plugin" group="content"> <name>Content - Yoube</name> <author>Spazioalchimia</author> <creationDate>Agosto 2014</creationDate> <copyright>Copyright (C) 2014 - 2019 Spazioalchimia. All rights reserved.</copyright> <license>GNU General Public License version 2 or later</license> <authorEmail>job[at]spazioalchimia.it</authorEmail> <authorUrl>www.spazioalchimia.it</authorUrl> <version>1.0</version> <description>PLG_YOUBE_XML_DESCRIPTION</description> <files> <filename plugin="yoube">yoube.php</filename> <filename>yoube.xml</filename> <filename>index.html</filename> </files> <config> <fields name="params"> <fieldset name="basic"> <field name="key" type="text" class="" default="youtube" description="Plugin Key" label="Plugin key" /> <field name="mode" type="list" default="iframe" label="Embed mode" description="Embed mode"> <option value="iframe">IFrame</option> <option value="object">Object (old mode)</option> </field> <field name="size" type="list" default="1" label="Formato" description="Formato"> <option value="0">Custom</option> <option value="1">560x315</option> <option value="2">640x360</option> <option value="3">853x480</option> <option value="4">1280x720</option> </field> <field name="customw" type="text" class="" default="560" description="Larghezza - Only in custom size" label="Larghezza" /> <field name="customh" type="text" class="" default="315" description="Altezza - Only in custom size" label="Altezza" /> </fieldset> </fields> </config> </extension>
Nulla da dire di più... nessun backlink o greetings e potete togliere anche i miei dati nell'xml sostituendoli con i vostri.. contenti?