come estraggo i dati da un campo aggiuntivo k2 che è un array?
<p>sto costruendo un sito che utilizza campi extra k2, ma sto personalizzando l'output, quindi non sto semplicemente tirando l'intero blocco di campi extra.</p><p>normalmente qualcosa del genere funziona per singoli campi di immissione:</p><pre><code>&lt;?php if($this-&gt;item-&gt;extrafields-&gt;streetaddressone-&gt;value != ''): ?&gt; &lt;span class="itemextrafieldsvalue address1"&gt;&lt;?php echo $this-&gt;item-&gt;extrafields-&gt;streetaddressone-&gt;value ?&gt;&lt;/span&gt; &lt;?php endif; ?&gt; </code></pre><p>ma ho un campo che è un elenco a selezione multipla e voglio inserire l'intero array in una riga nella pagina del mio articolo.</p><p>sono un po 'un hack, quindi sono rimasto bloccato su questo.</p>
<p>dipende dal documento .php in cui ti trovi - se ti trovi in ​​item.php, o nei file category-item.php, dovrebbe funzionare quanto segue.</p><p>nella parte superiore del documento, aggiungi questo codice:</p><pre><code>&lt;!-- call to prepare extra fields --&gt; &lt;?php $extrafields = array(); foreach($this-&gt;item-&gt;extra\_fields as $item) { $extrafields[$item-&gt;id] = $item-&gt;value; } ?&gt; </code></pre><p>quindi, ovunque tu voglia chiamare il valore del campo compilato, usa questo:</p><pre><code>&lt;?php if($extrafields[id\_number\_of\_field]!=''):?&gt; &lt;!-- if filled in, then call data --&gt; &lt;?php echo $extrafields[id\_number\_of\_field];?&gt; &lt;!-- actual data call --&gt; &lt;?php endif; ?&gt; </code></pre><p>tag.php funziona in modo leggermente diverso, così come i moduli k2.</p><p>tag.php - non è necessario il codice aggiuntivo in testa, quanto segue chiamerà i dati del campo.</p><pre><code>&lt;?php $extrafields = json\_decode($item-&gt;extra\_fields);?&gt; &lt;?php foreach($extrafields as $key=&gt;$value): ?&gt; &lt;?php if($extrafields[$key]-&gt;id == 'id\_number\_of\_field'&amp;&amp;$extrafields[$key]-&gt;value!=''): ?&gt; &lt;?php echo $extrafields[$key]-&gt;value; ?&gt;, &lt;?php endif; ?&gt; &lt;?php endforeach; ?&gt; </code></pre><p>ancora una volta, con module\_k2\_content, non è necessaria la prima chiamata di dati. ottieni i dati sul campo in questo modo:</p><pre><code>&lt;?php echo $item-&gt;extrafields-&gt;alias\_of\_field-&gt;value ;?&gt; </code></pre><p>spero che sia d'aiuto.</p>
<p>penso che potresti voler provarlo in questo modo:</p><pre><code>$data = $this-&gt;input-&gt;post-&gt;get('jform', array(), 'array'); </code></pre> <p>hai due modi per farlo:</p><ul> <li><p>utilizzando javascript: </p> <p><code>&lt;tr onclick="document.location = 'links.html';"&gt;</code></p></li> <li><p>usando le ancore:</p> <p><code>&lt;tr&gt;&lt;td&gt;&lt;a href=""&gt;text&lt;/a&gt;&lt;/td&gt;&lt;td&gt;&lt;a href=""&gt;text&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;</code></p></li> </ul><p>ho fatto il secondo lavoro usando:</p><pre><code>table tr td a { display:block; height:100%; width:100%; } </code></pre><p>per sbarazzarsi dello spazio morto tra le colonne:</p><pre><code>table tr td { padding-left: 0; padding-right: 0; } </code></pre><p>ecco una semplice demo del secondo esempio: <a href="http://jsfiddle.net/bf729/"><strong>demo</strong></a> </p> L'albero delle espressioni è così potente perché ti consente di trattare il **codice** come **dati** . Gli utenti sono abituati a creare dati, salvarli e tornare in seguito. 

 Gli alberi delle espressioni ti consentono di fare la stessa cosa con il codice. Ad esempio, puoi inserire l'input dell'utente (caselle di controllo, intervalli numerici, ecc.) E tradurlo in un albero di espressioni. Quell'albero di espressioni può quindi essere eseguito o memorizzato per un uso successivo. Molto bello 

 Pensa agli usi pratici relativi alla creazione di rapporti come la creazione e il salvataggio di filtri dati e mappature dei dati. Un altro uso pratico sarebbe quello di supportare flussi di lavoro personalizzati nell'applicazione in base a regole definite dall'utente. 

 Ecco un po 'di codice MSDN sulla serializzazione di alberi di espressioni ( <http://code.msdn.microsoft.com/exprserialization> ) che dovrebbe far scorrere le idee. È possibile utilizzare [DataAdapter.FillSchema](http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldataadapter.fillschema.aspx) . <p>è meglio inserire il link di rimozione al <code>href</code> e al gestore javascript nel <code>onclick</code>.</p><pre><code>&lt;a href="/123/remove/" onclick="removeme(132); return false"&gt;remove&lt;/a&gt; </code></pre><p>in questo modo gli utenti senza javascript potranno comunque utilizzare la tua app (ma con un reindirizzamento a un'altra pagina) e coloro che hanno abilitato javascript useranno la versione javascript. entrambi vedranno un link significativo nella barra di stato.</p><p>se l'azione è significativa solo in questa pagina (mostra/nascondi smth, carica più dati, ad esempio), non dovresti usare <code>&lt;a&gt;</code> tag qui. usa stile <code>&lt;span&gt;</code> con sottolineatura tratteggiata, ad esempio.</p><p>in entrambi i casi, è anche utile scrivere un attributo <code>title</code> sul tuo link che spieghi cosa accadrà (verrà mostrato nella descrizione comando), per gli utenti che non usano le barre di stato.</p> <p>con<em> inline </em>script come quello che hai citato, è improbabile che ci sia<em> much </em>difference; tuttavia, ogni volta che il parser html del browser incontra un tag <code>script</code>, questo:</p><ul> <li>arresta bruscamente</li> <li>crea una stringa del testo nel tag fino alla prima volta che vede la stringa <code>"&lt;/script&gt;"</code></li> <li>passa il testo all'interprete javascript, ascoltando l'output che l'interprete invia quando si esegue un <code>document.write</code></li> <li>aspetta che l'interprete finisca</li> <li>inserisce l'output accumulato ricevuto nel flusso di analisi</li> <li>continua la sua analisi</li> </ul><p>quindi aumentare il numero di volte che questa sequenza deve verificarsi può, in teoria, aumentare il tempo di caricamento della pagina. influisce anche sul grado in cui il parser può &quot;guardare avanti&quot; nel flusso di token, il che potrebbe renderlo meno efficiente.</p><p>tutto ciò sembra davvero drammatico, ma dovresti profilare una pagina reale nei vari browser che ti interessano per determinare se ha avuto un impatto reale.</p><p>quindi, in sintesi, combinale il più possibile. se non riesci a combinare ragionevolmente una coppia, non preoccuparti troppo fino a quando non vedi un problema del mondo reale.</p><p>quanto sopra è per script in linea. naturalmente, se si hanno diversi tag <code>script</code> che si riferiscono a una serie di file javascript esterni, si avrà anche il problema che ciascuno di questi file deve essere scaricato, e l'avvio di una richiesta http è una cosa costosa (comparativamente) e quindi è meglio , in grande stile, per combinarli in un unico file.</p><p>alcune altre cose da considerare:</p><ul> <li>avere molti tag <code>script</code> sparsi nel tuo codice html può rendere difficile la manutenzione dello script</li> <li>separare il tuo codice html e lo script in file separati ti aiuta a limitare il livello di accoppiamento, aiutando di nuovo la manutenzione</li> <li>mettendo lo script in un file separato, è possibile eseguire quel file tramite minifiers/compressors/packer, riducendo al minimo le dimensioni del codice e rimuovendo commenti, lasciandoti libero di commentare nel codice sorgente sapendo che quei commenti saranno privati</li> <li>mettere gli script in file esterni ti dà l'opportunità di mantenere le cose separate dalla funzionalità, e quindi combinarle in un unico file per la pagina (compresso/minificato/impacchettato) per una consegna efficiente al browser</li> </ul><p>di più:</p><ul> <li> <a href="http://developer.yahoo.com/performance/rules.html">le &quot;migliori pratiche per accelerare il tuo sito web&quot; di yui</a> </li> <li> <a href="http://code.google.com/speed/page-speed/docs/rules\_intro.html">&quot;best practice per le prestazioni web&quot; di google</a> </li> </ul> Non sono sicuro se il suo buon approccio per risolverlo, ma ha funzionato per me. 

 Ho appena inserito in quel tavolo la versione corretta e i nomi delle migrazioni già applicate, l'ho fatto in EF Core e funziona davvero, ma per favore aspetta qualcuno che si accorga di ciò che sto scrivendo. 

 Il problema che vedo è che hai bisogno di riempire altri due campi (in EF Core ci sono solo due colonne) ma penso che puoi riceverli usando per esempio SQL Profiler <p>fallo con <a href="https://docs.joomla.org/sql\_form\_field\_type">tipo di campo modulo sql</a> </p><pre><code>&lt;field name="parent" type="sql" label="select parent" query="select id, name from `#\_\_records` where `parent`='0'" key\_field="id" value\_field="name"&gt; &lt;option value=""&gt;please select parent&lt;/option&gt; &lt;/field&gt; </code></pre><p>oppure <a href="https://docs.joomla.org/creating\_a\_custom\_form\_field\_type">creare un tipo di campo modulo personalizzato</a> .</p><p>con il campo modulo personalizzato, puoi mostrare i bambini sotto i genitori, come la categoria seleziona ecc. ti dà maggiore flessibilità.</p><p>sembra che tu stia facendo una cosa tipo di categoria. in tal caso, è necessario utilizzare il gestore di categorie integrato. vedi <a href="https://docs.joomla.org/j3.x:developing\_a\_mvc\_component/adding\_categories">joomla! documenti: sviluppo di un componente mvc/aggiunta di categorie</a> su come aggiungere categorie al componente personalizzato.</p> <p>se hai xdocument è più facile usare linq-to-xml:</p><pre><code>var document = xdocument.load(filename); var name = document.descendants(xname.get("name", @"http://demo.com/2011/demo-schema")).first().value; </code></pre><p>se sei sicuro che xpath sia l'unica soluzione di cui hai bisogno:</p><pre><code>using system.xml.xpath; var document = xdocument.load(filename); var namespacemanager = new xmlnamespacemanager(new nametable()); namespacemanager.addnamespace("empty", "http://demo.com/2011/demo-schema"); var name = document.xpathselectelement("/empty:report/empty:reportinfo/empty:name", namespacemanager).value; </code></pre> Ovunque nel sistema, dove hai accesso a `MyContext` , fai questo: 


```
context.Database.GetDbConnection().GetType().Name

```
  Ad esempio, è `SqliteConnection` per SQLite o `SqlServerConnection` per SQL Server e così via. 

 **Tuttavia non sono sicuro di dover smaltire la connessione in seguito!**