Ocultar atributos y otros campos en el backend de edición de producto

10

Para facilitar la edición de productos (y quizás también categorías) para el propietario de la tienda, nos gustaría ocultar algunas pestañas y campos innecesarios de algunos usuarios en el backend de administración.

Esto significa: Ocultar algunos atributos, pero también pestañas como "comentarios de clientes", "venta cruzada", etc.

¿Cómo se puede hacer esto?

Alex
fuente

Respuestas:

10

Establece is_visibleque 0en el atributo y no se mostrará en las formas de administración (la página del producto y también la página de gestión de atributos).

Puede hacerlo a través de una herramienta SQL o mediante programación en un script de configuración:

$installer->updateAttribute('catalog_product', $attribute_code, 'is_visible', '0');
Ben Lessani - Sonassi
fuente
¿Sabes si las pestañas vacías desaparecerían automáticamente? ¿Y hay alguna manera de hacer que esos atributos sean temporalmente visibles para los administradores? De todos modos, este sería un buen punto de partida para un módulo que los haga visibles por usuario.
Alex
1
Puede extender esto y poner sus propias ACL para determinar quién podría / no podría editarlo
Ben Lessani - Sonassi
Me acabo de dar cuenta de que hay muchas más cosas que solo atributos :-) Edité el título de mi pregunta para que quede más claro.
Alex
Creo que las pestañas desaparecen si están vacías. Para mostrarlos, solo agregue dos observadores para mostrarlos antes de la solicitud y ocultarlos después. La mejor idea que tengo en este momento. Y no a prueba de fallas cuando dos personas están en la tienda en paralelo. Alternativa: observar y modificar la consulta de recopilación. pero creo que tendrás mucho, mucho ...
Fabian Blechschmidt
En realidad, no desaparecen, y estoy hablando de pestañas que no son sobre atributos (venta cruzada, etc.)
Alex
8

Esto es posible con la observación de los eventos core_block_abstract_prepare_layout_before(método removeAttributes()) y core_block_abstract_prepare_layout_after(método removeTabs()).

Comentario : estoy poniendo esto en un módulo que agrega entradas de ACL para cada atributo / pestaña para que puedan ocultarse a ciertos usuarios.

En los observadores tenemos que verificar que estamos en el bloque Mage_Adminhtml_Block_Catalog_Product_Edit_Tabsy que podemos eliminar pestañas o 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
fuente
¿Alguna vez llegaste a alguna parte con el módulo de configuración de ACL? El problema que tengo es que tengo cientos de conjuntos de atributos. ¿Cómo se aplicaría esto? Ahora también habría cientos de pestañas de 'Grupos'.
Anthony Cicchelli
sí, se está ejecutando en un proyecto nuestro
Alex
¿Tienes un GIT? Solo estamos trabajando en el mismo proyecto. Solo viendo diferentes estrategias. Si no, te avisaré cuando termine, ya que debería ser pronto.
Anthony Cicchelli
Acabamos de construir una extensión para permitir esto. También utiliza la funcionalidad completa del módulo de permisos de Aitoc. Entonces obtienes una gran combinación de ambos.
Anthony Cicchelli el
Oh, interesante. Sin embargo, no me gusta Aitoc ... ¿publican su módulo? El nuestro aún no se ha publicado, ...
Alex
0

Una forma relativamente fácil de ocultar pestañas es crear un nuevo usuario administrador y dar acceso solo a las áreas que utilizará el propietario de la tienda. Mantendrá las cosas simples para el dueño de la tienda mientras le deja a usted u otro desarrollador la posibilidad de realizar cambios.

andyjv
fuente
Claro, eso funciona para áreas generales (entradas de menú, etc.), pero solo para muy pocas pestañas en la pantalla de edición del producto (las revisiones pueden deshabilitarse así). Los atributos individuales no se pueden deshabilitar.
Alex