Question

Je veux supprimer les éléments suivants de la vente grille de commande:

  • Nouvel ordre RSS
  • Exporter vers:
  • bloc MassAction

pour un rôle d'utilisateur administrateur particulier.

J'utilise actuellement événement adminhtml_block_html_before pour supprimer le bloc MassAction:

ma méthode d'observation:

    public function salesOrderVendorLayout($evt){
        $tabBlock = $evt->getBlock();
        if($tabBlock instanceof Mage_Adminhtml_Block_Sales_Order_Grid){
            $tabBlock->setMassactionIdField('');
        }
    }

entrer image description ici

Mes questions:

  1. Est-ce la bonne façon de supprimer le bloc d'action de masse?
  2. Comment puis-je supprimer les deux blocs restants?
Était-ce utile?

La solution

Je ne pense pas qu'il y ait un moyen de supprimer le lien rss et les types d'exportation par un observateur.
Par exemple, le code qui montre les types d'exportation est la suivante:

<?php if($this->getExportTypes()): ?>
    <td class="export a-right">
        <img src="<?php echo $this->getSkinUrl('images/icon_export.gif') ?>" alt="" class="v-middle"/>&nbsp; <?php echo $this->__('Export to:') ?>
        <select name="<?php echo $this->getId() ?>_export" id="<?php echo $this->getId() ?>_export" style="width:8em;">
        <?php foreach ($this->getExportTypes() as $_type): ?>
            <option value="<?php echo $_type->getUrl() ?>"><?php echo $_type->getLabel() ?></option>
        <?php endforeach; ?>
        </select>
        <?php echo $this->getExportButtonHtml() ?>
    </td>
<?php endif; ?>

La seule façon de le faire apparaître pas est de faire getExportTypes null de retour ou false et la méthode ressemble à ceci:

public function getExportTypes()
{
    return empty($this->_exportTypes) ? false : $this->_exportTypes;
}

_exportTypes est protégée et les seules méthodes publiques que l'accès ne sont getExportTypes pour récupérer et addExportType pour ajouter un nouveau type d'exportation. Il n'y a aucun moyen de les enlever. La même chose vaut pour les listes RSS.
Voici ce que je ferais dans votre cas. Je réécrire le bloc grille de commandes Mage_Adminhtml_Block_Sales_Order_Grid et ajoutez les méthodes suivantes:

public function getExportTypes(){
    return false;
}
public function getRssLists(){
    return false;
}
protected function _prepareMassaction(){
    return $this;
}

Mieux encore, je mettre en œuvre un moyen de toujours être en mesure de leur montrer en changeant un paramètre de configuration dans le back-end (si nécessaire).

public function getExportTypes(){
    if (!Mage::getStoreConfigFlag('some/config/path')){ //if some flag is not set let it behave as default.
        return parent::getExportTypes();
    }
    return false;
}

Autres conseils

Je vois trois façons:

Le facile: CSS

Il suffit d'ajouter un nouveau tout fichier css et vous voulez cacher

Modifier le modèle

Il y a un modèle standard qui est utilisé pour chaque grille et son contenant:

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

Il suffit de changer le modèle dans votre propre fichier layout.xml, copiez le modèle et retirer les pièces que vous ne voulez pas

réécrire le bloc

Réécrire le \Mage_Adminhtml_Block_Catalog_Product_Grid bloc et changer la méthode \Mage_Adminhtml_Block_Catalog_Product_Grid::_prepareMassaction de ne rien faire

Voici ce que je faisais:

class Mynamespace_Mymodule_Block_Adminhtml_Sales_Order_Grid extends Mage_Adminhtml_Block_Sales_Order_Grid{

    protected $_idArray = array();

    public function __construct()
    {
        parent::__construct();
        $this->_idArray = Mage::helper('mymodule')->getUserInfo();
    }

    public function getExportTypes(){
        if($this->_idArray['user_role'] == 'xyz'){
            return false;
        } else{
            return $this->_exportTypes;
        }
    }

    public function getRssLists(){
        if($this->_idArray['user_role'] == 'xyz'){
            return false;
        } else{
            return $this->_rssLists;
        }
    }

    protected function _prepareMassaction(){
        if($this->_idArray['user_role'] == 'xyz'){
            return $this;
        } else{
            parent::_prepareMassaction();
        }
    }

}

getUserInfo() est ma méthode de classe d'aide qui va obtenir le ID utilisateur et le rôle utilisateur admin / séance .

Licencié sous: CC-BY-SA avec attribution
Non affilié à magento.stackexchange
scroll top