Stampa
tutorial joomla

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&amp;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&amp;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?