Frage

Ich möchte Folgendes aus dem Verkaufsnetz entfernen:

  • Neue Order RSS
  • Exportieren nach:
  • Massaktionsblock

Für eine bestimmte Administratorrolle.

Ich benutze derzeit adminhtml_block_html_before Ereignis zum Entfernen des Massaktionsblocks:

Meine Beobachtermethode:

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

enter image description here

Meine Fragen:

  1. Ist dies der richtige Weg, um Massenaktionsblock zu entfernen?
  2. Wie kann ich die verbleibenden zwei Blöcke entfernen?
War es hilfreich?

Lösung

Ich glaube nicht, dass es eine Möglichkeit gibt, den RSS -Link und die Exporttypen durch einen Beobachter zu entfernen.
Der Code, der die Exporttypen anzeigt, lautet beispielsweise Folgendes:

<?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; ?>

Die einzige Möglichkeit, es nicht zu machen, ist zu machen getExportTypes Rückkehr null oder false Und die Methode sieht so aus:

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

_exportTypes ist geschützt und die einzigen öffentlichen Methoden, die darauf zugreifen getExportTypes zum Abrufen und addExportType zum Hinzufügen eines neuen Exporttyps. Es gibt keine Möglichkeit, sie zu entfernen. Gleiches gilt für RSS -Listen.
Hier ist, was ich in Ihrem Fall tun würde. Ich würde den Bestellblock neu schreiben Mage_Adminhtml_Block_Sales_Order_Grid und fügen Sie die folgenden Methoden hinzu:

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

Noch besser, ich würde eine Möglichkeit implementieren, sie noch anzeigen zu können, indem ich eine Konfigurationseinstellung im Backend ändern kann (falls erforderlich).

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;
}

Andere Tipps

Ich sehe drei Möglichkeiten:

Das einfache: CSS

Fügen Sie einfach eine neue CSS -Datei hinzu und verstecken Sie alles, was Sie wollen,

Ändern Sie die Vorlage

Es gibt eine Standardvorlage, die für jedes Raster und seinen Behälter verwendet wird:

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

Ändern Sie einfach die Vorlage in Ihrer eigenen layout.xml Datei filen, die Vorlage kopieren und die gewünschten Teile entfernen

Schreiben Sie den Block neu

Schreiben Sie den Block neu \Mage_Adminhtml_Block_Catalog_Product_Grid und ändern Sie die Methode \Mage_Adminhtml_Block_Catalog_Product_Grid::_prepareMassaction nichts tun

Hier ist was ich getan habe:

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();
        }
    }

}

wo getUserInfo() ist meine Helferklassenmethode, die das bekommt Benutzeridentifikation und Benutzer-Rolle aus Admin/Sitzung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit magento.stackexchange
scroll top