Joomla.it Forum

Non solo Joomla... => Sviluppo => : j3n4 07 Nov 2013, 19:38:26

: Inserimento di una checkbox quando editiamo un articolo (PLUGIN)
: j3n4 07 Nov 2013, 19:38:26
Salve a tutti,
in questo ultimo periodo ho intenzione di migliorare il plugin che ho proposto tempo fa anche su questo forum.
Quindi sto cercando di capire come forzare il plugin a far comparire una checkbox quando voglio editare un articolo.
Sono indeciso se usare:
:
function onDisplay($name)
oppure:
:
public function onContentPrepare($context, &$article, &$params, $page = 0)

Mi sarebbe davvero di grandissimo aiuto un piccolo esempio, visto che ho davvero poco tempo da dedicare al mio progetto ma vorrei al tempo stesso proporlo il più completo possibile.

Grazie in anticipo a chi vorrà aiutarmi.

: Re:Inserimento di una checkbox quando editiamo un articolo (PLUGIN)
: mmleoni 07 Nov 2013, 20:03:31
a dire il vero non so di che stai parlando e non ho capito ove tu voglia far apparire questa checkbox e per che farci...  :(

tuttavia non mi risulta un evento onDisplay nell'event handler dei contents...

mah, se mi aiuti a capire magari riesco ad aiutarti  ;)

ciao,
marco
: Re:Inserimento di una checkbox quando editiamo un articolo (PLUGIN)
: j3n4 08 Nov 2013, 12:17:53
ok,
cerco di spiegarmi meglio.
In pratica ho scritto un plugin che fa un ping ai server quando viene inserito un nuovo articolo e questo diciamo che serve a migliorare l'indicizzazione in generale.
Il problema però è che questo plugin tende a pingare anche quando viene fatta una modifica.
Premesso che ciò possa tornare utile per notificare le modifiche, diventa deletereo se lo si esegue troppe volte e questo può succedere se interveniamo a fare due o tre modifiche dopo aver pubblicato un articolo (ad esempio se notiamo qualche errore di ortografia).
Allora l'idea è di far comparire una checkbox quando entriamo ad editare un articolo.
Questa checkbox non è mai spuntata, in modo che il pinger non esegue i ping quando salviamo l'articolo.
Mettendo la spunta alla checkbox invece lo forzeremo a fare il suo dovere.
In parole povere vorrei lasciare all'editor/publisher la facoltà di utilizzare o meno questo plugin.

: Re:Inserimento di una checkbox quando editiamo un articolo (PLUGIN)
: mmleoni 08 Nov 2013, 12:41:48
allora io direi onContentPrepareForm() che sia l'hook migliore.


: Re:Inserimento di una checkbox quando editiamo un articolo (PLUGIN)
: j3n4 08 Nov 2013, 13:40:10
Grazie Marco.
Mi hai messo sulla strada buona, googlando in giro ho trovato questo:
http://docs.joomla.org/Adding_custom_fields_to_the_article_component
Che ne dici? Secondo me si può fare.

Vi faccio sapere come è andata.

: Re:Inserimento di una checkbox quando editiamo un articolo (PLUGIN)
: mmleoni 08 Nov 2013, 14:38:16
oh sì, era esattamente quello che intendevo.
comunque da ciò che ho capito a te interessa solo aggiungere il campo in più e non gestire il db, quindi dovrebbe essere anche una cosa veloce veloce (se la sfiga non ci mette lo zampino, ovviamente).

buon lavoro,
ciao



: Re:Inserimento di una checkbox quando editiamo un articolo (PLUGIN)
: j3n4 11 Nov 2013, 11:44:01
Sono un attimo spaesato.
Alla fine dell'articolo che ho linkato leggo che c'è una patch da installare.
La mia versione di joomla è molto più recente, contavo sul fatto che avessero risolto questo discorso e non fosse necessaria.
In pratica ecco cosa ho fatto, giusto per vedere se funzionava:

Ho creato una directory e l'ho chiamata pingservices all'interno del plugin.
All'interno ho creato un file che si chiama pingservices.xml, ecco il codice:
:
<?xml version="1.0" encoding="utf-8"?>
   <form>
      <fields name="pingservices">
         <fieldset name="pingservices" label="Ping Services">
            <field
                name="ping_or_not"
                type="checkbox"
                label="Ping this article"
                description="Set ping services on for ping this article to spieders."
                class="inputbox"
                value="1"
                default="0"
            />
         </fieldset>
      </fields>
   </form>

Poi ho modificato l'installer in questo aggiungendo questa dicitura:

:
<folder>pingservices</folder>
Ho controllato che il file, dopo l'installazione, fosse presente e infatti c'è.
 
Infine ho aggiunto questa funzione al codice del plugin:
:
    function onContentPrepareForm($form, $data){
        if (!($form instanceof JForm))
        {
            $this->_subject->setError('JERROR_NOT_A_FORM');
            return false;
        }
        // Add the extra fields to the form.
        // need a seperate directory for the installer not to consider the XML a package when "discovering"
        JForm::addFormPath(dirname(__FILE__) . '/pingservices');
        $form->loadFile('pingservices', false);
        return true;   
    }

Sia come upgrade che come installazione ex-novo il plugin non da alcun problema, tuttavia se entro nella schermata di configurazione plugin o nell'editor di articoli ecco l'errore che ottengo:

XML: XML declaration allowed only at the start of the document

Così a naso mi viene da pensare che dovrei usare la patch proposta sul sito, ma oggettivamente non mi piace come idea andare a modificare il core di joomla per fare questa cosa.

Vi viene qualche idea? Suggerimenti?
Grazie anticipatamente.


: Re:Inserimento di una checkbox quando editiamo un articolo (PLUGIN)
: j3n4 11 Nov 2013, 13:26:05
Altro indizio,
aggiungendo questa importazione l'errore scompare:
:
jimport('joomla.form.form');
Sfortunatamente però il form non viene mostrato... credo di essermi avvicinato parecchio alla soluzione ma ho esaurito le idee.

Heeelp! :S
: Re:Inserimento di una checkbox quando editiamo un articolo (PLUGIN)
: j3n4 12 Nov 2013, 15:11:19
Ho risolto.

Ho tolto la dicitura:
:
jimport('joomla.form.form');

Ma sostanzialmente l'errore risedeva qui:
:
<fields name="pingservices">
Bastava rinominare il nome dei fields in:
:
<fields name="attribs">

Mah... vabè...
: Re:Inserimento di una checkbox quando editiamo un articolo (PLUGIN)
: j3n4 12 Nov 2013, 20:08:00
Ragazzi vi chiedo un ultimo aiutino.

Ho avuto modo di notare che questo sistema funziona solo dal backend, mentre nel frontend non funziona.

Qualcuno sa come posso risolvere?
In pratica mi manca solo questo e ho finito.

: Re:Inserimento di una checkbox quando editiamo un articolo (PLUGIN)
: mmleoni 12 Nov 2013, 20:21:00
mi sa che il template di frontend non preveda il caricamento di campi aggiuntivi, ma visualizzi solo quelli previsti nello stesso. ti consiglierei di dare un'occhiata alla view in

/components/com_content/views/form/tmpl/edit.php


ciao,
marco

: Re:Inserimento di una checkbox quando editiamo un articolo (PLUGIN)
: j3n4 12 Nov 2013, 20:27:34
Stavo pensando la stessa cosa... mi sa che è un vicolo cieco... credo che dovrò cambiare strada e fare un mero bottone che da frontend lancia il ping e buonanotte.

Anche perchè l'idea di base è scegliere quando usarlo e quando no, ma soprattutto, usarlo da frontend, altrimenti non riuscirebbe mai a prendere il canonical link che esponiamo... uffff... tempo sprecato.

Grazie comunque dell'aiuto.

 
: Re:Inserimento di una checkbox quando editiamo un articolo (PLUGIN)
: mmleoni 13 Nov 2013, 08:11:57
... uffff... tempo sprecato.

e dai, due righe su come fare l'override del template form non mi pare una cosa così drammatica.
una cosa che ho imparato su questo forum è che la gente ama smanettare, anche quando non sa che sta facendo  ;D ;D

ciao,
marco
: Re:Inserimento di una checkbox quando editiamo un articolo (PLUGIN)
: j3n4 13 Nov 2013, 09:42:24
Con la documentazione che ha joomla sei costretto a smanettare per forza di cose... gli esempi che trovi sul sito sono spesso sbagliati o deprecati.
Direi che è frustrante.

Tornando in TOPIC, a quanto ho capito si può fare un override del template anche da dentro un plugin. Sto gironzolando, ma di esempi concretri per adesso non ne ho trovati.
Continuo a curiosare in giro.
: Re:Inserimento di una checkbox quando editiamo un articolo (PLUGIN)
: mmleoni 13 Nov 2013, 09:49:54
no, secondo me ti vai ad incasinare. fai come ho detto sopra e metti due righe nella descrizione del plugin per chi vuole usarlo da front end. in fin dei conti si tratta di copiare un file ed incollare le due righe di php che scriverai per recuperare il campo... a dire il vero potresti anche aggiungere la checkbox direttamente nel template, tanto sta facendo un override.

ciao


: Re:Inserimento di una checkbox quando editiamo un articolo (PLUGIN)
: j3n4 13 Nov 2013, 12:35:40
Modificare un template per fare un override è una cosa alquanto banale, quindi concordo con quello che hai proposto tu.
Tuttavia fornire una estensione per joomla che fornisca una soluzione plug&play la reputo, oltre che una cosa molto bella e raffinata, qualcosa che ci lascia sfruttare a pieno questo framework.
Sostanzialmente punto a soddisfare la mia necessità ad esplorare le varie possibilità che offre joomla e questo è prima di tutto una curiosità personale, da cui ne nasce poi qualche prodotto interessante.
Questo è fisiologico.

Il mio approccio è quello di partire da una idea abbozzata, raffinarla, estenderla e infine portarla in astrazione.

La risposta dunque l'ho trovata:
Qui parlano del problema e c'è codice di riferimento fornito da Amy Stephen:
https://groups.google.com/forum/#!topic/joomla-dev-general/OREGHw6YpzQ

Il codice in questione l'ho installato e da backend mi fornisce l'override:
https://github.com/AmyStephen/Layout-Override-Plugin

Trattasi di modificarlo per farlo funzionare da frontend e incorporare il mio codice, non credo a questo punto che ci siano grandi incognite, ci proverò in questi giorni.

Se ci riesco, il risultato sarà un plugin che si installa e funziona normalmente senza dover modificare nulla.

: Re:Inserimento di una checkbox quando editiamo un articolo (PLUGIN)
: mmleoni 13 Nov 2013, 14:37:22
non per fare il rompiscatole, ma non mi sembra una grande idea.
quanti siti usano il template di default? quasi tutti i templates di un certo spessore effettuano un override della view "form", lo fa anche beez3 che è un template di default di joomla.

così chi installasse il plugin si ritroverebbe la form di editing di front end diversa dal layout del resto del sito. dato che se si ricorre all'editing da fe difficilmente lo si fa per il super admin ma, molto più probabilmente, per vari collaboratori cui non si vuole dare l'accesso al be...

vedi tu.

ciao

: Re:Inserimento di una checkbox quando editiamo un articolo (PLUGIN)
: j3n4 13 Nov 2013, 19:16:02
Se non ricordo male ho letto che c'è una scala gerarchica di esecuzione dell'override.
Nell'ordine che ti ho riportato il template è l'ultimo che esegue l'override, se non viene eseguito prima da qualcosa che si trova sopra di lui.


A questo punto si dipanano due strade, la facile è creare un bottone che lancia il ping senza nemmeno entrare in editing. La difficile è continuare su questa strada... ma anche se mi stuzzica parecchio mi vedo costretto a darti ragione. Correrei il rischio di sviluppare qualcosa di sgradevole ai webmaster e purtroppo poi non si può fare l'override di un plugin che già di suo fa un override... verrebbe fuori una porcata pazzesca.
 
Ok, mi hai convinto, torno all'idea principale e cambio il percorso verso il bottone.... però devi ammettere che la sfida del plugin che fa l'override era allettante eh? ;)


Grazie per i tuoi consigli, ti farò sapere come è andata.
 
: Re:Inserimento di una checkbox quando editiamo un articolo (PLUGIN)
: j3n4 04 Dec 2013, 12:27:02
Ho finito.
Credo che lo posterò anche sul JED, poichè lo ritengo abbastanza maturo per poterlo divulgare... sebbene gli manca ancora la gestione della lingua... ma credo che non la aggiungerò mai poichè fa giusto due cose.
Cosa ho fatto?
Ho spostato la mia progettazione verso il gruppo editors-xtd e ho creato un bottone che estende l'editor.
Ho aggiunto alcuni controlli per evitare che:
Semplicemente se l'articolo ricade in una delle voci sopra citate il bottone non comparirà.

Inoltre ho protetto la pagina del motore con questo codice:

:
define( '_JEXEC', 1 );
define( 'DS', DIRECTORY_SEPARATOR );
define( 'JPATH_BASE', realpath( '..'.DS.'..'.DS.'..'.DS ) );
require_once ( JPATH_BASE .DS.'includes'.DS.'defines.php' );
require_once ( JPATH_BASE .DS.'includes'.DS.'framework.php' );
$mainframe =& JFactory::getApplication('site');
$user =& JFactory::getUser();
if($user->username == "") die ("Login please.");
JSession::checkToken( 'get' ) or die( 'Invalid Token' );

Ci ho messo davvero molto più tempo del previsto ma sono molto soddisfatto.
Grazie a mmleoni per i suoi preziosi consigli.

Alla prossima follia ;)
: Re:Inserimento di una checkbox quando editiamo un articolo (PLUGIN)
: j3n4 04 Dec 2013, 13:31:42
Come da allegato... detto fatto! :)

[allegato eliminato automaticamente dopo un anno]
: Re:Inserimento di una checkbox quando editiamo un articolo (PLUGIN)
: mmleoni 04 Dec 2013, 17:54:51
mi sfugge un poco il concetto di pagina per i motori, ma per il ping back come si può essere loggati?

...ma tanto per continuare la mia opera di rompiscatole  ;D ;D

=& meglio usare il solo =, dato che gli oggetti si presumono passati per reference (php 5.3+)

:
if($user->username == "") die ("Login please.");io preferisco:
:
if(!$user->id) die ("Login please.");ma questo è proprio essere un  vecchio programmatore C rompiscatole...

comunque benvenuto tra i folli pubblicatori di estensioni!

ciao,
marco

: Re:Inserimento di una checkbox quando editiamo un articolo (PLUGIN)
: j3n4 04 Dec 2013, 19:38:25
Vero,
molto più elegante come dici tu, ma ormai l'ho postato così... lo terrò presente per la prossima release.
Cioè... se qualcuno lo usa, allora aggiungo il file della lingua, aggiungo il tuo suggerimento e magari faccio anche un sistema con javascript per animare un pò la finestra... in questo momento è molto spartana.


Per rispondere invece alla tua domanda, non si tratta di ping back, ma di ping update.
Si tratta infatti di mandare i ping agli spider addetti al network discovery, specializzati per i Blog.
Google ne ha veramente tanti, ad esempio blogsearch.google.com.
In sostanza tu gli stai dicendo di venire a vedere l'articolo pubblicato o l'articolo modificato e tempo 24 ore lo spider passa a scandagliare.
E' un servizio di indicizzazione diverso  dallo spider del motore classico oppure lo scan tramite sitemap, ma comunque aiuta parecchio ad incrementare il traffico verso il sito e ne migliora anche l'indicizzazione.
 
Io lo sto testando con successo da qualche mese ed effettivamente utilizzandolo insieme ad altri accorgimenti, come ad esempio l'uso di canonical link, il seo etc etc... le visite si sono triplicate.