web-dev-qa-db-fra.com

Comment générer un champ de note dynamique pour un composant personnalisé?

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:

enter image description here

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.

4
mickmackusa

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);
4
Sharky