Back to top

Autore Topic: [RISOLTO] Plugin - Introduzione di un articolo  (Letto 3988 volte)

Offline came88

  • Nuovo arrivato
  • *
  • Post: 5
    • Mostra profilo
[RISOLTO] Plugin - Introduzione di un articolo
« il: 11 Dic 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 è
Codice: [Seleziona]
$params->get( 'intro_only' )ma non mi funziona, l'errore è
Citazione
Fatal error: Call to a member function get() on a non-object in plugins/content/galleria.php on line 16

Ecco il codice
Codice: [Seleziona]
<?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
« Ultima modifica: 20 Dic 2010, 12:16:39 da came88 »

mau_develop

  • Visitatore
Re:Plugin - Introduzione di un articolo
« Risposta #1 il: 11 Dic 2010, 15:26:30 »
devi fare un override, non un plugin

M.

Offline came88

  • Nuovo arrivato
  • *
  • Post: 5
    • Mostra profilo
Re:Plugin - Introduzione di un articolo
« Risposta #2 il: 18 Dic 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
Codice: [Seleziona]
testo1
{gallery}percorso{/gallery}
testo2
in
Codice: [Seleziona]
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

mau_develop

  • Visitatore
Re:Plugin - Introduzione di un articolo
« Risposta #3 il: 19 Dic 2010, 10:50:38 »
- l'override mi sembra non vada bene
----------------------------------------------
vero

M.

Offline came88

  • Nuovo arrivato
  • *
  • Post: 5
    • Mostra profilo
Re:Plugin - Introduzione di un articolo
« Risposta #4 il: 19 Dic 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

mau_develop

  • Visitatore
Re:Plugin - Introduzione di un articolo
« Risposta #5 il: 19 Dic 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.

Offline came88

  • Nuovo arrivato
  • *
  • Post: 5
    • Mostra profilo
Re:Plugin - Introduzione di un articolo
« Risposta #6 il: 19 Dic 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

mau_develop

  • Visitatore
Re:Plugin - Introduzione di un articolo
« Risposta #7 il: 19 Dic 2010, 23:11:35 »
JRequest

M.

Offline came88

  • Nuovo arrivato
  • *
  • Post: 5
    • Mostra profilo
Re:Plugin - Introduzione di un articolo
« Risposta #8 il: 20 Dic 2010, 12:15:10 »
Grazie mille, ho risolto

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

Codice: [Seleziona]
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}';
}
}

 



Web Design Bolzano Kreatif