Pannelli Last updated: 2020-12-26 11:32:01

introduzione dei pannelli da fare...

le Action

Creare nuovo Action

esempio di nuovo action utilizzato nel pannello article del modulo blog

<?php

namespace Modules\Blog\Models\Panels\Actions;

//-------- services --------
use Modules\Xot\Models\Panels\Actions\XotBasePanelAction;
use Modules\Theme\Services\ThemeService;

//-------- bases -----------
class ChangePosAction extends XotBasePanelAction {

    //public $onContainer = false;
    public $onItem = true; //onlyContainer
    //mettere freccette su e giù
    public $icon = '';

    //-- Perform the action on the given models.
    public function handle() {

        //ddd($this->row);
        $this->panel->view();
    }

    // funzione eventualmente richiamata (non è detto che debba essere usata in quanto fanno quasi tutto i crudjob)
    // dopo il submit di un form
    public function postHandle() {
        //dddx(request()->all());
        $data = request()->all();
        dddx($data);

       // codice utile
        \Session::flash('message', 'This is a message!');

        return $this->handle();
     }
}

postHandle è la funzione richiamata da un eventuale form

{!! Form::bsOpenPanel($_panel) !!}

// vari altri tag input

{{ Form::bsSubmit('Salva') }}
{!! Form::close() !!}

esistente nella view rilasciata dalla funzione handle.

...a che servono?

//public $onContainer = false;
public $onItem = true; //onlyContainer
//mettere freccette su e giù
public $icon = '';

servono per indicare se quell'action viene utilizzato come item o container. Può essere utilizzato anche per entrambi.

 

 

Collegare al pannello

si collegano ai panel tramite il metodo actions(), inserendoli nell'array e mettendoli a disposizione del pannello

    public function actions() {
        return [
            new Actions\RateIt(),
            new Actions\ChangePosAction(),
        ];
    }

 

Permessi

ogni azione può essere regolata dalla corrispettiva policy, esempio:

<?php

namespace Modules\Blog\Models\Policies;

use Modules\Xot\Models\Policies\XotBasePolicy;

class ArticlePolicy extends XotBasePolicy {

    public function rate($user,$post){
        return true;
    }

    public function changePos($user,$post){
        return true;
    }
}

Article Policy gestisce i permessi relativi alle action rate e changePos

itemAction Vs containerAction

l'itemAction è un azione che ha il riferimento (oppure ha in sè) una riga/istanza di un modello (item).

 

il containerAction è un azione che non ha riferimento alcuno a nessuna istanza, ma solamente al container (...)... ergo bisogna passargli l'id dell'istanza interessata.

passaggio parametri al containerAction

per passare il riferimento dell'istanza modell tramite parametro utilizzare la funzione

->with(['istance_id'] => 'num');

fields - Campi

Controllano la renderizzazione dei campi di ogni modello, attraverso il public function fields() di ogni pannello.

Esempio semplice:

            (object) [
                'type' => 'Image',
                'name' => 'post.image_src',
            ],

'type' corrisponde al nome di uno dei componenti, che si vuole utilizzare, che si trovano nel modulo Formx in laravel\Modules\FormX\Resources\views\includes\components\input. Da inserire sempre con prima lettera maiuscola.

Nell'esempio type uguale a Image significa che si vuole utilizzare il componente che si trova in laravel\Modules\FormX\Resources\views\includes\components\input\image\field.blade.php.

In caso si volesse utilizzare il componente laravel\Modules\FormX\Resources\views\includes\components\input\image\field_dropzone.blade.php impostare type con ImageDropzone.

 

'name' è il campo che si vuole visualizzare.  In caso di un campo appartenente alla tabella pivot, utilizzare da dicitura tabella_pivot.campo_pivot. Si può inizializzare anche con il nome di una relazione appartenente al modello corrispondente.

            (object) [
                'type' => 'Text',
                'name' => 'productCats',
                'attributes' => ['group_class' => 'col-6', 'class' => 'myclass'],
            ],

 

'attributes'  è un array che può contenere altri dettagli dell'input che si vuole generare:
  • 'group_class' si possono inserire le classi css utilizzare nel componente blade che conterrà l'input.
  • 'class' le classi css utilizzate sull'input.
            (object) [
                'type' => 'Text',
                'name' => 'post.title',
                'rules' => 'required|min:3|max:50|unique:'.$post_table.',title',
                'except' => ['index', 'index_edit'],
            ],
'rules' sono le regole (laravel) che si applicano sul campo in questione.
'except' indica in quali route NON si vuole visualizzare il campo.
            (object) [
                'type' => 'Select',
                'name' => 'productCats',
                'attributes' => ['group_class' => 'col-6'],
                'value' => 10,
                'options' => [10 => 'aaa', 11 => 'bbb'],
            ],
'value' corrisponde all attributo value dell'input, in questo caso il valore di default della select. Nell'esempio si sta utilizzando una semplice select con all'interno il risultato della relazione productCats del modello.
'options' valori che potranno essere selezionati nella select.
            (object) [
                'type' => 'Text',
                'name' => 'cabine',
                'rules' => 'required',
                'comment' => null,
                'col_bs_size' => 4,
                'div_row' => ['open', 'class' => 'm-0'], 
                //oppure
                'div_row' => ['close'], 
                'except' => ['index'],
            ],
 
'div_row' da utilizzare quando c'è bisogno di inserire più campi/fields su una sola riga. Open aprirà un div con class css row, si può aggiungere anche l'elemento 'class' nel caso si voglia aggiugere qualche altro css suddetto div. Da utilizzare in combinazione con
'col_bs_size' che setterà la grandezza del div che conterrà il field in base alle regole del grid di bootstrap.
 
    if(!isset($field->help)){
        $field->help=trans($view.'.field.'.$name.'_help');
    }
...quel $field->help????