Ajout d'un élément de formulaire personnalisé à un formulaire Adminhtml
Est-il un moyen d'ajouter un élément de formulaire à un Magento Adminhtml forme sans placer l'élément personnalisé dans le lib/Varian
dossier?
J'ai traqué le code qui correspond essentiellement à un Varian_Data_Form_Element_
usine
public function addField($elementId, $type, $config, $after=false)
{
if (isset($this->_types[$type])) {
$className = $this->_types[$type];
}
else {
$className = 'Varien_Data_Form_Element_'.ucfirst(strtolower($type));
}
$element = new $className($config);
$element->setId($elementId);
if ($element->getRequired()) {
$element->addClass('required-entry');
}
$this->addElement($element, $after);
return $element;
}
Donc, si je suis en train de lire correctement, je veille à ce qu'un VAE de l'attribut frontend retourne un spécifique fieldType, (comme supertextfield
) et le système va instancier/rendre un Varien_Data_Form_Element_Supertextfield
lors de l'affichage de cet attribut du formulaire d'édition.
C'est bien, mais cela signifie que je dois inclure mon formulaire personnalisé élément dans le lib/Varian
hiérarchie de dossiers. Étant donné la façon dont le module orienté vers Magento est, il me semble que c'est de faire le mal.
Je me rends compte que je pouvais jank avec une custo de l'autochargeur ou des liens symboliques dans le répertoire lib, mais je suis principalement intéressé à en apprendre s'il y a
- Une manière canonique pour ajouter des éléments de formulaire pour les attributs
- Une manière canonique pour personnaliser le Magento autochargeur.
source d'informationauteur Alan Storm
Vous devez vous connecter pour publier un commentaire.
C'est un vieux post, mais il peut encore être utile pour quelqu'un :
oui, vous pouvez.
Le code ci-dessous se trouve dans :
app/code/local/MyCompany/MyModule/Block/MyForm.php
Voici le code de votre élément personnalisé, qui est situé dans app/code/local/MyCompany/MyModule/Lib/Varien/Data/Form/Element/ExtendedLabel.php :
La classe
Varien_Data_Form_Abstract
a une méthodeaddType()
où vous pouvez ajouter de nouveaux types d'éléments et de leur classe respective des noms. Pour exploiter cette fonctionnalité, vous pouvez copier le blocMage_Adminhtml_Block_Widget_Form
pour le code local de la piscine et d'étendre la méthode_getAdditionalElementTypes()
:Que la classe
Mage_Adminhtml_Block_Widget_Form
est une classe de base pour toutes les autres classes de forme, malheureusement, juste de la réécriture du bloc dans le fichier de configuration ne fonctionnera pas.EDIT: Si vous avez besoin de l'élément personnalisé types dans un seul formulaire, vous pourriez remplacer la classe spécifique et ajouter le type, il y en surchargeant la méthode
_getAdditionelElementTypes()
. Ce serait une solution plus propre que de copier une importend magento classe au code local de la piscine.EDIT2: en Regardant
Mage_Adminhtml_Block_Widget_Form::_setFieldset()
il y a une autre possibilité: Si l'attribut a une valeur dansfrontend_input_renderer
(par exemple mymodule/element_mytype) puis à un bloc avec ce nom est chargé. Voir aussi Mage/Eav/Model/Entity/Attribute/Frontend/Abstract.php ligne 160. Cela devrait fonctionner sans écraser tout Magento classes.Self help desk frappe à nouveau. Il ressemble à Magento définit les chemins à inclure dans une telle manière que vous pouvez supprimer des fichiers de classe de lib (et pas seulement à partir de la Mage_ espace de noms) dans votre code local succursale de
Lorsque l'autochargeur essaie de charger une lib/Varien classe, il va vérifier votre répertoire. - Ce encore vous met à risque si Varien jamais crée un élément de données avec le même nom que le vôtre, mais que les risques sont relativement faibles.