Back to top

Autore Topic: Plugin per impedire il salvataggio di un'articolo in determinate condizioni  (Letto 3096 volte)

Offline lejubila

  • Nuovo arrivato
  • *
  • Post: 17
    • Mostra profilo
Salve a tutti,

avrei bisogno di un vostro suggerimento in merito ad un plugin che sto scrivendo.
Il plugin in questione dovrebbe agire sull'editing di un'articolo in fase di conferma e impedirne il salvataggio quando determinate condizioni si verificano facendo rivisualizzare la form con l'articolo corrente e mostrando un messaggio di errore.

Per fare quanto sopra ho utilizzato l'evento onBeforeContentSave,
chiamo
Codice: [Seleziona]
$article->setError( ) per mostrare il messaggio di avvertimento
ed esco dalla funzione con un
Codice: [Seleziona]
return false
Così facendo però la form di editing dell'articolo non viene rimostrata ma esce con il classico errore 500

qui sotto riporto il codice di esempio da me fatto

Codice: [Seleziona]

  function onBeforeContentSave(&$article, $isNew) {

    // Imposto a vero per prova
    $badword_present = true;


    if ( $badword_present ) {
       $article->setError($error_message." ".implode(', '), $badword_present );

       return false;
    }

    return true;
  }

Qualcuno può darmi una mano ? Mi basta anche solo un suggerimento.

Grazie.
David.

mau_develop

  • Visitatore
come fare così al volo non saprei, ti direi scemenze poichè nn ricordo il codice a memoria, però

hai provato alla fine della funzione onpreparecontent a ritornare false?

il problema è che se setti l'errore ti ritorna la pag di errore...

altra idea, non puoi fare un controllo ajax?

...magari quando ho un attimo, se non ti hanno dato una soluzione, guardo cosa poter fare... tanto se passa mmleoni te lo dice al volo!  :):)

M.

Offline lejubila

  • Nuovo arrivato
  • *
  • Post: 17
    • Mostra profilo
Ciao mau_develop, grazie della tempestiva risposta
con onpreparecontent non ho provato ma dalla documentazione mi sabra di avere capito che non supporta valori di ritorno

Citazione
5.5.2.3 Return Value
None. Results are returned by modifying the referenced arguments.

Per quanto riguarda il messaggio di errore 500 viene fuori anche se non imposto un messaggio con setError() ma basta che faccia un return false.

Un controllo ajax lo potrei anche fare ma da un punto di vista di programmazione mi sembrava che che sviluppando un plug in che intervenisse lato sever sarebbe stato più immediato a livello di programmazione e anche un pò più sicuro. E invece ho preso una strada senza fine, è da stamani che cerco ma non trovo alcuna risposta.

Grazie ancora della risposta, spero che qualcuno mi dia un suggerimento.

Ciao.

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
ciao,
penso che questo sia il comportamento corretto del plugin "You can also abort the save by returning false"; la mia idea è di aggiungere una nuova view di editing a com_content...

marco
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline lejubila

  • Nuovo arrivato
  • *
  • Post: 17
    • Mostra profilo
Ciao Marco e grazie del suggerimenti.

Se ho capito bene suggerisci di agire creano una nuova view invece di procedere sul fronte del plugin.

Faccio alcune precisazioni che potrebbero essere non corrette in quanto sono alle prime armi sullo siviluppo joomla.

Non ho assolutamente idea di come si possa aggiungere una view ad un componente ma immagino che questo si porti dietro la riscrittura/personalizzazione del controller e/o modello originale del componente intaccando il core base di joomla.

Forse ho detto dell cavolate !!!!

Potresti darmi qualche esempio ?

Ciao,
David.

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
ciao,
 se scrivi una nuova view, aggiungi un qualcosa al core ma non lo modifichi, quindi puoi fare tranquillamente gli aggiornamenti.
 
non mi hai detto se ti serve da front end, ho  ipotizzato fosse così.
nel caso specifico la cosa da fare è copiare la dir /components/com_content/views/article nella stessa posizione e con nome diverso, ed eliminare codice e templates che non servono. dal menù linkerai poi a questa view per l'inserimento degli articoli.

il submit richiamerà la view stessa che effettuerà il controllo: se fallisce ripresenta la form altrimenti istanzierà il controller ed effettuerà il salvataggio ed il redirect, .

il controllo andrebbe fatto sull'entry point, ma sul momento non mi viene in mente nient'altro.

ps: controllers e models restano quelli di joomla.

ciao,
marco
 
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline lejubila

  • Nuovo arrivato
  • *
  • Post: 17
    • Mostra profilo
Si Marco, il controllo viene eseguito nella front-end.

Quindi se ho capito bene dovrei creare una nuova versione della view article copiandola e modificando il template form in modo che al submit invece di invocare il salvataggio nel db invochi nuovamente la stessa view. Quindi nell'entry point della view eseguire i dovuti controlli, in base a questi invocare i salvataggio oppure lasciare proseguire la visualizzazione della form.

Ho capito bene ?

A questo punto mi vengono delle domande:

  • Come entry point intendi il metodo ContentViewArticle->_displayForm() del file components/com_content/views/article/article.html.php ?
  • Come faccio a dalla form ad invocare la visualizzazione view invece del salvataggio ? Ho visto che ci sono delle field hidden, forse da qui ?
  • Non so come eseguire il redirect istanziando il controller

Ciao e grazie ancora.

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
sì hai capito. come prima cosa ti consiglio di leggere studiare gli articoli sullo sviluppo di in componente nel wiki.

1. entry point
l'entry point è /components/com_content/content.php

2. campi hidden
l'operazione da compiere è di solito gestita dal parametro task.

3.
è nella documentazione indicata.


ciao,
marco

mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline lejubila

  • Nuovo arrivato
  • *
  • Post: 17
    • Mostra profilo
Citazione
sì hai capito. come prima cosa ti consiglio di leggere studiare gli articoli sullo sviluppo di in componente nel wiki.

Proprio in questi giorni mi stavo leggendo una guida sulla realizzazione dei componenti, probabilmente dovevo dare priorità al wiki che mi appresterò a leggere.


Citazione
1. entry point
l'entry point è /components/com_content/content.php

2. campi hidden
l'operazione da compiere è di solito gestita dal parametro task.

3.
è nella documentazione indicata.

Solo un appunto: modificando l'entry point /components/com_content/content.php modifico una parte di joomla (sbaglio ???)

Grazie per la pazienza.

Ciao,
David.

Offline mmleoni

  • Global Moderator
  • Instancabile
  • *****
  • Post: 5547
  • Sesso: Maschio
  • Just another *nix coder/sysadmin...
    • Mostra profilo
rileggi attentamente: non ti ho mai detto di modificare l'entry point...
ciao
mmleoni web consulting - creazione siti web aziendali ed e-commerce avanzati - sviluppo moduli e componenti Joomla

Offline lejubila

  • Nuovo arrivato
  • *
  • Post: 17
    • Mostra profilo
Citazione
il submit richiamerà la view stessa che effettuerà il controllo: se fallisce ripresenta la form altrimenti istanzierà il controller ed effettuerà il salvataggio ed il redirect, .

il controllo andrebbe fatto sull'entry point, ma sul momento non mi viene in mente nient'altro.

Ho riletto, effettivamente dicevi che la view doveva eseguire il controllo, sotto però dicevi anche che il controllo andrebbe essere fatto sull'entry point. Questa seconda frase mi ha confuso, probabilmente volevi solo dire che il controllo andrebbe fatto sull'entry point ma per essere corretti e non intaccare il core base doveva essere eseguito sulla nuova view.

Grazie ancora, ciao.

 



Web Design Bolzano Kreatif