Ocultar atributos e outros campos no back-end de edição do produto

10

Para facilitar a edição de produtos (e talvez também categorias) para o proprietário da loja, gostaríamos de ocultar algumas guias e campos desnecessários de alguns usuários no back-end do administrador.

Isso significa: ocultar alguns atributos, mas também guias como "análises de clientes", "vendas cruzadas" etc.

Como isso pode ser feito?

Alex
fonte

Respostas:

10

Defina is_visiblecomo 0no atributo e ele não será exibido nos formulários de administração (página do produto e também na página de gerenciamento de atributos).

Você pode fazer isso por meio de uma ferramenta SQL ou programaticamente em um script de instalação:

$installer->updateAttribute('catalog_product', $attribute_code, 'is_visible', '0');
Ben Lessani - Sonassi
fonte
Você sabe se guias vazias desapareceriam automaticamente? E existe uma maneira de tornar esses atributos temporariamente visíveis para os administradores? De qualquer forma - esse ainda seria um bom ponto de partida para um módulo que os torna visíveis por usuário.
1028 Alex
1
Você poderia estender esta - e colocar em suas próprias ACLs para determinar quem poderia / não poderia editá-lo
Ben Lessani - Sonassi
Acabei de perceber que há muito mais coisas do que apenas atributos :-) Editou o título da minha pergunta para deixar isso mais claro.
Alex #
Acho que as guias desaparecem se estiverem vazias. Para mostrá-los, basta adicionar dois observadores para mostrá-los antes da solicitação e ocultá-los depois? A melhor ideia que tenho no momento. E não é à prova de falhas quando duas pessoas estão na loja paralela. Alternativa: observador e altere a consulta de coleção. mas então você terá muito, eu acho ... #
Fabian Blechschmidt 10/10
Eles realmente não desaparecem - e eu estou falando sobre guias que não são sobre os atributos (cross-sell etc.)
Alex
8

Isso é possível com a observação dos eventos core_block_abstract_prepare_layout_before(método removeAttributes()) e core_block_abstract_prepare_layout_after(método removeTabs()).

observação : estou colocando isso em um módulo que adiciona entradas ACL para cada atributo / guia, para que possam ser ocultados de determinados usuários.

Nos observadores, precisamos verificar se estamos no bloco Mage_Adminhtml_Block_Catalog_Product_Edit_Tabse podemos remover guias ou atributos.

/**
 * Overwrite the cache field in the product to remove disabled attributes
 *
 * event: core_block_abstract_prepare_layout_before
 *
 * @param Varien_Event_Observer $event
 */
public function removeAttributes(Varien_Event_Observer $event)
{
    $block = $event->getBlock();
    if (!$block instanceof Mage_Adminhtml_Block_Catalog_Product_Edit_Tabs) {
        return;
    }

    $editableAttributes = $block->getProduct()->getTypeInstance()->getEditableAttributes();
    $adminSession = Mage::getSingleton('admin/session');


    // TODO: remove attribute to hide from the $editableAttributes array

   $block->getProduct()->setData('_cache_editable_attributes', $editableAttributes);
}

/**
 * Remove hidden tabs from product edit
 * event: core_block_abstract_prepare_layout_after
 *
 * @param Varien_Event_Observer $event
 */
public function removeTabs(Varien_Event_Observer $event)
{
    $block = $event->getBlock();
    if (!$block instanceof Mage_Adminhtml_Block_Catalog_Product_Edit_Tabs) {
        return;
    }

    // TODO / Example: remove inventory tab
    $block->removeTab('inventory'); 

    // fix tab selection, as we might have removed the active tab
    $tabs = $block->getTabsIds();

    if (count($tabs) == 0) {
        $block->setActiveTab(null);
    } else {
        $block->setActiveTab($tabs[0]);
    }
}
Alex
fonte
Você chegou a algum lugar com o módulo de configuração da ACL? O problema que estou tendo é que tenho centenas de conjuntos de atributos. Como isso se aplicaria agora, também haveria centenas de guias 'Grupos'.
Anthony Cicchelli
sim ele está sendo executado em um projeto de nós
Alex
Você tem um GIT? Estamos apenas trabalhando no mesmo projeto. Apenas vendo estratégias diferentes. Caso contrário, avisarei quando terminar, como deve ser em breve.
Anthony Cicchelli 11/03/16
Acabamos de criar uma extensão para permitir isso. Ele também usa toda a funcionalidade do Aitoc Permission Module. Então você obtém uma ótima combinação de ambos.
Anthony Cicchelli
Oh interessante. Mas não gosto do Aitoc ... você publica seu módulo? Ours ainda não foi publicado, ...
Alex
0

Uma maneira relativamente fácil de ocultar guias é criar apenas um novo usuário Admin e conceder acesso apenas às áreas que o Dono da loja usará. Manterá as coisas simples para o dono da loja e ainda assim você ou outro desenvolvedor poderá fazer alterações.

andyjv
fonte
Claro - isso funciona para áreas gerais (entradas de menu e assim por diante), mas apenas para muito poucas guias na tela de edição do produto (as revisões podem ser desativadas dessa maneira). Atributos únicos não podem ser desativados.
1155 Alex