Joomla.it Forum

Non solo Joomla... => Sviluppo => : urbanspaceman 18 Dec 2009, 02:12:35

: Funzione publish in nuovo componente
: urbanspaceman 18 Dec 2009, 02:12:35
Ciao a tutti, sto cercando modificare un componente per renderlo aderente alle specifiche che servono per il mio sito.

Devo aggiungere l'icona publish nel backend, quando visualizzo la lista degli eventi.

fin qui tutto bene, seguendo una guida in internet sono riuscito a creare l'icona (verde se il campo published della mia tabella è a 1 e rossa se è a 0), c'è anche il link ma una volta cliccato non mi porta a nulla.

il codice per generare i link è questo
$published    = JHTML::_('grid.published', $row, $i);
echo "$published";

poi sempre seguendo la guida ho aggiunto questa funzione nel mio controller

:
function publish() {
global $option;

$cid = JRequest::getVar ('cid', array(), '', 'array');
if($this->_task == 'publish')
{
$publish = 1;
}
else
{
$publish = 0;
}

$helloTable =& JTable::getInstance('pdevents', 'Table');
$helloTable->publish($cid, $publish);
$this->setRedirect( 'index.php?option=' .$option );

}

non so come modificarlo in realtà...
la mia tabella si chiama jos_pastdays e il campo che ci interessa si chiama published.

cid non so esattamente a cosa fa riferimento. ( i miei eventi hanno un campo id)

potreste darmi una dritta in merito?
Grazie a tutti per la disponibilità.

Urban
: Re:Funzione publish in nuovo componente
: mau_develop 18 Dec 2009, 09:39:20
hai aggiunto il campo alla tabella jos_pastdays? ... immagino di si..

   $helloTable =& JTable::getInstance('pdevents', 'Table');

Questo vuol dire che avrai un file table che si occupa della tabella del db, hai aggiunto quel campo anche li?

nel model o nella view ci sarà anche lo script che ti fa vedere verde se publish e rosso se unpublish ..

maurizio
: Re:Funzione publish in nuovo componente
: urbanspaceman 18 Dec 2009, 17:48:02
Ciao Maurizio e grazie per la risposta, dunque vediamo un pò:

nella tabella jos_pastdays ho messo il campo published e il componente sembra utilizzare quel campo correttamente infatti mi visualizza l'icona verde se il valore è 1 e rossa se è 0.

ora non so bene come procedere. immagino che cliccando sull'icona rossa o verde, venga richiamata la funzione che ho incollato nel primo post. Questa funzione al momento si trova nel file pdevent.php nella cartella controllers dove già ci sono le funzioni Save, Remove, Cancel, Edit.

quando clicco sull'iconcina per pubblicare, non succede nulla, si ricarica semplicemente la pagina.

Ora, io ho brutalmente copiato una funzione publish da un tutorial, non sono ferratissimo di joomla ed ho un'infarinatura di php quindi sicuramente sbaglio qualcosa nel richiamare questa funzione (che immagino comunque sia sbagliata)

Nel file pdevents.php nella cartella models c'è una classe che estende JModels e che dentro ospita le funzioni setid, getdata, store e delete.
: Re:Funzione publish in nuovo componente
: mau_develop 19 Dec 2009, 09:26:02

quando clicco sull'iconcina per pubblicare, non succede nulla, si ricarica semplicemente la pagina.

è questo il tuo problema, ogni bottone dell'admin esegue come dici una funzione.
Dovrebbero essere nel controller, ma non è detto.
Se vuoi prendere un'esempio, guarda come funzionano i pulsanti edit cancel etc.

function add() {
      $model = $this->getModel('nome del model');
      $view =& $this->getView('nome della cartella che contiene la view', 'html');
      $view->setModel($model);
      $view->display();
   }

questo esempio di un pulsante add ti manda ad un form per inserire qualcosa. Alla fine avrai allo stesso modo un pulsante submit che chiamerà una funzione presente nel controller che si occuperà di chiamare i metodi contenuti negli altri files del pacchetto che svolgeranno quanto richiesto dal submit.

Questo è il "giro" dell'mvc di Joomla.
-----------------------------------------
Nel file pdevents.php nella cartella models c'è una classe che estende JModels e che dentro ospita le funzioni setid, getdata, store e delete.
---------------------------------------
... appunto, segui ciò che fa "delete" ...

Maurizio
: Re:Funzione publish in nuovo componente
: mmleoni 26 Dec 2009, 22:32:17
ovviamente senza vedere il codice è difficile poter intuire ove stia il problema, ma attenzione che
:
JHTML::_('grid.published', $row, $i)
è solo metà del codice che deve essere inserito, infatti questo metodo genera un javascript che 'flagga' la checkbox della lista e poi effettua il submit della form con il task opportuno (publish o unpublish a seconda dei casi); per creare la checkbox con il corretto attributo id devi usare il seguente codice
:
JHTML::_('grid.id',   $i, $row->id );

a questo punto inserisci un print_r($cid) ed un die() nel metodo publish() per verificare che il routing sia corretto ed i dati arrivino.

ciao,
marco
: Re:Funzione publish in nuovo componente
: robinhoood 22 Sep 2011, 16:57:05
Ciao, sto tentando di aggiungere l'iconcina per la pubblicazione/sospensione nella vista dell'elenco degli elementi nel backend di un componenete helloworld.

il codice è : 

:
<?php foreach($this->items as $i => $item): ?>
    <tr class="row<?php echo $i 2?>">
        <td>
            <?php echo $item->id?>
        </td>
        <td>
            <?php echo JHtml::_('grid.id'$i$item->id); ?>
        </td>
        <td align="center">
            <?php echo $item->title?>
        </td>
        <td align="center">
            <?php echo $item->text?>
        </td>
        <td align="center">
            <?php echo $item->time?>
        </td>
        <td align="center">
            <?php echo JHtml::_('grid.published',$item->published $i); ?>
           
        </td>
    </tr>
<?php endforeach; ?>


l'icona compare ma se la clicco mi torna alla pagina principale del componente.
Ho cercato in giro per il web altri esempi e documentazione, tentando anche di prendere ispirazione da altri componenti nativi in joomla 1.7....purtroppo non sono riuscito a combinare nulla di buono....

Vi ringrazio per l'aiuto che mi darete!
 :)
: Re:Funzione publish in nuovo componente
: lucaguida 10 Feb 2012, 12:22:50
non so se può ancora servirti, visto che è passato parecchio tempo, ma avevo lo stesso tuo problema ed ho risolto aggiungendo al fondo del form della pagina con la lista un input hidden che valorizza il controller

<input type="hidden" name="controller" value="controller che vuoi chiamare" />

e ora funziona
ciao