Joomla.it Forum
Non solo Joomla... => Sviluppo => : otto9due 13 Feb 2014, 16:54:48
-
Volevo sviluppare un piccolo plugin che integrasse una funzionalità vista su qualche portale di informazioni, ovvero la possibilità, in base al numero di parole presenti in un articolo calcolare il tempo approssimativo di lettura dello stesso articolo.
Avevo pensato ad una cosa del genere.. Ma non funge..
Ho fatto qualche errore?? Ci stò perdendo la testa..
Grazie in anticipo..
<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
class plgplgContentTimeToRead extends JPlugin
{
var $plg_tag = "TimeToRead";
public function __construct(& $subject, $config)
{
parent::__construct($subject, $config);
$this->loadLanguage();
}
public function contaparole($txt) {
return count(explode(" ",$txt));
}
public function onContentPrepare($context, &$article, &$params, $page = 0)
{
$app = JFactory::getApplication();
// cerco l'espressione {TimeToRead} all'interno del content
$regex = "/{".$this->plg_tag."}/i";
preg_match_all($regex,$row->text,$matches);
// Numero di occorrenze
$count = count($matches[0]);
// Se non ci sono occorrenze della stringa {TimeToRead}
// termino l'esecuzione del plugin
if(!$count) return;
// Preparo l'output
// Il testo articolo è contenuto in $testo
$testo = $row->text;
// Conto gli spazi vuoti tra le parole ( dovrei ottenere il numero di parole approssimativo senza contare simboli )
$parole = contaparole($testo);
// Ammettendo che mediamente per leggere una parola ci voglia un secondo,
// divido il numero delle parole per 60 sec
// per ottenere i minuti che ci vogliono per leggere un articolo.
$divisore_min = 60;
$calcolo = $parole/$divisore_min;
$plg_output = "Tempo richiesto per la lettura dell'articolo: ". $calcolo;
// Elaboro i tag del plugin
$row->text = preg_replace( $regex, $plg_output , $row->text );
}
}?>
-
non ti funziona xche hai scopiazzato a caso
$row->text
non è nulla,
o metti &$row al posto di &$article nei parametri della funzione
oppure sostituisci $artcle a $row dentro
-
Anzitutto ti ringrazio per aver risposto..( in effetti era un errore abbastanza evidente :( ma non mi era non ci avevo fatto caso ). Per quanto riguarda il plugin però nonostante abbia modificato il parametro della funzione non funge.. :P
public function onContentPrepare($context, &$row, &$params, $page = 0)
-
hai scritto male il nome della classe
plgplgContentTimeToRead
metti
PlgContentTimetoread
-
Niente non va neanche così.. Anche se qui.. http://docs.joomla.org/J2.5:Creating_a_Plugin_for_Joomla (http://docs.joomla.org/J2.5:Creating_a_Plugin_for_Joomla) mi riporta la classe in piccolo .. es: plgContentTimetoread .
Comunque in entrambe le versioni non sostituisce nulla nell'articolo..
Ovviamente io nell'articolo ho messo {TimeToRead} dove volevo che apparisse..
Magari allego lo zip.. così da avere il tutto.. Ovviamente devo ancora finirlo quindi c'è un parametro non colelgato e qualcosa di incopleto..
[allegato eliminato automaticamente dopo un anno]
-
il problema non era la p minuscola ma plg ripetuto 2 volte,
prova a mettere un die dentro la funzione onContentprepare per vedere se viene eseguita
-
Sisi quello ovviamente l'ho corretto.. come inserisco un die per verificare se viene eseguita la funzione.. Perdonami ma ho iniziato da poco e sto imparando.. Grazie.
-
public function onContentPrepare($context, &$article, &$params, $page = 0)
{
var_dump($article);
die();
Se ti muore la pagina e vedi cosa contiene $article allora il plugin viene eseguito senno no
-
In pratica ho provato ad inserire al posto di tutto quello che c'era prima quello che hai scritto tu sopra.. La pagina si carica tranquillamente.. Ovviamente senza apportare alcuna modifica..
Facendo così invece..
public function onContentPrepare($context, &$row, &$params, $page = 0)
{
var_dump($row);
die();
}
Ci mette solo più tempo a caricare.. ma il risultato è uguale..
-
non ti ho detto di sostituire tutto quello che c'era prima ma di inserire
var_dump($row);
die();
dentro la funzione onContentPrepare
guarda che poi quello che ti ho scritto non fa nulla ma dovrebbe solo apparirti un pagina bianca con il contenuto della variabile article
quindi se non cambia niente è perche non viene eseguito il plugin
-
Sisi mi sn andato a documentare :P .. http://it2.php.net/manual/it/function.var-dump.php (http://it2.php.net/manual/it/function.var-dump.php)
Provo a fare un sec la modidica con il contenuto..
OK prova fatta ma nessun risultato.. Che può essere successo? Com'è possibile che non venga eseguito?
-
ma dove l'hai infilato questo plugin?
il plugin è installato ed abilitato?
non basta metterlo nella cartella dei plugin, giusto per essere chiari
-
Lo installo direttamente su joomla 2.5.. Ti mando user e pass in privato ( tanto è un sito test ).. Perchè a questo punto non capisco davvero dove può essere il blocco.. :-[
Principiante si.. ma a sti livelli no uhauhauha ;D
-
non me le mandare
-
Ho già fatto :) , se non ti è possibile fa nulla.. Non ti preoccupare..
Eventualmente dovesse venirti qualcosa in mente al riguardo.. fammi sapere.. Grazie ancora..
-
il tuo è un problema di naming
se il plugin si chiama timetoread non puoi salvarlo in una cartella ed un file che si chiamano time_to_read non è la stessa cosa ma doveva stare in timetoread
-
Quindi dovrei modificare il nome della cartella e dei file dici? O ho capito male?
-
Risolto.. trovato l'inghippo.. L'errore che avevo fatto era nel richiamare un metodo all'interno della classe stessa che andava chiamato così..
$parole = $this->contaparole($testo);
e non com'era prima .. $parole = contaparole($testo);
In più c'era anche il problema dei nome perchè ( come mi avevi detto "grazie mille " Il file xml deve avere lo stesso nome del plugin e della cartella in cui e' posizionato il plugin)
Ora funziona..