it-swarm-eu.dev

3.x forma array?

C'è un modo per avere lo stesso campo in un array quando si pubblicano i dati? Poiché ho bisogno che le schede nel mio componente vengano generate dinamicamente in base all'output delle query, non posso inserirle in modo specifico in quel file.

modelli/forme/myform.xml

<fieldset name="myset"
    <field name="language" type="language" class="hidden" ...>
    <field name="sometext" type="text" ...>
/>

visualizzare/myview/tmpl/default.php

foreach ($langs as $lang)
{
    /* html */
    $this->form->setFieldAttribute('language', 'default', $lang['name']);
    echo $this->form->renderFieldSet('myset');
    /* html */
}

porterebbe a dire questo:

| Inglese | Tedesco | Francese |

con una lingua e un campo di testo su ogni scheda. Il problema qui è che quando lo pubblica, pubblica solo l'ultimo stato, quello sarebbe il contenuto di "francese". Quindi c'è un modo per risolvere questo problema e fare in modo che joomla invii un array o soluzioni migliori a questo problema?

Inoltre, c'è un modo per dire a Joomla di mettere quei dati in uno stdObject perché qualcosa in quel set di campi è correlato?

1
Vic

Più campi con lo stesso nome

multiple="true" significa che il tuo unico campo può avere più valori, non che puoi avere più campi con lo stesso nome.

Devi creare campo modulo personalizzato per ottenere più textareas o seleziona con lo stesso nome.

Dal momento che devi solo aggiungere [] alla fine del nome dei campi, extendJFormFieldTextarea e JFormFieldList. Quindi devi solo copiare e incollare le funzioni getInput esistenti e aggiungere [] dopo $this->name.

Queste classi si trovano in libraries/joomla/form/fields, File list.php e textarea.php.

Raggruppamento

L'unico modo per raggruppare i dati correlati è aggiungere <fieldset></fieldset> in <fields></fields>

Esempio da Joomla! nucleo com_content article.xml:

<fields name="attribs" label="COM_CONTENT_ATTRIBS_FIELDSET_LABEL">
  <fieldset name="basic" label="COM_CONTENT_ATTRIBS_FIELDSET_LABEL">
    <field
      name="show_title"
      type="list"
      class="chzn-color"
      label="JGLOBAL_SHOW_TITLE_LABEL"
      description="JGLOBAL_SHOW_TITLE_DESC">
      <option value="">JGLOBAL_USE_GLOBAL</option>
      <option value="1">JSHOW</option>
      <option value="0">JHIDE</option>
    </field>
</fields>

Ora, l'output sarebbe.

<select id="jform_attribs_show_title" name="jform[attribs][show_title]" class="chzn-color chzn-done" style="display: none;">
  <option value="" selected="selected">Use Global</option>
  <option value="1">Show</option>
  <option value="0">Hide</option>
</select>

Tutti fields in questo fieldset saranno in jform[attribs]. <fields> attributo name sarebbe array chiave.

Alla fine finirai con qualcosa del genere.

<fields name="grouped">
  <fieldset name="myset"
      <field name="language" type="mycustomlanguage" class="hidden" ...>
      <field name="sometext" type="mycustomtext" ...>
  />
</fields>
0
Rene Korss

Inserisci multiple="true" nel campo xml

<field name="language" type="language" class="hidden" multiple="true" ...>

1
Gaurav