Masquer les attributs et autres champs dans le backend d'édition de produit


10

Pour faciliter la modification des produits (et peut-être aussi des catégories) pour le propriétaire de la boutique, nous aimerions masquer certains onglets et champs inutiles de certains utilisateurs dans le backend d'administration.

Cela signifie: masquer certains attributs, mais aussi des onglets tels que "avis clients", "ventes croisées", etc.

Comment cela peut-il être fait?

Réponses:


10

Définissez is_visibleà 0l'attribut et il ne sera pas affiché dans les formes administration (page du produit et aussi la page de gestion des attributs).

Vous pouvez le faire via un outil SQL ou par programme dans un script de configuration:

$installer->updateAttribute('catalog_product', $attribute_code, 'is_visible', '0');

Savez-vous si les onglets vides disparaîtraient automatiquement? Et existe-t-il un moyen de rendre ces attributs temporairement visibles pour les administrateurs? Quoi qu'il en soit - ce serait toujours un bon point de départ pour un module qui les rendrait visibles par utilisateur.
Alex

1
Vous pouvez étendre cela - et mettre vos propres ACL pour déterminer qui pourrait / ne peut pas le modifier
Ben Lessani - Sonassi

Je viens de réaliser qu'il y a beaucoup plus de choses que des attributs :-) J'ai édité le titre de ma question pour que ce soit plus clair.
Alex

Je pense que les onglets disparaissent s'ils sont vides. Pour les montrer, ajoutez simplement deux observateurs pour les montrer avant la demande et les cacher après? La meilleure idée que j'ai en ce moment. Et pas infaillible lorsque deux personnes sont en parallèle dans la boutique. Alternative: observer et modifier la requête de collecte. mais alors tu en auras beaucoup trop je pense ...
Fabian Blechschmidt

En fait, ils ne disparaissent pas - et je parle d'onglets qui ne sont pas des attributs (vente croisée, etc.)
Alex

8

Ceci est possible en observant les événements core_block_abstract_prepare_layout_before(méthode removeAttributes()) et core_block_abstract_prepare_layout_after(méthode removeTabs()).

remarque : je mets cela dans un module qui ajoute des entrées ACL pour chaque attribut / onglet afin qu'elles puissent être cachées à certains utilisateurs.

Dans les observateurs, nous devons vérifier que nous sommes dans le bloc Mage_Adminhtml_Block_Catalog_Product_Edit_Tabset que nous pouvons supprimer des onglets ou des attributs.

/**
 * 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]);
    }
}

Vous êtes-vous déjà rendu quelque part avec le module de configuration ACL? Le problème que j'ai, c'est que j'ai des centaines d'ensembles d'attributs. Comment cela s'appliquerait-il maintenant, il y aurait également des centaines d'onglets "Groupes".
Anthony Cicchelli

oui, il tourne dans un de nos projets
Alex

Avez-vous un GIT? Nous travaillons juste sur le même projet. Juste voir différentes stratégies. Sinon, je vous ferai savoir quand j'aurai fini comme cela devrait être bientôt.
Anthony Cicchelli

Nous venons de construire une extension pour permettre cela. Il utilise également toutes les fonctionnalités du module d'autorisation Aitoc. Vous obtenez donc une excellente combinaison des deux.
Anthony Cicchelli

Oh intéressant. Mais je n'aime pas Aitoc ... publiez-vous votre module? Le nôtre n'est pas encore publié, ...
Alex

0

Un moyen relativement simple de masquer les onglets consiste simplement à créer un nouvel utilisateur Admin et à ne donner accès qu'aux zones que le propriétaire de la boutique utilisera. Gardera les choses simples pour le propriétaire de la boutique tout en laissant à vous ou à un autre développeur la possibilité d'apporter des modifications.


Bien sûr - cela fonctionne pour les zones générales (entrées de menu, etc.), mais uniquement pour très peu d'onglets dans l'écran de modification du produit (les avis peuvent être désactivés comme ça). Les attributs uniques ne peuvent pas être désactivés.
Alex

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.