Joomla.it Forum

Non solo Joomla... => Sviluppo => : came88 11 Dec 2010, 13:07:22

: [RISOLTO] Plugin - Introduzione di un articolo
: came88 11 Dec 2010, 13:07:22
Volevo creare un plugin che modifica un articolo quando è visualizzata solo l'introduzione.
In particolare se in un articolo c'è un galleria immagini SIGE ({gallery}percorso,opzioni{/gallery}), volevo aggiungere l'opzione limit_quantity=n per contenere le immagini, lasciandole invece tutte nell'articolo completo.

Quello che mi serve è il modo per capire se dell'articolo viene visualizzata solo l'introduzione oppure se viene visualizzato tutto.
Ho provato a copiare il codice dal plugin pagebreak e quello che ho trovato è
:
$params->get( 'intro_only' )ma non mi funziona, l'errore è
Fatal error: Call to a member function get() on a non-object in plugins/content/galleria.php on line 16

Ecco il codice
:
<?php

defined
'_JEXEC' ) or die( 'Restricted access' );

jimport'joomla.plugin.plugin' );

class 
plgContentGalleria extends JPlugin
{
function plgContentGalleria( &$subject$params )
{
parent::__construct$subject$params );
}

function onPrepareContent( &$article, &$params$limitstart ) {
global $mainframe;
if (!$params->get'intro_only' ))
return false;

$regex "#{galleria}(.*?){/galleria}#s";
$article->text preg_replace_callback($regex,array($this,"sostituisci"), $article->text);
return true;
}

private function sostituisci($matches) {
if (preg_match('#limit_quantity=#'$matches[1]))
return '{gallery}'.$matches[1].'{/gallery}';
else
return '{gallery}'.$matches[1].',limit_quantity=3{/gallery}';
}
}

Qualcuno sa aiutarmi, magari dicendomi dove posso trovare una guida su queste cose? su api.joomla.com non sono riuscito a trovare niente...

Grazie mille
: Re:Plugin - Introduzione di un articolo
: mau_develop 11 Dec 2010, 15:26:30
devi fare un override, non un plugin

M.
: Re:Plugin - Introduzione di un articolo
: came88 18 Dec 2010, 21:21:06
Intanto ti ringrazio per l'aiuto, ma non mi sembra che sia così: correggimi se sbaglio.
L'override entra in azione dopo che il "testo" (codice html) dell'articolo è stato generato ma prima che venga visualizzato, quindi dopo che il plugin della galleria di immagini ha già modificato il codice {gallery}percorso,parametri{/gallery} nel contenuto da inviare al browser.
Con un override giustamente posso intercettare e modificare questo contenuto, ma io volevo farlo prima che entrasse in azione il plugin della galleria di immagini...
Da quel che ho capito quindi devo fare un plugin che in base a dove venga visualizzato l'articolo aggiunga un parametro o meno a quanto sopra.
Quello che non ho capito (e non so se si può fare a questo punto...) è se un plugin possa sapere dove e come verrà visualizzato l'articolo che sta processando...

Spiego cosa voglio fare: ho una serie di articoli organizzati in categorie che contengono ognuno un po' di foto (dell'ordine di una trentina - quarantina) in una galleria immagini, quindi nell'articolo ci sono le anteprime e cliccando si vede la foto.
Mi piacerebbe usare una vista categoria blog per vedere gli articoli più recenti, ma ovviamente non possono esserci una trentina di miniature per ogni articolo... sarebbero centinaia di miniature in una sola pagina...
Quindi cercavo un modo per ridurre il numero di miniature per articolo quando visualizzato all'interno della categoria.
Aggiungo che ogni articolo oltre alle foto contiene pochissimo testo...
Una soluzione facile che ho trovato è trasformare ogni articolo da
:
testo1
{gallery}percorso{/gallery}
testo2
in
:
testo1
{gallery}percorso,parametro_limitante{/gallery}
testo2
--leggitutto--
testo1
{gallery}percorso{/gallery}
testo2
e non visualizzare il testo introduttivo nell'articolo.
Mi sembra però macchinoso (va fatto in ogni articolo...) e ogni modifica a un articolo sarebbe da fare due volte... comunque meglio che niente

Ricapitolando:
- l'override mi sembra non vada bene
- un plugin può sapere come verrà visualizzato l'articolo?
- soluzione manuale

Qualcuno ha qualche idea o dritta da darmi

Grazie mille
: Re:Plugin - Introduzione di un articolo
: mau_develop 19 Dec 2010, 10:50:38
- l'override mi sembra non vada bene
----------------------------------------------
vero

M.
: Re:Plugin - Introduzione di un articolo
: came88 19 Dec 2010, 13:40:09
Grazie mille

Ti chiedo solo ancora una cosa: per un plugin è possibile sapere come verrà visualizzato un articolo (articolo, sezione blog, categoria blog, prima pagina, feed, ...)?
Non voglio modificare il core di Joomla, per cui se la risposta è si se mi sai dire dove guardare poi mi arrangio in qualche modo, se la risposta è no almeno mi metto l'anima in pace :-)

Ancora grazie
: Re:Plugin - Introduzione di un articolo
: mau_develop 19 Dec 2010, 15:21:56
si ma praticamente tu continui a voler fare un override su un plugin..., come fai ad "infilarti come "ultimo" per poi decidere tu quale sia il content?.
Quì trovi gli eventi, forse quello che ti può venir meglio è il getContent.... ma che evento usa il tuo plugin?
http://blog.joocode.com/cms/joomla/gli-event-handlers-di-joomla/
O fai delle modifiche a quel plugin a seconda che sia richiesta una vista blog o meno o ti prendi il content quando è già bell'e che pronto e cerchi li di fare un parsing e limitare le immagini e quì puoi fare l'override.
: Re:Plugin - Introduzione di un articolo
: came88 19 Dec 2010, 19:15:20
Io volevo inserirmi nel onPrepareContent... Ho visto che dal lato amministrativo di joomla posso decidere l'ordine di esecuzione dei plugins, quindi mi basta mettere il mio plugin prima di quello che visualizza la galleria immagini per poter modificare i parametri passati.

Volevo una cosa del genere:
codice articolo salvato = {gallery}percorso{/gallery} (o eventualmente un altro tag)
evento PrepareContent:
- mioplugin  ->
content = {gallery}percorso,parametro{/gallery} o {gallery}percorso{/gallery} a secondo del caso
- SIGE ->
content = [codice HTML galleria immagini]
...[altri plugins]...

Spero di averti fatto capire come volevo implementare la cosa...

Quello che non ho capito come fare è come capire che tipo di vista l'utente abbia richiesto... Non so che variabile / classe usare per capirlo

Grazie ancora
: Re:Plugin - Introduzione di un articolo
: mau_develop 19 Dec 2010, 23:11:35
JRequest

M.
: Re:Plugin - Introduzione di un articolo
: came88 20 Dec 2010, 12:15:10
Grazie mille, ho risolto

Posto il codice che ho usato nel caso a qualcuno potesse servire

:
class plgContentGalleria extends JPlugin
{
private $limit;

function plgContentGalleria( &$subject, $params )
{
parent::__construct( $subject, $params );
$this->limit = $this->params->get('limit', 3);
if (!is_numeric($limit) || $limit < 0) $limit = 3;
}

function onPrepareContent( &$article, &$params, $limitstart ) {
if (JRequest::getString('view', 'article') == 'article')
return false;

$regex = "#{gallery}(.*?){/gallery}#s";
$article->text = preg_replace_callback($regex,array($this,"sostituisci"), $article->text);
return true;
}

private function sostituisci($matches) {
if (preg_match('#limit_quantity=#', $matches[1]))
return '{gallery}'.$matches[1].'{/gallery}';
else
return '{gallery}'.$matches[1].',limit_quantity='.$this->limit.'{/gallery}';
}
}