Modificare tabelle del backoffice in Magento

Dove trovare il codice:

In Magento , i dati di molte sezioni del back-office (come il catalogo e gli ordini) sono esposti tramite una tabella . Tutte le tabelle del back-office richiamano lo stesso blocco di codice , che si adatta al tipo di contesto in cui viene richiamato e stampa a video solamente i dati richiesti .
Il blocco di codice si trova in :

app/design/adminhtml/default/default/template/widget/grid.phtml

<?php foreach ($this->getCollection() as $_index=>$_item): ?>
<tr title="<?php echo $this->getRowUrl($_item) ?>"<?php if ($_class = $this->getRowClass($_item)):?> class="<?php echo $_class; ?>"<?php endif;?> >
<?php $i=0;foreach ($this->getColumns() as $_column): ?>
<td class="<?php echo $_column->getCssProperty() ?> <?php echo ++$i==$numColumns?'last':'' ?>">
<?php echo (($_html = $_column->getRowField($_item)) != '' ? $_html : '&nbsp;') ?>
</td>
<?php endforeach; ?>
</tr>
<?php endforeach; ?>

Questo codice stampa il contenuto (righe , colonne e dati) di tutte le tabelle.

Nascondere una riga a seconda del contenuto:

Per nascondere una riga a seconda di ciò che contiene , è necessario per prima cosa accedere ai dati interessati : tutti i dati della tabella sono contenuti nell’array  $_item . Per vedere il contenuto dell’array , incollare prima del blocco di codice precente , questo :

//STAMPARE L’ARRAY CHE CONTIENE I DATI DELLA TABELLA

foreach ($this->getCollection() as $_index=>$_item)
{
print_r ($_item);
}

Aggiornando la pagina si ottiene la stampa del contenuto dell’array . Per ottenere solamente i  dati interessati  , basta indicare al comando “print_r” la loro posizione .

Esempio , per ottenere:

    [_data:protected] => Array
        (
            [entity_id] => 71
            [status] => canceled          << QUESTO 
            [attribute_set_id] => 0

Scrivere , nel blocco di codice aggiunto:

foreach ($this->getCollection() as $_index=>$_item)
{
print_r ($_item->_data['status'])
}

Dopo essersi accertati che sono stati stampati i dati interessati (si può cancellare il blocco di codice appena scritto), è possibile intervenire sul codice che stampa le tabelle , aggiungendo le righe in grassetto:

<?php foreach ($this->getCollection() as $_index=>$_item): ?>
<?php if ( ($_item->_data['status']) != 'canceled'): ?>
<tr title="<?php echo $this->getRowUrl($_item) ?>"<?php if ($_class = $this->getRowClass($_item)):?> class="<?php echo $_class; ?>"<?php endif;?> >
<?php $i=0;foreach ($this->getColumns() as $_column): ?>
<td class="<?php echo $_column->getCssProperty() ?> <?php echo ++$i==$numColumns?'last':'' ?>">
<?php echo (($_html = $_column->getRowField($_item)) != '' ? $_html : '&nbsp;') ?>
</td>
<?php endforeach; ?>
    <?php endif; ?>
</tr>
<?php endforeach; ?>

In questo modo , se la variabile interessata contiene il campo interessato
(nell’esempio “status = canceled”) ,  la riga che contiene il campo non verrà inserita nella tabella .
A questo punto sorge un problema : in Magento , tutte le tabelle richiamano questo blocco di codice , e non è detto che una modifica fatta in una tabella sia necessaria anche in tutte le altre .

Per fare in modo che le altre tabelle non vengano modificate , aggiungere le righe in grassetto al codice:

<?php if (($this->getId()) == IDDELLATABELLA): ?>  // sostituire IDDELLATABELLA con l’ID giusto (si ottiene stampando ($this->getId()) )
<?php foreach ($this->getCollection() as $_index=>$_item): ?>
<?php if ( ($_item->_data['status']) != 'canceled'): ?>
<tr title="<?php echo $this->getRowUrl($_item) ?>"<?php if ($_class = $this->getRowClass($_item)):?> class="<?php echo $_class; ?>"<?php endif;?> >
<?php $i=0;foreach ($this->getColumns() as $_column): ?>
<td class="<?php echo $_column->getCssProperty() ?> <?php echo ++$i==$numColumns?'last':'' ?>">
<?php echo (($_html = $_column->getRowField($_item)) != '' ? $_html : '&nbsp;') ?>
</td>
<?php endforeach; ?>
    <?php endif; ?>
</tr>
<?php endforeach; ?>
<?php endif ?>

Così viene modificata solo la tabella interessata . Per ogni altra tabella da modificare , è necessario creare un nuovo blocco di codice.

0 commenti

Lascia un Commento

Vuoi partecipare alla discussione?
Sentitevi liberi di contribuire!

Lascia un commento