J'essaie de développer mon premier composant personnalisé appelé com_image
. En raison de la structure et de la fonction des exigences de mon projet, il était judicieux de cloner le dossier com_contact
Et de dupliquer les tables/lignes de base de données nécessaires. J'ai commenté de nombreuses structures inutiles du composant, mais je dois maintenant ajouter quelque chose.
Comment puis-je générer un bleu/info note pour l'onglet "Éditer l'image" (premier) à administrator/index.php?option=com_image&view=image&layout=edit&id=1
?
Pour mon projet, il n'y a en réalité aucun champ dans le panneau principal du premier onglet. Le champ note n'a besoin que de contenir la valeur location
avec laquelle je fais écho avec succès ...
<div class="row-fluid">
<div class="span9">
<div class="row-fluid form-horizontal-desktop float-cols" >
<div class="span12">
<?php echo "Path: <b>" , $this->item->location , "</b><br>"; ?>
<?php echo "<img src=\"" , $this->item->location , "\">"; ?>
</div>
</div>
</div>
<div class="span3">
<?php echo JLayoutHelper::render('joomla.edit.global', $this); ?>
</div>
</div>
Je ne sais pas comment faire fonctionner $this->form->renderField();
pour moi.
J'ai lu https://docs.joomla.org/Creating_a_custom_form_field_type/en mais cela ne résout que la moitié du problème.
Je voudrais présenter ce composant avec une attention particulière à mise en place pour ma propre formation - veuillez donc ne suggérer que les meilleures pratiques.
Pour être plus précis:
Est-ce que je crée un nouveau fichier .php dans com_image/models/fields
Pour pouvoir étendre JFormFieldNote? Si tel est le cas, comment puis-je transmettre ma valeur $this->item->location
À getLabel()
? Et comment puis-je rappeler la nouvelle note personnalisée à partir de edit.php? Je ne veux pas modifier com_image/config.xml
, Non?
Capture d'écran actuelle:
Je pense que la réponse de GDP n’est pas tout à fait adaptée à mon objectif: Comment puis-je générer dynamiquement du code XML d’un formulaire à partir de PHP?
Ce n'est pas ça: création d'un champ de formulaire 'dynamique' personnalisé
Je pense que c'est assez proche: Passer des arguments pour un champ personnalisé
p.s. S'il existe une meilleure façon de traiter l'élément image, je serais heureux de l'entendre aussi.
Utilisez Form::setFieldAttribute()
. Cela est généralement effectué dans la méthode getForm()
du modèle. Cependant, si c'est uniquement esthétique, cela peut également être fait dans la vue.
Dans / administrator/com_image/models/forms/image.xml (en dehors d'un <fieldset>
C'est bien):
<field
name="myNote"
type="note"
class="alert alert-info"
/>
Dans / administrator/com_image/views/image/view.html.php (juste avant $this->addToolbar();
):
$this->form->setFieldAttribute('myNote', 'label', $this->item->location);
Dans / administrator/com_image/views/image/tmpl/edit.php:
echo $this->form->renderField('myNote');
Pour créer un champ sans modifier le fichier XML:
$note = new \SimpleXMLElement('<field />');
$note->addAttribute('name', 'myNote');
$note->addAttribute('type', 'note');
$note->addAttribute('label', $this->item->location);
$note->addAttribute('class', 'alert alert-info');
$this->form->setField($note);