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?

Alex
la source

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');
Ben Lessani - Sonassi
la source
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]);
    }
}
Alex
la source
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.

andyjv
la source
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