Comment faire pour supprimer l'option Exporter dans la grille des ventes / commande?
-
16-10-2019 - |
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('');
}
}
Mes questions:
- Est-ce la bonne façon de supprimer le bloc d'action de masse?
- Comment puis-je supprimer les deux blocs restants?
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"/> <?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();
}
}
}
où getUserInfo()
est ma méthode de classe d'aide qui va obtenir le ID utilisateur et le rôle utilisateur admin / séance .